ValueError: Input 0 is incompatible with layer conv1d_1: expected ndim=3, found ndim=4

48,203

Solution 1

You should either change input_shape to

input_shape=(64,1)

... or use batch_input_shape:

batch_input_shape=(None, 64, 1)

This discussion explains the difference between the two in keras in detail.

Solution 2

I had the same issue. I found expanding the dimensions of the input data fixed it using tf.expand_dims

x = expand_dims(x, axis=-1)
Share:
48,203
user288609
Author by

user288609

Updated on June 09, 2021

Comments

  • user288609
    user288609 almost 3 years

    I am building a prediction model for the sequence data using conv1d layer provided by Keras. This is how I did

    model= Sequential()
    model.add(Conv1D(60,32, strides=1, activation='relu',padding='causal',input_shape=(None,64,1)))
    model.add(Conv1D(80,10, strides=1, activation='relu',padding='causal'))
    model.add(Dropout(0.25))
    model.add(Conv1D(100,5, strides=1, activation='relu',padding='causal'))
    model.add(MaxPooling1D(1))
    model.add(Dropout(0.25))
    model.add(Dense(300,activation='relu'))
    model.add(Dense(1,activation='relu'))
    print(model.summary())
    

    However, the debugging information has

    Traceback (most recent call last):
    File "processing_2a_1.py", line 96, in <module>
    model.add(Conv1D(60,32, strides=1, activation='relu',padding='causal',input_shape=(None,64,1)))
    File "build/bdist.linux-x86_64/egg/keras/models.py", line 442, in add
    File "build/bdist.linux-x86_64/egg/keras/engine/topology.py", line 558, in __call__
    File "build/bdist.linux-x86_64/egg/keras/engine/topology.py", line 457, in assert_input_compatibility
    ValueError: Input 0 is incompatible with layer conv1d_1: expected ndim=3, found ndim=4
    

    The training data and validation data shape are as follows

    ('X_train shape ', (1496000, 64, 1))
    ('Y_train shape ', (1496000, 1))
    ('X_val shape ', (374000, 64, 1))
    ('Y_val shape ', (374000, 1))
    

    I think the input_shape in the first layer was not setup right. How to set it up?


    Update: After using input_shape=(64,1), I got the following error message, even though the model summary runs through

    ________________________________________________________________
    Layer (type)                 Output Shape              Param #
    =================================================================
    conv1d_1 (Conv1D)            (None, 64, 60)            1980
    _________________________________________________________________
    conv1d_2 (Conv1D)            (None, 64, 80)            48080
    _________________________________________________________________
    dropout_1 (Dropout)          (None, 64, 80)            0
    _________________________________________________________________
    conv1d_3 (Conv1D)            (None, 64, 100)           40100
    _________________________________________________________________
    max_pooling1d_1 (MaxPooling1 (None, 64, 100)           0
    _________________________________________________________________
    dropout_2 (Dropout)          (None, 64, 100)           0
    _________________________________________________________________
    dense_1 (Dense)              (None, 64, 300)           30300
    _________________________________________________________________
    dense_2 (Dense)              (None, 64, 1)             301
    =================================================================
    Total params: 120,761
    Trainable params: 120,761
    Non-trainable params: 0
    _________________________________________________________________
    None
    Traceback (most recent call last):
      File "processing_2a_1.py", line 125, in <module>
        history=model.fit(X_train, Y_train, batch_size=batch_size, validation_data=(X_val,Y_val), epochs=nr_of_epochs,verbose=2)
      File "build/bdist.linux-x86_64/egg/keras/models.py", line 871, in fit
      File "build/bdist.linux-x86_64/egg/keras/engine/training.py", line 1524, in fit
      File "build/bdist.linux-x86_64/egg/keras/engine/training.py", line 1382, in _standardize_user_data
      File "build/bdist.linux-x86_64/egg/keras/engine/training.py", line 132, in _standardize_input_data
    ValueError: Error when checking target: expected dense_2 to have 3 dimensions, but got array with shape (1496000, 1)