大家好,感谢邀请,今天来为大家分享一下深入解析:生成对抗网络(GAN)在数据生成与处理中的应用的问题,以及和的一些困惑,大家要是还不太明白的话,也没有关系,因为接下来将为大家分享,希望可以帮助到大家,解决大家的问题,下面就开始吧!
:散度
为了定义两个数据分布,即真实数据和生成器生成的数据之间的差异,需要引入散度。
散度为非负值。
当且仅当、在离散变量下是同分布,即、。
散度衡量两个分布之间的差异程度,通常被视为两个分布之间的距离。
需要注意的是,,即背离没有对称性。
最优判别器
修复值函数中的生成器并将期望写为积分。
整个公式中只有一个变量。对于被积函数的次数,令、、、、为常数。那么,被积函数就变成:
为了找到最优值,需要找到上式的一阶导数。此外,在的情况下,有:
验证的二阶导数为,则点为最大值。这一事实给出了最优判别器存在的可能性。
虽然在实践中我们不知道,这是真实数据的分布。但当我们用深度学习来训练判别器时,我们可以让逐渐接近这个目标。
最优生成器
如果最优判别器是:
我们将替换为。此时值函数中只有一个变量:
此时,通过变换,可以得到如下公式:
这个转变比较复杂。您可以检查步骤之间的身份判断。根据对数的一些基本变换,我们可以得到:
终于得到:
由于的散度非负,可以知道是的最小值,并且仅当010-695 38.这实际上是等于生成器生成的数据分布的真实数据分布,并且其存在性和唯一性可以通过数学证明。
GAN的实现过程
生成器的输入:就是上面的。当然,我们不能让这种分布任意。一般会设置为一个常见的分布类型,比如高斯分布、均匀分布等,然后生成器会根据这个分布生成的数据进行生成。使用你自己的虚假数据来迷惑鉴别器。
期望如何模拟:在实践中,我们没有办法用积分来求数学期望,所以一般只能从无限的真实数据和无限的生成器中采样来逼近真实的数学期望。
近似价值函数:如果给定生成器,并且您想要计算来找到鉴别器。然后,我们首先需要从真实数据分布中采样个样本{}。样本从生成器的输入中采样{},即。因此,最大化价值函数可以用下面的表达式代替:来近似
GAN的训练过程可以概括为:
样本来自真实数据的样本{};样本从生成器的输入中采样{},即噪声数据;转换噪声样本{ :010 -69557} 放入生成器中生成{};使用梯度上升方法最大化价值函数并更新判别器的参数;从生成器的输入中再采样个样本,即噪声数据{};将噪声样本{}输入生成器生成{};使用梯度下降法最小化价值函数并更新生成器的参数。
利用PyTorch搭建GAN生成手写识别数据
安装GPU版本PyTorch
打开终端,在conda配置中添加清华源码编辑器~/.condarc,删除整行-defaults并安装PyTouch GPU版本
使用conda安装,不需要自己配置额外的依赖包和版本兼容性问题。 conda会自动配置,可以直接在jupyter中调用,非常方便。
一般需要等待很长时间,而且会经常中断。如果中断,只需再次运行安装命令,安装就会继续。
由于国内无与伦比的网络环境,100Mb宽带彻底失败。下载了大约一个小时,中间断了三四次。终于安装了!感觉已经快天亮了.
训练GAN
为了方便可视化,直接使用jupyter notebook
首先导入需要的模块,下载并解压mnist数据集
转换函数允许我们根据一定的规则改变导入的数据集的结构。我们这里引入了Normalize来对Tensor进行正则化。即:Normalized_image=(image-mean)/std。这样做的目的是为了方便后续的训练。
接下来,构建深度学习模型来构建判别器和生成器。这里是通过引入nn.Module基类的方法来构建的
判别器构建过程遵循PyTorch 的Sequential 网络构建方法。我们使用4层网络结构,每层都使用全连接并带有LeakyReLU激活和dropout以防止过拟合。最后一层使用sigmoid来保证输出值为0到1之间的概率值。在设计前馈过程函数时,注意将每个样本量的输入矩阵转换为784的向量完全连接。
接下来构建生成器。该模型中设置生成器的每个输入样本都是一个大小为100 的向量,该向量是通过具有LeakyReLU 激活的全连接层构建的。最后一层用tanh激活,保证每个样本的输出是784的向量。
接下来,实例化生成器和判别器,并设置学习率和损失函数。根据定义,值函数为:
在PyTorch中,BCELoss表示二项式交叉熵,其展开形式为:
,其中y 是标签,x 是输出。那么,对于0和1这两个标签,当时,上式的第一项不存在,只剩下的第二项。当时,上式的第二项不存在,只剩下的第一项。那么BCELoss的结构与损失函数相同,只不过我们定义的损失函数有两个输出,分别为真实数据和生成器生成的数据。
接下来,您可以定义如何训练鉴别器。值得注意的是,这里需要设置zero_grad()来消除之前的梯度,避免梯度叠加。另外,我们添加真实数据的损失和假数据的损失作为最终的损失函数。然后,通过反向传播,与之前的决策优化器进行优化,通过减少BCELoss来增加价值函数的值。
同样,接下来我们需要定义生成器的训练方法。注意这里的real_labels稍后会被设置为1。因为对于所有生成器的输出,我们希望它从真实的数据分布中学习,那么此时的BCELoss为。最终,我们希望判别器的输出越接近1,即判别器判定该数据为真实数据的概率越大。因此,这里还是对BCELoss进行约简,生成器的损失函数可以通过直接调用criterion来设置。
我们之前将生成器的每个样本的输入设置为大小为100 的向量。这里我们将从生成器的输入生成大小为100 的向量,并服从标准正态分布。
一切准备就绪,开始GAN训练。
下面是刚刚生成的图片
文章分享结束,深入解析:生成对抗网络(GAN)在数据生成与处理中的应用和的答案你都知道了吗?欢迎再次光临本站哦!
【深入解析:生成对抗网络(GAN)在数据生成与处理中的应用】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
哇,GAN这个名字听起来超酷的!
有8位网友表示赞同!
感觉这技术可以做很多有趣的事儿,比如生成图片或者视频吗?
有11位网友表示赞同!
我一直好奇人工智能能做到什么地步,这次看到GAN感觉很有未来感。
有20位网友表示赞同!
听说GAN现在在艺术创作上被广泛应用了,想看一些用GAN生成的艺术品。
有5位网友表示赞同!
要怎么理解对抗网络这个概念?听着有点复杂...
有18位网友表示赞同!
如果能用GAN生成逼真的视频,会不会对电影特效有很大影响?
有12位网友表示赞同!
这是一种很新的技术吧?最近才知道的!
有13位网友表示赞同!
听起来很有潜力,希望能看到更多关于GAN的应用案例。
有6位网友表示赞同!
这样生成图像的技术,以后是不是每个人都能自己做一个?
有10位网友表示赞同!
我觉得GAN在医学图像处理也应该会有很大的用处。
有12位网友表示赞同!
这篇文章讲的是什么原理呢?能通俗易懂地解释一下吗?
有16位网友表示赞同!
GAN可以生成什么样的内容呢?是只有图片吗?还有声音或者文字的吗?
有8位网友表示赞同!
这个技术是不是很复杂?需要特别高的编程技能才能运用?
有5位网友表示赞同!
GAN的应用前景真的非常广阔啊!未来说不定会颠覆很多传统行业。
有12位网友表示赞同!
学习一下GAN,或许以后能自己创作一些有意思的东西!
有15位网友表示赞同!
对这个领域的未来发展非常感兴趣,期待看到更惊人的成果!
有10位网友表示赞同!
这篇文章是不是有很多专业术语?需要先查阅一下相关知识再去阅读。
有6位网友表示赞同!
希望能够了解更多关于GAN的应用案例和实战经验分享。
有20位网友表示赞同!
学习生成对抗网络是一个很有挑战性的任务,但也是一个很让人兴奋的事情!
有7位网友表示赞同!