I found two problems in the following Keras model.
Here is the full test code:
import tensorflow as tf
model=tf.keras.Sequential()
model.add(tf.keras.layers.Conv2D(15,(5,5), padding='same', input_shape=(28, 28, 1)))
model.add(tf.keras.layers.Conv2D(16,(5,5)))
model.add(tf.keras.layers.MaxPool2D(pool_size=(2,2)))
model.add(tf.keras.layers.Conv2D(32,(5,5),padding='same', input_shape=(28, 28, 3)))
model.add(tf.keras.layers.MaxPool2D(pool_size=(2,2)))
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(10))
model.compile(
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
optimizer=tf.keras.optimizers.Adam(),
metrics = [
"accuracy"
]
)
model.summary()
Here is the output:
Model: "sequential_6"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d_18 (Conv2D) (None, 28, 28, 15) 390
conv2d_19 (Conv2D) (None, 24, 24, 16) 6016
max_pooling2d_12 (MaxPoolin (None, 12, 12, 16) 0
g2D)
conv2d_20 (Conv2D) (None, 12, 12, 32) 12832
max_pooling2d_13 (MaxPoolin (None, 6, 6, 32) 0
g2D)
flatten_6 (Flatten) (None, 1152) 0
dense_6 (Dense) (None, 10) 11530
=================================================================
Total params: 30,768
Trainable params: 30,768
Non-trainable params: 0
Question 1:
This layer will generate the Output Shape as " (None, 24, 24, 16)
".
model.add(tf.keras.layers.Conv2D(16,(5,5)))
There is no any tf.keras.layers.MaxPool2D
between the first
layer and the second
layer, why does the second layer still change the output shape to (None, 24, 24, 16)
?
It should be (None, 28, 28, 16)
because no any MaxPool2D
before the second layer.
Question 2:
Why does the input_shape
argument in this layer can't change the model to input_shape=(28, 28, 3)
:
model.add(tf.keras.layers.Conv2D(32,(5,5),padding='same', input_shape=(28, 28, 1)))
Your 2nd Conv2D
layer is missing padding=same
. It defaults to padding=valid
therefore, the output size is 28-5+1=24
.
Not sure what you expected here. Sequential models can have only 1 input (which you've already defined the shape of, in the first layer). input_shape
in the middle layers has no effect.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.