【问题标题】:Is the number of second convolution layer parameters correct?第二个卷积层参数的个数是否正确?
【发布时间】:2021-03-18 16:02:26
【问题描述】:

我有简单的 CNN 来解决 MNIST 数据问题。

cnn_model = tf.keras.Sequential([
    tf.keras.layers.Conv2D(filters=24, kernel_size=(3,3), activation='relu'), 
    tf.keras.layers.Conv2D(filters=36, kernel_size=(3,3), activation='relu'),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(128, activation=tf.nn.relu),
    tf.keras.layers.Dense(10, activation='softmax')
])

这就是摘要的样子:

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_12 (Conv2D)           (None, 26, 26, 24)        240       
_________________________________________________________________
conv2d_13 (Conv2D)           (None, 24, 24, 36)        7812      
_________________________________________________________________
flatten_13 (Flatten)         (None, 20736)             0         
_________________________________________________________________
dense_26 (Dense)             (None, 128)               2654336   
_________________________________________________________________
dense_27 (Dense)             (None, 10)                1290      
=================================================================
Total params: 2,663,678
Trainable params: 2,663,678
Non-trainable params: 0
_________________________________________________________________

为了简单起见,我跳过了问题中的池层。

第一个卷积层有240个参数,很容易计算:(内核大小+偏差)*过滤器数量:(3*3+1)*24。 请解释一下为什么第二个卷积层有7812个参数(36 * 217)。

flatten 层的大小为 20736。即前一层的 36 个过滤器产生的像素数:24 * 24 * 36。

但是我们如何从前一层的 24 张图像中通过 36 个过滤器获得 36 张图像呢? flatten 层的大小不应该是 36 * 24 * 24 * 24 即上一层的过滤器数量 * 上一层的位图大小 * 第一个卷积层的过滤器数量?

【问题讨论】:

    标签: python tensorflow keras neural-network conv-neural-network


    【解决方案1】:

    一个卷积层的参数个数是

    (filter_height * filter_width * in_channels * out_channels) + out_channels
    

    在你的情况下,那是

    (3 * 3 * 24 * 36) + 36 = 7,812
    

    这种卷积的输出形状是

    (n_samples, remaining_height, remaining_width, n_filters)
    

    【讨论】:

    • 谢谢。这解释了很多。你能回答第二个问题吗?
    • 我不知道位图是什么:)
    • 我的意思是图像 - 单个过滤器的输出。两个卷积层不会产生24*36的图片吗?
    • 第二层中的每个过滤器产生 24 张图像,然后将它们全部汇总到一个特征图上。我说的对吗?
    • 每个过滤器都将您的图像转换为 1 个通道,并在该轴上连接。第二层是36
    猜你喜欢
    • 2018-12-25
    • 2018-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 2023-03-26
    相关资源
    最近更新 更多