1

我想在 tensorflow 中创建一个 LSTM 来预测时间序列数据。我的训练数据是一组不同长度的输入/输出序列。我可以在同一个训练批次中包含多个不同长度的序列吗?还是我需要将它们填充到相等的长度?如果是这样,怎么做?

另外:如果展开的 RNN 比输入序列长,tensorflow 会做什么?该rnn()方法包含一个sequence_length似乎旨在处理这种可能性的可选参数,但我不清楚它的作用。

4

2 回答 2

0

您想从头开始构建模型吗?否则,您可能需要查看 translate.py-model。在这里,您的问题通过以下方式得到解决: - 使用 PAD 符号(基本上是中性的“无信息”符号)填充输入(和输出)序列 - 存储桶:对于不同的长度组,您可以创建不同的存储桶(有意义仅当您的序列长度从最短到最长时非常不同

于 2016-05-11T09:28:34.447 回答
0

您不必将相同长度的输入/输出序列批量化。TF 有一种方法可以指定输入大小。参数“sequence_length”控制单元展开的时间步数。所以 TF 只会将你的单元展开到 sequence_length 而不是步长。

因此,在提供输入和输出的同时,还提供一个包含每个输入长度的 sequence_length 数组

 tf.nn.bidirectional_rnn(fwd_stacked_lstm_cells, bwd_stacked_lstm_cells, 
                          reshaped_inputs,                                                                                 
                          sequence_length=sequence_length)

......

feed_dict={
    model.inputs: x,
    model.targets: y,
    model.sequence_length: lengths})

在哪里

  • len(lengths) == batch_size 和
  • 对于所有 i,lengths[i] == 输入 x[i] 的长度(与输出 y[i] 的长度相同)
于 2017-08-18T10:43:16.570 回答