变分自动编码器(VAE)本身就是一个相当复杂的概念。不出所料,大多数帖子、评论和教程都集中在理论和架构上,但大多数也没有解决数据缩放的主题。在实验VAE时,我遇到了一个(对我来说)令人惊讶的阅读标记,即将数据缩放到VAE的方式非常重要,我无法理解它的解释是什么。
要可视化描述以下问题,请在此处访问笔记本:https://github.com/mobias17/VAE-Input-Scaling/blob/master/VAE%20Input%20Scaling.ipynb
让我们假设目标是通过VAE重建正弦波(例如声波)。当我通过模型提供标准化数据时,它只能近似值介于-1和1之间。显然,快速的答案是对数据进行标准化。尽管如此,这仍然导致了以下问题:
1) VAE只能近似取值于-1和1之间的原因是什么?(是高斯重新参数化,消失梯度吗?)
2)有没有办法克服这个界限(模型改变)?
3)扩展VAE数据的最佳实践是什么?是否应该在标准开发环境中对数据进行标准化?
发布于 2019-04-25 21:34:52
变分自动编码器可以在任何范围内近似取值。这里的问题是这个特定模型的体系结构。
这个VAE的解码器使用keras.layers.LSTM。This layer's default activation function is tanh,作为最后一层,并且tanh函数输出范围(-1,1)中的值。这就是模型不能生成超出该范围的值的原因。
然而,如果我们将激活函数改为,比方说,线性,替换
decoder_mean = LSTM(input_dim, return_sequences=True)使用
decoder_mean = LSTM(input_dim, return_sequences=True, activation=None)VAE现在可以近似数据。这是我经过100个时代的训练后得到的结果。

一般的建议是,通过缩放数据或选择更具表现力的函数,确保您尝试近似的数据位于您用来近似它的函数的范围内。
https://stackoverflow.com/questions/55269475
复制相似问题