https://github.com/soumith/ganhacks

1.输入归一化

把信号归一化到-1 到1

generator的最后一层输出用Tanh

2.使用修饰过后的损失函数

在GAN的文章中,generator的损失函数是min(log 1-D) 但是在实际中会用max(log D)

  • 因为前一个式子在早期会有梯度消失的问题
  • Goodfellow et. al (2014)

在实际中的好方法:

训练生成器时翻转标签:real = fake, fake = real

3.使用球体Z

G的初始值不从均匀分布中采样,从高斯分布中采样

torch.randn(*size)   从标准正态分布(均值为0,方差为1)中抽取的一组随机数。应该是高斯分布

进行插值时,请通过大圆而不是从A点到B的直线进行插值

  • Tom White's Sampling Generative Networks ref code https://github.com/dribnet/plat has more details

4.特征标准化

为真实数据和生成数据构造不同的mini batch,即每个mini batch仅需要包含所有真实图像或所有生成的图像。
如果不使用batch norm,则使用标准化(对于每个样本,减去均值并除以标准差)。

5. 避免稀疏梯度:ReLU,MaxPool

如果梯度稀疏,GAN的稳定性会受到影响
LeakyReLU =好(在G和D中)
对于下采样,使用:平均池化,Conv2d +stride
对于上采样,使用:PixelShuffle,ConvTranspose2d + stride
PixelShuffle:https://arxiv.org/abs/1609.05158

6.使用软标签和带噪声的标签

标签平滑,即如果您有两个目标标签:Real = 1和Fake = 0,则对于每个传入样本,如果它是真实的,则将标签替换为介于0.7和1.2之间的随机数,如果它是虚假的 ,将其替换为0.0和0.3。
比如

  • Salimans et. al. 2016

使标签对discriminator产生干扰:训练鉴别器时偶尔翻转标签

7.DCGAN / Hybrid Models

如果能用就用DCGAN吧,这个能行!

如果不能使用DCGAN并且没有稳定的模型,可以使用混合模型:KL + GAN或VAE + GAN

8.使用强化学习的稳定性技巧

  • Experience Replay

    • Keep a replay buffer of past generations and occassionally show them
    • 从过去的G和D中保留检查点偶尔用这个替换几次迭代
  • 适用于深度确定性策略梯度的所有稳定性技巧

Pfau & Vinyals (2016)

9.使用ADAM优化器

optim.Adam规则

Radford et. al. 2015

使用SGD训练D,ADAM训练G

10.尽早觉察出失败

D loss为0,失败   (D太强了,以至于G没有动力去产生好的fake数据,他觉得自己太垃圾于是索性放弃了)

检查梯度的范数:如果大于100就坏掉了 (梯度也不能太大,D或G,不希望D和G性能差距太大,他们应该同时进步)

网络正常时,D的loss曲线的方差较小,并且随着时间的推移而下降或者有大的方差并且有尖峰

如果G的loss稳定上升,那么G就是在用垃圾愚弄D

11.不要通过统计来平衡损失(除非理由充分)

不要尝试去找到一个(number of G/number of D)时间表去展开训练

很困难,我们都尝试过

如果你想尝试,请基于规则,而不是直觉

举例

while lossD > A:train D
while lossG > B:train G

12.如果有标签,请使用

如果有可用的标签,请训练鉴别器以对样本进行分类:auxillary GANs

13.给输入加上随时间衰减的噪声

给D的输入加上人工噪声 Arjovsky et. al., Huszar, 2016

  • http://www.inference.vc/instance-noise-a-trick-for-stabilising-gan-training/
  • https://openreview.net/forum?id=Hk4_qw5xe

给G的每层加上高斯噪声 Zhao et. al. EBGAN

  • Improved GANs: OpenAI code also has it (commented out)

14.[不确定]训练discriminator更多(有时)

特别是有噪声的情况下

找到到底训练D和G多少次非常困难

(意思是可以训练5次D,训练1次G,但至于准确确定训练多少次D再训练G非常困难)

15.[不确定]batch discrimination

混合的结果

(不知道这一条什么意思)

16.条件GAN中的离散变量

使用embedding层

往图像中加入条件信道

控制embedding的维度较低并且上采样去匹配图像信道的大小

17.在训练和测试阶段在G中用dropout

在dropout(50%)中提供噪声

在G的几层中用

  • https://arxiv.org/pdf/1611.07004v1.pdf

Authors

  • Soumith Chintala
  • Emily Denton
  • Martin Arjovsky
  • Michael Mathieu

如何训练GAN?训练GAN的技巧和方法相关推荐

  1. GAN--提升GAN训练的技巧汇总

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 前言 GAN模型相比较于其他网络一直受困于三个问题的掣肘: 1. ...

  2. 不服就GAN:GAN网络生成 cifar10 的图片实例(keras 详细实现步骤),GAN 的训练的各种技巧总结,GAN的注意事项和大坑汇总

    GAN 的调参技巧总结 生成器的最后一层不使用 sigmoid,使用 tanh 代替 使用噪声作为生成器的输入时,生成噪声的步骤使用 正态分布 的采样来产生,而不使用均匀分布 训练 discrimin ...

  3. 提高GAN训练稳定性的9大tricks

    点击我爱计算机视觉标星,更快获取CVML新技术 作者 | Bharath Raj 译者 | ang010ela 编辑 | 一一 出品 | AI科技大本营 CV君注: 还有什么是比训练一个神经网络更玄学 ...

  4. (2018, BigGAN)用于高保真自然图像合成的大规模 GAN 训练

    Large scale gan training for high fidelity natural image synthesis 公众号:EDPJ 目录 0. 摘要 1. 简介 2. 背景 3. ...

  5. 谷歌开源 TFGAN,让训练和评估 GAN 变得更加简单

    作者:思颖 概要:训练神经网络的时候,通常需要定义一个损失函数来告诉网络它离目标还有多远. 三年前,蒙特利尔大学 Ian Goodfellow 等学者提出「生成式对抗网络」(Generative Ad ...

  6. 【GAN优化】GAN训练的几个问题

    从今天开始,我们将关注训练GAN时产生的问题,作为第一篇文章,首先从几个方面来分析一下实际训练的GAN和理论模型上的GAN不同之处以及实践中出现的问题.第一个部分将介绍最优判别器引发的梯度消失问题,第 ...

  7. 深度学习之生成对抗网络(6)GAN训练难题

    深度学习之生成对抗网络(6)GAN训练难题 1. 超参数敏感 2. 模式崩塌  尽管从理论层面分析了GAN网络能够学习到数据的真实分布,但是在工程实现中,常常出现GAN网络训练困难的问题,主要体现在G ...

  8. (六)为时装设计生成训练和运行GAN

    目录 介绍 训练GAN 在训练期间可视化生成的图像 从经过训练的GAN生成时尚图像 下一步 下载源 - 120.7 MB 介绍 DeepFashion等数据集的可用性为时尚行业开辟了新的可能性.在本系 ...

  9. 令人拍案叫绝的 Wasserstein GAN,彻底解决GAN训练不稳定问题

    [新智元导读] 本文详细解析了最近在 reddit 的 Machine Learning 版引起热烈讨论的一篇论文Wassertein GAN,该论文提出的 WGAN 相比原始 GAN 的算法实现流程 ...

  10. 阿里AAAI2018论文解读:轻量网络训练框架、GAN中文命名实体识别、英俄翻译等...

    1. 火箭发射:一种有效的轻量网络训练框架<Rocket Launching: A Universal and Efficient Framework for Training Well-per ...

最新文章

  1. 怎么定义图像的质量?如何评价图像的质量?
  2. C#使用sqlite的遇到的问题
  3. python测试开发自学教程-测试开发学习路线图
  4. C#实现局部峰值查找,功能对应Matlab中的findpeaks.m
  5. centos 6.5 搭建lnmp环境
  6. 微信公众平台入门开发教程.Net(C#)框架
  7. 正则表达式 2. 单字符或
  8. 通过最简单的button控件,深入学习SAP UI5框架代码系列之零
  9. oracle容器部署,Linux docker oracle 部署
  10. windows下python调用C/C++以及使用C扩展python python通过pythonnet调用C# dll
  11. 网站备案 ICP备案流程
  12. Mikrotik ROS软路由设置上网方式(一)
  13. 小技巧:机械键盘使用技巧
  14. nginx代理本地JBoss访问吃力的问题
  15. stm32---RS485半双工通信
  16. java按钮权限控制_aop (权限控制之功能权限)
  17. 脑芯编 | 窥脑究竟,结网造芯(三)
  18. MU-MIMO是什么
  19. 中学计算机教材,人教版初中信息技术教材梳理
  20. 写给前端初学者的Vue入门教程

热门文章

  1. javascript 中的onblur 事件
  2. 一篇文章看懂MySQL的多表连接(包含左/右/全外连接)
  3. EOS区块链浏览器:scaneos.io | EOS必备工具 |什么是区块链浏览器 | 怎么使用区块链浏览器
  4. html5绘制图形幸运大转盘,微信小程序利用canvas 绘制幸运大转盘功能
  5. 制造业ERP管理系统在企业管理中发挥什么作用?
  6. Linux脚本的制作命令
  7. Ubuntu服务器配置mysql8
  8. macd的python代码同花顺_同花顺MACD金叉买点主图指标公式
  9. openwrt设置语言的过程
  10. 网易2018校招内推笔试-彩色砖块