如何解释 CNN 中的 model.summary() 输出?

Gur*_*aur 3 deep-learning keras tensorflow google-colaboratory cnn

我是深度学习和 CNN 的新手。如果已经创建了 CNN,如屏幕截图所示,那么如何解释model.summary(). 我无法理解不同层的输出形状。

型号概要:

Model: "sequential_3"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_14 (Conv2D)           (None, 29, 29, 32)        1568      
_________________________________________________________________
max_pooling2d_6 (MaxPooling2 (None, 14, 14, 32)        0         
_________________________________________________________________
conv2d_15 (Conv2D)           (None, 11, 11, 32)        16416     
_________________________________________________________________
max_pooling2d_7 (MaxPooling2 (None, 5, 5, 32)          0         
_________________________________________________________________
flatten_3 (Flatten)          (None, 800)               0         
_________________________________________________________________
dense_6 (Dense)              (None, 32)                25632     
_________________________________________________________________
dense_7 (Dense)              (None, 10)                330       
=================================================================
Total params: 43,946
Trainable params: 43,946
Non-trainable params: 0
Run Code Online (Sandbox Code Playgroud)

神经网络设计

Sus*_*wal 5

假设每个图像的大小是(32, 32, 3),根据问题。

Keras 然后附加一个额外的维度来处理多个批次,即在单个 epoch 的每个步骤中训练多个图像。由于批次大小可能会有所不同,因此其大小由 None 表示。因此,输入形状变为(None, 32, 32, 3)

(32, 32)使用(4, 4)过滤器对图像进行卷积,步幅和膨胀率为 1,并使用“有效”填充,结果输出大小为(32 - 4 + 1, 32 - 4 + 1) = (29, 29)。由于您有 32 个这样的过滤器,因此输出形状变为(29, 29, 32).

默认的 MaxPooling 内核的形状(2, 2)和步长为(2, 2)。将其应用于(29, 29)图像会产生 shape 的图像(((29 - 2)//2) + 1, ((29 - 2)//2) + 1)) = (14, 14)

这种模式可以扩展到所有 Conv2D 和 MaxPooling 层。

Flatten层沿所有通道获取所有像素并创建一维向量(不考虑批量大小)。因此,输入的(5, 5, 32)被展平为(5 * 5 * 32) = 800值。

参数计数

Conv2D 层的参数数量由下式给出:

(kernel_height * kernel_width * input_channels * output_channels) + (output_channels 如果使用偏置)。

因此,对于具有 3 个输入通道、32 个输出通道和内核大小的第一个 Conv2D 层(4, 4),参数数量为(4 * 4 * 3 * 32) + 32 = 1568