如果input尺寸是3*224*224,下一层是conv1,kernel_size是7,pad是3,stride是2,num_output是64,
则,先把输入加上pad,即输入变为3*(224+3*2)*(224+3*2)=3*230*230,
卷积后的某一边尺寸为:(230-7)/2+1=111+1=112,
所以conv1的输出是64*112*112
关于参数个数计算:按照以上所述的两层,
卷积核个数是64,卷积核大小是7*7,input输入是3通道,
那么每个卷积核对应7*7*3个参数,一个卷积核在一幅图上移动卷积时,参数共享;但是在不同通道的图片上的卷积参数是不一样的,
所以最后可以算出,64个卷积核对应64*7*7*3个参数
关于feature map(特征图)生成:
一个卷积核的输出,是等于这个卷积核在所有通道图片上卷积得到的图相叠加,
比如按照以上所述的两层,conv1的一个卷积核现在3个通道的图片上进行卷积得到3张卷积结果图,
然后把这三张结果图相叠加(可以看成是3张图片对应位置像素值相加),最后得到这个卷积核的feature map(即每个卷积核输出一张feature map),
卷积核个数是64,所以最后输出的是64张大小为112*112的feature map(特征图)
pad: 扩充边缘,默认为0,不扩充。 扩充的时候是左右、上下对称的,如果pad设置为2,则四个边缘都扩充2个像素,即宽度和高度都扩充了4个像素,可以通过pad_h和pad_w来分别设定。pad操作是在卷积操作之前的,即对输入图片先扩充长度,再卷积。
http://www.cnblogs.com/yinheyi/p/6070213.html
name: "concat"
bottom: "in1"
bottom: "in2"
top: "out"
type: CONCAT
concat_param {
concat_dim: 1
}
}
concat_dim [default 1]:0代表链接num,1代表链接channels
通过全连接层后的大小变化:
输入:从1到K的每一个blob的大小n_i * c_i * h * w
输出:
如果concat_dim = 0: (n_1 + n_2 + ... + n_K) *c_1 * h * w,需要保证所有输入的c_i 相同。
如果concat_dim = 1: n_1 * (c_1 + c_2 + ... +c_K) * h * w,需要保证所有输入的n_i 相同。
通过Concatenation层,可以把多个的blobs链接成一个blob
name: "slicer_label"
type: "Slice"
bottom: "label"
## Example of label with a shape N x 3 x 1 x 1
top: "label1"
top: "label2"
top: "label3"
slice_param {
axis: 1
slice_point: 1
slice_point: 2
}
}
slice层,用来切割一个输入,多输出
slice_point索引是从0开始的,所以以上被切分为:
N*1*1*1,
N*1*1*1,
N*1*1*1,
axis:1表示在channel上切割;0表示在num上切割