I'm trying to understand model.summary()
in Keras. I have the following Convolutional Neural Network. The values of the first Convolution are:
conv2d_4 (Conv2D) (None, 148, 148, 16) 448
Where does 148 and 448 come from?
Code
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()
Output
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