【百战GAN】适合所有人的第一个GAN项目:DCGAN图像生成代码实战

DCGAN理论讲解及代码实现 DCGAN也叫深度卷积生成对抗网络,DCGAN就是将CNN与GAN结合在一起,生成模型和判别模型都运用了深度卷积神经网络的生成对抗网络。 DCGAN将GAN与CNN相结合,奠定了之后几乎所有GAN的基本网络架构。DCGAN极大地提升了原始GAN训练的稳定性以及生成结果的质量... 阅读详情

大家好,欢迎来到专栏《百战GAN》,在这个专栏里,我们会进行GAN相关项目的核心思想讲解,代码的详解,模型的训练和测试等内容。

作者&编辑 | 言有三

dcbcb86d9af6525be796aea491bbe9de.jpeg

本文资源与生成结果展示

本文篇幅:4000字

背景要求:会使用Python和Pytorch

附带资料:参考论文和项目

1 项目背景

GAN无疑是这几年深度学习领域里最酷的技术,不管是理论的研究,还是GAN在图像生成,图像翻译,语音图像等基础领域的应用,都非常的丰富。我们公众号从很早以前开始就输出过非常多的GAN相关资源,包括免费与付费的视频课,知识星球中的GAN模型原理解读专题,公众号的GAN付费专栏,大家可以阅读下面的文章了解详情。

【CV秋季划】生成对抗网络GAN有哪些研究和应用,如何循序渐进地学习好(2022年言有三一对一辅导)?

2 项目解读

为了让大家能够快速上手,本次我们给大家介绍一个非常适合新手入门的项目,使用DCGAN来进行图片生成,项目效果如文章开头的图片。

2.1 数据获取

本次我们完成一个人脸表情图像生成的任务,使用的数据集也是多次在咱们的项目中出现过的数据集,我们选择了其中一类表情的数据,如下:

c20229a249f33db9b7a9fa04a1c998e2.png

数据的读取非常简单,直接使用torchvision的ImageFolder接口即可,与我们以前介绍过的图像分类任务相同,核心代码如下,不再赘述。

## 读取数据

dataroot = "mouth/"

dataset = datasets.ImageFolder(root=dataroot,

                           transform=transforms.Compose([

                               transforms.Resize(image_size),

                               transforms.CenterCrop(image_size),

                               transforms.ToTensor(),

                               transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)),

                           ]))

dataloader = torch.utils.data.DataLoader(dataset, batch_size=batch_size,

                                         shuffle=True, num_workers=workers)

不熟悉的朋友可以阅读:【CV实战】年轻人的第一个深度学习CV项目应该是什么样的?(支持13大深度学习开源框架)

2.2 判别器定义

接下来我们再看判别器的定义,它就是一个图像分类模型,与原始DCGAN论文中的参数配置略有差异。

class Discriminator(nn.Module):

    def __init__(self, ndf=64, nc=3):

        super(Discriminator, self).__init__()

        self.ndf = ndf

        self.nc = nc

        self.main = nn.Sequential(

            # 输入图片大小 (nc) x 64 x 64,输出 (ndf) x 32 x 32

            nn.Conv2d(nc, ndf, 4, 2, 1, bias=False),

            nn.LeakyReLU(0.2, inplace=True),

            # 输入(ndf) x 32 x 32,输出(ndf*2) x 16 x 16

            nn.Conv2d(ndf, ndf * 2, 4, 2, 1, bias=False),

            nn.BatchNorm2d(ndf * 2),

            nn.LeakyReLU(0.2, inplace=True),

            # 输入(ndf*2) x 16 x 16,输出 (ndf*4) x 8 x 8

            nn.Conv2d(ndf * 2, ndf * 4, 4, 2, 1, bias=False),

            nn.BatchNorm2d(ndf * 4),

            nn.LeakyReLU(0.2, inplace=True),

            # 输入(ndf*4) x 8 x 8,输出(ndf*8) x 4 x 4

            nn.Conv2d(ndf * 4, ndf * 8, 4, 2, 1, bias=False),

            nn.BatchNorm2d(ndf * 8),

            nn.LeakyReLU(0.2, inplace=True),

            # 输入(ndf*8) x 4 x 4,输出1 x 1 x 1

            nn.Conv2d(ndf * 8, 1, 4, 1, 0, bias=False),

            nn.Sigmoid()

        )

    def forward(self, input):

        return self.main(input)

以上代码定义了一个包含5层卷积,其中前面4个卷积层的卷积核大小为4×4,宽和高的步长等于2,使用了padding技术,padding大小为1,每经过一次卷积,图像长宽都降低为原来的1/2。每一个卷积层后都跟随一个batch normalization层和lrelu层。

输出层也是一个卷积层,其特征图大小空间尺寸为4×4,卷积核大小也是4×4,所以输出空间层维度为1,使用sigmoid激活函数,输出就是一个0到1之间的概率值。

2.3 生成器定义

接下来我们再看生成器的定义,它输入一维的噪声向量,输出二维的图像。

## 定义生成器与判别器

class Generator(nn.Module):

    def __init__(self, nz=100, ngf=64, nc=3):

        super(Generator, self).__init__()

        self.ngf = ngf

        self.nz = nz

        self.nc = nc

        self.main = nn.Sequential(

            # 输入噪声向量Z,(ngf*8) x 4 x 4特征图

            nn.ConvTranspose2d( nz, ngf * 8, 4, 1, 0, bias=False),

            nn.BatchNorm2d(ngf * 8),

            nn.ReLU(True),

            # 输入(ngf*8) x 4 x 4特征图,输出(ngf*8) x 4 x 4

            nn.ConvTranspose2d(ngf * 8, ngf * 4, 4, 2, 1, bias=False),

            nn.BatchNorm2d(ngf * 4),

            nn.ReLU(True),

            # 输入(ngf*4) x 8 x 8,输出(ngf*2) x 16 x 16

            nn.ConvTranspose2d( ngf * 4, ngf * 2, 4, 2, 1, bias=False),

            nn.BatchNorm2d(ngf * 2),

            nn.ReLU(True),

            # 输入(ngf*2) x 16 x 16,输出(ngf) x 32 x 32

            nn.ConvTranspose2d( ngf * 2, ngf, 4, 2, 1, bias=False),

            nn.BatchNorm2d(ngf),

            nn.ReLU(True),

            # 输入(ngf) x 32 x 32,输出(nc) x 64 x 64

            nn.ConvTranspose2d( ngf, nc, 4, 2, 1, bias=False),

            nn.Tanh()

        )

    def forward(self, input):

        return self.main(input)

可以看出,总共包含5个上采样层。其中前4个上采样层后接有BN层,和ReLU层。第一个上采样层将输入的一维噪声向量经过一个上采样层生成4×4大小的图,然后经过后面的4个上采样层得到输出。前面4层的激活函数为ReLU,最后一层的激活函数为Tanh。

2.4 优化目标与方法定义

损失函数使用了BCE交叉熵损失,真样本和假样本标签分别为1和0。

# 损失函数

criterion = nn.BCELoss()

# 真假标签

real_label = 1.0

fake_label = 0.0

判别器和生成器都采用了Adam方法作为优化器,且使用了同样的配置,定义如下:

lr = 0.0003

beta1 = 0.5

optimizerD = optim.Adam(netD.parameters(), lr=lr, betas=(beta1, 0.999))

optimizerG = optim.Adam(netG.parameters(), lr=lr, betas=(beta1, 0.999))

3 模型训练

接下来进行模型训练,添加可视化部分,缓存中间结果,核心的迭代代码如下:

for epoch in range(num_epochs):

    lossG = 0.0

    lossD = 0.0

    for i, data in enumerate(dataloader, 0):

        ############################

        # (1) Update D network: maximize log(D(x)) + log(1 - D(G(z)))

        ###########################

        ## 训练真实图片

        netD.zero_grad()

        real_data = data[0].to(device)

        b_size = real_data.size(0)

        label = torch.full((b_size,), real_label, device=device)

        output = netD(real_data).view(-1)

        # 计算真实图片损失,梯度反向传播

        errD_real = criterion(output, label)

        errD_real.backward()

        D_x = output.mean().item()

        ## 训练生成图片

        # 产生latent vectors

        noise = torch.randn(b_size, nz, 1, 1, device=device)

        # 使用G生成图片

        fake = netG(noise)

        label.fill_(fake_label)

        output = netD(fake.detach()).view(-1)

        # 计算生成图片损失,梯度反向传播

        errD_fake = criterion(output, label)

        errD_fake.backward()

        D_G_z1 = output.mean().item()

        # 累加误差,参数更新

        errD = errD_real + errD_fake

        optimizerD.step()

        ############################

        # (2) Update G network: maximize log(D(G(z)))

        ###########################

        netG.zero_grad()

        label.fill_(real_label)  # 给生成图赋标签

        # 对生成图再进行一次判别

        output = netD(fake).view(-1)

        # 计算生成图片损失,梯度反向传播

        errG = criterion(output, label)

        errG.backward()

        D_G_z2 = output.mean().item()

        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))

        # 存储损失

        nbatch = nbatch + 1

        lossG = lossG + errG.item()

        lossD = lossD + errD.item()

        # 对固定的噪声向量,存储生成的结果

        if (iters % 20 == 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))

            i = vutils.make_grid(fake, padding=2, normalize=True)

            fig = plt.figure(figsize=(8, 8))

            plt.imshow(np.transpose(i, (1, 2, 0)))

            plt.axis('off')  # 关闭坐标轴

            plt.savefig("out/%d_%d.png" % (epoch, iters))

            plt.close(fig)

        iters += 1

    writer.add_scalar('data/lossG', lossG, epoch)

    writer.add_scalar('data/lossD', lossD, epoch)

torch.save(netG.state_dict(),'models/netG.pt')

训练结果曲线如下:

1989a24f7a31dceb8511ff33161b82b3.png

由于标准GAN的损失与模型的生成结果之间的关系不像以前介绍的任务那么直观,我们应该以实际生成的图片结果为准,下面从左到右分别是第0,10,100个epoch的生成结果。

ddb3b5b60b749c87de7bd6f3eaeabc5d.jpeg

从图结果来看,随着训练的进行,逐渐生成了许多有意义且非常逼真的样本,在10个epoch的时候生成图片都有明显的瑕疵,到100个epoch时已经开始生成一些逼真的样本。不过最终生成的图像仍然有一部分效果很差,这是因为DCGAN本身模型性能所限,后续可以使用更好的模型进行改进。

4 模型测试

上面已经训练好了模型,我们接下来的目标,就是要用它来做推理,真正把模型用起来。

import torch

import torch.nn as nn

import torchvision.utils as vutils

import matplotlib.pyplot as plt

from net import Generator

device = torch.device("cuda:0" if (torch.cuda.is_available() and ngpu > 0) else "cpu")

netG = Generator().to(device)

## 载入模型权重

modelpath = sys.argv[1] 

savepath = sys.argv[2] 

netG.load_state_dict(torch.load(modelpath,map_location=lambda storage,loc: storage))

netG.eval() ## 设置推理模式,使得dropout和batchnorm等网络层在train和val模式间切换

torch.no_grad() ## 停止autograd模块的工作,以起到加速和节省显存

nz = 100

for i in range(0,100):

    noise = torch.randn(64, nz, 1, 1, device=device)

    fake = netG(noise).detach().cpu()

    rows = vutils.make_grid(fake, padding=2, normalize=True)

    fig = plt.figure(figsize=(8, 8))

    plt.imshow(np.transpose(rows, (1, 2, 0)))

    plt.axis('off')  # 关闭坐标轴

    plt.savefig(os.path.join(savepath,"%d.png" % (i)))

    plt.close(fig)

推理的核心代码就是使用torch.load函数载入生成器模型,然后输入随机的噪声向量,得到生成的结果。

下面展示了一些结果。

c56d0864ff71970ec5421799500b59a4.jpeg

从图中我们可以看到,总体的生成结果还是不错的,不过本次的任务还有许多可以提升的空间,包括但不限于:(1) 做更多的数据增强。(2) 改进模型。这些就留给读者去进行实验。

本文参考的文献如下:

[1] Radford A, Metz L, Chintala S. Unsupervised representation learning with deep convolutional generative adversarial networks[J]. arXiv preprint arXiv:1511.06434, 2015.

本文视频讲解和代码,请大家移步:

【项目实战课】基于Pytorch的DCGAN人脸嘴部表情图像生成实战

a04cab2430bd16ead0a8107b4ffc90cc.jpeg

19e4eb34f7369704f712dfd6211c1b8f.jpeg

总结

本次我们使用DCGAN完成了人脸嘴唇图像生成任务,DCGAN是最基础的图像生成框架,是所有从事GAN相关领域工作的朋友必须掌握的内容,欢迎大家以后持续关注《百战GAN专栏》。

如何系统性地学习生成对抗网络GAN

欢迎大家关注有三AI-CV秋季划GAN小组,可以系统性学习GAN相关的内容,包括GAN的基础理论,《深度学习之图像生成GAN:理论与实践篇》,《深度学习之图像翻译GAN:理论与实践篇》以及各类GAN任务的实战。

介绍如下:【CV秋季划】生成对抗网络GAN有哪些研究和应用,如何循序渐进地学习好(2022年言有三一对一辅导)?

5611c564c31c6b2e58820e3941819841.png

转载文章请后台联系

侵权必究

d28a330928356bec20e73661bed254dd.gif

e18f8b9b4cdb019cf482ac0bf38e7e23.png

d357a8b294aa88310f58f38eee8c9239.png

基于pytorch的DCGAN代码实现(DCGAN基本原理+代码讲解) DCGAN原理 Deep Convolution Generative Adversarial Networks(深度卷积生成对抗网络) DCGAN是将CNN 与 GAN 结合,原理与GAN一样,只是将G和D换成两个卷积神经网络(CNN),DCGAN将CNN做了一些改变,为提高样本质量和收敛速度。 ·strided convolution 替代确定性的pooling(从而可以让网络自己学习downsampling(下采样) 。G 网络中使用微步幅度卷积(fractionally strided convol 阅读详情

相关推荐

PyTorch深度学习实战(34)——DCGAN详解与实现

DCGAN 是优秀的图像生成模型,其生成网路和判别网络都是使用卷积层和反卷积层构建的深度神经网络。生成网络接收一个随机噪声向量作为输入,并通过逐渐减小的反卷积层将其逐渐转化为与训练数据相似的输出图像;判别网络则是一个用于分类真实和生成图像的卷积神经网络。在本节中,我们学习了如何构建并训练 DCGAN 生成人脸图像。

盼小辉丶的博客 1万+

手把手带你学会GAN

基于手写数据集的DCGAN,生成相应的手写数字,注意请使用GPU版本进行加载

m0_63642362的博客 1051

基于Matlab的GAN网络实战项目:从基础到高级应用

GAN(生成对抗网络)是由Ian Goodfellow于2014年提出的一种新型的深度学习模型,由生成器(Generator)和判别器(Discriminator)两个部分构成。生成器负责生成尽可能接近真实的数据,而判别器则负责从真实数据和生成数据中区分出哪些是真实的。GAN的训练过程中,两个网络相互竞争,从而不断提升模型的生成质量。Matlab深度学习库提供了一系列工具和函数,用于简化和加速深度学习模型的设计、开发和部署。

weixin_36300623的博客 855

机器学习——从0开始构建自己的GAN网络

机器学习——从0开始构建自己的GAN网络

qq_52222102的博客 4854

企业级Windows 10镜像封装实战:从规划到部署的完整指南

系统部署与镜像封装是企业IT运维中的核心基础技术,其原理在于通过创建预配置的系统模板,实现大规模计算机环境的快速、标准化部署。这项技术的核心价值在于将重复性手动操作转化为自动化流程,显著提升运维效率,保障环境一致性,并强化安全基线管理。在实际应用场景中,它尤其适用于新设备批量初始化、系统恢复和标准化环境构建。本文聚焦于Windows 10镜像的封装实践,深入探讨了使用Sysprep进行系统通用化处理以及通过DISM工具捕获WIM格式镜像的具体方法,为企业IT人员提供从零构建标准化系统镜像的完整路径。

weixin_33843947的博客 358

自学ROS完成智能小车路径规划(一)--配置功能包

此系列文章记录本人学习ros的过程,将会尽可能详细以便自己能够看懂 参考系列:古月居老师,优快云,ROS tutorials,科大讯飞智能车竞赛线上赛 本文章的目标: 比较全局路径规划算法中A*算法与Dijkstra算法在该地图场景下的规划与运行时间 比较局部路径规划算法中DWA算法与TEB算法在该地图场景下的规划与运行时间 在同等参数条件下选择出各自适合的算法进行融合,经过比较,我将选择dijkstra算法作为全局路径规划算法,TEB算法为局部路径规划算法 第一步,按照科大讯飞的教程配置文件 科大讯

weixin_42621524的博客 9366

【总结】超100期经典GAN模型的解读,从结构设计到应用,你不动心吗?

GAN无疑是这几年深度学习领域里最酷的技术,不管是理论的研究,还是GAN在图像生成,图像翻译,语音图像等基础领域的应用,都非常的丰富。我们公众号输出过非常多的GAN相关资源,本次做一个简单...

hacker_long的专栏 1959

香橙派5使用RK3588S内置NPU加速yolov5推理,实时识别数字达到50fps

香橙派5采用了RK3588S,内置的NPU达到了6Tops的算力,博主这里记录一下自己的踩坑过程,好不容易做出来的不能以后忘记了(手动狗头)。这里博主还在B站上发布了效果视频,大家感兴趣的话可以看一下。其中解决了先验框标注位置不对,或者出现非常多的框的问题

weixin_51651698的博客 2万+

【总结】有三AI所有原创GAN相关的学习资料汇总(2022年12月)

GAN的研究和应用在这几年发展可以说是非常迅猛,无疑是这几年深度学习计算机视觉领域里落地性最酷的技术之一,包括图像与视频生成,数据仿真与增强,各种各样的图像风格化任务,人脸与人体图像编辑,图像质量提升等。GAN最早期也是最经典的任务,就是高质量图像生成,当前已经可以生成1024分辨率以上的高清逼真图像,如下图生成了一些假明星脸。图像翻译与风格化则是另外一个应用极其广泛的领域,因为从图像到图像的任务...

hacker_long的专栏 1040

告别手动改Hex!用Vector HexView命令行5分钟搞定固件数据“乾坤大挪移”

本文详细介绍了如何利用Vector HexView命令行工具快速实现嵌入式固件数据的自动化迁移,告别手动修改Hex文件的繁琐流程。通过实战案例和脚本示例,展示了如何5分钟内完成数据地址范围的重新映射,提升嵌入式开发效率,特别适用于烧录文件的内存布局调整。

weixin_30635053的博客 711

ENVI遥感技术

记录2024.03.06所遇到的遥感问题

qq_44453923的博客 4332

GAN!生成对抗网络GAN全维度介绍与实战

本文为生成对抗网络GAN的研究者和实践者提供全面、深入和实用的指导。通过本文的理论解释和实际操作指南,读者能够掌握GAN的核心概念,理解其工作原理,学会设计和训练自己的GAN模型,并能够对结果进行有效的分析和评估。

TechLead 2718

Quartus II 13.0安装避坑指南:从下载到破解的完整流程(附常见错误解决方案)

本文提供Quartus II 13.0软件的详细安装与破解指南,涵盖从下载准备、路径设置、主程序安装到授权配置的全流程。重点解析了破解过程中生成和修改license.dat文件的核心步骤,并针对“无法找到有效的License文件”等常见错误提供了实用的解决方案,帮助用户快速构建稳定的FPGA开发环境。

weixin_29291863的博客 760

可直接运行的gan小项目(详细注释)结合代码通俗理解gan的原理

大家先看底下对这个gan小项目来源和介绍,然后再看代码,copy下来可直接运行。中文注释是我自己理解的过程中加的,对好不了解gan但是想直接上手的同志比较友好,如果注释有不合理的地方欢迎指出~ 这个小项目有利于不了解gan原理的同志迅速上手和了解gan原理 #-*-coding= utf-8 -*- import tensorflow as tf import numpy as np #i...

weixin_40015791的博客 3305

03. 线性规划与混合整数规划 (LP/MIP)

本文介绍了OR-Tools中的线性规划(LP)和混合整数规划(MIP)求解器。主要内容包括:1) LP/MIP的基本概念和数学形式,对比了LP、MIP、ILP和BIP的区别;2) OR-Tools支持的求解器类型,如GLOP、SCIP等,以及它们各自的特点和适用场景;3) 详细展示了如何使用GLOP求解器进行线性规划求解,包括变量定义、约束添加和目标函数设置;4) 介绍了SCIP求解器的配置和使用方法;5) 讨论了变量类型、约束类型、多目标优化等进阶功能。文章通过Java代码示例演示了如何实现一个完整的优化

智慧是做事用的 158

【NVIDIA】Jetson Orin Nano系列:烧写Ubuntu22.04

Jeson Orin Nano系列:烧写Ubuntu22.04 电脑主机可以是Ubuntu20.04

郭老二 4896

pytorch生成对抗网络GAN的基础教学简单实例(附代码数据集)

这篇文章主要是介绍了使用pytorch框架构建生成对抗网络GAN来生成虚假图像的原理与简单实例代码。数据集使用的是开源人脸图像数据集img_align_celeba,共1.34G。生成器与判别器模型均采用简单的卷积结构,代码参考了pytorch官网。

Lizhi_Tech的博客 5972

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

深度学习学习经验——生成对抗网络(GAN)

GAN 通过两个网络——生成器(Generator)和判别器(Discriminator)的对抗训练来生成逼真的数据。

Linductor的博客 7443

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

DCGAN训练自己的数据集生成图片(附源码)

dcgan生成对抗网络

m0_60594197的博客 7264

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

从零使用GAN(生成对抗网络)进行图像生成

基于Pytorch使用生成对抗网络完成笑脸图片生成任务

hyk的博客 2万+

图像生成:对抗生成网络(GAN)与深度卷积对抗生成网络(DCGAN)

本文以最直观的方式向初学者介绍生成对抗网络 (GAN) 的基本概念。目的是描述这种网络的工作,而无需深入研究相关的复杂数学,并以更实用的方式,以便读者可以开发自己的简单GAN。

weixin_46287760的博客 8039

推荐项目:GAN指纹识别——揭开合成图像的神秘面纱

???? 推荐项目:GAN指纹识别——揭开合成图像的神秘面纱 去发现同类优质开源项目:https://gitcode.com/ 在深度学习时代,Generative Adversarial Networks(简称GANs)已成为创造逼真图像的强大工具。然而,这同时也给视觉取证和模型溯源带来了前所未有的挑战。正是在这个背景下,GAN Fingerprints项目应运而生,它通过学习和分析GAN留下的“指纹...

gitblog_00075的博客 592

【深度学习】GAN生成对抗网络:原理、应用与发展

本文介绍了一种生成模型——GAN(生成对抗网络)。GAN作为深度学习领域的重要创新,不仅在学术界引起了广泛关注,也在工业界找到了丰富的应用场景。GAN中的两个网络通过对抗训练不断提升自己的能力:生成器努力生成更逼真的数据以欺骗判别器,判别器则努力提高自己的鉴别能力。如果你想要更详细地了解某个特定的GAN变体或应用场景,可以告诉我,我可以为你提供更深入的内容。条件GAN通过引入额外的条件信息(如类别标签),使生成器能够生成特定类别的数据。

欢迎来到我的优快云个人博客主页! 2934

DCGAN 源码解析

为什么写Blog现在还没找到理由。不过用心看下去你会觉得更有意义。 我们以生成图片为例子: G就是一个生成图片的网络,它接受一个随机的噪声z,然后通过这个噪声生成图片,生成的数据记做G(z)。 D是一个判别网络,判别一张图片是不是“真实的”(是否是捏造的)。它的输入参数是x,x代表一张图片,输出D(x)代表x为真实图片的概率,如果为1,就代表绝逼是真实的图片,而输出为0,就代表不可能是真实的图片。 在训练的过程中,生成网络G的目标就是生成假的图片去骗过判别网络D,而判别网络D的目标就是能够分辨出某一张

周周周周周大帅的博客 4318

对抗生成网络GAN系列——DCGAN简介及人脸图像生成案例

​  前段时间,我已经写过一篇关于GAN的理论讲解,并且结合理论做了一个手写数字生成的小案例,对GAN原理不清楚的可以点击☞☞☞跳转了解详情。🌱🌱🌱GAN网络即是通过生成器和判别器的不断相互对抗,不断优化,直到判别器难以判断生成器生成图像的真假。​   那么接下来我就要开始讲述DCGAN了喔,读到这里我就默认大家对GAN的原理已经掌握了,开始发车。🚖🚖🚖​   我们先来看一下DCGAN的全称——。

秃头小苏的博客 1万+

【图像生成】(二) GAN 原理 & pytorch代码实例

上一篇文章里我们介绍了【图像生成】的几种模型以及最直观的DNN的代码和效果,当然可以看出来不足的地方。这篇文章里主要介绍GAN模型的原理,以及它是怎么解决以上问题的。

Lizhi_Tech的博客 6254
上一篇: 【百战GAN】StyleGAN原理详解与人脸图像生成代码实战
下一篇: 【百战GAN】SRGAN人脸低分辨率老照片修复代码实战
言有三
言有三 领域专家: 人工智能技术领域 领域专家: 人工智能技术领域
博客等级 码龄15年 3635粉丝 976原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

言有三

三人行必有AI

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值