Keras 多输入模型中的参数误差

Keras 多输入模型中的参数误差,keras,neural-network,functional-programming,conv-neural-network,valueerror,Keras,Neural Network,Functional Programming,Conv Neural Network,Valueerror,我正在创建一个多输入模型,其中连接了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(a

我正在创建一个多输入模型,其中连接了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)
这将创建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个类的多类预测时,所有输入匹配,我可以将(无,10)和(无,10)浓缩为MLP的(无,20):

x = Dense(14, activation="softmax")(x)
model_mlp = Model(inputs=[model_lstm.input, model_cnn.input], outputs=x)
这一切都很好,直到我尝试编译模型,它给了我一个关于mlp模型最后一个密集层输入的错误:

ValueError:检查目标时出错:预期密集_121具有形状(14),但获得具有形状(1)的数组

你知道这怎么可能吗?如果您需要更多信息,我很乐意提供您的目标必须是(无,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):]

密集型_121是模型的最后一层您的y_列阵列的形状是什么?你对目标进行了一次热编码吗?LSTM的序列集是(79322,1,5),CNN的序列集是(79322,125088),y的序列集是(113318,)我没有对数字进行一次热编码,但我对事件名称进行了分类输入,从0到14。0是虚拟事件我是否也必须对LSTM的输入值执行此操作?因为它是一个numpy,其中每个元素都是最后5个事件的数组。例如(0,0,4,7,2)。这些事件也是输出(0->14)的多类选项,因为我使用Reformate()函数将lstm输入从(79322,5)更改为(79322,1,5),因为它需要一个额外的维度作为输入,但我不确定它是否与您所指的相同。输入的形状与您的错误无关(我不知道它是否正确和有价值)好的,没问题。非常感谢您的回复!
x = Dense(14, activation="softmax")(x)
model_mlp = Model(inputs=[model_lstm.input, model_cnn.input], outputs=x)
y = pd.get_dummies(np.concatenate([y_train, y_test])).values
y_train = y[:len(y_train)]
y_test = y[len(y_train):]