如何计算第二个Conv2D层?

时间:2019-06-07 16:30:42

标签: python tensorflow conv-neural-network

我从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层之后的计算方式。

让我们假设我们正在处理28x28px的图像。第一Conv2D层返回(28、28、32)形状,其中32等于要应用的过滤器数。 (3,3)是内核大小。然后将结果发送到MaxPooling2D层,该层将图像大小从(28,28,32)减小为(14,14,32)。我在这里吗?

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

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

我已经在整个互联网上进行搜索,以直观地找到如何更好地理解这一过程的运气。

谢谢!

1 个答案:

答案 0 :(得分:-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,因此暗淡将保持为14 x 14。通道数等于应用于此层的过滤器数。因此,第二转换层的输出尺寸将为14 x 14 x 64

编辑:@avin在下面的评论中分享了很多精彩的资源。我将其添加为答案的一部分,以确保它不会在评论中丢失。谢谢你,@ avin!

http://cs231n.github.io/convolutional-networks/提供了CNN的直观说明。