python - 检查目标时出错:预期 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 层?
提前致谢。
解决方案
如果您期望得到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
层仅适用于每个都是一维向量的示例。
推荐阅读
- arrays - Delphi中数组的空闲内存
- swift - 导航到另一个 xib 时未在 AppKit(主)线程问题上运行
- git - git:拒绝获取当前分支 - bitbake
- android - RecyclerView 的项目第一次在 Tablayout 中显示,但不是在第二次
- javascript - 如何将百分比值传递给宽度到 React 数据网格列
- c# - 我看不到对 Web api 进行版本控制的好处?
- recursion - 迭代过程与递归过程
- hadoop - Hive:如何比较 WHERE 子句中具有复杂数据类型的两列?
- node.js - 节点 scp2 速度问题?
- android - 形状边框中间带有箭头的可绘制形状