关键词:
概述
GAN (Generative Adversarial Network) 即生成对抗网络. GAN 网络包括一个生成器 (Generator) 和一个判别器 (Discriminator). GAN 可以自动提取特征, 并判断和优化.
GAN 网络结构
生成器 (Generator) 输入一个向量, 输出手写数字大小的像素图像.
判别器 (Discriminator) 输入图片, 判断图片是来自数据集还是来自生成器的, 输出标签 (Real / Fake)
GAN 训练流程
第一阶段:
- 固定判别器, 训练生成器: 使得生成器的技能不断提升, 骗过判别器
第二阶段:
- 固定生成器, 训练判别器: 使得判别器的技能不断提升, 生成器无法骗过判别器
然后:
- 循环第一阶段和第二阶段, 使得生成器和判别器都越来越强
模型详解
生成器
class Generator(nn.Module):
"""生成器"""
def __init__(self, latent_dim, img_shape):
super(Generator, self).__init__()
def block(in_feat, out_feat, normalize=True):
"""
block
:param in_feat: 输入的特征维度
:param out_feat: 输出的特征维度
:param normalize: 归一化
:return: block
"""
layers = [nn.Linear(in_feat, out_feat)]
# 归一化
if normalize:
layers.append(nn.BatchNorm1d(out_feat, 0.8))
# 激活
layers.append(nn.LeakyReLU(0.2, inplace=True))
return layers
self.model = nn.Sequential(
# [b, 100] => [b, 128]
*block(latent_dim, 128, normalize=False),
# [b, 128] => [b, 256]
*block(128, 256),
# [b, 256] => [b, 512]
*block(256, 512),
# [b, 512] => [b, 1024]
*block(512, 1024),
# [b, 1024] => [b, 28 * 28 * 1] => [b, 784]
nn.Linear(1024, int(np.prod(img_shape))),
# 激活
nn.Tanh()
)
def forward(self, z, img_shape):
# [b, 100] => [b, 784]
img = self.model(z)
# [b, 784] => [b, 1, 28, 28]
img = img.view(img.size(0), *img_shape)
# 返回生成的图片
return img
网络结构:
----------------------------------------------------------------
Layer (type) Output Shape Param #
================================================================
Linear-1 [-1, 128] 12,928
LeakyReLU-2 [-1, 128] 0
Linear-3 [-1, 256] 33,024
BatchNorm1d-4 [-1, 256] 512
LeakyReLU-5 [-1, 256] 0
Linear-6 [-1, 512] 131,584
BatchNorm1d-7 [-1, 512] 1,024
LeakyReLU-8 [-1, 512] 0
Linear-9 [-1, 1024] 525,312
BatchNorm1d-10 [-1, 1024] 2,048
LeakyReLU-11 [-1, 1024] 0
Linear-12 [-1, 784] 803,600
Tanh-13 [-1, 784] 0
================================================================
Total params: 1,510,032
Trainable params: 1,510,032
Non-trainable params: 0
----------------------------------------------------------------
Input size (MB): 0.00
Forward/backward pass size (MB): 0.05
Params size (MB): 5.76
Estimated Total Size (MB): 5.82
----------------------------------------------------------------
判别器
class Discriminator(nn.Module):
"""判断器"""
def __init__(self, img_shape):
super(Discriminator, self).__init__()
self.model = nn.Sequential(
# 就是个线性回归
nn.Linear(int(np.prod(img_shape)), 512),
nn.LeakyReLU(0.2, inplace=True),
nn.Linear(512, 256),
nn.LeakyReLU(0.2, inplace=True),
nn.Linear(256, 1),
nn.Sigmoid(),
)
def forward(self, img):
# 压平
img_flat = img.view(img.size(0), -1)
validity = self.model(img_flat)
return validity
网络结构:
----------------------------------------------------------------
Layer (type) Output Shape Param #
================================================================
Linear-1 [-1, 512] 401,920
LeakyReLU-2 [-1, 512] 0
Linear-3 [-1, 256] 131,328
LeakyReLU-4 [-1, 256] 0
Linear-5 [-1, 1] 257
Sigmoid-6 [-1, 1] 0
================================================================
Total params: 533,505
Trainable params: 533,505
Non-trainable params: 0
----------------------------------------------------------------
Input size (MB): 0.00
Forward/backward pass size (MB): 0.01
Params size (MB): 2.04
Estimated Total Size (MB): 2.05
gan-生成对抗网络-生成手写数字(基于pytorch)(代码片段)
...erativeAdversarialNetwork),网络也如他的名字一样,有生成,有对抗,两个网络相互博弈。我们给两个网络起个名字,第一个网络用来生成数据命名为生成器(generator),另一个网络用来鉴别生成器生成... 查看详情
深度学习100例-生成对抗网络(gan)手写数字生成|第18天(代码片段)
...章目录一、前期工作1.设置GPU2.定义训练参数二、什么是生成对抗网络1.简单介绍2.应用领域三、网络结构四、构建生成器五、构建鉴别器六、训练模型1.保存样例图片2.训练模型七、生成动图本文将采用GAN模型实现手写数字的 查看详情
深度学习100例-生成对抗网络(gan)手写数字生成|第18天(代码片段)
...章目录一、前期工作1.设置GPU2.定义训练参数二、什么是生成对抗网络1.简单介绍2.应用领域三、网络结构四、构建生成器五、构建鉴别器六、训练模型1.保存样例图片2.训练模型七、生成动图本文将采用GAN模型实现手写数字的 查看详情
对抗生成网络gan系列——gan原理及手写数字生成小案例(代码片段)
🍊作者简介:秃头小苏,致力于用最通俗的语言描述问题🍊往期回顾:目标检测系列——开山之作RCNN原理详解 目标检测系列——FastR-CNN原理详解 目标检测系列——FasterR-CNN原理详解🍊近期目标&... 查看详情
万物皆可gan给马儿换皮肤(代码片段)
【万物皆可GAN】给马儿换皮肤概述真假斑马实现流程代码执行流程执行结果概述CycleGAN(CycleGenerativeAdversarialNetwork)即循环对抗生成网络.CycleGAN可以帮助我们实现图像的互相转换.真假斑马我们先来看一组图片,大家来猜一猜图上的动... 查看详情
对抗生成网络gan系列——ganomaly原理及源码解析
...力于用最通俗的语言描述问题🍊往期回顾:对抗生成网络GAN系列——GAN原理及手写数字生成小案例 对抗生成网络GAN系列——DCGAN简介及人脸图像生成案例 对抗生成网络GAN系列——AnoGAN原理及缺陷检测实战 对... 查看详情
万物皆可gancyclegan原理详解
【万物皆可GAN】CycleGAN原理详解概述CycleGAN可以做什么图片转换图片修复换脸CycleGAN网络结构CycleGAN损失函数概述CycleGAN(CycleGenerativeAdversarialNetwork)即循环对抗生成网络.CycleGAN可以帮助我们实现图像的互相转换.CycleGAN不需要数据配对... 查看详情
gan生成对抗网络----手写数据实现(代码片段)
目录GAN------``以假乱真``训练流程环境数据集完整代码结果展示GAN------以假乱真GAN的基本理念其实非常简单,其核心由两个目标互相冲突的神经网络组成,这两个网络会以越来越复杂的方法来“蒙骗”对方。这... 查看详情
gan生成对抗网络----手写数据实现(代码片段)
目录GAN------``以假乱真``训练流程环境数据集完整代码结果展示GAN------以假乱真GAN的基本理念其实非常简单,其核心由两个目标互相冲突的神经网络组成,这两个网络会以越来越复杂的方法来“蒙骗”对方。这... 查看详情
[pytorch系列-61]:生成对抗网络gan-基本原理-自动生成手写数字案例分析(代码片段)
....4自定义数据集标签第4章定义网络4.1定义网络参数4.2定义生成网络4.3定义判决网络第5章模型训练5.1定义训练参数5.2 定义loss5.3训练网络第6章模型预测与评估6.1显示g网络loss6.2显示D网络loss第1章基本原理https://blog.csdn.net/HiWangWenBing... 查看详情
美团云tensorflow生成对抗网络(generativeadversarialnetworks)实战案例(代码片段)
生成对抗网络GAN概述GAN的前世今生GAN的基本原理GAN的代码实现在DLS运行的注意事项数据文件的读取数据文件的写入GAN示例代码概述本文主要介绍GAN的基本知识,以及在DLS上运行的注意事项。本模块继续通过经典的MNIST数据集... 查看详情
手把手写深度学习:用gans生成手写数字(代码片段)
...。这一讲从DCGAN的原理出发,一步步深入,用DCGAN生成手写数字。目录GANs基本原理算法流程DCGANs的改进模型结构反卷积模型参数训练过程开始训练!训练代码loss不收敛?正常现象 结果生成参考:GANs基本原理GA... 查看详情
手把手写深度学习:用gans生成手写数字(代码片段)
...。这一讲从DCGAN的原理出发,一步步深入,用DCGAN生成手写数字。目录GANs基本原理算法流程DCGANs的改进模型结构反卷积模型参数训练过程开始训练!训练代码loss不收敛?正常现象 结果生成参考:GANs基本原理GA... 查看详情
keras深度学习实战(22)——生成对抗网络详解与实现(代码片段)
Keras深度学习实战(22)——生成对抗网络详解与实现0.前言1.生成对抗网络原理2.模型分析3.利用生成对抗网络生成手写数字图像小结系列链接0.前言生成对抗网络(GenerativeAdversarialNetworks,GAN)使用神经网络生成与原始图像集非常相... 查看详情
对抗生成网络gan系列——cyclegan简介及图片春冬变换案例(代码片段)
...力于用最通俗的语言描述问题🍊往期回顾:对抗生成网络GAN系列——GAN原理及手写数字生成小案例 对抗生成网络GAN系列——DCGAN简介及人脸图像生成案例🍊近期目标:写好专栏的每一篇文章🍊支持小苏... 查看详情
keras深度学习实战(22)——生成对抗网络详解与实现(代码片段)
Keras深度学习实战(22)——生成对抗网络详解与实现0.前言1.生成对抗网络原理2.模型分析3.利用生成对抗网络生成手写数字图像小结系列链接0.前言生成对抗网络(GenerativeAdversarialNetworks,GAN)使用神经网络生成与原始图像集... 查看详情
生成对抗网络gan
详解一:GAN完整理论推导和实现详解二:详解生成对抗网络(GAN)原理 查看详情
深度卷积生成对抗网络dcgan——生成手写数字图片(代码片段)
前言本文使用深度卷积生成对抗网络(DCGAN)生成手写数字图片,代码使用KerasAPI与tf.GradientTape编写的,其中tf.GradientTrape是训练模型时用到的。 本文用到imageio库来生成gif图片,如果没有安装的,需要安装... 查看详情