【发布时间】:2016-03-17 10:47:53
【问题描述】:
我用 VAE(变分自动编码器)玩了几天。它在 mnist 或 frayface 等演示数据集上运行良好。但是,当我将它应用到我自己的数据集时,它根本不起作用。
我找不到任何关于训练 VAE 潜在困难的参考资料,所以我做了一个小测试用例。
我的玩具数据集如下:
np.random.seed(1)
X = np.random.choice([0.05, 0.95], n)
而我的 VAE 结构是这样的:
X -> hidden layer 1 (50 units)
-> hidden layer 2 (50 units)
-> code layer (1 units)
-> sampling layer (1 sampling)
-> hidden layer 3 (50 units)
-> hidden layer 4 (50 units)
-> X (with Bernoulli loss + KL)
输入是一个概率,希望VAE学习后能弄清楚潜在变量其实就是X本身。
但是,我尝试了 Bernoulli 以及输出层的高斯损失,但都不起作用。
代码层被先前的 N(0,1) 卡住了,因此预测总是在 0.5 左右。
玩具脚本在这里,https://gist.github.com/colinfang/20abd925ad3140236e63。大部分代码来自https://jmetzen.github.io/2015-11-27/vae.html
【问题讨论】: