【发布时间】:2020-08-15 18:26:51
【问题描述】:
我正在创建一个多输入模型,在其中连接一个 CNN 模型和一个 LSTM 模型。 lstm 模型包含最后 5 个事件,CNN 包含最后一个事件的图片。两者都经过组织,以便 numpy 中的每个元素 k 匹配 5 个事件和相应的图片,输出标签也是模型应该预测的“下一个”事件。
chanDim = -1
inputs = Input(shape=inputShape)
x = inputs
x = Dense(128)(x)
x = Activation("relu")(x)
x = BatchNormalization(axis=chanDim)(x)
x = Dropout(0.3)(x)
x = Flatten()(x)
x = Activation("relu")(x)
x = BatchNormalization(axis=chanDim)(x)
x = Dropout(0.1)(x)
x = Activation("relu")(x)
model_cnn = Model(inputs, x)
这样就创建了CNN模型,下面的代码代表LSTM模型
hidden1 = LSTM(128)(visible)
hidden2 = Dense(64, activation='relu')(hidden1)
output = Dense(10, activation='relu')(hidden2)
model_lstm = Model(inputs=visible, outputs=output)
现在,当我组合这些模型并使用简单的密集层扩展它们以对 14 个类进行多类预测时,所有输入都匹配,我可以将 (none, 10) 和 (none, 10) 连接成 (无,20) 对于 MLP:
x = Dense(14, activation="softmax")(x)
model_mlp = Model(inputs=[model_lstm.input, model_cnn.input], outputs=x)
这一切都很好,直到我尝试编译模型它给我一个关于 mlp 模型的最后一个密集层的输入的错误:
ValueError: 检查目标时出错:预期 dense_121 的形状为 (14,) 但得到的数组的形状为 (1,)
你知道这怎么可能吗?如果您需要更多信息,我很乐意提供
【问题讨论】:
-
dense_121 是模型的最后一层
-
y_train 数组的形状是什么?您是否对目标进行了 one-hot 编码?
-
LSTM 的训练集是 (79322, 1, 5) CNN 的训练集是 (79322, 1, 25088) y (outputlabels) 的训练集是 (113318,)
-
我没有对数字进行热编码,但我将事件名称的分类整数从 0 到 14。0 是虚拟事件
标签: keras neural-network functional-programming conv-neural-network valueerror