解释得能够接受的程度的学习网址:https://blog.csdn.net/xxzhangx/article/details/54563574
复现的源代码网址:https://jmetzen.github.io/2015-11-27/vae.html从学习的网址里(上面)找到的基于tensorflow实现的。
readme:
1.需要将https://raw.githubusercontent.com/tensorflow/tensorflow/master/tensorflow/examples/tutorials/mnist/input_data.py中的代码复制生成input_data.py文件,import input_data语句才会生效。(代码里面有说明)
input_data.py:Functions for downloading and reading MNIST data
2.在运行过程中下载 MNIST data可能会出现问题(大概是校园网的毛病,也可能是电脑,勇敢坚强微笑),可以直接手动在代码目录下建立“MNIST_data”文件夹,MNIST data下载网址:http://yann.lecun.com/exdb/mnist/,下载后的文件放在“MNIST_data”文件夹下。
3.当前版本中tensorflow中的mul被multiply取代,在代码中将tf.mul改为tf.multiply即可防止报错。
使用tensorflow实现变分自编码器
(下面是直接有道翻译原文的英文------方面以后直接看= = )
这篇文章的主要动机是我想要获得更多的经验与变分自动编码器(VAEs)和tensorflow。因此,在后者中实现前者听起来像是同时学习两者的好主意。这篇文章总结了结果。
注:2015年12月7日更新:
修正了latent_loss计算中的一个错误(删除了一个错误因子2)。感谢Colin Fang指出这一点。
在发电机网络中使用伯努利分布而不是高斯分布
注:帖子更新于2017年1月3日:
支持TensorFlow v0.12和Python 3所需的更改,让我们首先做必要的导入,加载数据(MNIST),并定义一些助手函数。
in【1】in【2】in【3】;见https://jmetzen.github.io/2015-11-27/vae.html以下省略说明,代码注释工作有时间再做
在此基础上,我们现在定义了一个类“variationalautocoder”,它具有一个类似sklearn的接口,可以使用partial_fit以增量方式对其进行培训。训练后的模型可用于重构未知输入,生成新样本,并将输入映射到潜在空间。
in【4】; 记得 将tf.mul改为tf.multiply
一般来说,在tensorflow中实现VAE是相对简单的(特别是因为我们不需要编写梯度计算代码)。有点令人困惑的是,所有的逻辑都发生在类的初始化(生成图形的地方),而实际的sklearn接口方法是非常简单的一行程序。
我们现在可以定义一个简单的功能,训练VAE使用小批量:
in【5】;
说明重建质量
现在,只需指定网络拓扑,就可以在MNIST上训练VAE。我们从训练一个具有20维潜在空间的VAE开始。
in【6】;##破电脑好坚强 ,cpu,勇敢坚强微笑
在此基础上,我们可以对一些测试输入进行采样,并可视化VAE如何重建这些输入。总的来说,VAE做得很好。
in【7】;
说明潜在的空间
接下来,我们用二维潜空间训练一个VAE,并说明编码器(识别网络)如何编码一些标记输入(将潜空间中的高斯分布折叠到其平均值)。这让我们对学习过的流形(潜空间)的结构有了一些了解。
in【8】in【9】;
了解潜在空间的另一种方法是使用生成器网络在潜在空间中的位置绘制重构图,生成这些重构图的位置是:
in【10】;
总结
总之,tensorflow非常适合快速实现机器学习模型的原型,比如VAE。生成的代码也可以很容易地在GPU上执行(只需要安装GPU支持的tensorflow)。VAE允许以端到端方式学习数据的概率编码器和解码器。
——————————
vae论文:https://arxiv.org/abs/1312.6114
https://arxiv.org/abs/1606.05908
Tensorflow | MNIST手写字识别:https://blog.csdn.net/xxzhangx/article/details/54563574参考这些函数调,对小白很友好。