keras - 带有 keras 的 CNN:输入 0 与 flatten_2 层不兼容:预期 min_ndim=3,发现 ndim=2
问题描述
我不明白这个错误是我的模型
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
)
其中输入 1 的形状为 (5039, 3000)
并输入 2 (5039, 14)
那么为什么扁平密集需要第三维呢?如果密集不改变嵌入层或卷积等维度的数量?
解决方案
删除 Flatten 层...无需使用它。这里是完整的结构
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()
推荐阅读
- django - perform_create 后 Django 回滚事务
- android - 没有订阅者在 EventBus 中的片段之间注册事件类
- html - HTML Ajax将选择选项转换为按钮不发送参数
- node.js - 有没有办法在快递 res.json() 之后重定向到另一条路线?
- recursion - f(n-1) + f(n-2) 如何一起调用 f(n)?
- crystal-reports - 如何将总结信息打印到报告中
- node.js - 无法用链接包装 Menu.Item
- git - 不能 git add 。它显示警告:无法打开目录
- javascript - 如何在引导模式类中正确更新 v-for 道具的值
- javafx - observableList 不显示循环中的行吗?