【问题标题】:How to create a recurrent neural network in tensor flow for variable sequence length?如何在张量流中为可变序列长度创建循环神经网络?
【发布时间】:2016-04-17 04:17:57
【问题描述】:

我正在尝试在张量流中创建循环神经网络。网络的输入是一个向量序列。所有输入的序列长度都不同。我想用一批输入来做到这一点。

谁能帮助我具体如何做到这一点?我已经浏览了 tensorflow 网站上的教程,但我仍然不清楚。

【问题讨论】:

标签: tensorflow recurrent-neural-network


【解决方案1】:

可以使用定义的rnn函数here

其中一个参数是 sequence_length

sequence_length:指定输入中每个序列的长度。 一个 int32 或 int64 向量(张量)大小 [batch_size]。 [0, T) 中的值。

这里是如何实现完整的循环

# x, state, sequence_length are placeholders
outputs, final_state = tf.nn.rnn(lstm_cell, x, state, sequence_length = sequence_lengths)
# add softmax layer, define loss, training method, etc
...

# code for one epoch
iterations = total_data_length / batch_size
max_sequence_length = max(all_possible_sequence_lengths)
cur_state = initial_state

for i in range(iterations):
    # x is of dimension [max_sequence_length, batch_size, input_size]
    # sequence_lengths is of dimension [batch_size]
    x_data, sequence_data, y_data = mini_batch(batch_size)

    feed_dict = {k: v for k, v in zip(x, x_data)}
    feed_dict.append(sequence_lengths: sequence_data, ...)
    outs, cur_state, _ = session.run([outputs, final_state, train], feed_dict)

由于以下几个原因,这种方法让我有点困惑:

  1. 输入形状是 [sequence_length, batch_size, input_size] 而不是 [batch_size, sequence_length, input_size]。但是,如果您仔细阅读代码并查看 rnn() 是如何实现的,这完全有道理。这也意味着您需要重塑您的输出(具有与输入相同的维度),以便将它们传递给 matmul,然后传递给 softmax。
  2. 函数 rnn() 中的参数输入是一个 python 列表。并且您不能在 feed_dict 中将其作为 {x: x_data} 传递,您将收到一条错误消息“无法散列类型:'list'”。而是看看我是如何在上面的代码中使用理解的。

【讨论】:

    【解决方案2】:

    这取决于你的数据集,但你可以这样做:

    1. 使用数据集中的最大长度,或
    2. 使用合理的大小(例如 256),如果输入数据长于该大小,则将其拆分为该大小。

    【讨论】:

      猜你喜欢
      • 2023-01-09
      • 2020-01-25
      • 2020-02-27
      • 2018-08-25
      • 2016-03-06
      • 1970-01-01
      • 1970-01-01
      • 2019-04-23
      • 2017-01-06
      相关资源
      最近更新 更多