transform = transforms.Compose([
    transforms.Resize((opt.input_size, 2 * opt.input_size)),
    transforms.ToTensor(),
    transforms.Normalize(mean=(0.5, 0.5, 0.5), std=(0.5, 0.5, 0.5))
])
train_dataset = datasets.ImageFolder(opt.train_dir, transform=transform)
train_loader = DataLoader(train_dataset,
                          batch_size=opt.batch_size,
                          shuffle=True)

# network
G = Generator(opt.ngf)
D = Discriminator(opt.ndf)
G.init_weight(mean=0.0, std=0.02)
D.init_weight(mean=0.0, std=0.02)

if opt.use_gpu:
    G.cuda()
    D.cuda()

# loss
bce_loss = nn.BCELoss()
l1_loss = nn.L1Loss()

# optimizer
G_optimizer = optim.Adam(G.parameters(),
                         lr=opt.lrG,
                         betas=(opt.beta1, opt.beta2))
D_optimizer = optim.Adam(D.parameters(),
                         lr=opt.lrD,