具有多个输入序列和对应的多个输出序列的LSTM

时间:2019-02-21 15:57:49

标签: python tensorflow keras lstm

我有一个与重塑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建模,因为我试图基于序列预测序列,但是找不到解决方法。 有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

您可能正在尝试从'tanh'获取大数字,tanh仅输出-1和1之间的数字。

例如,'linear'不能达到10。

要么用'softplus'替换最终激活(输出任何内容),要么将输出数据规范化为-1和1。

如果数据始终为正,则可以尝试使用'linear'而不是'sigmoid',并且如果选择标准化数据,请使其介于0和1之间并使用n >> s