输入:
Convolution:
layer {
name: ""
type: "Convolution"
bottom: ""
top: ""
param { lr_mult: 1 }
param { lr_mult: 2 }
# 学习率的系数,最终的学习率是这个数乘以solver.prototxt配置文件中的base_lr
# 如果有两个lr_mult, 则第一个表示权值的学习率,第二个表示偏置项的学习率。
# 一般偏置项的学习率是权值学习率的两倍。
convolution_param {
num_output: 20 #卷积核个数
kernel_size: 5 #卷积核的大小(或 kernel_h、kernel_w )
stride: 1 #步长,默认为1(或 stride_h、stride_w )
pad: 0 #默认为0,不扩充,扩充的时候是左右、上下对称的。(或 pad_h、pad_w )
weight_filler { # 权重初始化,默认为constant,值全为0。
type: "constant/xavier/gaussian"
}
bias_filler { # 偏置项的初始化
type: "constant"
}
bias_term: true #是否开启偏置项,默认为true, 开启
group: 1 #分组,默认为1组。如果大于1,我们限制卷积的连接操作在一个子集内。如果我们根据图像的通道来分组,那么第i个输出分组只能与第i个输入分组进行连接。
# caffe Convolution层的convolution_param参数字典中有一个group参数,其意思是将对应的输入通道与输出通道数进行分组,比如输入数据大小为90x100x100x32 90是数据批大小 100x100是图像数据shape,32是通道数,要经过一个3x3x48的卷积,group默认是1,就是全连接的卷积层,如果group是2,那么对应要将输入的32个通道分成2个16的通道,将输出的48个通道分成2个24的通道。对输出的2个24的通道,第一个24通道与输入的第一个16通道进行全卷积,第二个24通道与输入的第二个16通道进行全卷积。极端情况下,输入输出通道数相同,比如为24,group大小也为24,那么每个输出卷积核,只与输入的对应的通道进行卷积。
}
}
InnerProduct:
全连接层,把输入当作成一个向量,输出也是一个简单向量。
输入: n*c0*h*w
输出: n*c1*1*1 (c1是卷积核的数量,输入数据blobs的width和height全变为1)
是卷积核大小和原数据大小一样的卷积层,它的参数基本和卷积层的参数一样。
layer {
name: " "
type: "InnerProduct"
bottom: " "
......
}
Pooling:
为了减少运算量和数据维度而设置的一种层。
layer {
name: