为何num_output是卷积层参数?关于卷积输出的技术疑问
理解卷积层的
num_output与空间输出维度的区别 你提到的困惑核心其实是把卷积输出的空间尺寸(比如高×宽)和输出通道数搞混啦,这俩是完全独立的参数,我给你拆解清楚:
1. 空间输出维度由什么决定?
没错,你说的完全正确:卷积核尺寸、步长、填充(padding)以及输入的空间尺寸,共同决定了输出的高和宽(也就是空间维度)。比如你举的例子:5x5输入,3x3核,步长2,零填充1的话,输出是3x3(计算公式是(输入尺寸 - 核尺寸 + 2*填充)/步长 + 1,代入就是(5-3+2*1)/2 +1 = 3)。这个部分是固定的,和num_output没有任何关系。
2. num_output到底控制什么?
num_output定义的是卷积层的输出通道数,简单说就是这一层会同时用多少个不同的卷积核去处理输入:
- 当你设置
num_output:5时,意味着这一层有5个独立的3x3卷积核(每个核都有自己专属的权重参数),每个核都会对输入做卷积运算,得到一个3x3的特征图,最后把这5个3x3的特征图堆叠起来,输出就是5×3×3的张量(如果输入是单通道的话)。 - 要是设置
num_output:100,那就是100个不同的3x3卷积核,每个都生成一个3x3的特征图,最终输出是100×3×3的张量。
举个更直观的例子:就像你用不同滤镜(每个滤镜对应一个卷积核)去处理同一张照片,每个滤镜会得到一张风格不同的图(特征图),num_output就是你用多少个不同的滤镜,而每张滤镜输出的照片尺寸(空间维度)是由滤镜大小、移动步长这些决定的,和用多少个滤镜没关系。
再回到你给出的Caffe卷积层例子
layer { name: "conv1" type: "Convolution" bottom: "data" ... convolution_param { num_output: 96 kernel_size: 11 stride: 4 } ... }
这里的num_output:96就是说conv1层会用96个11x11的卷积核,每个核在输入上以步长4滑动,计算得到对应的特征图,最后把96个特征图组合起来作为这一层的输出,而每个特征图的空间尺寸是由输入尺寸、11x11核、步长4以及填充(如果有的话)计算出来的,和96这个数字无关。
内容的提问来源于stack exchange,提问作者Apollys supports Monica
相关产品推荐
相关产品推荐

