def fit(self, sess, input_data, verbose=None): """ Runs an epoch of validation or test. return test error Args: sess: tf.Session() object input_data: tuple of (encode_input, decode_input, decode_label) Returns: avg_loss: scalar. Average minibatch loss of model on epoch. """ total_loss = [] for step, (b_data, b_order) in enumerate( helper.data_iter(input_data, self.config.batch_size)): order_indices = b_order losses = [] for i in range(self.config.processing_step): (ret_batch, ret_label, sent_num_enc, sent_num_dec, sent_len) = helper.shuffleData(b_data, order_indices, self.vocab) feed_dict = self.create_feed_dict(ret_batch, sent_len, sent_num_enc, ret_label, sent_num_dec) loss, pred = sess.run([self.loss, self.prediction], feed_dict=feed_dict) pred = pred.tolist() order_indices = helper.reorder(order_indices, pred, sent_num_dec) losses.append(loss) total_loss.append(np.mean(losses)) avg_loss = np.mean(total_loss) return avg_loss
def predict(self, sess, input_data, verbose=None): preds = [] true_label = [] lengths = [] for _, (b_data, b_order) in enumerate( helper.data_iter(input_data, self.config.batch_size)): order_indices = b_order pred = None ret_label = None sent_num_dec = None for i in range(self.config.processing_step): (ret_batch, ret_label, sent_num_enc, sent_num_dec, sent_len) = helper.shuffleData(b_data, order_indices, self.vocab) feed_dict = self.create_feed_dict(ret_batch, sent_len, sent_num_enc, ret_label, sent_num_dec) pred = sess.run(self.prediction, feed_dict=feed_dict) pred = pred.tolist() order_indices = helper.reorder(order_indices, pred, sent_num_dec) preds += pred true_label += ret_label.tolist() lengths += sent_num_dec return preds, true_label, lengths
def run_epoch(self, sess, input_data, verbose=None): """ Runs an epoch of training. Trains the model for one-epoch. Args: sess: tf.Session() object input_data: tuple of (encode_input, decode_input, decode_label) Returns: avg_loss: scalar. Average minibatch loss of model on epoch. """ data_len = len(input_data) total_steps =data_len // self.config.batch_size total_loss = [] for step, (b_data, b_order) in enumerate( helper.data_iter(input_data, self.config.batch_size)): order_indices = b_order losses = [] for i in range(self.config.processing_step): (ret_batch, ret_label, sent_num_enc, sent_num_dec, sent_len ) = helper.shuffleData(b_data, order_indices, self.vocab) feed_dict = self.create_feed_dict(ret_batch, sent_len, sent_num_enc, ret_label, sent_num_dec) _, loss, lr, pred = sess.run([self.train_op, self.loss, self.learning_rate, self.prediction], feed_dict=feed_dict) pred = pred.tolist() order_indices = helper.reorder(order_indices, pred, sent_num_dec) losses.append(loss) total_loss.append(np.mean(losses)) if verbose and step % verbose == 0: sys.stdout.write('\r{} / {} : loss = {}, lr = {}'.format( step, total_steps, np.mean(total_loss[-verbose:]), lr)) sys.stdout.flush() sys.stdout.write('\n') avg_loss = np.mean(total_loss) return avg_loss