視覺層(Vision Layers)及引數
原文:https://www.cnblogs.com/denny402/p/5071126.html
所有的層都具有的引數,如name, type, bottom, top和transform_param請參看我的前一篇文章:Caffe學習系列(2):資料層及引數
本文只講解視覺層(Vision Layers)的引數,視覺層包括Convolution, Pooling, Local Response Normalization (LRN), im2col等層。
1、Convolution層:
就是卷積層,是卷積神經網路(CNN)的核心層。
層型別:Convolution
lr_mult: 學習率的係數,最終的學習率是這個數乘以solver.prototxt配置檔案中的base_lr。如果有兩個lr_mult, 則第一個表示權值的學習率,第二個表示偏置項的學習率。一般偏置項的學習率是權值學習率的兩倍。
在後面的convolution_param中,我們可以設定卷積層的特有引數。
必須設定的引數:
num_output: 卷積核(filter)的個數
kernel_size: 卷積核的大小。如果卷積核的長和寬不等,需要用kernel_h和kernel_w分別設定
其它引數:
stride: 卷積核的步長,預設為1。也可以用stride_h和stride_w來設定。
pad: 擴充邊緣,預設為0,不擴充。 擴充的時候是左右、上下對稱的,比如卷積核的大小為5*5,那麼pad設定為2,則四個邊緣都擴充2個畫素,即寬度和高度都擴充了4個畫素,這樣卷積運算之後的特徵圖就不會變小。也可以通過pad_h和pad_w來分別設定。
layer { name: "conv1" type: "Convolution" bottom: "data" top: "conv1" param { lr_mult: 1 } param { lr_mult: 2 } convolution_param { num_output: 20 kernel_size: 5 stride: 1 weight_filler { type: "xavier" } bias_filler { type: "constant" } } }2、Pooling層 也叫池化層,為了減少運算量和資料維度而設定的一種層。 層型別:Pooling 必須設定的引數: kernel_size: 池化的核大小。也可以用kernel_h和kernel_w分別設定。 其它引數: pool: 池化方法,預設為MAX。目前可用的方法有MAX, AVE, 或STOCHASTIC pad: 和卷積層的pad的一樣,進行邊緣擴充。預設為0 stride: 池化的步長,預設為1。一般我們設定為2,即不重疊。也可以用stride_h和stride_w來設定。 示例:
layer { name: "pool1" type: "Pooling" bottom: "conv1" top: "pool1" pooling_param { pool: MAX kernel_size: 3 stride: 2 } }
pooling層的運算方法基本是和卷積層是一樣的。
輸入:n*c*w 0*h 0 輸出:n*c*w 1*h 1 和卷積層的區別就是其中的c保持不變 w 1=(w 0+2*pad-kernel_size)/stride+1; h 1=(h 0+2*pad-kernel_size)/stride+1; 如果設定stride為2,前後兩次卷積部分不重疊。100*100的特徵圖池化後,變成50*50. 3、Local Response Normalization (LRN)層 此層是對一個輸入的區域性區域進行歸一化,達到“側抑制”的效果。可去搜索AlexNet或GoogLenet,裡面就用到了這個功能 層型別:LRN 引數:全部為可選,沒有必須 local_size: 預設為5。如果是跨通道LRN,則表示求和的通道數;如果是在通道內LRN,則表示求和的正方形區域長度。 alpha: 預設為1,歸一化公式中的引數。 beta: 預設為5,歸一化公式中的引數。 norm_region: 預設為ACROSS_CHANNELS。有兩個選擇,ACROSS_CHANNELS表示在相鄰的通道間求和歸一化。WITHIN_CHANNEL表示在一個通道內部特定的區域內進行求和歸一化。與前面的local_size引數對應。 歸一化公式:對於每一個輸入, 去除以 ,得到歸一化後的輸出 示例:layers { name: "norm1" type: LRN bottom: "pool1" top: "norm1" lrn_param { local_size: 5 alpha: 0.0001 beta: 0.75 } }
4、im2col層
如果對matlab比較熟悉的話,就應該知道im2col是什麼意思。它先將一個大矩陣,重疊地劃分為多個子矩陣,對每個子矩陣序列化成向量,最後得到另外一個矩陣。
看一看圖就知道了:
在caffe中,卷積運算就是先對資料進行im2col操作,再進行內積運算(inner product)。這樣做,比原始的卷積操作速度更快。
看看兩種卷積操作的異同: