下面代码中没注释的部分可以看这篇:
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,即不重叠
}
}
其他网络配置文件: