Esempio n. 1
0
def main():

	parser = argparse.ArgumentParser()
	parser.add_argument('--train', help='train variational autoencoder', action='store_true')
	parser.add_argument('--generate',help='generate images', action='store_true')
	parser.add_argument('--traverse',help='traverse latent space', action='store_true')
	args = parser.parse_args()

	sess = make_session()

	if(args.train):

		#prepare_tfrecords()
		training_dataset = prepare_dataset(Config.tfrecord_dir+'train.tfrecord')
		iterator = tf.compat.v1.data.make_one_shot_iterator(training_dataset)
		vae = VAE(sess, training=True, training_iterator = iterator)
		train(sess, vae)

	if(args.generate) or (args.traverse):
		
		vae = VAE(sess, training=False, restore=True)

		if(args.generate):
			random_vector = tf.random.normal(shape=[Config.num_gen_imgs, vae.latent_dim])
			filename = Config.results_dir + 'randomFakeGrid.jpg'
			gen_imgs = generate_fake_images(sess, vae, random_vector, filename)
			
		if(args.traverse):
			traverse_latents(sess, vae)
Esempio n. 2
0
def main(args):
    # Check if the output folder is exist
    if not os.path.exists('./vae_results/'):
        os.mkdir('./vae_results/')

    # Load data
    torch.manual_seed(args.seed)
    kwargs = {'num_workers': 1, 'pin_memory': True} if args.cuda else {}
    train_loader = torch.utils.data.DataLoader(
        datasets.MNIST('./data', train=True, download=True,
                       transform=transforms.ToTensor()),
        batch_size=args.batch_size, shuffle=True, **kwargs)

    # Load model
    model = VAE().cuda() if torch.cuda.is_available() else VAE()
    optimizer = optim.Adam(model.parameters(), lr=1e-3)

    # Train and generate sample every epoch
    loss_list = []
    for epoch in range(1, args.epochs + 1):
        model.train()
        _loss = train(epoch, model, train_loader, optimizer)
        loss_list.append(_loss)
        model.eval()
        sample = torch.randn(64, 20)
        sample = Variable(sample).cuda() if torch.cuda.is_available() else Variable(sample)
        sample = model.decode(sample).cpu()
        save_image(sample.view(64, 1, 28, 28).data, 'vae_results/sample_' + str(epoch) + '.png')
    plt.plot(range(len(loss_list)), loss_list, '-o')
    plt.savefig('vae_results/vae_loss_curve.png')
Esempio n. 3
0
def train(data_loader, model_index, x_eval_train, loaded_model):
    ### Model Initiation
    if loaded_model:
        vae = VAE()
        vae.cuda()
        saved_state_dict = tor.load(loaded_model)
        vae.load_state_dict(saved_state_dict)
        vae.cuda()
    else:
        vae = VAE()
        vae = vae.cuda()

    loss_func = tor.nn.MSELoss().cuda()

    #optim = tor.optim.SGD(fcn.parameters(), lr=LR, momentum=MOMENTUM)
    optim = tor.optim.Adam(vae.parameters(), lr=LR)

    lr_step = StepLR(optim, step_size=LR_STEPSIZE, gamma=LR_GAMMA)

    ### Training
    for epoch in range(EPOCH):
        print("|Epoch: {:>4} |".format(epoch + 1))

        ### Training
        for step, (x_batch, y_batch) in enumerate(data_loader):
            print("Process: {}/{}".format(step,
                                          int(AVAILABLE_SIZE[0] / BATCHSIZE)),
                  end="\r")
            x = Variable(x_batch).cuda()
            y = Variable(y_batch).cuda()
            out, KLD = vae(x)
            recon_loss = loss_func(out.cuda(), y)
            loss = (recon_loss + KLD_LAMBDA * KLD)

            loss.backward()
            optim.step()
            lr_step.step()
            optim.zero_grad()

            if step % RECORD_JSON_PERIOD == 0:
                save_record(model_index, epoch, optim, recon_loss, KLD)
            if step % RECORD_PIC_PERIOD == 0:
                save_pic("output_{}".format(model_index), vaee, 3)
            if step % RECORD_MODEL_PERIOD == 0:
                tor.save(
                    vae.state_dict(),
                    os.path.join(MODEL_ROOT,
                                 "ave_model_{}.pkl".format(model_index)))
Esempio n. 4
0
  def test_vae(self):
    dae = DAE()
    vae = VAE(dae)

    vars = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES, "vae")
    # Check size of optimizing vars
    self.assertEqual(len(vars), 14+12)
Esempio n. 5
0
def train_and_test():
    # pick a test sample
    dataset = Data(config.train_size, config.batch_size, config.test_size)
    for test_batch in dataset.test_dataset:
        test_sample = test_batch[:config.num_examples_to_generate, :, :, :]

    random_vector_for_generation = tf.random.normal(
        shape=[config.num_examples_to_generate, config.latent_dim])
    model = VAE(config.latent_dim)

    #utils.generate_and_save_images(model, 0, test_sample)

    optimizer = tf.keras.optimizers.Adam(1e-4)
    for epoch in range(1, config.epochs + 1):
        start_time = time.time()
        for train_x in dataset.train_dataset:
            utils.train_step(model, train_x, optimizer=optimizer)
        end_time = time.time()

        loss = tf.keras.metrics.Mean()
        for test_x in dataset.test_dataset:
            loss(utils.compute_loss(model, test_x))

        elbo = -loss.result()
        print(
            'Epoch: {}, Test set ELBO: {}, time elapse for current epoch: {}'.
            format(epoch, elbo, end_time - start_time))
        utils.generate_and_save_images(model, epoch, test_sample)
Esempio n. 6
0
def train_VAE():
    model = VAE()
    model.summary()
    history = []

    x_train = import_image(folder='train')
    x_test = import_image(folder='test')
    #x_train = import_image('test')
    arbitrary = np.zeros([x_train.shape[0], 1024 * 2])
    model.summary()

    history = model.fit(x_train, [x_train, arbitrary],
                        epochs=200,
                        batch_size=128,
                        shuffle=True,
                        verbose=1,
                        validation_data=(x_test,
                                         [x_test,
                                          arbitrary[:x_test.shape[0]]]))
    print("history =", history.history.keys())
    output_loss1 = history.history['recons_loss']
    output_loss2 = history.history['KLD_loss']
    np.save('VAE2_recons_loss', output_loss1)
    np.save('VAE2_KLD_loss', output_loss2)

    model.save_weights('saved_model/VAE2_epochs60_weights.h5')
Esempio n. 7
0
def train():
    model = VAE()
    optimizer = tf.train.AdamOptimizer(learning_rate)
    train_step = optimizer.minimize(model.loss)

    saver = tf.train.Saver()
    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())
        x = mnist.train.images
        n_iters = int(np.ceil(len(x) / batch_size))

        for epoch in range(n_epochs):
            for i in trange(n_iters, desc=f'Epoch {epoch}'):
                _, loss = sess.run([train_step, model.loss],
                                   feed_dict={
                                       model.x: x[i::n_iters],
                                   })

                if i % 100 == 0:
                    tqdm.write(f'Step {i}, loss: {loss}')

            print(saver.save(sess, model_path))

            test_image = mnist.test.images[:1]
            out = sess.run(model.out, feed_dict={model.x: test_image})
            out_image = np.squeeze(out[0]) * 255
            cv2.imwrite(f'samples/{epoch}_{int(loss)}.png', out_image)
Esempio n. 8
0
def train():
    use_cuda = True
    epochs = 100
    batch_size = 32
    hidden_dim = 500
    z_dim = 20
    lr = 0.0001

    compressed = transforms.Compose([dataset.ToTensor()])
    variable = dataset.ToVariable(use_cuda=use_cuda)
    kwargs = {'num_workers': 8, 'pin_memory': True}
    loaders = dataset.setup_data_loaders(dataset.LastFMCSVDataset,
                                         use_cuda,
                                         batch_size,
                                         transform=compressed,
                                         **kwargs)

    print('{} steps for all data / 1 epoch'.format(len(loaders['X'])))

    vae = VAE(1, hidden_dim, z_dim, use_cuda=use_cuda)

    adagrad_param = {'lr': lr}
    optimizer = optim.Adam(vae.parameters(), **adagrad_param)

    for epoch in range(epochs):
        loss = train_epoch(vae, optimizer, loaders, variable)
        print('Epoch{}:{}'.format(epoch, loss))
Esempio n. 9
0
def train(args):
    data_path = args.data
    data = pd.read_csv(data_path, index_col=0)
    data = prepare_data(data)
    batch_size = args.batch_size
    lr = args.lr
    n_epochs = args.n_epochs
    verbose = args.verbose
    model = VAE(input_size=data.shape[0], batch_size=batch_size)

    optimizer = torch.optim.Adam(model.parameters(), lr=lr)
    criterion = nn.MSELoss()

    model.train()
    for epoch in range(n_epochs):
        loss_sum = 0
        for i in range(data.shape[1] // batch_size):
            batch = Variable(data[:, i * batch_size:(i + 1) * batch_size],
                             requires_grad=False)
            optimizer.zero_grad()
            recon_batch = model(batch)
            loss = criterion(recon_batch, batch)
            loss.backward()
            optimizer.step()
            loss_sum += loss.data.numpy()
        if verbose:
            print('Epoch: {} - loss: {:.2f}'.format(epoch, loss_sum))
Esempio n. 10
0
def slave(comm):
    mus, logvars = load_init_z()
    vae = VAE()
    vae.load_state_dict(torch.load(cfg.vae_save_ckpt, map_location=lambda storage, loc: storage)['model'])
    model = RNNModel()
    model.load_state_dict(torch.load(cfg.rnn_save_ckpt, map_location=lambda storage, loc: storage)['model'])
    count = 1
    status = MPI.Status()

    gpuid = comm.rank % 4
    # device = torch.device('cuda:{}'.format(gpuid))
    # vae.to(device)
    # model.to(device)
    print('Worker {} Started, model on GPU {}'.format(comm.rank, gpuid))



    while True:
        solution = comm.recv(source=0, tag=MPI.ANY_TAG, status=status)
        tag = status.Get_tag()

        if tag == 1:
            print('Worker {} received solution {}'.format(comm.rank, count))
            zs = [sample_init_z(mus, logvars) for _ in range(cfg.trials_per_pop)]
            controller = deflatten_controller(solution)
            reward = rollout(model, controller, zs)
            print('Worker {} finished solution {}, reward: mean {} | max {} | min {} | std {}'.format(
                comm.rank, count, reward.mean(), reward.max(), reward.min(), reward.std()))
            comm.send(reward.mean(), dest=0, tag=2)
            count += 1
        elif tag == 3:
            print('Worker {} evaluate current solution'.format(comm.rank))
            controller = deflatten_controller(solution)
            reward = evaluate(model, vae, controller)
            comm.send(reward, dest=0, tag=2)
Esempio n. 11
0
def run(args):
    train_loader = torch.utils.data.DataLoader(datasets.ImageFolder(
        args.data, transform=transforms.ToTensor()),
                                               batch_size=args.batch_size,
                                               shuffle=True,
                                               num_workers=8)

    test_loader = torch.utils.data.DataLoader(datasets.ImageFolder(
        args.data_val, transform=transforms.ToTensor()),
                                              batch_size=args.batch_size,
                                              shuffle=False,
                                              num_workers=8)

    model = nn.DataParallel(VAE())
    model = model.to(args.device)

    if args.checkpoint is not None:
        model.load_state_dict(torch.load(args.checkpoint))

    optimizer = optim.Adam(model.parameters(), lr=args.lr)
    for epoch in range(1, args.epochs + 1):
        train(epoch, model, train_loader, optimizer, args)
        model_file = 'models/model_' + str(epoch) + '.pth'
        torch.save(model.state_dict(), model_file)
        print('Saved model to ' + model_file)
        test(epoch, model, test_loader, args)
    writer.close()
Esempio n. 12
0
    def __init__(self,
                 hparams,
                 train_size: int,
                 class_weight: Optional[Tensor] = None):
        # model, criterion
        self.model = VAE()

        # optimizer and scheduler
        self.optimizer = torch.optim.Adam(self.model.parameters(),
                                          lr=hparams.learning_rate,
                                          eps=hparams.eps,
                                          weight_decay=hparams.weight_decay)
        self.scheduler = torch.optim.lr_scheduler.ReduceLROnPlateau(
            self.optimizer, **hparams.scheduler)
        self.bce = nn.BCEWithLogitsLoss(reduction='none')
        # self.kld = nn.KLDivLoss(reduction='sum')
        # device
        device_for_summary = self.__init_device(hparams.device,
                                                hparams.out_device)

        # summary
        self.writer = SummaryWriter(logdir=hparams.logdir)
        # TODO: fill in ~~DUMMY~~INPUT~~SIZE~~
        path_summary = Path(self.writer.logdir, 'summary.txt')
        if not path_summary.exists():
            print_to_file(path_summary, summary, (self.model, (40, 11)),
                          dict(device=device_for_summary))

        # save hyperparameters
        path_hparam = Path(self.writer.logdir, 'hparams.txt')
        if not path_hparam.exists():
            print_to_file(path_hparam, hparams.print_params)
Esempio n. 13
0
def run(config, seed, device):
    set_global_seeds(seed)
    logdir = Path(config['log.dir']) / str(config['ID']) / str(seed)

    train_loader, test_loader = make_dataset(config)
    if config['nn.type'] == 'VAE':
        model = VAE(config, device)
    elif config['nn.type'] == 'ConvVAE':
        model = ConvVAE(config, device)
    optimizer = optim.Adam(model.parameters(), lr=1e-3)

    engine = Engine(config,
                    model=model,
                    optimizer=optimizer,
                    train_loader=train_loader,
                    test_loader=test_loader)

    train_logs = []
    eval_logs = []
    for epoch in range(config['train.num_epoch']):
        train_logger = engine.train(epoch, logdir=logdir)
        train_logs.append(train_logger.logs)
        eval_logger = engine.eval(epoch, logdir=logdir)
        eval_logs.append(eval_logger.logs)
    pickle_dump(obj=train_logs, f=logdir / 'train_logs', ext='.pkl')
    pickle_dump(obj=eval_logs, f=logdir / 'eval_logs', ext='.pkl')
    return None
Esempio n. 14
0
def extract(fs, idx, N):
    model = VAE()
    model.load_state_dict(
        torch.load(cfg.vae_save_ckpt,
                   map_location=lambda storage, loc: storage)['model'])
    model = model.cuda(idx)

    for n, f in enumerate(fs):
        data = np.load(f)
        imgs = data['sx'].transpose(0, 3, 1, 2)
        actions = data['ax']
        rewards = data['rx']
        dones = data['dx']
        x = torch.from_numpy(imgs).float().cuda(idx) / 255.0
        mu, logvar, _, z = model(x)
        save_path = "{}/{}".format(cfg.seq_extract_dir, f.split('/')[-1])

        np.savez_compressed(save_path,
                            mu=mu.detach().cpu().numpy(),
                            logvar=logvar.detach().cpu().numpy(),
                            dones=dones,
                            rewards=rewards,
                            actions=actions)

        if n % 10 == 0:
            print('Process %d: %5d / %5d' % (idx, n, N))
Esempio n. 15
0
def train_vae():
    model = VAE(h,w,256,50,device)
    optimizer = optim.Adadelta(model.parameters())
    l2 = lambda epoch: pow((1.-1.*epoch/epochs),0.9)
    scheduler = optim.lr_scheduler.LambdaLR(optimizer, lr_lambda=l2)
    for epoch in range(epochs):
        scheduler.step()
        model.train()
        tr_recon_loss = 0
        for batch_idx, (data, target) in enumerate(tr):
            if batch_idx >= tr_size:
                break
            data = data.to(device)
            optimizer.zero_grad()
    
            recon_batch, zmu, zvar,_= model(data)
            recon_loss, kl = loss_V(recon_batch, data, zmu,torch.exp(0.5*zvar))
        
            loss = recon_loss + kl 
            loss.backward()
            tr_recon_loss += recon_loss.item()
        
            optimizer.step()
            if batch_idx % log_interval == 0:
                print('Train Epoch: {} [{}/{} ({:.0f}%)]\tReconstruction-Loss: {:.4f}, KL: {:.4f}'.format(
                        epoch, batch_idx * len(data), len(mnist_tr),
                        100. * batch_idx / len(tr),
                        recon_loss / len(data),kl/len(data)))

        print('====> Epoch: {} Reconstruction loss: {:.4f}'.format(
                epoch, tr_recon_loss / (tr_size*mb_size)))
        test(epoch,model)
    return model
Esempio n. 16
0
def test_real(epi):
    vae = VAE()
    vae.load_state_dict(torch.load(cfg.vae_save_ckpt)['model'])

    model = RNNModel()
    model.load_state_dict(torch.load(cfg.rnn_save_ckpt)['model'])

    controller = Controller()
    controller.load_state_dict(torch.load(cfg.ctrl_save_ckpt)['model'])

    env = DoomTakeCover(True)
    obs = env.reset()
    model.reset()
    frames = []
    for step in range(cfg.max_steps):
        frames.append(cv2.resize(obs, (256, 256)))
        obs = torch.from_numpy(obs.transpose(2, 0,
                                             1)).unsqueeze(0).float() / 255.0
        mu, logvar, _, z = vae(obs)

        inp = torch.cat((model.hx.detach(), model.cx.detach(), z), dim=1)
        y = controller(inp)
        y = y.item()
        action = encode_action(y)

        model.step(z.unsqueeze(0), action.unsqueeze(0))
        obs_next, reward, done, _ = env.step(action.item())
        obs = obs_next
        if done:
            break
    print('Episode {}: Real Reward {}'.format(epi, step))
    write_video(frames, 'real_{}.avi'.format(epi), (256, 256))
    os.system('mv real_{}.avi /home/bzhou/Dropbox/share'.format(epi))
Esempio n. 17
0
def train():
    device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
    vae = VAE(device)
    vae.to(device)
    optimizer = optim.SGD(vae.parameters(), lr=lr)
    #viz = visdom.Visdom()
    print(time.asctime(time.localtime(time.time())))
    n = 0
    for epoch in range(epoch_sum):
        loss_sum = 0
        for idx, image in enumerate(train_dataloader, 0):
            image = image[0].to(device)
            optimizer.zero_grad()
            out, mu, logvar = vae(image)
            loss = loss_function(out, image, mu, logvar)
            loss_sum += loss.item()
            loss.backward()
            optimizer.step()
            #viz.line([loss.item()], [n], update="append", win='loss_win')
            n += 1
            if idx % 100 == 99:
                print("epoch:%d, idx:%d, loss:%.6f" %
                      (epoch + 1, idx, loss_sum / 100))
                loss_sum = 0
        torch.save(vae.state_dict(), './vae.pth')
    print(time.asctime(time.localtime(time.time())))
Esempio n. 18
0
    def load_model_and_dataset(checkpt_filename):
        checkpt = torch.load(checkpt_filename)
        args = checkpt['args']
        state_dict = checkpt['state_dict']

        # backwards compatibility
        if not hasattr(args, 'conv'):
            args.conv = False

        from model import VAE, setup_data_loaders

        # model
        prior_dist = dist.Normal()
        q_dist = dist.Normal()
        vae = VAE(z_dim=args.latent_dim,
                  use_cuda=False,
                  prior_dist=prior_dist,
                  q_dist=q_dist,
                  conv=args.conv)
        vae.load_state_dict(state_dict, strict=False)
        vae.eval()

        # dataset loader
        loader = setup_data_loaders(args, use_cuda=False)
        return vae, loader
Esempio n. 19
0
def main(argv):
  manager = DataManager()
  manager.load()

  sess = tf.Session()
  #sess = tf_debug.LocalCLIDebugWrapperSession(sess)
  
  model = VAE(beta=flags.beta,
              learning_rate=flags.learning_rate,
              alpha = flags.alpha,
              kappa = flags.kappa,
              lagrange_mult_param = flags.lagrange_mult_param,
              use_geco = flags.use_geco)
  
  sess.run(tf.global_variables_initializer())

  saver = load_checkpoints(sess)

  if flags.training:
    # Train
    train(sess, model, manager, saver)
  else:
    reconstruct_check_images = manager.get_random_images(10)
    # Image reconstruction check
    reconstruct_check(sess, model, reconstruct_check_images)
    # Disentangle check
    disentangle_check(sess, model, manager)
Esempio n. 20
0
    def __init__(self, args):
        self.args = args

        torch.manual_seed(self.args.seed)
        if self.args.cuda:
            torch.cuda.manual_seed(self.args.seed)

        kwargs = {'num_workers': 1, 'pin_memory': True} if args.cuda else {}
        train_loader = torch.utils.data.DataLoader(
            datasets.MNIST('./data',
                           train=True,
                           download=True,
                           transform=transforms.ToTensor()),
            batch_size=self.args.batch_size,
            shuffle=True,
            **kwargs)
        test_loader = torch.utils.data.DataLoader(
            datasets.MNIST('./data',
                           train=False,
                           transform=transforms.ToTensor()),
            batch_size=self.args.batch_size,
            shuffle=True,
            **kwargs)
        self.train_loader = train_loader
        self.test_loader = test_loader

        self.model = VAE()
        if self.args.cuda:
            self.model.cuda()

        self.optimizer = optim.Adam(self.model.parameters(), lr=1e-3)
Esempio n. 21
0
    def test_vae(self):
        dae = DAE()
        vae = VAE(dae)

        vars = vae.get_vars()
        # Check size of optimizing vars
        self.assertEqual(len(vars), 14 + 12)
Esempio n. 22
0
def main(args):
    #
    save_dir = os.path.join(args.save_dir, args.model_type)
    img_dir = os.path.join(args.img_dir, args.model_type)
    log_dir = os.path.join(args.log_dir, args.model_type)
    train_dir = args.train_dir

    if not os.path.exists(save_dir):
        os.makedirs(save_dir)
    if not os.path.exists(log_dir):
        os.makedirs(log_dir)
    if not os.path.exists(img_dir):
        os.makedirs(img_dir)

    mnist = utils.read_data_sets(args.train_dir)
    summary_writer = tf.summary.FileWriter(log_dir)
    config_proto = utils.get_config_proto()

    sess = tf.Session(config=config_proto)
    if args.model_type == "vae":
        model = VAE(args, sess, name="vae")
    elif args.model_type == "dcvae":
        model = DCVAE(args, sess, name="dcvae")

    total_batch = mnist.train.num_examples // args.batch_size

    for epoch in range(1, args.nb_epoch + 1):
        print "Epoch %d start with learning rate %f" % (
            epoch, model.learning_rate.eval(sess))
        print "- " * 50
        epoch_start_time = time.time()
        step_start_time = epoch_start_time
        for i in range(1, total_batch + 1):
            x_batch, y_batch = mnist.train.next_batch(args.batch_size)
            _, loss, loss_rec, loss_kl, global_step, summaries = model.train(
                x_batch)
            summary_writer.add_summary(summaries, global_step)
            step_start_time = time.time()

            if global_step % args.log_period == 0:
                print "global step %d, loss %.9f, loss_rec %.9f, loss_kl %.9f, time %.2fs" \
                    % (global_step, loss, loss_rec, loss_kl, time.time() - step_start_time)
                step_start_time = time.time()

        if args.anneal and epoch >= args.anneal_start:
            sess.run(model.learning_rate_decay_op)

        if epoch % args.save_period == 0:
            z = np.random.normal(size=[100, args.latent_dim])
            if args.model_type == "vae":
                gen_images = np.reshape(model.generate(z), (100, 28, 28, 1))
            elif args.model_type == "dcvae":
                gen_images = np.reshape(model.generate(z, 100),
                                        (100, 28, 28, 1))
            utils.save_images(gen_images, [10, 10],
                              os.path.join(img_dir, "sample%s.jpg" % epoch))

    model.saver.save(sess, os.path.join(save_dir, "model.ckpt"))
    print "Model stored...."
Esempio n. 23
0
    def test_scan(self):
        dae = DAE()
        vae = VAE(dae)
        scan = SCAN(dae, vae)

        vars = scan.get_vars()
        # Check size of optimizing vars
        self.assertEqual(len(vars), 6 + 4)
Esempio n. 24
0
  def test_scan(self):
    dae = DAE()
    vae = VAE(dae)
    scan = SCAN(dae, vae)

    vars = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES, "scan")
    # Check size of optimizing vars
    self.assertEqual(len(vars), 6+4)
Esempio n. 25
0
def load_model(path):
    restore_dict = torch.load(path)

    model = VAE(**restore_dict["model"])
    model.load_state_dict(restore_dict["model_state_dict"])
    model.eval()

    return model
Esempio n. 26
0
 def __init__(self, dataset):
     self.model = VAE()
     if config.USE_GPU:
         self.model.cuda()
     self, dataset = dataset
     self.optimizer = optim.Adam(self.model.parameters(), lr=1e-3)
     self.train_loader = DataLoader(self.dataset(train=True))
     self.test_loader = DataLoader(self.dataset(train=False))
Esempio n. 27
0
def main() -> None:
    tokenizer = Tokenizer(args.vocab_file)
    vocabulary_size = len(tokenizer)
    dataset = SentenceDataset(args.input_file, tokenizer=tokenizer.encode)
    loader = DataLoader(dataset,
                        args.batch_size,
                        shuffle=False,
                        collate_fn=dataset.collate_fn,
                        drop_last=False)

    searcher = BeamSearch(tokenizer.eos_index, beam_size=args.search_width)

    model = VAE(
        num_embeddings=len(tokenizer),
        dim_embedding=args.dim_embedding,
        dim_hidden=args.dim_hidden,
        dim_latent=args.dim_latent,
        num_layers=args.num_layers,
        bidirectional=args.bidirectional,
        dropout=0.,
        word_dropout=0.,
        dropped_index=tokenizer.unk_index,
    ).to(device)
    model.load_state_dict(torch.load(args.checkpoint_file,
                                     map_location=device))
    model.eval()

    print('Generating sentence...')
    all_hypotheses = []
    with torch.no_grad():
        for s in tqdm(loader):
            s = s.to(device)
            length = torch.sum(s != tokenizer.pad_index, dim=-1)
            bsz = s.shape[0]

            mean, logvar = model.encode(s, length)
            # z = model.reparameterize(mean, logvar)
            z = mean

            hidden = model.fc_hidden(z)
            hidden = hidden.view(bsz, -1,
                                 model.dim_hidden).transpose(0,
                                                             1).contiguous()

            start_predictions = torch.zeros(bsz, device=device).fill_(
                tokenizer.bos_index).long()
            start_state = {'hidden': hidden.permute(1, 0, 2)}
            predictions, log_probabilities = searcher.search(
                start_predictions, start_state, model.step)

            for preds in predictions:
                tokens = preds[0]
                tokens = tokens[tokens != tokenizer.eos_index].tolist()
                all_hypotheses.append(tokenizer.decode(tokens))
    print('Done')

    with open(args.output_file, 'w') as f:
        f.write('\n'.join(all_hypotheses))
Esempio n. 28
0
def main(args):

    ### VAE on MNIST
    n_transform = transforms.Compose([transforms.ToTensor()])
    dataset = MNIST('data', transform=n_transform, download=True)

    ### CVAE on MNIST
    # n_transform = transforms.Compose([transforms.ToTensor()])
    # dataset = MNIST('data', transform=n_transform)

    ### CVAE on facescrub-5
    # n_transform = transforms.Compose([transforms.Resize(32), transforms.ToTensor()])
    # dataset = ImageFolder('facescrub-5', transform=n_transform)

    data_loader = DataLoader(dataset,
                             batch_size=args.batch_size,
                             shuffle=True,
                             num_workers=2)
    vae = VAE(args.latent_size).cuda()

    ### CVAE
    # vae = CVAE(args.latent_size, num_labels=args.num_labels).cuda()

    optimizer = torch.optim.Adam(vae.parameters(), lr=args.learning_rate)

    # Decide if you want to use fixed noise or not
    fix_noise = Variable(torch.randn((50, args.latent_size)).cuda())

    num_iter = 0

    for epoch in range(args.epochs * 10):
        for _, batch in enumerate(data_loader, 0):
            img = Variable(batch[0].cuda())
            label = Variable(batch[1].cuda())

            recon_img, mean, log_var, z = vae(img)

            ### CVAE
            # recon_img, mean, log_var, z = vae(img, label)

            loss = loss_fn(recon_img, img, mean, log_var)

            optimizer.zero_grad()
            loss.backward()
            optimizer.step()

            num_iter += 1

            if num_iter % args.print_every == 0:
                print("Batch %04d/%i, Loss %9.4f" %
                      (num_iter, len(data_loader) - 1, loss.data.item()))

            if num_iter % args.save_test_sample == 0:
                x = vae.inference(fix_noise)
                save_img(args, x.detach(), num_iter)

            if num_iter % args.save_recon_img == 0:
                save_img(args, recon_img.detach(), num_iter, recon=True)
Esempio n. 29
0
    def test_prepare_loss(self):
        model = VAE()

        with self.test_session() as sess:
            sess.run(tf.global_variables_initializer())

            self.assertEqual(model.loss.get_shape(), ())
            self.assertEqual(model.x_out_logit.get_shape()[1], 64 * 64)
            self.assertEqual(model.x_out.get_shape()[1], 64 * 64)
Esempio n. 30
0
def main(args):
    print("Loading data")
    dataset = args.data.rstrip('/').split('/')[-1]
    torch.cuda.set_device(args.cuda)
    device = args.device
    if dataset == 'mnist':
        train_loader, test_loader = get_mnist(args.batch_size, 'data/mnist')
        num = 10
    elif dataset == 'fashion':
        train_loader, test_loader = get_fashion_mnist(args.batch_size,
                                                      'data/fashion')
        num = 10
    elif dataset == 'svhn':
        train_loader, test_loader, _ = get_svhn(args.batch_size, 'data/svhn')
        num = 10
    elif dataset == 'stl':
        train_loader, test_loader, _ = get_stl10(args.batch_size, 'data/stl10')
    elif dataset == 'cifar':
        train_loader, test_loader = get_cifar(args.batch_size, 'data/cifar')
        num = 10
    elif dataset == 'chair':
        train_loader, test_loader = get_chair(args.batch_size,
                                              '~/data/rendered_chairs')
        num = 1393
    elif dataset == 'yale':
        train_loader, test_loader = get_yale(args.batch_size, 'data/yale')
        num = 38
    model = VAE(28 * 28, args.code_dim, args.batch_size, 10,
                dataset).to(device)
    phi = nn.Sequential(
        nn.Linear(args.code_dim, args.phi_dim),
        nn.LeakyReLU(0.2, True),
    ).to(device)
    model.load_state_dict(torch.load(args.fname))
    if args.tsne:
        datas, targets = [], []
        for i, (data, target) in enumerate(test_loader):
            datas.append(data), targets.append(target)
            if i >= 5:
                break
        data, target = torch.cat(datas, dim=0), torch.cat(targets, dim=0)
        c = F.one_hot(target.long(), num_classes=num).float()
        _, _, _, z = model(data.to(args.device), c.to(args.device))
        z, target = z.detach().cpu().numpy(), target.cpu().numpy()
        tsne = TSNE(n_components=2, init='pca', random_state=0)
        z_2d = tsne.fit_transform(z)
        plt.figure(figsize=(6, 5))
        for a in range(8):
            for b in range(a + 1, 10):
                plot_embedding(
                    z_2d,
                    target,
                    a,
                    b,
                )
                plt.savefig('tsne_c{}_{}_{}{}.png'.format(
                    int(args.c), dataset, a, b))