首页 > 解决方案 > 检查目标时出错:预期 dense_21 有 2 个维度,但得到了形状为 (2300, 4, 54) 的数组

问题描述

当给定一个预测变量向量时,我有一个处理预测四个输出的问题。它在 LSTM 层输入处引发错误。

我有

X.shape,Y.shape = ((2300, 36, 768), (2300, 4, 54))


# Core Part

checkpoint = ModelCheckpoint('model-{epoch:03d}-{acc:03f}-{val_acc:03f}.h5', verbose=1, monitor='val_loss',save_best_only=True, mode='auto')  

data_dim = 768
timesteps = X.shape[1]
num_classes = 10


# # expected input data shape: (batch_size, timesteps, data_dim)
model = Sequential()

model.add(LSTM(256, return_sequences=True, input_shape=(timesteps, data_dim))) 
model.add(LSTM(64, return_sequences=True))  
model.add(LSTM(32)) 

model.add(Dense(54, activation='softmax'))

model.compile(loss='categorical_crossentropy', optimizer='rmsprop',  metrics=['accuracy'])

model.fit(X, Y, batch_size=64, epochs=10, validation_split=0.1)

当我有上面的代码工作正常X.shape,Y.shape = ((2300, 36, 768), (2300, 15))

我该如何克服这一点,如果我有超过一个、四个或十个预测输出,我该如何设置 LSTM 和 DENSE 层?

提前致谢。

标签: pythonkerasdeep-learningneural-networklstm

解决方案


如果您期望得到4 个输出,那么您的最后Dense一层应该有4 个神经元而不是54,即

model.add(Dense(54, activation='softmax'))

应该:

model.add(Dense(4, activation='softmax'))

此外,你的Y应该有一个形状(number_of_examples, 4),在你的情况下它应该是

(2300, 4) 代替 (2300, 4, 54)

如果您实际上有一个形状为的Y(2300, 4, 54),那么您不能Dense在输出处使用层,因为Dense层仅适用于每个都是一维向量的示例。


推荐阅读