【问题标题】:How is the second Conv2D layer being calculated?第二个 Conv2D 层是如何计算的?
【发布时间】:2019-06-07 16:30:42
【问题描述】:

我从 Udacity 教程“Intoduction to Deep learning with TensorFlow”获得的这段代码:

model = tf.keras.Sequential([
    tf.keras.layers.Conv2D(32, (3,3), padding='same', activation=tf.nn.relu,
                           input_shape=(28, 28, 1)),
    tf.keras.layers.MaxPooling2D((2, 2), strides=2),
    tf.keras.layers.Conv2D(64, (3,3), padding='same', activation=tf.nn.relu),
    tf.keras.layers.MaxPooling2D((2, 2), strides=2),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(128, activation=tf.nn.relu),
    tf.keras.layers.Dense(10,  activation=tf.nn.softmax)
])

我无法理解的是第二个Conv2D 在第一个MaxPooling2D-layer 之后是如何计算的。

假设我们正在处理 28x28px 的图像。第一个Conv2D-layer 返回 (28, 28, 32) 形状,其中 32 等于应用的过滤器数量。 (3,3) 是内核大小。结果将发送到MaxPooling2D-layer,它将图像的大小从 (28, 28, 32) 减小到 (14, 14, 32)。我在吗?

现在我们有一个形状 (14, 14, 32) 并将其发送到第二个Conv2D-layer,它将使用 (3,3) 内核应用 64 个过滤器。

在我们的 (14, 14, 32) 数据上应用具有 64 个过滤器的 (3,3) 内核的过程如何?第二个Conv2D-layer 是否会创建 (14, 14, 2048) 输出形状?或者第二个Conv2D-layer 将为 64 个应用的过滤器之一创建 (14, 14, 32)x64 个不同的块?

我在整个互联网上进行了搜索,以直观地找到如何更好地理解这个过程,但没有运气。

谢谢!

【问题讨论】:

标签: python tensorflow conv-neural-network


【解决方案1】:

您始终可以使用model.summary() 方法查看神经网络的架构。有问题的模型具有如下架构:

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d (Conv2D)              (None, 28, 28, 32)        320       
_________________________________________________________________
max_pooling2d (MaxPooling2D) (None, 14, 14, 32)        0         
_________________________________________________________________
conv2d_1 (Conv2D)            (None, 14, 14, 64)        18496     
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 7, 7, 64)          0         
_________________________________________________________________
flatten (Flatten)            (None, 3136)              0         
_________________________________________________________________
dense (Dense)                (None, 128)               401536    
_________________________________________________________________
dense_1 (Dense)              (None, 10)                1290      
=================================================================

由于padding='same' 用于conv2d_1,dim 将保持14 x 14。通道数等于应用于该层的过滤器数。因此,第二个卷积层的输出维度将是14 x 14 x 64

编辑:@avin 在下面的 cmets 中分享了精彩的资源。我将其添加为答案的一部分,以免它在 cmets 中丢失。谢谢你,@avin!

http://cs231n.github.io/convolutional-networks/ 提供 CNN 的可视化解释。

【讨论】:

  • 感谢您的回复,但这并不能回答我的问题。
  • 我明白了,@AndrewShmig。我添加了更多细节。另外,如果你从summary()看每一层的Output Shape,这将有助于你理解。
  • 我认为@AndrewShmig 的问题是,为什么这 32 个特征映射中的每一个都使用 64 个过滤器进行处理,而不是生成类似 (14, 14, 32x64) 的东西?或者过滤如何将 32 个特征映射转换为 64 个?这个 [cs231n.github.io/convolutional-networks] 给出了直观的解释。
猜你喜欢
  • 2019-06-22
  • 2019-08-01
  • 2020-09-08
  • 1970-01-01
  • 2019-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-03
相关资源
最近更新 更多