python - 具有多个输入序列和相应的多个输出序列的 LSTM

标签 python tensorflow keras lstm

我有一个与 reshape 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]]]

也就是说,我有两个序列,每个序列有 3 个时间步长,每个时间步长有 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'))

虽然这看起来没有错误,但我的结果却很糟糕。我认为这很可能与正确 reshape 输出向量有关。另外,我不太确定 return_sequences 是否必须为真。如果将其设置为 False,我会收到错误消息“预期 dend_2 具有 2 维,但得到形状为 (2,3,1) 的数组。”对此不太确定。 我也在研究 Seq2Seq 建模,因为我试图根据序列预测序列,但我找不到解决方法。 有人可以帮忙吗?

最佳答案

您可能试图从 'tanh' 中获取大数字,它仅输出 -1 到 1 之间的值。

例如,使用 tanh 无法达到 10。

要么将最终激活替换为'线性'(输出任何内容),要么将输出数据标准化为 -1 和 1 之间。

如果您的数据始终为正,您可以尝试使用 'softplus' 而不是 '线性',如果您选择标准化数据,请将其设置在 0 和1 并使用'sigmoid'

关于python - 具有多个输入序列和相应的多个输出序列的 LSTM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54811239/

相关文章:

python - Pandas 数据框行操作

Python 2.7.2 if/or 意外行为

numpy - 使用 numpy 和 tensorflow 将原始 CIFAR-10 转换为 CNN 输入

tensorflow - 增强数据集真的会改善机器学习模型吗

python - 型号.fit : when you are using validation_generator you must specify a value for validation_steps

python - Keras 包安装

python - 在 Django 1.11 和 django _rest 框架中的嵌套序列化器上实现更新方法

python - Anaconda 安装 TensorFlow 1.15 而不是 2.0

python - Unpickled tensorflow 模型无法做出预测

python - 如何抓取使用 JavaScript 呈现数据的网站