请概述可视化卷积神经网络的中间输出的基本思想。_最详细的卷积神经网络入门指南!...
Date:2020-05-15
來源:深度學習技術前沿微信公眾號
鏈接:干貨|最全面的卷積神經網絡入門教程
卷積神經網絡
簡介
卷積網絡 (convolutional network)(LeCun, 1989),也叫做卷積神經網絡 (convolutional neural network, CNN),是一種專門用來處理具有類似網格結構的數據的神經網絡。卷積神經網絡主要包括:輸入層(Input layer)、卷積層(convolution layer)、激活層(activation layer)、池化層(poling layer)、全連接層(full-connected layer)、輸出層(output layer)。
本篇博文我們主要描述卷積神經網絡中卷積層和池化層的工作原理,并解釋填充、步幅、輸入通道和輸出通道的含義和卷積過程中的的參數計算公式。
卷積層
卷積層的組成:一個卷積層的配置通常由以下四個參數確定。
卷積的特點:
卷積具有局部連接、參數共享這兩大特征。
- 局部連接便是指每個輸出通過權值(weight)和所有輸入相連。在卷積層中,每個輸出神經元在通道方向保持全連接,而在空間方向上只和一小部分輸入神經元相連。
- 參數共享(parameter sharing)是指在一個模型的多個函數中使用相同的參數。
如果一組權值可以在圖像中某個區域提取出有效的表示,那么它們也能在圖像的另外區域中提取出有效的表示。也就是說,如果一個模式(pattern)出現在圖像中的某個區域,那么它們也可以出現在圖像中的其他任何區域。因此,卷積層不同空間位置的神經元共享權值,用于發現圖像中不同空間位置的模式。共享參數是深度學習一個重要的思想,其在減少網絡參數的同時仍然能保持很高的網絡容量(capacity)。卷積層在空間方向共享參數,而循環神經網絡(recurrent neural networks)在時間方向共享參數。
卷積過程實質上就是卷積核中的所有權重與其在輸入圖像上對應元素數值之和。
卷積過程實例展示:
在二維卷積層中,一個二維輸入數組和一個二維核(kernel)數組通過互相關運算輸出一個二維數組。 我們用一個具體例子來解釋二維互相關運算的含義。如圖1所示,輸入是一個高和寬均為3的二維數組。我們將該數組的形狀記為 3×3 或(3,3)。核數組的高和寬分別為2。該數組在卷積計算中又稱卷積核或過濾器(filter)。卷積核窗口(又稱卷積窗口)的形狀取決于卷積核的高和寬,即 2×2 。圖1中的陰影部分為第一個輸出元素及其計算所使用的輸入和核數組元素: 0×0+1×1+3×2+4×3=19 。
相對于簡單的二維卷積,此時增加了通道維的信息,為了與下文中的卷積計算公式保持一致,我們記為D1。
圖2展示了含2個輸入通道的二維互相關計算的例子。在每個通道上,二維輸入數組與二維核數組做互相關運算,再按通道相加即得到輸出。圖2中陰影部分為第一個輸出元素及其計算所使用的輸入和核數組元素: (1×1+2×2+4×3+5×4)+(0×0+1×1+3×2+4×3)=56 。
對于多通道輸入和經過多個卷積核操作之后,輸出特征圖可視化如下所示:
卷積中的填充與步幅
假設輸入形狀是 nh×nw ,卷積核窗口形狀是 kh×kw ,那么輸出形狀將會是(nh?kh+1)×(nw?kw+1).
- 填充(padding) 是指在輸入高和寬的兩側填充元素(通常是0元素)。圖3里我們在原輸入高和寬的兩側分別添加了值為0的元素,使得輸入高和寬從3變成了5,并導致輸出高和寬由2增加到4。圖3中的陰影部分為第一個輸出元素及其計算所使用的輸入和核數組元素: 0×0+0×1+0×2+0×3=0 。
一般來說,如果在高的兩側一共填充 ph行,在寬的兩側一共填充 pw 列,那么輸出形狀將會是(nh?kh+ph+1)×(nw?kw+pw+1).
也就是說,輸出的高和寬會分別增加 ph 和 pw 。
在很多情況下,我們會設置 ph=kh?1 和 pw=kw?1 來使輸入和輸出具有相同的高和寬。這樣會方便在構造網絡時推測每個層的輸出形狀。假設這里 kh 是奇數,我們會在高的兩側分別填充 ph/2 行。如果 kh 是偶數,一種可能是在輸入的頂端一側填充 ?ph/2? 行,而在底端一側填充 ?ph/2? 行。在寬的兩側填充同理。
卷積神經網絡經常使用奇數高和寬的卷積核,如1、3、5和7,所以兩端上的填充個數相等。對任意的二維數組X,設它的第i行第j列的元素為X[i,j]。當兩端上的填充個數相等,并使輸入和輸出具有相同的高和寬時,我們就知道輸出Y[i,j]是由輸入以X[i,j]為中心的窗口同卷積核進行互相關計算得到的。
步幅(stride):卷積窗口從輸入數組的最左上方開始,按從左往右、從上往下的順序,依次在輸入數組上滑動。我們將每次滑動的行數和列數稱為步幅(stride)。
圖4展示了在高上步幅為3、在寬上步幅為2的二維互相關運算。可以看到,輸出第一列第二個元素時,卷積窗口向下滑動了3行,而在輸出第一行第二個元素時卷積窗口向右滑動了2列。當卷積窗口在輸入上再向右滑動2列時,由于輸入元素無法填滿窗口,無結果輸出。圖4中的陰影部分為輸出元素及其計算所使用的輸入和核數組元素: 0×0+0×1+1×2+2×3=8 、 0×0+6×1+0×2+0×3=6 。
圖4:高和寬上步幅分別為3和2的二維互相關運算一般來說,當高上步幅為 sh ,寬上步幅為 sw 時,輸出形狀為?(nh?kh+ph+sh)/sh?×?(nw?kw+pw+sw)/sw?.
如果設置 ph=kh?1 和 pw=kw?1 ,那么輸出形狀將簡化為 ?(nh+sh?1)/sh?×?(nw+sw?1)/sw? 。更進一步,如果輸入的高和寬能分別被高和寬上的步幅整除,那么輸出形狀將是 (nh/sh)×(nw/sw) 。
卷積中的計算公式
卷積過程中多通道輸入與輸出的大小關系:
其中W1代表輸入圖片寬度,H1代表輸入圖片高度,D1代表輸入通道維數,K代表濾波器的個數,F代表感受野的大小(濾波器的大小,這里默認濾波器的高和寬都是一樣的),S代表步幅,P代表填充,W2代表輸出圖片寬度,H2代表輸出圖片高度,D2代表輸出通道維數·
池化層
池化層的提出主要是為了緩解卷積層對位置的過度敏感性。池化層中的池化函數通過使用某一位置的相鄰輸出的總體統計特征來代替網絡在該位置的輸出。
根據特征圖上的局部統計信息進行下采樣,在保留有用信息的同時減少特征圖的大小。和卷積層不同的是,池化層不包含需要學習的參數。即在池化層中參數量不發生變化。最大池化(max pooling)函數給出相鄰矩形區域內的最大值作為輸出,平均池化(average pooling)函數給出相鄰矩形區域內的均值作為輸出。
池化層主要有以下三點作用:
池化層中的填充和步幅機制與卷積層一致,值得注意的是:在處理多通道輸入數據時,池化層對每個輸入通道分別池化,而不是像卷積層那樣將各通道的輸入按通道相加。這意味著池化層的輸出通道數與輸入通道數相等。
池化層中的計算公式
池化過程中多通道輸入與輸出的大小關系:
其中W1代表輸入圖片寬度,H1代表輸入圖片高度,D1代表輸入通道維數,F代表感受野的大小(池化濾波器的大小,這里默認濾波器的高和寬都是一樣的),S代表步幅,W2代表輸出圖片寬度,H2代表輸出圖片高度,D2代表輸出通道維數·
參考鏈接:
卷積神經網絡 - 《動手學深度學習》 文檔
張皓:(二)計算機視覺四大基本任務(分類、定位、檢測、分割)
輕墨:卷積神經網絡如何可視化?卷積層到底學到了什么?一起看看大名鼎鼎的ZFNet
總結
以上是生活随笔為你收集整理的请概述可视化卷积神经网络的中间输出的基本思想。_最详细的卷积神经网络入门指南!...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 修改epo服务器 gps,epo
- 下一篇: Java基础之重写