我不明白第二个Conv2D层的20个过滤器如何过滤第一个Conv2D层输出的10个特征图。 20 个过滤器中的每一个是否都过滤 10 个特征图(从第一个 Conv2D 层输出)中的每一个?如果是这样,为什么第二个 Conv2D 层的输出不是 20 X 10 = 200 个特征图?相反,第二个 Conv2d 层的输出似乎是 20 个特征图(无、8、8、20),如下图所示。
这来自 David Foster 的《生成深度学习》文本
input_layer = layers.Input(shape=(32,32,3))
conv_layer_1 = layers.Conv2D(
filters = 10
, kernel_size = (4,4)
, strides = 2
, padding = 'same'
)(input_layer)
conv_layer_2 = layers.Conv2D(
filters = 20
, kernel_size = (3,3)
, strides = 2
, padding = 'same'
)(conv_layer_1)
flatten_layer = layers.Flatten()(conv_layer_2)
output_layer = layers.Dense(units=10, activation = 'softmax')
(展平层) 模型 = models.Model(输入层, 输出层)
输入层(无、32、32、3)0
Conv2D(无、16、16、10)490
Conv2D(无、8、8、20)1,820
压平(无,1280)0
密集(无,10)12,810
第一个
conv2D
的输出大小为 ?x16x16x10
,后面是大小为 20
的 3x3x10
过滤器。
对于
?
维度的每个切片,例如样本数量,16x16x10
与过滤器 3x3x10
进行卷积,但要执行 20
次(因为有 20
不同的过滤器)。给定参数padding = 'same'
和strides = 2
,每个卷积切片ceil(16/2)xceil(16/2)=8x8
的大小(您可以参考这篇文章进行计算),而20
时间过滤将维度扩展到8x8x20
。