零基礎入門CV賽事 Task3 字元識別模型

2021-10-06 12:48:46 字數 3308 閱讀 4060

卷積神經網路(簡稱cnn)是一類特殊的人工神經網路,是深度學習中重要的乙個分支。cnn在很多領域都表現優異,精度和速度比傳統計算學習演算法高很多。特別是在計算機視覺領域,cnn是解決影象分類、影象檢索、物體檢測和語義分割的主流模型。

cnn每一層由眾多的卷積核組成,每個卷積核對輸入的畫素進行卷積操作,得到下一次的輸入。隨著網路層的增加卷積核會逐漸擴大感受野,並縮減影象的尺寸。

cnn是一種層次模型,輸入的是原始的畫素資料。cnn通過卷積(convolution)、池化(pooling)、非線性啟用函式(non-linear activation function)和全連線層(fully connected layer)構成。

通過多次卷積和池化,cnn的最後一層將輸入的影象畫素對映為具體的輸出。如在分類任務中會轉換為不同類別的概率輸出,然後計算真實標籤與cnn模型的**結果的差異,並通過反向傳播更新每層的引數,並在更新完成後再次前向傳播,如此反覆直到訓練完成 。

與傳統機器學習模型相比,cnn具有一種端到端(end to end)的思路。在cnn訓練的過程中是直接從影象畫素到最終的輸出,並不涉及到具體的特徵提取和構建模型的過程,也不需要人工的參與。

這個cnn模型包括兩個卷積層,最後併聯6個全連線層進行分類。

import torch

torch.manual_seed(0)

torch.backends.cudnn.deterministic =

false

torch.backends.cudnn.benchmark =

true

import torchvision.models as models

import torchvision.transforms as transforms

import torchvision.datasets as datasets

import torch.nn as nn

import torch.nn.functional as f

import torch.optim as optim

from torch.autograd import variable

from torch.utils.data.dataset import dataset

# 定義模型

class

svhn_model1

(nn.module)

:def

__init__

(self)

:super

(svhn_model1, self)

.__init__(

)# cnn提取特徵模組

self.cnn = nn.sequential(

nn.conv2d(3,

16, kernel_size=(3

,3), stride=(2

,2))

, nn.relu(

),

nn.maxpool2d(2)

, nn.conv2d(16,

32, kernel_size=(3

,3), stride=(2

,2))

, nn.relu(),

nn.maxpool2d(2)

,)# self.fc1 = nn.linear(32*

3*7,

11)self.fc2 = nn.linear(32*

3*7,

11)self.fc3 = nn.linear(32*

3*7,

11)self.fc4 = nn.linear(32*

3*7,

11)self.fc5 = nn.linear(32*

3*7,

11)self.fc6 = nn.linear(32*

3*7,

11)defforward

(self, img)

:

feat = self.cnn(img)

feat = feat.view(feat.shape[0]

,-1)

c1 = self.fc1(feat)

c2 = self.fc2(feat)

c3 = self.fc3(feat)

c4 = self.fc4(feat)

c5 = self.fc5(feat)

c6 = self.fc6(feat)

return c1, c2, c3, c4, c5, c6

model = svhn_model1(

)

訓練**

# 損失函式

criterion = nn.crossentropyloss(

)# 優化器

optimizer = torch.optim.adam(model.parameters(),

0.005

)loss_plot, c0_plot =

,[]# 迭代10個epoch

for epoch in

range(10

):for data in train_loader:

c0, c1, c2, c3, c4, c5 = model(data[0]

) loss = criterion(c0, data[1]

[:,0

])+ \ criterion(c1, data[1]

[:,1

])+ \ criterion(c2, data[1]

[:,2

])+ \ criterion(c3, data[1]

[:,3

])+ \ criterion(c4, data[1]

[:,4

])+ \ criterion(c5, data[1]

[:,5

])loss /=

6 optimizer.zero_grad(

) loss.backward(

) optimizer.step(

) ))

(c0.argmax(1)

== data[1]

[:,0

]).sum()

.item()*

1.0/ c0.shape[0]

)print

(epoch)

參考:datawhale

Datawhale 零基礎入門CV賽事

本章將會講解卷積神經網路 convolutional neural network,cnn 的常見層,並從頭搭建乙個字元識別模型。學習cnn基礎和原理 使用pytorch框架構建cnn模型,並完成訓練 卷積神經網路 簡稱cnn 是一類特殊的人工神經網路,是深度學習中重要的乙個分支。cnn在很多領域都...

Datawhale 零基礎入門CV賽事

在機器學習模型 特別是深度學習模型 的訓練過程中,模型是非常容易過擬合的。深度學習模型在不斷的訓練過程中訓練誤差會逐漸降低,但測試誤差的走勢則不一定。在模型的訓練過程中,模型只能利用訓練資料來進行訓練,模型並不能接觸到測試集上的樣本。因此模型如果將訓練集學的過好,模型就會記住訓練樣本的細節,導致模型...

零基礎入門CV賽事 Task5 模型整合

本章講解的知識點包括 整合學習方法 深度學習中的整合學習和結果後處理思路。stacking先從初始資料集訓練出初級學習器 個體學習器 然後 生成 乙個新資料集用於訓練次級學習器 用於結合的學習器,也稱元學習器meta learner 新的資料集中,初級學習器的輸出被當作樣例輸入特徵。注 訓練階段,次...