pytorch 官方DCGAN 中的Discriminator的训练问题

KIngJameS233 KIngJameS233 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

https://pytorch.org/tutorials/beginner/dcgan_faces_tutorial.html

# Training Loop

# Lists to keep track of progress
img_list = []
G_losses = []
D_losses = []
iters = 0

print("Starting Training Loop...")
# For each epoch
for epoch in range(num_epochs):
    # For each batch in the dataloader
    for i, data in enumerate(dataloader, 0):

        ############################
        # (1) Update D network: maximize log(D(x)) + log(1 - D(G(z)))
        ###########################
        ## Train with all-real batch
        netD.zero_grad()
        # Format batch
        real_cpu = data[0].to(device)
        b_size = real_cpu.size(0)
        label = torch.full((b_size,), real_label, dtype=torch.float, device=device)
        # Forward pass real batch through D
        output = netD(real_cpu).view(-1)
        # Calculate loss on all-real batch
        errD_real = criterion(output, label)
        # Calculate gradients for D in backward pass
        errD_real.backward()
        D_x = output.mean().item()

        ## Train with all-fake batch
        # Generate batch of latent vectors
        noise = torch.randn(b_size, nz, 1, 1, device=device)
        # Generate fake image batch with G
        fake = netG(noise)
        label.fill_(fake_label)
        # Classify all fake batch with D
        output = netD(fake.detach()).view(-1)
        # Calculate D's loss on the all-fake batch
        errD_fake = criterion(output, label)
        # Calculate the gradients for this batch, accumulated (summed) with previous gradients
        errD_fake.backward()
        D_G_z1 = output.mean().item()
        # Compute error of D as sum over the fake and the real batches
        #下面这行跟参数更新有什么联系,这个errD 变量都没在其他地方出现过
        errD = errD_real + errD_fake
        # Update D
        optimizerD.step()

        ############################
        # (2) Update G network: maximize log(D(G(z)))
        ###########################
        netG.zero_grad()
        label.fill_(real_label)  # fake labels are real for generator cost
        # Since we just updated D, perform another forward pass of all-fake batch through D
        output = netD(fake).view(-1)
        # Calculate G's loss based on this output
        errG = criterion(output, label)
        # Calculate gradients for G
        errG.backward()
        D_G_z2 = output.mean().item()
        # Update G
        optimizerG.step()

        # Output training stats
        if i % 50 == 0:
            print('[%d/%d][%d/%d]\tLoss_D: %.4f\tLoss_G: %.4f\tD(x): %.4f\tD(G(z)): %.4f / %.4f'
                  % (epoch, num_epochs, i, len(dataloader),
                     errD.item(), errG.item(), D_x, D_G_z1, D_G_z2))

        # Save Losses for plotting later
        G_losses.append(errG.item())
        D_losses.append(errD.item())

        # Check how the generator is doing by saving G's output on fixed_noise
        if (iters % 500 == 0) or ((epoch == num_epochs-1) and (i == len(dataloader)-1)):
            with torch.no_grad():
                fake = netG(fixed_noise).detach().cpu()
            img_list.append(vutils.make_grid(fake, padding=2, normalize=True))

        iters += 1
...全文

相关推荐

PyTorch从零实现DCGAN:手写生成对抗网络全流程

生成对抗网络(GAN)是深度生成模型的核心范式,其原理源于博弈论中的极小极大优化,通过生成器与判别器的动态对抗实现数据分布逼近。技术价值在于无需显式建模概率密度,即可合成高维复杂数据;典型应用场景涵盖图像生成、数据增强、异常检测及跨模态合成。实践中,DCGAN作为结构清晰、可解释性强的基准架构,成为理解GAN训练机制的理想入口。本文聚焦PyTorch原生实现,深入剖析转置卷积上采样、BatchNorm动量调优、标签平滑与Adam beta1=0.5等关键细节,直击GAN模型构建与端到端训练调试中的高频失效点

UXOFFER

DCGAN生成cifar10的图片

DCGAN(Deep Convolutional GAN): DCGAN的贡献 提出了一类基于卷积神经网络的GANs,称为DCGAN,它在多数情况下训练是稳定的。 与其他非监督方法相比,DCGAN的discriminator提取到的图像特征更有效,更适合用于图像分类任务。 通过训练,DCGAN能学到有意义的 filters。 DCGAN的generator能够保持latentspace到image的“连续性”。 DCGAN model 实际上,DCGAN是一类GAN的简称,满足以下设计要求(这些要求更像

香草星冰乐

手写数字GAN实战:从DCGAN原理到MNIST训练调优

生成对抗网络(GAN)是一种通过生成器与判别器博弈来学习数据分布的生成式建模方法,其核心在于隐式建模高维数据流形。DCGAN作为工程化里程碑,通过卷积结构、BatchNorm和标签平滑等关键技术,显著缓解原始GAN的梯度消失与训练不稳定问题。在MNIST等标准数据集上的实践,不仅验证了GAN对图像结构的建模能力,更成为理解模式崩溃、判别器过强、生成器梯度失效等典型现象的‘可观察实验室’。本文聚焦DCGAN在MNIST上的完整实现,涵盖转置卷积设计、归一化适配、损失函数配置及实时可视化调试,为后续迁移到人脸生

bj123nimab

DCGAN实战解析:从原理到稳定训练的工业级指南

生成对抗网络(GAN)是一种通过判别器与生成器博弈来学习数据分布的无监督生成模型,其核心在于隐式建模高维图像流形而非显式概率估计。DCGAN作为首个系统解决训练不稳定问题的架构,通过转置卷积、BatchNorm合理部署、LeakyReLU激活及特定优化策略(如beta1=0.5、判别器梯度截断),为后续StyleGAN等模型奠定工程基础。它在电商图像增强、医学影像合成、工业缺陷扩增等场景中具备快速采样与结构保真优势,同时暴露出模式坍缩、梯度消失、棋盘伪影等典型问题。本文聚焦DCGAN这一可复现、可调试、可归

aixls80424

从零实现DCGAN:手写生成对抗网络的完整教程

生成对抗网络(GAN)是深度学习中理解生成式AI原理的核心范式,其本质是通过生成器与判别器的极小极大博弈,学习真实数据的概率分布。DCGAN作为首个稳定引入卷积结构的GAN变体,以简洁可验证的网络设计,成为掌握对抗训练原理的理想起点。它规避了StyleGAN等复杂模型的认知过载,聚焦于转置卷积上采样、BatchNorm作用边界、detach梯度截断、Tanh输出归一化等基础但关键的技术细节,兼具教学性与工程鲁棒性。本教程基于PyTorch Core手动实现,覆盖LSUN Bedroom数据集加载、张量维度对

chenzhuofei4155
评论 1
收藏 已收藏
分享
返回顶部