예제 #1
0
def get_model(model_file=os.path.join(args.result_dir, 'mimic-kg-gp.ckpt')):
    dataset = data_loader.DataBowl(args, phase='valid')
    args.vocab = dataset.vocab
    args.relation = dataset.relation

    net, _ = model.FCModel(args), model.Loss()
    net = _cuda(net)
    net.load_state_dict(torch.load(model_file))
    return net
예제 #2
0
파일: main.py 프로젝트: zhangxiaowbl/DG-RNN
def main():
    dataset = data_loader.DataBowl(args, phase='train')
    train_loader = DataLoader(dataset,
                              batch_size=args.batch_size,
                              shuffle=True,
                              num_workers=args.workers,
                              pin_memory=True)
    dataset = data_loader.DataBowl(args, phase='valid')
    valid_loader = DataLoader(dataset,
                              batch_size=args.batch_size,
                              shuffle=False,
                              num_workers=args.workers,
                              pin_memory=True)
    args.vocab = dataset.vocab
    args.relation = dataset.relation

    # net, loss = model.Net(args), model.Loss()
    net, loss = model.FCModel(args), model.Loss()

    net = _cuda(net, 0)
    loss = _cuda(loss, 0)

    parameters_all = []
    for p in net.parameters():
        parameters_all.append(p)

    optimizer = torch.optim.Adam(parameters_all, args.lr)

    best_auc = [0, 0, 0, 0, 0, 0]

    cui_con_dict = {}
    if args.phase == 'train':
        for epoch in range(args.epochs):
            train(train_loader, net, loss, epoch, optimizer, best_auc)
            best_auc, cui_con_dict = test(valid_loader, net, loss, epoch,
                                          best_auc, 'valid', cui_con_dict)
            print args.words

        if 1:
            cons_dir = '../result/cons/{:s}/{:d}'.format(
                args.model, args.predict_day)
            py_op.mkdir(cons_dir)
            num = len(os.listdir(cons_dir))
            py_op.mywritejson(os.path.join(cons_dir, '{:d}.json'.format(num)),
                              cui_con_dict)
            # break

        print 'best auc', best_auc
        auc = best_auc[0]
        with open('../result/log.txt', 'a') as f:
            f.write('#model {:s} #auc {:3.4f}\n'.format(args.model, auc))

    elif args.phase == 'test':
        net.load_state_dict(torch.load(args.resume))
        test(valid_loader, net, loss, 0, best_auc, 'valid', cui_con_dict)
def get_training_configs():
    X = np.random.rand(10, 100)
    Y = np.random.rand(10, 10)
    net = model.FCModel(n_in_features=X.shape[1], n_out_features=Y.shape[1])
    params = {
        'n_epoch': 100,
        'lr': 1e-3,
        'beta': 0,
        'batch_size': 8,
    }
    weight = np.array([1, 1, 1, 1, 1, 10., 3., 5., 2., 2.])

    return net, X, Y, params, weight
예제 #4
0
def get_model(model_file, use_kg):
    dataset = data_loader.DataBowl(args, phase='valid')
    args.vocab = dataset.vocab
    args.relation = dataset.relation

    net, _ = model.FCModel(args, use_kg), model.Loss()
    net = _cuda(net)
    # return net
    try:
        net.load_state_dict(torch.load(model_file))
    except:
        # print(os.path.exists(model_file))
        d = torch.load(model_file, map_location=torch.device('cpu'))
        for k, v in d.items():
            d[k] = v.cpu()
            # print(k, type(v))
        net.load_state_dict(d)
    return net
def cross_validation_loop(X, Y, leave_out=5):
    assert 1 <= leave_out <= 5 and type(leave_out) == int
    n_features = X.shape[1]
    n_targets = Y.shape[1]
    assert len(X) == len(Y)
    averaged_scores = {
        'MSE': np.zeros((n_targets, )),
        'feature_grad': np.zeros((n_targets, n_features)),
        'feature_grad_abs': np.zeros((n_targets, n_features))
    }
    cross_validation_times = len(X) // leave_out
    for i in range(cross_validation_times):
        print("Leave %d out [%d/%d]" %
              (leave_out, i + 1, cross_validation_times))
        test_indices = [m for m in range(i * leave_out, (i + 1) * leave_out)]
        train_indices = [i for i in range(len(X)) if i not in test_indices]
        X_train = X[train_indices, :]
        Y_train = Y[train_indices, :]
        X_test = X[test_indices, :]
        Y_test = Y[test_indices, :]

        net = model.FCModel(n_in_features=X.shape[1],
                            n_out_features=Y.shape[1])
        device = 'cuda:0' if torch.cuda.is_available() else "cpu"
        net = net.to(device)
        params = {
            'n_epoch': 200,
            'lr': 1e-2,
            'beta': 0,
            'batch_size': 8,
        }
        train.fit(net, X_train, Y_train, params, verbose=False)
        scores = train.score(net, X_test, Y_test)
        for k, v in scores.items():
            averaged_scores[k] += scores[k] / cross_validation_times

    return averaged_scores
def permutation_loop(X, Y, permutation_times=10):
    n_features = X.shape[1]
    n_targets = Y.shape[1]
    assert len(X) == len(Y)
    permutation_scores = {'performance_gain': np.zeros((n_targets, ))}
    for i in range(permutation_times):
        print("Permutation [%d/%d]" % (i + 1, permutation_times))
        X_train, X_test, Y_train, Y_test = sklearn.model_selection.train_test_split(
            X, Y, test_size=0.25)

        net = model.FCModel(n_in_features=X.shape[1],
                            n_out_features=Y.shape[1])
        device = 'cuda:0' if torch.cuda.is_available() else "cpu"
        net = net.to(device)
        params = {
            'n_epoch': 200,
            'lr': 1e-2,
            'beta': 0,
            'batch_size': 8,
        }
        train.fit(net, X_train, Y_train, params, verbose=False)
        scores_on_original = train.score(net, X_test, Y_test)

        perm_indices = np.arange(len(Y))
        np.random.shuffle(perm_indices)
        Y_shuffled = Y[perm_indices].copy()

        X_train, X_test, Y_shuffled_train, Y_shuffled_test = sklearn.model_selection.train_test_split(
            X, Y_shuffled, test_size=0.25)

        train.fit(net, X_train, Y_shuffled_train, params, verbose=False)
        scores_on_shuffled = train.score(net, X_test, Y_shuffled_test)
        permutation_scores["performance_gain"] += (
            scores_on_shuffled["MSE"] -
            scores_on_original["MSE"]) * (1 / permutation_times)
    return permutation_scores