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))
Beispiel #2
0
    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))