leila
leila

Reputation: 551

CNN with keras: Input 0 is incompatible with layer flatten_2: expected min_ndim=3, found ndim=2

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

I don't understand this error here is my model

    L_branch = Sequential()
    L_branch.add(Embedding(vocab_size, output_dim=15, input_length=3000, trainable=True))
    L_branch.add(Conv1D(50, activation='relu', kernel_size=70, input_shape=(3000, )))
    L_branch.add(MaxPooling1D(15))
    L_branch.add(Flatten())

    # second model
    R_branch = Sequential()
    R_branch.add(Dense(14, input_shape=(14,), activation='relu'))
    R_branch.add(Flatten())

    merged = Concatenate()([L_branch.output, R_branch.output])
    out = Dense(70, activation='softmax')(merged)

    final_model = Model([L_branch.input, R_branch.input], out)
    final_model.compile(
                loss='categorical_crossentropy',
                optimizer='adam',
                metrics=['accuracy'])
    final_model.summary()
    final_model.fit(
            [input1, input2],
            Y_train,
            batch_size=200,
            epochs=1,
            verbose=1,
            validation_split=0.1
        )

where input 1 has the shape (5039, 3000)

and input 2 (5039, 14)

so why is the flatten dense asking for a third dimension? if dense do not change the number of dimensions like embedding layer or convolution?

Upvotes: 1

Views: 253

Answers (1)

Marco Cerliani
Marco Cerliani

Reputation: 22031

remove Flatten layer... no need to use it. here the full structure

L_branch = Sequential()
L_branch.add(Embedding(vocab_size, output_dim=15, input_length=3000, trainable=True))
L_branch.add(Conv1D(50, activation='relu', kernel_size=70, input_shape=(3000, )))
L_branch.add(MaxPooling1D(15))
L_branch.add(Flatten())

# second model
R_branch = Sequential()
R_branch.add(Dense(14, input_shape=(14,), activation='relu'))

merged = Concatenate()([L_branch.output, R_branch.output])
out = Dense(70, activation='softmax')(merged)

final_model = Model([L_branch.input, R_branch.input], out)
final_model.compile(
            loss='categorical_crossentropy',
            optimizer='adam',
            metrics=['accuracy'])
final_model.summary()

Upvotes: 1

Related Questions