我有一个与重塑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],然后是点[9,0,20,7]可以预测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是否必须为true。如果将其设置为False,则会收到错误消息“ Expected density_2具有2维,但是得到了形状为(2,3,1)的数组。对此不太确定。 我也正在研究Seq2Seq建模,因为我试图基于序列预测序列,但是找不到解决方法。 有人可以帮忙吗?
答案 0 :(得分:0)
您可能正在尝试从'tanh'
获取大数字,tanh
仅输出-1和1之间的数字。
例如,'linear'
不能达到10。
要么用'softplus'
替换最终激活(输出任何内容),要么将输出数据规范化为-1和1。
如果数据始终为正,则可以尝试使用'linear'
而不是'sigmoid'
,并且如果选择标准化数据,请使其介于0和1之间并使用n >> s
。