def run_epoch(session, model, data, is_train=False, verbose=False):
"""Runs the model on the given data."""
epoch_size = ((len(data) // model.batch_size) - 1) // model.num_steps
start_time = time.time()
costs = 0.0
iters = 0
state = session.run(model.initial_state)
for step, (x, y) in enumerate(reader.ptb_iterator(data, model.batch_size, model.num_steps)):
if is_train:
fetches = [model.cost, model.final_state, model.train_op]
else:
fetches = [model.cost, model.final_state]
feed_dict = {}
feed_dict[model.input_data] = x
feed_dict[model.targets] = y
for layer_num, (c, h) in enumerate(model.initial_state):
feed_dict[c] = state[layer_num].c
feed_dict[h] = state[layer_num].h
if is_train:
cost, state, _ = session.run(fetches, feed_dict)
else:
cost, state = session.run(fetches, feed_dict)
costs += cost
iters += model.num_steps
if verbose and step % (epoch_size // 10) == 10:
print("%.3f perplexity: %.3f speed: %.0f wps" %
(step * 1.0 / epoch_size, np.exp(costs / iters),
iters * model.batch_size / (time.time() - start_time)))
return np.exp(costs / iters)
评论列表
文章目录