下面代碼中沒註釋的部分可以看這篇:
layer {
name: "data"
type: "Input"
top: "data"
input_param { shape: { dim: 64 dim: 1 dim: 28 dim: 28 } }
}
layer {
name: "conv1" #表示卷積層
type: "Convolution"
bottom: "data" #前邊連着data層
top: "conv1" #輸出是卷積後的結果
param {
lr_mult: 1 #lr_mult:學習率係數,最終的學習率是這個數乘以solver.prototxt配置文件中的base_lr。
#設置爲0則表示數據不更新
}
param {
lr_mult: 2 #如果有兩個lr_mult,則第一個表示權值的學習率,第二個表示偏置值的學習率。
#一般偏置項的學習率是權值學習率的兩倍
}
convolution_param { #卷積參數
num_output: 20 #卷積核(filter)的個數
kernel_size: 5 #卷積核的大小即5*5×深度,其中深度取決於上一層的特徵圖個數,自動確定
stride: 1 #卷積步長
pad: #擴充邊緣,默認是0即不擴充
weight_filler {
type: "xavier" #權值初始化。默認是"constant",值全爲0
#很多時候我們採用"xavier"算法進行初始化,也可以設置爲"gaussian"
}
bias_filler {
type: "constant" #偏置值的初始化,一般設置爲"constant",即爲0
}
}
}
#卷基層輸出的特徵圖的規格
w1=(w0+2*pad-kernel_size)/stride+1;
h1=(h0+2*pad-kernel_size)/stride+1;
layer {
name: "pool1" #池化層
type: "Pooling"
bottom: "conv1"
top: "pool1"
pooling_param {
pool: MAX #池化方法,默認是max,目前可用的方法有MAX,AVE
kernel_size: 2 #池化核的大小
stride: 2 #池化的步長,默認是1,一般我們設置爲2,即不重疊
}
}
其他網絡配置文件: