Tensorflow RNN教程

时间:2017-03-05 13:47:51

标签: python-3.x tensorflow

我关注RNN tutorial of Tensorflow。 我无法理解以下脚本中function ptb_producer中的reader.py

    with tf.control_dependencies([assertion]):
      epoch_size = tf.identity(epoch_size, name="epoch_size")

    i = tf.train.range_input_producer(epoch_size, shuffle=False).dequeue()
    x = tf.strided_slice(data, [0, i * num_steps],[batch_size, (i + 1) * num_steps])
    x.set_shape([batch_size, num_steps])
    y = tf.strided_slice(data, [0, i * num_steps + 1],[batch_size, (i + 1) * num_steps + 1])
    y.set_shape([batch_size, num_steps])
    return x, y

任何人都可以解释tf.train.range_input_producer正在做什么吗?

1 个答案:

答案 0 :(得分:0)

我几周来一直试图理解相同的教程。在我看来,令人困难的是,TensorFlow调用的所有函数都不会立即执行,而是将相应的操作节点添加到图形中。

根据official documentation,范围输入生成器'在队列中生成从0limit - 1的整数。因此,我看到它的方式,问题i = tf.train.range_input_producer(epoch_size, shuffle=False).dequeue()中的代码创建了一个节点,该节点充当计数器,一旦执行就生成序列0:(epoch_size)中的下一个数字。

这用于从输入数据中获取下一批。原始数据被分成batch_size行,因此每次运行batch_size批次都会被赋予培训功能。在每个批次(行)中,大小为num_steps的滑动窗口向前移动。计数器i允许窗口在每次通话中向前移动num_steps

xy都具有[batch_size, num_steps]形状,因为它们每个都包含batch_sizenum_steps个步骤。变量x是输入,y是给定输入的预期输出(它是通过将窗口向左移动一个项目产生的,因此iff x = data[i:(i + num_steps] then y = data[(i + 1):(i + num_steps + 1)]

这对我来说是一场噩梦,但我希望这篇文章可以帮助将来的人们。