Keras ValueError:输入0与图层flatten_11不兼容

时间:2018-07-24 10:53:27

标签: python tensorflow keras

尝试按照https://blog.keras.io/using-pre-trained-word-embeddings-in-a-keras-model.html的教程进行操作,以便使用预先存在的词嵌入功能为少量训练数据训练模型。

我遇到的问题是,当我尝试运行1D Convnet时,出现错误:

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

我的张量的尺寸是:

数据张量的形状:(91,1000) 标签张量的形状:(91,3)

问题出在这部分代码上:

sequence_input = Input(shape=(MAX_SEQUENCE_LENGTH,), dtype='int32')
    embedded_sequences = embedding_layer(sequence_input)
    x = Conv1D(128, 5, activation='relu')(embedded_sequences)
    x = MaxPooling1D(5)(x)
    x = Conv1D(128, 5, activation='relu')(x)
    x = MaxPooling1D(5)(x)
    x = Conv1D(128, 5, activation='relu')(x)
    x = GlobalMaxPooling1D()(x)
    x = Flatten()(x)
    x = Dense(3, activation='relu')(x)
    preds = Dense(len(labels_index), activation='softmax')(x)

    model = Model(sequence_input, preds)
    model.compile(loss='categorical_crossentropy',
                  optimizer='rmsprop',
                  metrics=['acc'])

    model.fit(x_train, y_train,
               batch_size=128,
               epochs=10,
               validation_data=(x_val, y_val))

不进行展平,它会反馈错误:

Error when checking target: expected dense_25 to have shape (33,) but got array with shape (3,)

我正在尝试确定需要更改的位置和内容,以确保尺寸正常运行,但是我还没有设法确定需要更改的内容。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

您应该关注没有Flatten的错误,因为您已经在使用1D卷积,因此不需要Flatten即可传递给Dense。

实际的错误是尽管目标是标签(3,),但最终的Dense图层正在输出33个值。因此,看起来像len(labels_index) == 33,而不是数据中的3。