首页 文章

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

提问于
浏览
0

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

在读取器模块中,定义了生成器ptb_iterator . 它根据批量大小和您希望RNN的步骤数将数据作为一个序列和 yields x,y对接收 . 最好首先看一下整个定义,但困惑我的部分是:

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),将生成以下对:

  • x = [1,2],y = [2,3]

  • x = [3,4],y = [5,6]

1) 这是正确的方法吗?如果没有这样做,那么对是:

  • x = [1,2],y = [2,3]

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

要么

  • x = [1,2],y = [3]

  • x = [2,3],y = [4] ......#确保所有预测均使用上下文长度= num_steps

2) 最后,鉴于这些对在reader模块中生成,当涉及到训练时,计算的损失是否会反映RNN在一系列展开步骤中的性能而不是 num_steps

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

1 回答

  • 0

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

相关问题