[Deep-Learning-with-Python]GAN图片生成

本文介绍了生成对抗网络(GAN)的基本原理和实现,通过GAN的直观解释——伪造者与艺术品经销商的比喻,展示了GAN如何通过生成器和鉴别器的对抗训练产生逼真图像。文章详细讲解了GAN的构成、训练流程,并提供了使用Keras实现DCGAN的示例,探讨了训练GAN时的一些技巧和挑战,如对抗损失、鉴别器与生成器的动态平衡等。
摘要由CSDN通过智能技术生成

GAN

由Goodfellow等人于2014年引入的生成对抗网络(GAN)是用于学习图像潜在空间的VAE的替代方案。它们通过强制生成的图像在统计上几乎与真实图像几乎无法区分,从而能够生成相当逼真的合成图像。

理解GAN的直观方式是想象一个伪造者试图创造一幅伪造的毕加索作品。起初,伪造者的任务非常糟糕。他将他的一些假货与真正的毕加索混合在一起,并将它们全部展示给艺术品经销商。艺术品经销商对每幅画进行真实性评估,并给出关于毕加索看起来像毕加索的原因的伪造反馈。伪造者回到他的工作室准备一些新的假货。随着时间的推移,伪造者越来越有能力模仿毕加索的风格,艺术品经销商越来越专业地发现假货。最后,他们手上拿着一些优秀的假毕加索。

这就是GAN的意义:伪造网络和专家网络,每个网络都经过最好的培训。因此,GAN由两部分组成:

  • 生成网络(generator): 将随机向量(潜在空间中的随机点)作为输入,并将其解码为合成图像;
  • 辨别网络(discriminator): 将图像(真实的或合成的)作为输入,并预测图像是来自训练集还是由生成器网络创建。

生成器网络经过训练,能够欺骗鉴别器网络,因此随着训练的进行,它逐渐产生越来越逼真的图像:人工图像看起来与真实图像无法区分,只要鉴别器网络不可能鉴别两张图片。同时,鉴别器不断适应发生器逐渐改进的能力,为生成的图像设置了高度的真实感。一旦训练结束,生成器就能够将其输入空间中的任何点转换为可信的图像。与VAE不同,这个潜在空间对有意义结构的明确保证较少;特别是,它不是连续的。
[图片上传失败…(image-599f61-1536326082049)]

值得注意的是,GAN是一个优化最小值不固定的系统。通常,梯度下降包括在静态损失中滚下山丘。但是使用GAN,从山上下来的每一步都会改变整个景观。这是一个动态系统,其中优化过程寻求的不是最小,而是两个力之间的平衡。出于这个原因,GAN是众所周知的难以训练 - 让GAN工作需要大量仔细调整模型架构和训练参数。

GAN实现示意图

使用keras实现一个简单的GAN网络:DCGAN,Generator和Discriminator都是由卷积网络组成。使用Conv2DTranspose网络层在Generator用来对图片上采样。

在CIFAR10,50000张32x32 RGB图片数据集上训练。为了训练更容易,仅使用“青蛙”类图片。

实现GAN网络流程:

  1. generator网络将(latent_dim, )向量转换成(32,32,3)图片;
  2. discriminator将(32,32,3)图片映射到2分类得分上,得到图片为真的概率;
  3. gan网络将generator和discriminator结合起来:gan(x) = discriminator(generator(x))。gan网络将隐空间向量映射到鉴别器鉴别generator由隐空间向量生成图片为真的概率上;
  4. 使用带real/fake标签的real、fake图片对Discriminator训练;
  5. 要训练Generator,可以使用gan模型损失对Generator权重的梯度。这意味着,在每个步骤中,将生成器的权重移动到使鉴别器更可能将生成器解码的图像归类为“真实”的方向上。换句话说,你训练生成器来欺骗鉴别器。

A bag of tricks

众所周知,训练GAN和调整GAN实现的过程非常困难。你应该记住一些已知的技巧。像深度学习中的大多数事情一样:这些技巧是启发式的,而不是理论支持的指导方针。 他们得到了对手头现象的直观理解的支持,并且他们已经知道在经验上运作良好,尽管不一定在每种情况下都有效。
以下是实现GAN生成器和鉴别器时使用的一些技巧。它不是GAN相关技巧的详尽列表;你会在GAN文献中找到更多:

  • Generator使用tanh作为最后一层的激活函数,而不是sigmoid;
  • 隐空间取样时使用正态分布(高斯分布),而不是均匀分布;
  • 为了健壮性可以增加随机性。由于GAN训练导致动态平衡,GAN可能会以各种方式陷入困境。在训练期间引入随机性有助于防止这种情况。我们以两种方式引入随机性:通过在鉴别器中使用dropout并通
### 回答1: 《Python深度学习第2版》是由Francois Chollet撰写的Python编程相关的著作。本书旨在为读者提供一本全面而且深入的深度学习指南,内容包括了深度学习的基础知识、深度神经网络的架构和训练方法、计算机视觉、自然语言处理及序列学习等方面。 全书内容结构清晰,每一个部分都会给出学习目标和实践项目。此外,本书还提供了丰富的案例和实例,用户可以借此获得深刻的理解和实战经验。 另外,本书特别强调了Python作为深度学习技术的开发平台的重要性。作者详细解释了Python和TensorFlow、Keras等开源工具之间的关系,并且提供了丰富的示例代码供读者参考实践。 总的来说,除了提供大量的理论知识,本书更多的是着重于将深度学习技术应用到实际生产环境中。相信这本书能够吸引广大的编程爱好者和人工智能从业者,成为深度学习领域的一本重要参考书籍。 ### 回答2: 深度学习(Deep Learning)是一种强大的机器学习方法,已经在人工智能(AI)领域扮演了越来越重要的角色。《Deep Learning with Python 2nd Edition》是一本由 François Chollet 写作的深度学习指南,它提供了对深度学习算法的全面介绍和深入剖析。该书的第二版扩充了第一版的内容,并增加了全新的主题,如GAN和剪枝等。此外,本书还配有实用的示例,演示如何在 Python 中使用深度学习技术进行各种任务,如文本分类、图像识别和语音处理等。 此外,本书提供了一个深入的 Python 框架 Keras 的教程,该框架可以帮助开发人员更轻松地使用深度学习技术构建和训练神经网络。总之,《Deep Learning with Python 2nd Edition》是一本实用且深入的指南,有助于理解深度学习的原理并解决实际问题。 ### 回答3: 《Deep Learning with Python,第2版》是一本由深度学习领域的专家Francois Chollet撰写的优秀著作。本书详细讲解了深度学习的核心概念和应用,并提供了实用的代码和示例来帮助读者深入了解深度学习的实现。 本书主要分为三部分。第一部分介绍了深度学习和人工智能的基本要素,包括神经网络、数字图像处理、自然语言处理等领域的相关理论和应用。第二部分涵盖了深度学习的核心技术,例如卷积神经网络、循环神经网络、自动编码器等。第三部分则着重讲解了如何应用深度学习,包括图像分类、语音识别、自然语言处理等实际应用场景,并提供了相应的代码和示例,帮助读者进行实践。 《Deep Learning with Python,第2版》的优点在于,它不仅提供了深度学习的理论知识,还结合实际案例进行了深入探讨,使得读者可以更容易地理解和应用深度学习技术。此外,本书所提供的代码和示例非常实用,可以直接应用于项目实践中,非常适合深度学习初学者和相关领域的技术人员借鉴学习。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值