if __name__ == "__main__": config = Config() train_file = "data_labeled" if len(sys.argv) > 2: train_file = sys.argv[1] dataset = Dataset(config) lines = dataset.read_lines(train_file) triples = dataset.get_data(lines) sentence_batches, action_batches = dataset.get_action_batches( triples, config.batches_num) model = Transformer(config, len(dataset.vocab)) if torch.cuda.is_available(): model.cuda() model.train() optimizer = optim.Adam(model.parameters(), lr=config.lr) # 多分类交叉熵损失函数 NLLLoss = nn.NLLLoss() # 模型加载优化函数和损失函数 model.add_optimizer(optimizer) model.add_loss_op(NLLLoss) train_losses = [] for i in range(config.max_epochs): print("Epoch: {}".format(i)) train_loss = model.run_epoch(sentence_batches, action_batches, i) train_losses.append(train_loss) train_acc = evaluate_model(model, sentence_batches, action_batches) print("Final Training Dataset Accuracy: {.4f}".format(train_acc))
repeat=False, shuffle=True) time_end = time.time() print(time_end - time_start, 's complete the processed') print("vocab size", len(TEXT.vocab)) model = Transformer(Config, len(TEXT.vocab)) print(model) model.cuda() model.train() model.load_state_dict(torch.load('epoch_0_0.4479.pt')) optimizer = optim.Adam(model.parameters(), lr=Config.lr) loss = nn.CrossEntropyLoss() model.add_optimizer(optimizer) model.add_loss_op(loss) train_losses = [] val_accuracies = [] # val_accuracy, F1_score = evaluate_model(model, dataset.val_iterator) # print("\tVal Accuracy: {:.4f}".format(val_accuracy)) for i in range(Config.max_epochs): print("\nEpoch: {}".format(i)) train_loss, val_accuracy = model.run_epoch(train_iter, valid_iter, i) train_losses.append(train_loss) val_accuracies.append(val_accuracy) train_acc, train_F1 = evaluate_model(model, train_iter) val_acc, val_F1 = evaluate_model(model, valid_iter) print('Final Training Accuracy: {:.4f}'.format(train_acc))