我试图了解Keras中的model.summary()
。我有以下卷积神经网络。第一个卷积的值是:
conv2d_4 (Conv2D) (None, 148, 148, 16) 448
148和448来自哪里?
代码
image_input = layers.Input(shape=(150, 150, 3))
x = layers.Conv2D(16, 3, activation='relu')(image_input)
x = layers.MaxPooling2D(2)(x)
x = layers.Conv2D(32, 3, activation='relu')(x)
x = layers.MaxPooling2D(2)(x)
x = layers.Conv2D(64, 3, activation='relu')(x)
x = layers.MaxPooling2D(2)(x)
x = layers.Flatten()(x)
x = layers.Dense(512, activation='relu')(x)
output = layers.Dense(1, activation='sigmoid')(x)
# Keras Model definition
# input = input feature map
# output = input feature map + stacked convolution/maxpooling layers + fully connected layer + sigmoid output layer
model = Model(image_input, output)
model.summary()
输出
Layer (type) Output Shape Param #
=================================================================
input_2 (InputLayer) (None, 150, 150, 3) 0
_________________________________________________________________
conv2d_4 (Conv2D) (None, 148, 148, 16) 448
_________________________________________________________________
max_pooling2d_4 (MaxPooling2 (None, 74, 74, 16) 0
_________________________________________________________________
conv2d_5 (Conv2D) (None, 72, 72, 32) 4640
_________________________________________________________________
max_pooling2d_5 (MaxPooling2 (None, 36, 36, 32) 0
_________________________________________________________________
conv2d_6 (Conv2D) (None, 34, 34, 64) 18496
_________________________________________________________________
max_pooling2d_6 (MaxPooling2 (None, 17, 17, 64) 0
_________________________________________________________________
flatten_1 (Flatten) (None, 18496) 0
_________________________________________________________________
dense_1 (Dense) (None, 512) 9470464
_________________________________________________________________
dense_2 (Dense) (None, 1) 513
答案 0 :(得分:1)
从Keras documentation,您可以看到填充是default=valid
,因此没有填充,并且步幅大小为1.那么您的输出形状显然是148 x 148。
要计算这个,你可以使用这个公式:
O = (W - K + 2P)/S + 1
其中O是输出高度/宽度,W是输入高度/宽度,K是滤波器大小,P是填充,S是步幅大小。
关于第二个参数,你有一个16的特征映射,你的内核大小是3 x 3,所以你有16 x(3 x 3),这是144.那么你有三个颜色通道,所以144 x 3 = 432然后你需要添加16个偏差,这使得448;)希望这有帮助!