Beispiel #1
0
def train(param, x, y):

    dim_in = x.shape[1]
    device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')
    print(device)

    dataloader = DataLoader(torch.from_numpy(x.astype(np.float32)),
                            batch_size=param.batch_size,
                            shuffle=True,
                            num_workers=2)

    flow = RealNVP(dim_in, device)
    flow.to(device)
    flow.train()

    optimizer = torch.optim.Adam(
        [p for p in flow.parameters() if p.requires_grad == True], lr=param.lr)

    it, print_cnt = 0, 0
    while it < param.total_it:

        for i, data in enumerate(dataloader):

            loss = -flow.log_prob(data.to(device)).mean()

            optimizer.zero_grad()
            loss.backward(retain_graph=True)
            optimizer.step()

            it += data.shape[0]
            print_cnt += data.shape[0]
            if print_cnt > PRINT_FREQ:
                print('it {:d} -- loss {:.03f}'.format(it, loss))
                print_cnt = 0

        torch.save(flow.state_dict(), 'flow_model.pytorch')
Beispiel #2
0
    device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')
    print(device)

    x, y, scaler = load_data('lendingclub',
                             is_tree=False,
                             scaler_type='standardize')
    x = np.concatenate([x, np.zeros((x.shape[0], 1))],
                       axis=1).astype(np.float32)

    flow = RealNVP(x.shape[1], device)
    if device.type == 'cpu':
        flow.load_state_dict(torch.load(args.model, map_location='cpu'))
    else:
        flow.load_state_dict(torch.load(args.model))
    flow.to(device)
    flow.eval()

    # produce samples
    x_gen = flow.g(flow.prior.sample(
        (args.n_samples, ))).detach().cpu().numpy()[:, :-1]
    np.save('samples.npy', x_gen)

    df_x = scaler.as_dataframe(x[:, :-1])
    df_gen = fix_df(x_gen, scaler)

    df_gen.to_csv('real.csv')
    # reconstruction quality ---------------------
    if args.quality:
        quality_test(df_x, df_gen, scaler)