假设我有一个CNN
,包含2个层
,用于处理一张25×25的RGB
像素图片,第一层
的滤波器大小
为50,卷积核大小
为5×5,步长
为1×1,填充
为0x0。而第二层
的参数与第一层相同,只是滤波器大小
为100。我知道第一层通过
后的激活图
尺寸为21x21x3(其中的×3是因为RGB
),这意味着我通过在输入图片上应用50个不同的滤波器
,创建了50个尺寸为21x21x3的激活图
。
我的问题是,对于第二层通过
,由于我的滤波器大小
为100,这是否意味着第一层
的50个激活图
会通过第二层
的100个滤波器
,每个作为感受野
,这样在第二层通过
时,我总共有100×50个激活图
,还是说这50个激活图
会在传递之前融合成一个单一的单位,使得第二层
仍然只产生100个激活图
?
回答:
你这里有一个小误解。卷积操作并不是保持输入图像的维度(在你的例子中是3,因为是RGB),而是跨越所有这些维度进行卷积。这意味着对于特定图像区域x
大小为5x5x3
的卷积操作C
的输出将只是一个单一的值,而不是大小为1x3
的向量。
激活图(我喜欢称之为特征图)仅仅意味着你有多少不同的卷积滤波器,因此你会得到同样多的“输出维度”堆叠。在你的例子中,输出不会是21x21x3
,而是21x21x50
。
对于下一层,你将同样使用(假设你使用相同的卷积核大小)5x5x50
作为输入,再次产生一个单一的值。这次,你有100个输出堆栈,因此结果大小将是17x17x100
。