Tensorflow:递归神​​经网络训练对&对损失函数的影响

时间:2016-09-07 15:27:51

标签: neural-network tensorflow recurrent-neural-network language-model

我正在查看RNN语言模型的代码。我很困惑 1)如何构建训练对(x,y),然后 2)如何计算损失。该代码借鉴了Tensorflow RNN教程( reader 模块)。

在阅读器模块中,定义了一个生成器ptb_iterator。它将数据作为一个序列接收,产生 x,y对,根据批量大小和您希望“展开”RNN的步骤数。最好先看一下整个定义,但让我感到困惑的是:

for i in range(epoch_size):
  x = data[:, i*num_steps:(i+1)*num_steps]
  y = data[:, i*num_steps+1:(i+1)*num_steps+1]
  yield (x, y)

记录为:

*Yields:
 Pairs of the batched data, each a matrix of shape [batch_size, num_steps].
 The second element of the tuple is the same data time-shifted to the
 right by one.*

因此,如果正确理解,对于数据序列[1 2 3 4 5 6]num_steps = 2,那么对于随机梯度下降(即batch_size = 1),将生成以下对:

  1. x = [1,2],y = [2,3]
  2. x = [3,4],y = [5,6]
  3. 1)这是正确的方法吗?如果没有这样做,那么对是:

    1. x = [1,2],y = [2,3]
    2. x = [2,3],y = [3,4] ......#允许更多数据点
    3. OR

      1. x = [1,2],y = [3]
      2. x = [2,3],y = [4] ...#确保所有预测均使用上下文长度= num_steps
      3. 2)最后,假设这些对在reader模块中生成,那么在训练时,计算的损失是否会反映RNN在一定范围内的表现展开的步骤而不是指定的num_steps

        例如,模型将对x = 3(来自x = [3,4])进行预测,而不考虑其前面的2(即将RNN展开一步而不是两步)。

1 个答案:

答案 0 :(得分:0)

Re(1),目标是序列大小远大于2,然后你不想复制整个数据集N次,因为你没有太多的统计能力。 Re(2)它是训练时使用的近似值;在预测时,你应该用整个序列进行预测。