python - Keras ValueError:输入 0 与 flatten_11 层不兼容
问题描述
尝试遵循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,)
我正在尝试找出我需要更改的位置和内容以确保尺寸正常工作,但是我还没有设法弄清楚我到底需要更改什么。任何帮助将不胜感激。
解决方案
您应该关注没有 Flatten 的错误,因为您已经在使用 1D 卷积,它不需要 flatten 传递给 Dense。
实际的错误是抱怨虽然目标是 (3,) 这是您的标签,但您的最终密集层输出 33 个值。所以它看起来不像len(labels_index) == 33
你的数据中的 3。
推荐阅读
- python - 当我输入 4 时,我的文件有 5 个项目,我该如何解决这个问题?
- scenekit - 在 ARKit 中将定向光定向到相机
- php - 使用 isset on echo 检测到可能的 XSS
- spring - 停止从双向一对一映射的递归
- python - 如何一次通过一个输入扩展列表,而不是说明我打算首先输入的输入数量?
- javascript - Webpack:引用不存在的文件以将其替换为加载程序
- regex - 正则表达式仅在找到 10 个或更多社会安全号码时匹配
- artifactory - Artifactory Rest API(快速搜索) - 指定“repos”时通配符的正确用法是什么?
- c# - 调用通用公共存储库的方法的问题
- reactjs - React Leaflet - 将 ImageOverlay React 组件旋转 n 度