基于PyTorch的生成对抗网络详解
文章平均质量分 79
生成对抗网络GAN是由蒙特利尔大学Ian Goodfellow在2014年提出的机器学习架构。PyTorch是一个开源的Python机器学习库,基于Torch,用于自然语言处理等应用程序。本专栏将利用PyTorch实现生成对抗网络。
wendy_ya
控制类专业在读研究生
展开
-
基于PyTorch的生成对抗网络进阶(2)——利用PyTorch和GAN实现TripleGAN对手写数字生成和分类
在传统的GAN中,G、D双方博弈的过程使得D无法同时兼容两个角色,既判别输入的样本是来自真实数据分布还是生成器,同时预测数据的类标签。这样的做法只能关注到数据的一部分信息,即数据的来源,而无法考虑到数据的类标签信息。为了解决这个问题,在标准的GAN的基础上引入了分类器C,这样它就有了三个部分G、D和C,因为取名TripleGAN。G和C分别对图像和标签之间的条件分布进行特征描述,而D只需要专注于判别输入样本的来源真假。可以实现很好的分类效果。原创 2022-12-26 11:47:42 · 882 阅读 · 0 评论 -
基于PyTorch的生成对抗网络进阶(1)——利用PyTorch和GAN进行复杂函数拟合
在第一篇文章生成对抗网络进阶(1)——利用Keras和GAN进行简单函数拟合中,我们介绍了利用GAN进行曲线y=x2y = x^2y=x2拟合。本文将介绍一下利用GAN和PyTorch拟合函数y=sin(x)y=sin(x)y=sin(x)。目录一、GAN结构二、函数代码2.1 生成器Generator2.2 判别器Discriminator2.3 生成真实数据2.4 对数据进行训练三、结果显示四、完整代码一、GAN结构这里进行曲线拟合利用的是普通GAN的结构,即利用全连接层+激活函数,这里同样不过多原创 2021-07-08 16:01:56 · 993 阅读 · 0 评论 -
基于PyTorch的生成对抗网络实战(7)——利用Pytorch搭建SGAN(Semi-Supervised GAN)生成手写数字并分类
通过强制判别器网络输出分类标签,我们将生成对抗网络(GAN)扩展到半监督学习(Semi-Supervised)。我们在输入属于N类之一的数据集上训练生成器G和判别器D。在训练时,使用D来预测输入属于N+1类中的哪一个,其中一个额外的类被添加到G的输出中。我们表明,这种方法可以用来创建一个更有效的数据分类器,它允许生成比常规GAN更高质量的样本。论文可参考《Semi-Supervised Learning with Generative Adversarial Networks》。......原创 2022-06-25 11:28:38 · 1611 阅读 · 0 评论 -
基于PyTorch的生成对抗网络实战(6)——利用Pytorch搭建WGAN-GP生成手写数字
WGAN-GP (Wasserstein GAN using gradient penalty),即在WGAN的基础上加入gradient penalty梯度惩罚项,可参考论文:《Improved Training of Wasserstein GANs》。原创 2022-06-23 20:52:52 · 1344 阅读 · 0 评论 -
基于PyTorch的生成对抗网络实战(5)——利用Pytorch搭建WGAN生成手写数字
关于WGAN的详细介绍可以参考文章:GAN生成对抗网络入门介绍及DCGAN、WGAN等介绍。这里只介绍一下WGAN在代码方面与GAN或DCGAN的区别。在论文《Wasserstein GAN》中,作者推了一大堆公式定理,最终给出了改进的算法实现流程,而改进后相比原始GAN的算法实现流程却只改了四点:WGAN既可在DCGAN的基础上进行改进,也可在普通GAN的基础上进行改进。这里为简单起见,在普通GAN的基础上改进。而在DCGAN基础上改进的过程与其基本相似。......原创 2022-06-23 19:51:33 · 783 阅读 · 0 评论 -
基于PyTorch的生成对抗网络实战(4)——利用Pytorch搭建LSGAN生成手写数字
目录一、生成器二、判别器三、迭代训练过程四、结果演示五、完整代码LSGAN的架构与DCGAN基本类似,只是改了损失函数,将损失函数从BCEloss改为MSEloss。一、生成器生成器类与DCGAN基本相同,代码如下:class Generator(nn.Module): def __init__(self): super(Generator, self).__init__() self.init_size=img_size//4 # //表示整数除法原创 2021-10-30 14:39:56 · 1000 阅读 · 0 评论 -
基于PyTorch的生成对抗网络实战(3)——利用Pytorch搭建CGAN生成手写数字并贴上标签
目录一、生成器二、判别器三、迭代训练过程四、结果演示五、完整代码CGAN的详细描述可以参考:https://blog.csdn.net/didi_ya/article/details/115340980,下面直接进入正题。一、生成器生成器类代码:class Generator(nn.Module): def __init__(self): super(Generator, self).__init__() self.label_emb = nn.Embedd原创 2021-10-27 15:08:55 · 693 阅读 · 0 评论 -
基于PyTorch的生成对抗网络实战(2)——利用Pytorch搭建DCGAN生成手写数字
目录一、生成器二、判别器三、迭代训练过程四、结果演示五、完整代码DCGAN的详细描述可以参考:https://blog.csdn.net/didi_ya/article/details/115280757,这里直接进入正题。一、生成器生成器类代码:class Generator(nn.Module): def __init__(self): super(Generator, self).__init__() self.init_size=img_size//4原创 2021-10-26 15:47:58 · 524 阅读 · 0 评论 -
基于PyTorch的生成对抗网络实战(1)——利用Pytorch搭建GAN生成手写数字
目录一、生成器二、判别器三、迭代训练过程四、结果演示五、完整代码一、生成器生成器的目标是输入一个固定维度的随机噪声,生成手写数字图像,因此它的输入是一个长度为N=100的一维的向量,输出一个28,28,1维的图像。输入一个100维的0~1之间的高斯分布,然后通过第一层线性变换将其映射到128维,然后通过LeakyReLU激活函数,接着进行一个线性变换将其变到256维,再经过一个LeakyReLU激活函数,然后经过线性变换将其变成512维,再经过一个LeakyReLU激活函数,然后经过线性变换将其变成1原创 2021-10-12 15:56:11 · 1323 阅读 · 0 评论 -
基于PyTorch的生成对抗网络入门(5)——利用PyTorch搭建条件生成对抗网络(CGAN)超详解
目录一、案例描述二、代码详解2.1 构建真实数据集2.2 创建生成虚假数据2.3 构建判别器2.3.1 创建生成虚假标签2.3.2 判别器类2.3.3 测试判别器2.4 构建生成器2.4.1 生成器类2.4.2 测试生成器2.5 训练GAN2.6 测试生成器的生成效果一、案例描述本文介绍利用条件生成对抗网络(CGAN)进行手写数字生成。比如说,要求生成不同的,但是都代表某一个数字的图像。二、代码详解2.1 构建真实数据集加载数据集利用datasets.MNIST()函数,定义加载数据集函数:#定原创 2021-12-03 11:53:31 · 1574 阅读 · 0 评论 -
基于PyTorch的生成对抗网络入门(4)——利用PyTorch搭建深度卷积生成对抗网络(DCGAN)生成彩色图像超详解
本文介绍利用深度卷积生成对抗网络(DCGAN)进行彩色人脸图像生成。本文选取的数据集是CelebA数据集的前20000张图像。原创 2021-12-02 12:04:47 · 1263 阅读 · 0 评论 -
基于PyTorch的生成对抗网络入门(3)——利用PyTorch搭建生成对抗网络(GAN)生成彩色图像超详解
目录一、案例描述二、代码详解2.1 获取数据2.2 数据集类2.3 构建判别器2.4 构建生成器一、案例描述在上文利用GAN进行手写数字生成的基础上,本文介绍利用生成对抗网络进行彩色人脸图像生成。本文选取的数据集是CelebA数据集,其官网地址为:http://mmlab.ie.cuhk.edu.hk/projects/CelebA.html。由于该数据集巨大,有202599张图像,因此我们选择前20000张图像进行训练,这20000张图像可以从下方链接获取:https://download.csdn原创 2021-11-30 14:41:41 · 2654 阅读 · 0 评论 -
基于PyTorch的生成对抗网络入门(2)——利用PyTorch搭建基础生成对抗网络(GAN)超详解
上一篇文章:基于PyTorch的生成对抗网络(一)——利用PyTorch搭建入门生成对抗网络(GAN)超详解 中,通过利用生成对抗网络学习创建符合1010格式规律的值,了解到了GAN的基本框架和PyTorch编程的基本思路。本文将难度上一级台阶...原创 2021-11-29 11:41:32 · 2012 阅读 · 0 评论 -
基于PyTorch的生成对抗网络入门(1)——利用PyTorch搭建入门生成对抗网络(GAN)超详解
目录一、案例描述二、代码详解2.1 构建真是数据集2.2 构建判别器一、案例描述我们首先从一个简单的GAN开始实现,利用生成器学习创建符合1010格式规律的值,这个任务比生成图像更简单。通过这个基础任务,我们可以了解GAN的基本框架和PyTorch编程的基本思路。二、代码详解2.1 构建真是数据集真实数据集是一个一直返回1010格式规律的数据的函数:# 真实数据集def generate_real(): real_data=torch.FloatTensor([1,0,1,0])原创 2021-11-18 18:10:56 · 1378 阅读 · 2 评论 -
利用PyTorch搭建生成对抗网络的训练步骤
之前的几篇文章介绍了生成对抗网络的数学原理、推导过程、优缺点等等,可能对于你了解生成对抗网络有些许帮助,但是对于大部分人来说,了解生成对抗网络的具体数学推导和数学公式可能用处不大,用处都不如直接了解如何训练生成对抗网络来的直接,因此本文将介绍一下训练生成对抗网络(GAN)的训练步骤。目录1、前言2、步骤一3、步骤二4、步骤三5、训练生成对抗网络的难点6、生成对抗网络的最创新之处关于生成对抗网络的基础知识可以参考这篇文章:https://blog.csdn.net/didi_ya/article/deta原创 2021-11-20 14:37:38 · 1131 阅读 · 0 评论 -
以MNIST数据集为例,详解PyTorch搭建神经网络方法步骤(最详细)
目录一、案例描述二、数据集介绍三、构建神经网络类(class)3.1 设计神经网络层3.2 损失函数和权重更新3.3 实现forward()方法3.4 定义train()函数3.5 训练可视化一、案例描述本文以MNIST数据集为例,详解PyTorch搭建神经网络对MNIST数据集进行分类。二、数据集介绍加载数据集利用datasets.MNIST()函数,其用法如下:datasets.MNIST(root, train=True, transform=None, download=False)r原创 2021-11-21 20:03:08 · 1479 阅读 · 0 评论 -
生成对抗网络前言(1)——生成对抗网络的数学推导
1.1 数学期望在概率论和统计学中,数学期望(mean)(或均值,亦简称期望)是试验中每次可能结果的概率乘以其结果的总和,是最基本的数学特征之一。它反映随机变量平均取值的大小。1.2 KL散度KL散度:又称“相对熵”,在信息论中,用生成的概率分布Q来拟合逼近真实的概率分布P时,所产生的...原创 2020-09-01 12:12:28 · 989 阅读 · 0 评论 -
【科普】博弈论之胆小鬼博弈、囚徒困境、智猪博弈与纳什均衡
目录一、前言1.1 博弈论1.2 纳什1.3 胆小鬼博弈二、纳什均衡2.1 纳什均衡定义2.2一、前言在博弈论中,纳什均衡(Nash equilibrium),又称为非合作博弈均衡,是博弈论的一个重要术语,以约翰·纳什命名。1.1 博弈论博弈论(英语:Game Theory),又译为对策论或赛局理论,是经济学的一个分支,1944年冯·诺伊曼与奥斯卡·摩根斯特恩合著《博弈论与经济行为》,标志着现代系统博弈理论的的初步形成,因此他被称为“博弈论之父”。博弈论被认为是20世纪经济学最伟大的成果之一。目前在原创 2020-10-09 20:20:06 · 14865 阅读 · 0 评论 -
GAN生成对抗网络入门介绍及DCGAN、WGAN等介绍
一、原理部分Generative Adversarial Networks(GAN):生成对抗网络。2014年Ian J. Goodfellow等人在论文《Generative Adversarial Nets》中第一次提出GAN的概念。大牛Yann LeCun甚至评价GAN为 “adversarial training is the coolest thing since sliced bread”。1.1举例解释论文中举了一个很通俗的例子——假币与真币的例子。造假币的团伙相当于生成器,他们想原创 2020-08-21 10:48:24 · 2335 阅读 · 1 评论