Exemple #1
0
def encoder_test(seq_len=4, decoder_batch_size=2, model_name='xception'):
    encoder = Encoder(seq_len=seq_len, decoder_batch_size=decoder_batch_size, model_name=model_name)
    encoder.cuda()
    encoder.eval()

    with torch.no_grad():
        images = []
        for i in range(decoder_batch_size):
            images.append(torch.rand((seq_len, 3, 299, 299)))
        images = torch.stack(images).cuda()
        features = encoder.forward(images)

        split_features = []
        for i in range(decoder_batch_size):
            split_features.append(encoder._forward_old(images[i]))
        split_features = torch.stack(split_features)

    assert(torch.all(split_features == features) == 1)
    print('encoder test passed!')
Exemple #2
0
                vis_fake_B_random = denorm(fake_B_random[0].detach()).cpu().data.numpy().astype(np.uint8)

                axs[i + 1].imshow(vis_fake_B_random.transpose(1, 2, 0))

            path = os.path.join(test_img_dir, 'epoch_' + str(epoch_id) + '_' + str(idx) + '.png')
            if opt.__dict__['use_colab']:
                plt.show()
            else:
                plt.savefig(path)
            plt.close()
        elif opt.__dict__['infer_encoded']:
            """
            B -> encoded latent -> B
            FID:  76.68991094315851
            """
            z_mu, z_logvar = encoder.forward(rgb_tensor)
            z_encoded = reparameterization(z_mu, z_logvar, device=gpu_id)

            fake_B_encoded = generator.forward(real_A, z_encoded)

            for i in range(batch_size):
                vis_fake_B_encoded = \
                    denorm(fake_B_encoded[i].detach()).cpu().\
                    data.numpy().astype(np.uint8).transpose(1, 2, 0)
                path = os.path.join(test_img_dir, 'gen/fake_B_' + str(idx) + '_' + str(i) + '.png')
                plt.imsave(path, vis_fake_B_encoded)
                path = os.path.join(test_img_dir, 'real/real_B_' + str(idx) + '_' + str(i) + '.png')
                plt.imsave(path,
                           denorm(real_B[i].detach()).cpu().data.numpy().astype(np.uint8).transpose(1, 2, 0))
        elif opt.__dict__['compute_lpips']:
            lpips_batch_path = os.path.join(lpips_img_dir, str(idx))
Exemple #3
0
            # Adversarial ground truths
            valid = Variable(torch.Tensor(
                np.ones((real_A.size(0), *discriminator.output_shape))),
                             requires_grad=False).to(gpu_id)
            fake = Variable(torch.Tensor(
                np.zeros((real_A.size(0), *discriminator.output_shape))),
                            requires_grad=False).to(gpu_id)

            # -------------------------------
            #  Forward ALL
            # ------------------------------
            encoder.train()
            generator.train()

            z_mu, z_logvar = encoder.forward(rgb_tensor)
            z_encoded = reparameterization(z_mu, z_logvar, device=gpu_id)

            fake_B_encoded = generator.forward(real_A, z_encoded)

            z_random = torch.randn(real_A.shape[0], latent_dim).to(gpu_id)
            fake_B_random = generator.forward(real_A, z_random)

            z_mu_predict, z_logvar_predict = encoder.forward(fake_B_random)

            # -------------------------------
            #  Train Generator and Encoder
            # ------------------------------
            for param in discriminator.parameters():
                param.requires_grad = False
Exemple #4
0
from layers import LSTM, FullConnected, TimeDistributed
from models import Decoder, Encoder, Seq2seq, Sequential
from utils import masking, padding

rng.seed(123)

# Preprocess data
x1 = [2, 1, 1, 1, 2, 4, 2]
x2 = [2, 1]
x3 = [2, 1, 4, 3, 1]
batch_value = np.asarray([x1, x2, x3])

vocab_size = 5
embedding_size = 4
encoder_hidden_size = 6

encoder = Encoder(vocab_size + 1, embedding_size, encoder_hidden_size)
mask_value = masking(batch_value)
padded_batch_value = padding(batch_value, 0)

mask = shared(mask_value, name='mask')
padded_batch = shared(padded_batch_value, name='padded_batch')
H, C = encoder.forward(padded_batch, mask)

(h1, c1) = encoder.forward2(x1)
(h2, c2) = encoder.forward2(x2)
(h3, c3) = encoder.forward2(x3)

print(T.isclose(H, T.as_tensor_variable([h1, h2, h3])).eval())
print(T.isclose(C, T.as_tensor_variable([c1, c2, c3])).eval())
    
    return files



dataset = CustomDataset(args)
dataset_loader = torch.utils.data.DataLoader(dataset=dataset, batch_size=args.batch_size, shuffle=False)



for epoch in range(1, args.epoch):
    epoch_loss_rec = []
    epoch_loss_kl = []

    for batch_t in dataset_loader:
        z_vector, z_mu, z_sigma = encoder.forward(batch_t)
        decoded = decoder.forward(z_vector)

        if args.show:
            show(batch_t[0], decoded[0])
        
        if args.load:
            continue

        loss_recunstruction = reconstruction_loss_fn(decoded, batch_t)

        loss_kl = args.beta * 0.5 * (1.0 + torch.log(z_sigma**2) - z_mu**2 - z_sigma**2)
        loss_kl = torch.mean(loss_kl)
        loss = loss_recunstruction - loss_kl

        optimizer.zero_grad()