生成对抗网络(GAN)原理与实战
生成对抗网络GAN原理与实战1. GAN 原理GAN 结构 ├── 生成器Generator噪声 → 生成图像 ├── 判别器Discriminator判断图像真假 └── 训练过程 ├── 生成器生成尽可能真实的图像 └── 判别器尽可能区分真假图像 └── 两者博弈最终达到纳什均衡2. DCGAN 实现importtorchimporttorch.nnasnnclassGenerator(nn.Module):def__init__(self,latent_dim100):super().__init__()self.mainnn.Sequential(nn.ConvTranspose2d(latent_dim,512,4,1,0,biasFalse),nn.BatchNorm2d(512),nn.ReLU(True),nn.ConvTranspose2d(512,256,4,2,1,biasFalse),nn.BatchNorm2d(256),nn.ReLU(True),nn.ConvTranspose2d(256,128,4,2,1,biasFalse),nn.BatchNorm2d(128),nn.ReLU(True),nn.ConvTranspose2d(128,3,4,2,1,biasFalse),nn.Tanh())defforward(self,x):returnself.main(x)classDiscriminator(nn.Module):def__init__(self):super().__init__()self.mainnn.Sequential(nn.Conv2d(3,64,4,2,1,biasFalse),nn.LeakyReLU(0.2,inplaceTrue),nn.Conv2d(64,128,4,2,1,biasFalse),nn.BatchNorm2d(128),nn.LeakyReLU(0.2,inplaceTrue),nn.Conv2d(128,256,4,2,1,biasFalse),nn.BatchNorm2d(256),nn.LeakyReLU(0.2,inplaceTrue),nn.Conv2d(256,1,4,1,0,biasFalse),nn.Sigmoid())defforward(self,x):returnself.main(x).view(-1)3. 训练循环criterionnn.BCELoss()optimizer_Gtorch.optim.Adam(generator.parameters(),lr0.0002,betas(0.5,0.999))optimizer_Dtorch.optim.Adam(discriminator.parameters(),lr0.0002,betas(0.5,0.999))forepochinrange(num_epochs):forreal_images,_indataloader:batch_sizereal_images.size(0)real_labelstorch.ones(batch_size)fake_labelstorch.zeros(batch_size)# 训练判别器ztorch.randn(batch_size,100,1,1)fake_imagesgenerator(z)d_loss_realcriterion(discriminator(real_images),real_labels)d_loss_fakecriterion(discriminator(fake_images.detach()),fake_labels)d_loss(d_loss_reald_loss_fake)/2optimizer_D.zero_grad()d_loss.backward()optimizer_D.step()# 训练生成器g_losscriterion(discriminator(fake_images),real_labels)optimizer_G.zero_grad()g_loss.backward()optimizer_G.step()总结GAN 变体特点应用DCGAN卷积架构图像生成WGANWasserstein 距离训练稳定CycleGAN无配对图像翻译风格迁移StyleGAN风格控制高质量人脸