这时不再是每次产生一个隐含向量,而是生成两个向量,一个表示均值,一个表示标准差,然后经由过程这两个统计量来合成隐含向量,这也异常简单,用一个标准正态分布先乘上标准差再加上均值就行了,这里我们默认编码之后的隐含向量是服年腋荷琐正态分布的。这个时刻我们是想让均值尽可能接近0,标准差尽可能接近1。而论文琅绫擎有具体的推导若何获得这个loss的计算公式,有兴趣的同窗可以去看看具体推到过程:
https://arxiv.org/pdf/1606.05908.pdf
下面是PyTorch的实现:
- reconstruction_function = nn.BCELoss(size_average=False) # mse loss
- def loss_function(recon_x, x, mu, logvar):
- """
- recon_x: generating images
- x: origin images
- mu: latent mean
- logvar: latent log variance
- """
- BCE = reconstruction_function(recon_x, x)
- # loss = 0.5 * sum(1 + log(sigma^2) - mu^2 - sigma^2)
- KLD_element = mu.pow(2).add_(logvar.exp()).mul_(-1).add_(1).add_(logvar)
- KLD = torch.sum(KLD_element).mul_(-0.5)
- # KL divergence
- return BCE + KLD
在实际情况中,我们须要在模型的精确率上与隐含向量服大年夜标准正态分布之间做一个衡量,所谓模型的精确率就是指解码器生成的图片与原图片的类似程度。我们可以让收集本身来做这个决定,异常简单,我们只须要将这两者都做一个loss,然后在将他们乞降作为总的loss,如许收集就可以或许本身选择若何才能够使得这个总的loss降低。别的我们要衡量两种分布的类似程度,若何看过之前一片GAN的数学推导,你就知道会有一个器械叫KL divergence来衡量两种分布的类似程度,这里我们就是用KL divergence来表示隐含向量与标准正态分布之间差别的loss,别的一个loss仍然应用生成图片与原图片的均方误差来表示。
别的变分编码器除了可以让我们随机生成隐含变量,还可以或许进步收集的泛化才能。
最后是VAE的代码实现:
VAE的结不雅比通俗的主动编码器要好很多,下面是结不雅:
![]()
VAE的缺点也很明显,他是直接计算生成图片和原始图片的均方误差而不是像GAN那样去对抗来进修,这就使得生成的图片会有点模糊。如今已经有一些工作是将VAE和GAN结合起来,应用VAE的构造,然则应用对抗收集来进行练习,具体可以参考一下这篇论文:
https://arxiv.org/pdf/1512.09300.pdf
文中相干代码链接:
http://t.cn/RK5gxpM
英文参考:
http://t.cn/RtoJRAa
本文转自雷锋网,如需转载请至雷锋网官网申请授权
【编辑推荐】
【义务编辑:张子龙 TEL:(010)68476606】
- 谷歌工程师Venky Ganti分享:大年夜数据的挑衅超出3V
- 最新APT组织Gaza Cybergang揭秘
- 「Entrepreneurs Organization」签约EventBank捷会易
- 应用Ganglia对Linux网格和集群办事器进行及时`控
- 一文帮你发明各类出色的GAN变体
这件工作能不克不及实现呢?其实是可以的,下面我们会用PyTorch来简单的实现一个主动编码器。
回想一下我们在主动编码器中所做的事,我们须要输入一张图片,然后将一张图片编码之后获得一个隐含向量,这比我们随机取一个随机噪声更好,因为这包含着原图片的信息,然后我们隐含向量解码获得与原图片对应的┞氛片。
推荐阅读
* 查看表中插入的数据值 1. 背景* MySQL支撑SQL标准整数类型整数(或INT)和SMALLINT。作为标准的扩大,MySQL还支撑整数类型TINYINT、MEDIUMINT和BIGINT2. 整数类型所需的存储和值范围 >>>详细阅读
本文标题:深度学习自动编码器还能用于数据生成?这篇文章告诉你答案
地址:http://www.17bianji.com/lsqh/36114.html
1/2 1


网友点评
精彩导读
科技快报
品牌展示