为什么我的VAE for toy dateset不能学习?

时间:2015-12-11 13:43:51

标签: neural-network tensorflow

我用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

2 个答案:

答案 0 :(得分:0)

VAE中发生的一个非常常见的问题是“后塌陷”(参见此处:https://datascience.stackexchange.com/questions/48962/what-is-posterior-collapse-phenomenon)。

如果确实如此,我建议在这里查看解决方案: https://www.quora.com/How-do-you-fix-a-Variational-Autoencoder-VAE-that-suffers-from-mode-collapse

对我来说很好。

答案 1 :(得分:0)

我建议您使用适用于中等大小的数据集(无模式崩溃等)的VAE,并更新/适应您热衷的数据集类型。我将VAE for new fruits应用于我收集的1000个元素的家具(躺椅)数据集,并取得了一定的成功(模仿了形状和纹理,但还没有真正引人注目的模仿)。