feature map(下图红线标出) 即:该层卷积核的个数,有多少个卷积核,经过卷积就会产生多少个feature map,也就是下图中 `豆腐皮儿`的层数、同时也是下图`豆腐块`的深度(宽度)!!这个宽度可以手动指定,一般网络越深的地方这个值越大,因为随着网络的加深,feature map的长宽尺寸缩小,本卷积层的每个map提取的特征越具有代表性(精华部分),所以后一层卷积层需要增加feature map的数量,才能更充分的提取出前一层的特征,一般是成倍增加(不过具体论文会根据实验情况具体设置)!
PS:关于多层网络卷积核的channel问题:
如果上一层输出64个featuremap ,下一层的filter 的channel 就会变为64(必须这样),一个filter做卷积的话将会在64个featuremap组成的64channel上做,如果有128个filter,将再次生成128个featuremap,而不是128*64:
也就是在多层卷积网络中:下一层的filter的channel数= 上一层的featuremap数(kernel数量),如果不相等就没办法继续做卷积了。我们知道随着网络的加深,filter卷积核(是三维的:长、宽、深channel,不算batch)将会越来越深,或者说这个卷积核越来越细长,观察下图,也就直观上能够理解,为什么越深网络基本上卷积核数量会设置的越大,因为这么细长的卷积核做一次卷积才生成一个很小的featuremap ,是无法提取出足够的特征的
代码:
以tensorflow的 API 为例:
tf.nn.conv2d(
input,
filter,
strides,
padding,
use_cudnn_on_gpu=True,
data_format='NHWC',
dilations=[1, 1, 1, 1],
name=None
)
filter的维度为:[filter_height, filter_width, in_channels, out_channels],out_channels即为featuremap数量
第一层、二层卷积核分别为W1,W2,则:
# W1 : [4, 4, 3, 8]
# W2 : [2, 2, 8, 16] 其中W2[2] = W1[3]