卷積神經網路(簡稱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 新的資料集中,初級學習器的輸出被當作樣例輸入特徵。注 訓練階段,次...