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
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")