Tensorflow LSTM PTB示例 - 了解前向和后向传递

时间:2016-10-28 18:53:08

标签: machine-learning neural-network tensorflow recurrent-neural-network lstm

现在我正在浏览LSTM上的tensorflow示例,他们使用PTB数据集创建一个能够预测下一个单词的LSTM网络。我花了很多时间来理解代码,对大多数代码都有很好的理解,但是有一个我没有完全掌握的功能:

    def run_epoch(session, model, eval_op=None, verbose=False):
  """Runs the model on the given data."""
  costs = 0.0
  iters = 0
  state = session.run(model.initial_state)

  fetches = {
      "cost": model.cost,
      "final_state": model.final_state,
  }
  if eval_op is not None:
    fetches["eval_op"] = eval_op

  for step in range(model.input.epoch_size):
    feed_dict = {}
    for i, (c, h) in enumerate(model.initial_state):
      feed_dict[c] = state[i].c
      feed_dict[h] = state[i].h

    vals = session.run(fetches, feed_dict)
    cost = vals["cost"]
    state = vals["final_state"]

    costs += cost
    iters += model.input.num_steps    

  return np.exp(costs / iters)

我的困惑是:每次通过外环我相信我们已经处理了batch_size * num_steps个字数,完成了前向传播并完成了向后传播。但是,例如,在下一次迭代中,如果num_steps = 35,我们是否知道从每个批次的第36个单词开始?我怀疑在每次迭代时类模型的属性都有一些变化,但我无法弄清楚。谢谢你的帮助。

0 个答案:

没有答案