对卷积层各项参数的解读,见如下代码的注释:
layer {
name: "conv1"
type: "Convolution"
bottom: "img0_aug"
bottom: "img1_aug"
top: "conv1a"
top: "conv1b"
param {
lr_mult: 1 # 学习率的系数,最终的学习率是这个数乘以solver.prototxt配置文件中的base_lr。
decay_mult: 1 # 衰减的系数
}
param {
lr_mult: 1 # 如果有两个lr_mult, 则第一个表示权值的学习率,第二个表示偏置项的学习率。一般偏置项的学习率是权值学习率的两倍。
decay_mult: 0
}
convolution_param {
num_output: 24 # 卷积核(filter)的个数,即生成特征图的个数
pad: 3 # 四个边缘都扩充3个像素,这样对于卷积核为7的卷积运算后,如果stride为1, 则特征图不会变小
kernel_size: 7 # 卷积核的大小。如果卷积核的长和宽不等,需要用kernel_h和kernel_w分别设定
stride: 2 # 卷积核的步长,默认为1。也可以用stride_h和stride_w来设置。
weight_filler { # 权重初始化,默认为“constant",值全为0,很多时候我们用"xavier"算法来进行初始化,也可以设置为”gaussian"
type: "msra"
}
bias_filler { # 偏置项的初始化。一般设置为"constant",值全为0
type: "constant"
}
# bias_term: 是否开启偏置项,默认为true, 开启
# group: 分组,默认为1组。如果大于1,我们限制卷积的连接操作在一个子集内。
# 如果我们根据图像的通道来分组,那么第i个输出分组只能与第i个输入分组进行连接。
# w1=(w0+2*pad-kernel_size)/stride+1;
engine: CUDNN
}
}
“ReLU”是一种常见的激活层,在caffe 的layer中,它的参数negative_slope, 默认为0. 如果设置了这个值,那么数据为负数时,就不再设置为0,而是用原始数据乘以negative_slope
layer {
name: "ReLU1"
type: "ReLU"
bottom: "conv1a"
top: "conv1a"
relu_param {
negative_slope: 0.1 # 默认为0. 如果设置了这个值,那么数据为负数时,就不再设置为0,而是用原始数据乘以negative_slope
engine: CUDNN
}
}