def run_epoch(session, m, names, counts, epoch_size, eval_op, verbose=False): """Runs the model on the given data for one epoch Args: session: the tf session holding the model graph m: an instance of the NamignizerModel names: a set of lowercase names of 26 characters counts: a list of the frequency of the above names epoch_size: the number of batches to run eval_op: whether to change the params or not, and how to do it Kwargs: verbose: whether to print out state of training during the epoch Returns: cost: the average cost during the last stage of the epoch """ start_time = time.time() costs = 0.0 iters = 0 for step, (x, y) in enumerate( data_utils.namignizer_iterator(names, counts, m.batch_size, m.num_steps, epoch_size)): cost, _ = session.run( [m.cost, eval_op], { m.input_data: x, m.targets: y, m.weights: np.ones(m.batch_size * m.num_steps) }) costs += cost iters += m.num_steps if verbose and step % (epoch_size // 10) == 9: print("%.3f perplexity: %.3f speed: %.0f lps" % (step * 1.0 / epoch_size, np.exp(costs / iters), iters * m.batch_size / (time.time() - start_time))) if step >= epoch_size: break return np.exp(costs / iters)
def run_epoch(session, m, names, counts, epoch_size, eval_op, verbose=False): """Runs the model on the given data for one epoch Args: session: the tf session holding the model graph m: an instance of the NamignizerModel names: a set of lowercase names of 26 characters counts: a list of the frequency of the above names epoch_size: the number of batches to run eval_op: whether to change the params or not, and how to do it Kwargs: verbose: whether to print out state of training during the epoch Returns: cost: the average cost during the last stage of the epoch """ start_time = time.time() costs = 0.0 iters = 0 for step, (x, y) in enumerate(data_utils.namignizer_iterator(names, counts, m.batch_size, m.num_steps, epoch_size)): cost, _ = session.run([m.cost, eval_op], {m.input_data: x, m.targets: y, m.initial_state: m.initial_state.eval(), m.weights: np.ones(m.batch_size * m.num_steps)}) costs += cost iters += m.num_steps if verbose and step % (epoch_size // 10) == 9: print("%.3f perplexity: %.3f speed: %.0f lps" % (step * 1.0 / epoch_size, np.exp(costs / iters), iters * m.batch_size / (time.time() - start_time))) if step >= epoch_size: break return np.exp(costs / iters)