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!')
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))
# 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
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()