autoencoder仅提供线性输出

时间:2017-12-05 14:26:01

标签: deep-learning autoencoder accord.net

Hello Guys,

我现在正在使用Autoencoder将一些简单的2D数据减少到1D。该架构是2 - 10 - 1 - 10 - 2神经元/层。作为激活函数,我在每一层使用sigmoid而不是输出层,我使用身份。 我正在使用Accord.NET Framework来构建它。

我正在使用RBM和CD算法预训练自动编码器,我可以在其中更改初始权重,学习率,动量和权重衰减。

微调是通过反向传播完成的,我可以配置学习速度和动量。

数据是一些人工创建的形状,并在图片中标记为绿色:

data + reconstruction

自动编码器的重建是黄线。这导致了我的问题。不知何故,编码器无法创建非线性形状作为输出。 虽然我测试了很多次并且改变了数十次,但我没有得到更好的结果。也许这里有人知道如何找到问题。

谢谢!

1 个答案:

答案 0 :(得分:0)

一般来说,任何神经网络都是基于你的特征对输出的线性表示,所以网络实际上在做什么(考虑两个特征)是[w1 * x1 + w2 * x2 =输出]。

要实现非线性表示,您需要做的是使用额外的特征,这些特征是旧特征的非线性表示。例如,假设使用x1 ^ 2作为额外特征或x2 ^ 2或两者。因此,网络将给出这个全局方程[w1 * x1 + w2 * x2 + w3 * x1 ^ 2 =输出],它本质上是一个非线性方程,然后你可以有一个非线性表示。

额外的特征方程主要取决于您的数据。我在我的例子中使用了二次方程,但它并不总是正确的。参考 Your data我认为你需要使用cos(x)或sin(x)表示。