深度學習 卷積神經網路

2021-10-03 05:43:43 字數 2667 閱讀 7904

卷積神經網路(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 區域性感受 一般認為人對外界的認知是從區域性到全域性的,而影象的空間聯絡也是區域性的畫素聯絡較為緊密,而距離較遠的畫素相關性則較弱。因而,每個神經元其實沒有必要對全域性影象進行感知,只需要...