# While retraining a pretrained model, getting: ValueError: Input 0 is incompatible with layer flatten_1: expected min_ndim=3, found ndim=2

My model summary is:

Layer (type)                 Output Shape              Param #
=================================================================
conv2d_1 (Conv2D)            (None, 62, 62, 32)        896
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 31, 31, 32)        0
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 29, 29, 32)        9248
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 14, 14, 32)        0
_________________________________________________________________
flatten_1 (Flatten)          (None, 6272)              0
_________________________________________________________________
dense_1 (Dense)              (None, 128)               802944
_________________________________________________________________
dense_2 (Dense)              (None, 4)                 516


While I am re-training this model using the below function:

Im facing this error:

ValueError: Input 0 is incompatible with layer flatten_1: expected min_ndim=3, found ndim=2


The reason for this error is that you are trying to flatten an already flat layer. The output of your model is (batch_size, 4), which cannot be flattened further. To simply fix the error remove the flatten layer from your code.

However, when fine-tuning a pretrained model, you should first remove the top layers of that model before adding your own. The reason is that these layers are trained for classification on a task different than yours.

If I were you I'd drop the last two layers of your pretrained model:

# code same as before ...

x = model.layers[-3].output  # Flatten layer output


• Before you can use model.fit() you need to first run a model.compile() command. This requires you to specify the loss function and the optimizer. Also here you specify any metrics you want to use for evaluation. For example by running model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) you're telling keras that you want to train your model on a cross entropy loss with the Adam optimizer and also measure the model's accuracy while training. – Djib2011 Jul 1 '19 at 7:38