现在我正在浏览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个单词开始?我怀疑在每次迭代时类模型的属性都有一些变化,但我无法弄清楚。谢谢你的帮助。