卷积
卷积核大小(Kernel Size):定义了卷积操作的感受野。在二维卷积中,通常设置为3,即卷积核大小为3×3。
步幅(Stride):定义了卷积核遍历图像时的步幅大小。其默认值通常设置为1,也可将步幅设置为2后对图像进行下采样,这种方式与最大池化类似。
边界扩充(Padding):定义了网络层处理样本边界的方式。当卷积核大于1且不进行边界扩充,输出尺寸将相应缩小;当卷积核以标准方式进行边界扩充,则输出数据的空间尺寸将与输入相等。
输入与输出通道(Channels):构建卷积层时需定义输入通道I,并由此确定输出通道O。这样,可算出每个网络层的参数量为I×O×K,其中K为卷积核的参数个数。例,某个网络层有64个大小为3×3的卷积核,则对应K值为 3×3 =9。
动画演示见:https://github.com/vdumoulin/conv_arithmetic
caffe中的layer:
https://www.cnblogs.com/yinheyi/p/6070213.html
convolution层:
layer的类型为:Convolution.,它有很参数,具体可以看caffe.proto里的message ConvolutionParam{}的定义.
num_output :输出的 feature map的个数啦,是否有偏置项啦,是否有把图像的边缘补充/卷积核的大小./步长/权值如何填充/偏置如何填充等.
看一个例子:
layer { name: "conv1" type: "Convolution" bottom: "data" top: "conv1" # learning rate and decay multipliers for the filters param { lr_mult: 1 decay_mult: 1 } # learning rate and decay multipliers for the biases param { lr_mult: 2 decay_mult: 0 } convolution_param { num_output: 96 # learn 96 filters kernel_size: 11 # each filter is 11x11 stride: 4 # step 4 pixels between each filter application weight_filler { type: "gaussian" # initialize the filters from a Gaussian std: 0.01 # distribution with stdev 0.01 (default mean: 0) } bias_filler { type: "constant" # initialize the biases to zero (0) value: 0 } } }
pooling层:类型为:Pooling
这一层也有很多参数选择, 如pooling的核的大小/步长/pad(即上面的是否为边界加一些默认的值), 还有pooling的方法:现在有max/ average/stochastic三个方法.,具体看一下caffe.proto里的定义.
layer { name: "pool1" type: "Pooling" bottom: "conv1" top: "pool1" pooling_param { pool: MAX kernel_size: 3 # pool over a 3x3 region stride: 2 # step two pixels (in the bottom blob) between pooling regions } }