def run_one_epoch(self, sess, train, dev, tag2label, epoch, saver): """ :param sess: :param train: :param dev: :param tag2label: :param epoch: :param saver: :return: """ num_batches = (len(train) + self.batch_size - 1) // self.batch_size start_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) batches = batch_yield(train, self.batch_size, self.vocab, self.tag2label, shuffle=self.shuffle) for step, (seqs, labels) in enumerate(batches): sys.stdout.write(' processing: {} batch / {} batches.'.format(step + 1, num_batches) + '\r') step_num = epoch * num_batches + step + 1 feed_dict, _ = self.get_feed_dict(seqs, labels, self.lr, self.dropout_keep_prob) _, loss_train, summary, step_num_ = sess.run([self.train_op, self.loss, self.merged, self.global_step], feed_dict=feed_dict) if step + 1 == 1 or (step + 1) % 300 == 0 or step + 1 == num_batches: self.logger.info( '{} epoch {}, step {}, loss: {:.4}, global_step: {}'.format(start_time, epoch + 1, step + 1, loss_train, step_num)) self.file_writer.add_summary(summary, step_num) if step + 1 == num_batches: saver.save(sess, self.model_path, global_step=step_num) self.logger.info('===========validation / test===========') label_list_dev, seq_len_list_dev = self.dev_one_epoch(sess, dev) self.evaluate(label_list_dev, seq_len_list_dev, dev, epoch)
def dev_one_epoch(self, sess, dev): """ :param sess: :param dev: :return: """ label_list, seq_len_list = [], [] for seqs, labels in batch_yield(dev, self.batch_size, self.vocab, self.tag2label, shuffle=False): label_list_, seq_len_list_ = self.predict_one_batch(sess, seqs) label_list.extend(label_list_) seq_len_list.extend(seq_len_list_) return label_list, seq_len_list
def demo_one(self, sess, sent): """ :param sess: :param sent: :return: """ label_list = [] for seqs, labels in batch_yield(sent, self.batch_size, self.vocab, self.tag2label, shuffle=False): label_list_, _ = self.predict_one_batch(sess, seqs) label_list.extend(label_list_) label2tag = {} for tag, label in self.tag2label.items(): label2tag[label] = tag if label != 0 else label tag = [label2tag[label] for label in label_list[0]] return tag