生成对抗网络GAN
欢迎访问Blog总目录!
文章目录
1.学习链接
Generative Adversarial Networks
深度学习----GAN(生成对抗神经网络)原理解析_gan神经网络-CSDN博客
图解 生成对抗网络GAN 原理 超详解_生成对抗网络gan图解-CSDN博客
2.GAN结构
GAN包含两个模型:
- 生成模型(Generator):接收随机噪声,生成看起来真实的、与原始数据相似的实例。
- 判别模型(Discrimintor):判断Generator生成的实例是真实的还是人为伪造的。(真实实例来源于数据集,伪造实例来源于生成模型)
最终得到效果极好的生成模型,其生成的实例真假难辨。
GAN的灵感来源于 “零和博弈” (完全竞争博弈),GAN就是通过生成网络G(Generator)和判别网络D(Discriminator)不断博弈,进而使G学习到数据的分布,即达到纳什均衡。
【纳什均衡】博弈中这样的局面,对于每个参与者来说,只要其他人不改变策略,他就无法改善自己的状况。对于GAN,即生成模型 G 恢复了训练数据的分布(造出了和真实数据一模一样的样本),判别模型D判别不出来结果(乱猜),准确率为 50%(收敛)。这样双方网络利益均最大化,不再改变自己的策略(不再更新自己的权重)。
2.1.生成模型Generator
- 输入: 数据集的某些向量信息,此处使用满足常见分布(高斯分布、均值分布等)的随机向量。
- 输出: 符合像素大小的图片。
- 结构: 全连接神经网络或者反卷积网络。
2.2.判别模型Discrimintor
- 输入: 伪造图片和数据集图片
- 输出: 图片的真伪标签
- 结构: 判别器模型(全连接网络、卷积网络等)
2.3.伪代码
3.优缺点
3.1.优势
- GAN采用的是一种无监督的学习方式训练,可以被广泛用在无监督学习和半监督学习领域
- 模型只用到了反向传播,而不需要马尔科夫链
3.2.缺点
- 难以学习离散数据,如文本
4.pytorch GAN
4.1.API
生成对抗网络 - PyTorch官方教程中文版 (panchuang.net)
4.2.GAN的搭建
绘制在upper_bound和lower_bound之间的一元二次方程画
4.2.1.结果

4.2.2.代码
import torch
import torch.nn as nn
import numpy as np
import matplotlib.pyplot as plt
torch.manual_seed(1) # reproducible
np.random.seed(1)
# Hyper Parameters
BATCH_SIZE = 64
LR_G = 0.0001 # learning rate for generator
LR_D = 0.0001 # learning rate for discriminator
N_IDEAS = 5 # 噪声点个数
ART_COMPONENTS = 15 # 15个Y轴数据点
PAINT_POINTS = np.vstack([np.linspac