【发布时间】:2019-02-21 15:57:49
【问题描述】:
我有一个与重塑 LSTM 的输入/输出数据有关的问题。虽然有很多帖子考虑这些问题,但我无法找到合适的解决方案。如果错误非常明显,我深表歉意——我对深度学习领域相当陌生。
我的问题如下:我执行了一个模拟,结果产生了几个与时间相关的数据序列,我想将这些数据输入 LSTM 网络。数据(非常简化)如下所示:
X=[[[8, 0, 18, 10]
[9, 0, 20, 7]
[7, 0, 17, 12]]
[[7, 0, 31, 8]
[5, 0, 22, 9]
[7, 0, 17, 12]]]
也就是说,我有两个序列,每个序列有三个时间步长,每个时间步长有 4 个特征。因此,X 的形状是 (2,3,4)。相应地,我想预测的如下所示
y=[[[10]
[7]
[12]]
[[8]
[9]
[12]]]
并且具有形状 (2,3,1)。也就是说,数据点 [8,0,18,10] 应该预测 [10],然后是应该预测 7 的点 [9,0,20,7],依此类推。然后我的模型如下所示:
model.add(LSTM(input_shape=(X.shape[1], X.shape[2]), return_sequences=True))
model.add(Dense(50, activation='tanh'))
model.add(Dense(1, activation='tanh'))
虽然这似乎可以正常工作,但我的结果很糟糕。最有可能的是,我认为这与正确重塑输出向量有关。另外,我不太确定 return_sequences 是否必须为真。如果它设置为 False,我会收到错误消息“预期 dense_2 有 2 个维度,但得到了一个形状为 (2,3,1) 的数组。不太确定这一点。 我也在研究 Seq2Seq 建模,因为我试图根据序列预测序列,但我找不到解决方法。 有人可以帮忙吗?
【问题讨论】:
-
返回序列是正确的,但我相信在此之后使用 Dense 层需要使用 TimeDistributed 层 (machinelearningmastery.com/…)
-
谢谢!我一直在尝试解决这个问题 - 使用 TimeDistributed 可以大大改善结果。
-
这没有多大意义。在较新的 keras 版本中,
Dense=TimeDistributed(Dense),在较旧的 keras 版本中,您应该只会得到一个错误。 -
我使用的是 keras 版本 2.1.6。可能这仍然算作旧版本,因为我没有收到任何错误
-
@DanielMöller 你能解释一下为什么这会产生错误吗?
标签: python tensorflow keras lstm