def train(self): with tf.Session() as sess: tvars = tf.trainable_variables() (assignment_map, initialized_variable_names) = modeling.get_assignment_map_from_checkpoint( tvars, self.__bert_checkpoint_path) print("init bert model params") tf.train.init_from_checkpoint(self.__bert_checkpoint_path, assignment_map) print("init bert model params done") sess.run(tf.variables_initializer(tf.global_variables())) current_step = 0 for epoch in range(self.config["epochs"]): print("----- Epoch {}/{} -----".format(epoch + 1, self.config["epochs"])) for batch in self.data_obj.next_batch(self.t_in_ids_a, self.t_in_masks_a, self.t_seg_ids_a, self.t_in_ids_b, self.t_in_masks_b, self.t_seg_ids_b, self.t_lab_ids): loss, predictions = self.model.train(sess, batch) acc, recall, prec, f_beta = get_multi_metrics(pred_y=predictions, true_y=batch["label_ids"], labels=self.label_list) print("train: step: {}, loss: {}, acc: {}, recall: {}, precision: {}, f_beta: {}".format( current_step, loss, acc, recall, prec, f_beta)) current_step += 1 if self.data_obj and current_step % self.config["checkpoint_every"] == 0: eval_losses = [] eval_accs = [] eval_aucs = [] eval_recalls = [] eval_precs = [] eval_f_betas = [] for eval_batch in self.data_obj.next_batch(self.e_in_ids_a, self.e_in_masks_a, self.e_seg_ids_a, self.e_in_ids_b, self.e_in_masks_b, self.e_seg_ids_b, self.e_lab_ids): eval_loss, eval_predictions = self.model.eval(sess, eval_batch) eval_losses.append(eval_loss) acc, recall, prec, f_beta = get_multi_metrics(pred_y=eval_predictions, true_y=eval_batch["label_ids"], labels=self.label_list) eval_accs.append(acc) eval_recalls.append(recall) eval_precs.append(prec) eval_f_betas.append(f_beta) print("\n") print("eval: loss: {}, acc: {}, auc: {}, recall: {}, precision: {}, f_beta: {}".format( mean(eval_losses), mean(eval_accs), mean(eval_aucs), mean(eval_recalls), mean(eval_precs), mean(eval_f_betas))) print("\n") if self.config["ckpt_model_path"]: save_path = self.config["ckpt_model_path"] if not os.path.exists(save_path): os.makedirs(save_path) model_save_path = os.path.join(save_path, self.config["model_name"]) self.model.saver.save(sess, model_save_path, global_step=current_step)
def train(self): """ train model :return: """ gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.9, allow_growth=True) sess_config = tf.ConfigProto(log_device_placement=False, allow_soft_placement=True, gpu_options=gpu_options) with tf.Session(config=sess_config) as sess: # init all variable in graph sess.run(tf.global_variables_initializer()) current_step = 0 for epoch in range(self.config["epochs"]): print("----- Epoch {}/{} -----".format(epoch + 1, self.config["epochs"])) for batch in self.train_data_obj.next_batch(self.train_data): loss, predictions = self.model.train(sess, batch, self.config["keep_prob"]) label_list = list(set(batch["labels"])) acc, recall, prec, f_beta = get_multi_metrics(pred_y=predictions, true_y=batch["labels"], labels=label_list) print("train: step: {}, loss: {}, acc: {}, recall: {}, precision: {}, f_beta: {}".format( current_step, loss, acc, recall, prec, f_beta)) current_step += 1 if current_step % self.config["checkpoint_every"] == 0: eval_losses = [] eval_accs = [] eval_recalls = [] eval_precs = [] eval_f_betas = [] for eval_batch in self.eval_data_obj.next_batch(self.eval_data): eval_loss, eval_predictions = self.model.eval(sess, eval_batch) eval_losses.append(eval_loss) eval_label_list = list(set(eval_batch["labels"])) acc, recall, prec, f_beta = get_multi_metrics(pred_y=eval_predictions, true_y=eval_batch["labels"], labels=eval_label_list) eval_accs.append(acc) eval_recalls.append(recall) eval_precs.append(prec) eval_f_betas.append(f_beta) print("\n") print("eval: loss: {}, acc: {}, recall: {}, precision: {}, f_beta: {}".format( mean(eval_losses), mean(eval_accs), mean(eval_recalls), mean(eval_precs), mean(eval_f_betas))) print("\n") if self.config["ckpt_model_path"]: save_path = os.path.join(os.path.abspath(os.getcwd()), self.config["ckpt_model_path"]) if not os.path.exists(save_path): os.makedirs(save_path) model_save_path = os.path.join(save_path, self.config["model_name"]) self.model.saver.save(sess, model_save_path, global_step=current_step)
def trainStep(batchX, batchY): """ 训练函数 """ feed_dict = { transformer.inputX: batchX, transformer.inputY: batchY, transformer.dropoutKeepProb: config.model.dropoutKeepProb, transformer.embeddedPosition: embeddedPosition } _, summary, step, loss, predictions = sess.run([ trainOp, summaryOp, globalStep, transformer.loss, transformer.predictions ], feed_dict) if config.numClasses == 1: acc, recall, prec, f_beta = get_binary_metrics( pred_y=predictions, true_y=batchY) elif config.numClasses > 1: acc, recall, prec, f_beta = get_multi_metrics( pred_y=predictions, true_y=batchY, labels=labelList) trainSummaryWriter.add_summary(summary, step) return loss, acc, prec, recall, f_beta
def train(self): """ train model :return: """ current_step = 0 loss_function = torch.nn.CrossEntropyLoss() optimizer = torch.optim.Adam(self.model.parameters(), lr=self.config["learning_rate"]) for epoch in range(self.config["epochs"]): print("----- Epoch {}/{} -----".format(epoch + 1, self.config["epochs"])) for batch in self.train_data_obj.next_batch(self.train_tasks): predictions = self.model(batch) # print(predictions) optimizer.zero_grad() labels = torch.LongTensor(batch["labels"]) # labels = self.one_hot(labels) # print(labels) loss = loss_function(predictions, labels) loss.backward() optimizer.step() # print(predictions) label_list = list(set(batch["labels"])) predictions_max = torch.argmax(predictions, dim=1) acc, recall, prec, f_beta = get_multi_metrics( pred_y=predictions_max, true_y=batch["labels"], labels=label_list) current_step += 1 print( "train: step: {}, loss: {}, acc: {}, recall: {}, precision: {}, f_beta: {}" .format(current_step, loss, acc, recall, prec, f_beta)) if current_step % self.config["checkpoint_every"] == 0: eval_losses = [] eval_accs = [] eval_recalls = [] eval_precs = [] eval_f_betas = [] for eval_batch in self.train_data_obj.next_batch( self.eval_tasks): eval_predictions = self.model(eval_batch) eval_labels = torch.LongTensor(eval_batch["labels"]) eval_loss = loss_function(eval_predictions, eval_labels) eval_losses.append(eval_loss) eval_label_list = list(set(eval_batch["labels"])) eval_predictions_max = torch.argmax(eval_predictions, dim=1) acc, recall, prec, f_beta = get_multi_metrics( pred_y=eval_predictions_max, true_y=eval_batch["labels"], labels=eval_label_list) eval_accs.append(acc) eval_recalls.append(recall) eval_precs.append(prec) eval_f_betas.append(f_beta) print("\n") print( "eval: loss: {}, acc: {}, recall: {}, precision: {}, f_beta: {}" .format(mean(eval_losses), mean(eval_accs), mean(eval_recalls), mean(eval_precs), mean(eval_f_betas))) print("\n")
def train(self): gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.9, allow_growth=True) sess_config = tf.ConfigProto(log_device_placement=False, allow_soft_placement=True, gpu_options=gpu_options) with tf.Session(config=sess_config) as sess: sess.run(tf.global_variables_initializer()) # 初始化变量 current_step = 0 # 创建Train/Eval的summar路径和写入对象 train_summary_path = os.path.join( self.config.BASE_DIR, self.config.summary_path + "/train") if not os.path.exists(train_summary_path): os.makedirs(train_summary_path) train_summary_writer = tf.summary.FileWriter( train_summary_path, sess.graph) eval_summary_path = os.path.join( self.config.BASE_DIR, self.config.summary_path + "/eval") if not os.path.exists(eval_summary_path): os.makedirs(eval_summary_path) eval_summary_writer = tf.summary.FileWriter( eval_summary_path, sess.graph) # Train & Eval Process for epoch in range(self.config.epochs): print(f"----- Epoch {epoch + 1}/{self.config.epochs} -----") for batch in self.train_data_loader.next_batch( self.train_inputs, self.train_labels, self.config.batch_size): summary, loss, predictions = self.model.train( sess, batch, self.config.keep_prob) train_summary_writer.add_summary(summary) if self.config.num_classes == 1: acc = get_binary_metrics(pred_y=predictions.tolist(), true_y=batch['y']) print("Train step: {}, acc: {:.3f}".format( current_step, acc)) elif self.config.num_classes > 1: acc = get_multi_metrics(pred_y=predictions.tolist(), true_y=batch['y']) print("Train step: {}, acc: {:.3f}".format( current_step, acc)) current_step += 1 if self.eval_data_loader and current_step % self.config.ckeckpoint_every == 0: eval_losses = [] eval_accs = [] for eval_batch in self.eval_data_loader.next_batch( self.eval_inputs, self.eval_labels, self.config.batch_size): eval_summary, eval_loss, eval_predictions = self.model.eval( sess, eval_batch) eval_summary_writer.add_summary(eval_summary) eval_losses.append(eval_loss) if self.config.num_classes == 1: acc = get_binary_metrics( pred_y=eval_predictions.tolist(), true_y=batch['y']) eval_accs.append(acc) elif self.config.num_classes > 1: acc = get_multi_metrics( pred_y=eval_predictions.tolist(), true_y=batch['y']) eval_accs.append(acc) print( f"Eval \tloss: {list_mean(eval_losses)}, acc: {list_mean(eval_accs)}" ) if self.config.ckpt_model_path: save_path = os.path.join( self.config.BASE_DIR, self.config.ckpt_model_path) if not os.path.exists(save_path): os.makedirs(save_path) model_save_path = os.path.join( save_path, self.config.model_name) self.model.saver.save(sess, model_save_path, global_step=current_step)