全部的層都具備的參數,如name, type, bottom, top和transform_param請參看個人前一篇文章:Caffe學習系列(2):數據層及參數html
本文只講解視覺層(Vision Layers)的參數,視覺層包括Convolution, Pooling, Local Response Normalization (LRN), im2col等層。算法
一、Convolution層:網絡
就是卷積層,是卷積神經網絡(CNN)的核心層。ide
層類型:Convolutionpost
lr_mult: 學習率的係數,最終的學習率是這個數乘以solver.prototxt配置文件中的base_lr。若是有兩個lr_mult, 則第一個表示權值的學習率,第二個表示偏置項的學習率。通常偏置項的學習率是權值學習率的兩倍。學習
在後面的convolution_param中,咱們能夠設定卷積層的特有參數。url
必須設置的參數:spa
num_output: 卷積核(filter)的個數code
kernel_size: 卷積核的大小。若是卷積核的長和寬不等,須要用kernel_h和kernel_w分別設定orm
其它參數:
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" } } }
layer { name: "pool1" type: "Pooling" bottom: "conv1" top: "pool1" pooling_param { pool: MAX kernel_size: 3 stride: 2 } }
pooling層的運算方法基本是和卷積層是同樣的。
layers { name: "norm1" type: LRN bottom: "pool1" top: "norm1" lrn_param { local_size: 5 alpha: 0.0001 beta: 0.75 } }
四、im2col層
若是對matlab比較熟悉的話,就應該知道im2col是什麼意思。它先將一個大矩陣,重疊地劃分爲多個子矩陣,對每一個子矩陣序列化成向量,最後獲得另一個矩陣。
看一看圖就知道了:
在caffe中,卷積運算就是先對數據進行im2col操做,再進行內積運算(inner product)。這樣作,比原始的卷積操做速度更快。
看看兩種卷積操做的異同: