卷積神經網路(convolutional neural networks, cnn)是一類包含卷積計算且具有深度結構的前饋神經網路(feedforward neural networks),是深度學習(deep learning)的代表演算法之一。卷積神經網路具有表徵學習(representation learning)能力,能夠按其階層結構對輸入資訊進行平移不變分類(shift-invariant classification),因此也被稱為「平移不變人工神經網路(shift-invariant artificial neural networks, siann)。
卷積神經網路(cnn)由輸入層、卷積層、啟用函式、池化層、全連線層組成,即input(輸入層)-conv(卷積層)-relu(啟用函式)-pool(池化層)-fc(全連線層)。
二維互相關(cross-correlation)運算的輸入是乙個二維輸入陣列和乙個二維核(kernel)陣列,輸出也是乙個二維陣列,其中核陣列通常稱為卷積核或過濾器(filter)。卷積核的尺寸通常小於輸入陣列,卷積核在輸入陣列上滑動,在每個位置上,卷積核與該位置處的輸入子陣列按元素相乘並求和,得到輸出陣列中相應位置的元素。圖1展示了乙個互相關運算的例子,陰影部分分別是輸入的第乙個計算區域、核陣列以及對應的輸出。
下面我們用corr2d函式實現二維互相關運算,它接受輸入陣列x與核陣列k,並輸出陣列y。
import torch
import torch.nn as nn
defcorr2d
(x, k)
: h, w = x.shape
h, w = k.shape
y = torch.zeros(h - h +
1, w - w +1)
for i in
range
(y.shape[0]
):for j in
range
(y.shape[1]
):y[i, j]
=(x[i: i + h, j: j + w]
* k)
.sum()
return y
class
conv2d
(nn.module)
:def
__init__
(self, kernel_size)
:super
(conv2d, self)
.__init__(
) self.weight = nn.parameter(torch.randn(kernel_size)
) self.bias = nn.parameter(torch.randn(1)
)def
forward
(self, x)
:return corr2d(x, self.weight)
+ self.bias
卷積層得名於卷積運算,但卷積層中用到的並非卷積運算而是互相關運算。我們將核陣列上下翻轉、左右翻轉,再與輸入陣列做互相關運算,這一過程就是卷積運算。由於卷積層的核陣列是可學習的,所以使用互相關運算與使用卷積運算並無本質區別。
我們介紹卷積層的兩個超引數,即填充和步幅,它們可以對給定形狀的輸入和卷積核改變輸出形狀。
填充
填充(padding)是指在輸入高和寬的兩側填充元素(通常是0元素),圖2裡我們在原輸入高和寬的兩側分別新增了值為0的元素。
如果原輸入的高和寬是nhnh和nwnw,卷積核的高和寬是khkh和kwkw,在高的兩側一共填充phph行,在寬的兩側一共填充pwpw列,則輸出形狀為:
(nh+ph−kh+1)×(nw+pw−kw+1)(nh+ph−kh+1)×(nw+pw−kw+1)
我們在卷積神經網路中使用奇數高寬的核,比如3×33×3,5×55×5的卷積核,對於高度(或寬度)為大小為2k+12k+1的核,令步幅為1,在高(或寬)兩側選擇大小為kk的填充,便可保持輸入與輸出尺寸相同。
步幅
在互相關運算中,卷積核在輸入陣列上滑動,每次滑動的行數與列數即是步幅(stride)。此前我們使用的步幅都是1,圖3展示了在高上步幅為3、在寬上步幅為2的二維互相關運算。
一般來說,當高上步幅為shsh,寬上步幅為swsw時,輸出形狀為:⌊(nh+ph−kh+sh)/sh⌋×⌊(nw+pw−kw+sw)/sw⌋⌊(nh+ph−kh+sh)/sh⌋×⌊(nw+pw−kw+sw)/sw⌋
如果ph=kh−1ph=kh−1,pw=kw−1pw=kw−1,那麼輸出形狀將簡化為:
⌊(nh+sh−1)/sh⌋×⌊(nw+sw−1)/sw⌋⌊(nh+sh−1)/sh⌋×⌊(nw+sw−1)/sw⌋
更進一步,如果輸入的高和寬能分別被高和寬上的步幅整除,那麼輸出形狀將是(nh/sh)×(nw/sw)(nh/sh)×(nw/sw)。當ph=pw=pph=pw=p時,我們稱填充為pp;當sh=sw=ssh=sw=s時,我們稱步幅為ss。
深度學習 卷積神經網路
一 卷積神經網路基礎 二 lenet 三 常見的一些卷積神經網路 卷積層的超引數 填充和步幅。步幅 stride 每次卷積核在輸入陣列上滑動的行數與列數。多輸入與輸出通道 將3維陣列除寬高外的一維稱為通道維。1 1卷積層 包含1 1的卷積核的卷積層。1 1卷積核在不改變輸入高寬的情況下調整通道數。如...
深度學習之卷積神經網路
卷積神經網路是一種多層神經網路,擅長處理影象特別是大影象的相關機器學習問題。卷積網路通過一系列方法,成功將資料量龐大的影象識別問題不斷降維,最終使其能夠被訓練。cnn最早由yann lecun提出並應用在手寫字型識別上 minst lecun提出的網路稱為lenet,其網路結構如下 這是乙個最典型的...
深度學習演算法 卷積神經網路
卷積神經網路 cnn 是深度學習在影象處理領域的乙個應用。在學習卷積神經網路之前,先了解下它的兩個基本思想 1 區域性感受 一般認為人對外界的認知是從區域性到全域性的,而影象的空間聯絡也是區域性的畫素聯絡較為緊密,而距離較遠的畫素相關性則較弱。因而,每個神經元其實沒有必要對全域性影象進行感知,只需要...