Ejemplo n.º 1
0
def run_best(trainset, testset):
    train_loader = data.DataLoader(trainset, 
        batch_size=bsz, 
        shuffle=False,
        collate_fn=collate)
    test_loader = data.DataLoader(testset,
        batch_size=bsz,
        shuffle=True,
        collate_fn=collate)
    model = SeqLSTM(device=device, input_size=best_params['input_size'],
        embedding_size=best_params['embedding_size'],
        hidden_size=best_params['hidden_size'],
        output_size=best_params['output_size'],
        n_layers=best_params['n_layers'],
        bidir=best_params['bidir'],
        embedding=None).to(device)
    opt = optim.Adam(model.parameters(), lr=best_params['lr'], weight_decay=0.0005)

    for i in range(1, best_params['num_epochs'] + 1):
        train_epoch(model, opt, train_loader)

    test_loss, test_acc, test_tpr, test_tnr, test_auc = evaluate(model, test_loader)
    result = "loss = {}, acc = {}, ".format(test_loss, test_acc)
    result += "tpr/sensitvity = {}, tnr/specificity = {}, ".format(test_tpr, test_tnr)
    result += "AUROC = {}".format(test_auc)

    with open(output_file, 'a+') as f:
        f.write("\n\nFinal model: " + str(best_params) + '\n' + result + '\n')

    return 
Ejemplo n.º 2
0
def run(params, trainset):
    global highest_auc, best_params
    print(params)

    trainset.split()
    total_acc = 0
    total_auc = 0

    num_epochs = 0
    for i in range(num_folds):
        train, vali = trainset.get_fold(i)
        train_loader = data.DataLoader(train,
                                       batch_size=bsz,
                                       shuffle=False,
                                       collate_fn=collate)
        vali_loader = data.DataLoader(vali,
                                      batch_size=bsz,
                                      shuffle=False,
                                      collate_fn=collate)
        model = SeqLSTM(
            device=device,
            input_size=params["input_size"],
            embedding_size=params["embedding_size"],
            hidden_size=params["hidden_size"],
            output_size=params["output_size"],
            n_layers=params["n_layers"],
            bidir=params["bidir"],
            embedding=None,
        ).to(device)
        opt = optim.Adam(model.parameters(),
                         lr=params["lr"],
                         weight_decay=0.0005)

        for i in range(1, epochs + 1):
            num_epochs = i
            train_loss = train_epoch(model, opt, train_loader)
            vali_loss, acc, tpr, tnr, auc = evaluate(model, vali_loader)
            # early stopping criterion
            if vali_loss > train_loss:
                break

        vali_loss, acc, tpr, tnr, auc = evaluate(model, vali_loader)
        result = "train_loss = {}, vali_loss = {}, ".format(
            train_loss, vali_loss)
        result += "acc = {}, tpr/sensitvity = {}, ".format(acc, tpr)
        result += "tnr/specificity = {}, AUROC = {}".format(tnr, auc)
        total_acc += acc
        total_auc += auc

    acc = total_acc / num_folds
    auc = total_auc / num_folds

    if auc > highest_auc:
        highest_auc = auc
        best_params = params
        best_params["num_epochs"] = num_epochs

    with open(output_file, "a+") as f:
        f.write("\n\n" + str(params) + "num_epochs: " + str(num_epochs) +
                "\n" + result + "\n")