PaddlePaddle百度论文复现营——GAN入门学习笔记
1 GAN 概述
什么是生成对抗网络?由谁提出?为什么要学习GAN?
1.1 GAN是什么?
GAN是“Generative Adversarial Networks”三个单词的首字母缩写,表示通过对抗的方式去学习数据分布的生成式模型。GAN的核心思想是通过生成网络G(Generator)和判别网络D(Discriminator)不断博弈,来达到生成类真数据的目的。
补充理解:
1.2 GAN作者
GAN最早是由Ian J. Goodfellow, Jean Pouget-Abadie, Mehdi Mirza, Bing Xu, David Warde-Farley, Sherjil Ozair, Aaron Courville, Yoshua Bengio等人于2014提出,其源码可通过GitHub获取,地址是https://github.com/goodfeli/adversarial
1.3 学习GAN的原因
2 原理与改进
GAN的基本原理,GAN的训练方法,GAN的现有问题,GAN的改进方法
2.1 GAN的发展脉络
2.2 GAN的原理
Tip: G生成的是假数据,D用于区分G生成的假数据&输入的真数据。
- 补充理解:
- 纳什均衡(Nash equilibrium)
- 最大似然估计(maximum likelihood estimation, MLE)
Tip: 如对此概念仍有困惑,可参考https://zhuanlan.zhihu.com/p/26614750
2.3 GAN的目标函数
2.4 GAN的训练方法
考虑到G,D互相依赖,在训练时通常采取“锁定一个,训练另一个”的策略。通常先锁定G,更新D,待D网络训练一定轮次之后再锁定D,更新G。
2.5 GAN的训练细节
2.6 GAN的训练可视化
- 虚线点为真实的数据分布,蓝色虚线是判别器,绿色实现为生成器
- 由左至右可看到生成的分布越来越接近真实分布,而判别器的概率最后变为0.5
2.7 GAN的优点
2.8 GAN存在的问题
2.9 GAN常见的模型结构
2.10 模式坍塌的解决方案
2.11 Wasserstein GAN(WGAN)
2.12 WGAN解决的问题
2.13 Wasserstein距离
3 应用场景
图像风格迁移,超分辨率图像生成,序列生成,文本风格迁移等场景
3.1 GAN的应用场景
3.2 超分辨率图像生成
3.3 图像转换
3.4 图像风格迁移
3.5 风格迁移面部生成器
3.6 鉴别图像真伪
3.7 序列生成
3.8 文本风格迁移
4 课程实践
手写数字生成案例
Step 1 数据准备
import paddle
import paddle.fluid as fluid
from paddle.fluid.dygraph import Conv2D, Pool2D, Linear
import numpy as np
import matplotlib.pyplot as plt
# 噪声维度
Z_DIM = 100 # 此处将要喂入生成器高斯分布的噪声隐变量z的维度设置为100。
BATCH_SIZE = 128
# 读取真实图片的数据集,这里去除了数据集中的label数据,因为label在这里使用不上,这里不考虑标签分类问题。
def mnist_reader(reader):
def r():
for img, label in reader():
yield img.reshape(1, 28, 28)
return r
# 噪声生成,通过由噪声来生成假的图片数据输入。
def z_reader():
while True:
yield np.random.normal(0.0, 1.0, (Z_DIM, 1, 1)).astype('float32') #正态分布,正态分布的均值、标准差、参数
# 生成真实图片reader
mnist_generator = paddle.batch(paddle.reader.shuffle(mnist_reader(paddle.dataset.mnist.train()), 30000), batch_size=BATCH_SIZE)
# 生成假图片的reader