多输入模型中的 ValueError

ValueError in multiple input model

我正在创建一个多输入模型,我在其中连接了一个 CNN 模型和一个 LSTM 模型。 lstm 模型包含最后 5 个事件,CNN 包含最后一个事件的图片。两者都经过组织,以便 numpy 中的每个元素 k 与 5 个事件和相应的图片相匹配,输出标签也是如此,即模型应预测的 'next' 事件。

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) 到 MLP 的 (none, 20):

x = Dense(14, activation="softmax")(x)
model_mlp = Model(inputs=[model_lstm.input, model_cnn.input], outputs=x)

这一切工作正常,直到我尝试编译模型它给我一个关于 mlp 模型最后一个密集层的输入的错误:

ValueError: Error when checking target: expected dense_121 to have shape (14,) but got array with shape (1,)

你知道这怎么可能吗?如果您需要更多信息,我很乐意提供

你的目标必须是 (None, 14) 维。使用 softmax 你必须对输出进行单热编码

试试这个:

y = pd.get_dummies(np.concatenate([y_train, y_test])).values
y_train = y[:len(y_train)]
y_test = y[len(y_train):]