iT邦幫忙

2021 iThome 鐵人賽

DAY 13
0
AI & Data

從 Training 到 Deployment : 原來業界 AI 這樣做系列 第 13

[DAY 13] CNN的實作以及 Classification 的應用例子

  • 分享至 

  • xImage
  •  

前言


我們已經知道了組成一個簡單的 CNN 做 classification 所需要的部件了,那麼接著我們就需要使用 Pytorch 的 Tool 來建構一個真實能夠動的 Model來看看效果了~

CNN 實作

我們拿 Pytorch 官網的 tutorial 來進行說明,一般來說我們要建構一個 CNN 的 model 並進行 training 以及 Testing , 我們需要完成以下幾件事:

  1. 載入 Dataset 並進行預處理
    (Load and normalizing the CIFAR10 training and test datasets using torchvision)
  2. 定義我們的神經網路 (Model)
    (Define a Convolution Neural Network)
  3. 定義 Loss Function
    (Define a loss function)
  4. 使用 Training dataset 來訓練我們的 Model
    (Train the network on the training data)
  5. 使用 Testing dataset 來測試我們訓練好的 Model
    (Test the network on the test data)

為了方便給大家練習,我們一樣使用之前介紹過的 Colab 來練習,相關文章可以參考這個~

載入 Dataset 並進行預處理

我們這一個 Part 其實之前在 [DAY 05] 從頭訓練大Model?想多了 : Torchvision 簡介 這一章中的 "使用 Dataset" 這一 Part 介紹過了~所以這邊我們就只貼上 Code 吧 :

import torch
import torchvision
import torchvision.transforms as transforms
transform = transforms.Compose(
    [transforms.ToTensor(),
     transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])

trainset = torchvision.datasets.CIFAR10(root='./data', train=True,
                                        download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=4,
                                          shuffle=True, num_workers=2)

testset = torchvision.datasets.CIFAR10(root='./data', train=False,
                                       download=True, transform=transform)
testloader = torch.utils.data.DataLoader(testset, batch_size=4,
                                         shuffle=False, num_workers=2)

classes = ('plane', 'car', 'bird', 'cat',
           'deer', 'dog', 'frog', 'horse', 'ship', 'truck')

如果你想看看現在 load 進來的 Dataset長啥樣,可使用下方程式:

import matplotlib.pyplot as plt
import numpy as np

# functions to show an image


def imshow(img):
    img = img / 2 + 0.5     # unnormalize
    npimg = img.numpy()
    plt.imshow(np.transpose(npimg, (1, 2, 0)))
    plt.show()


# get some random training images
dataiter = iter(trainloader)
images, labels = dataiter.next()

# show images
imshow(torchvision.utils.make_grid(images))
# print labels
print(' '.join('%5s' % classes[labels[j]] for j in range(4)))

定義我們的神經網路 (Model)

話先不多說,我們先貼上完整的 Code ,再逐步解釋每個 Part 跟 Function 是啥意思:

import torch.nn as nn
import torch.nn.functional as F


class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.conv1 = nn.Conv2d(3, 6, 5)
        self.pool = nn.MaxPool2d(2, 2)
        self.conv2 = nn.Conv2d(6, 16, 5)
        self.fc1 = nn.Linear(16 * 5 * 5, 120)
        self.fc2 = nn.Linear(120, 84)
        self.fc3 = nn.Linear(84, 10)

    def forward(self, x):
        x = self.pool(F.relu(self.conv1(x)))
        x = self.pool(F.relu(self.conv2(x)))
        x = x.view(-1, 16 * 5 * 5)
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)
        return x


net = Net()

定義 Loss Function

使用 Training dataset 來訓練我們的 Model

使用 Testing dataset 來測試我們訓練好的 Model


上一篇
[DAY 12] CNN 簡介
下一篇
[DAY 14] 輪迴故事裡的那些因果 : RNN 簡介
系列文
從 Training 到 Deployment : 原來業界 AI 這樣做20
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言