TanH(x)以某种方式神奇地变大了1百万

时间:2019-01-11 21:55:27

标签: math neural-network encog

创建以下神经网络后:

nn = new BasicNetwork();
     nn.addLayer(new BasicLayer(null, true, 29));
     nn.addLayer(new BasicLayer(new ActivationReLU(), true, 1000));
     nn.addLayer(new BasicLayer(new ActivationReLU(), true, 100));
     nn.addLayer(new BasicLayer(new ActivationReLU(), true, 100));
     nn.addLayer(new BasicLayer(new ActivationTANH()  ,false, 4));

     nn.getStructure().finalizeStructure();
     nn.reset();

我遇到了一个错误,错误大10 ^ 38。这太疯狂了。 因此,我自己编写了错误函数代码,并注意到错误仍然很大。我首先检查了我的IdealOutputs,发现它们都在-1到1的范围内。尽管如此,计算出的Outputs大于1。 因此,我得出一个浮点错误。

我的结论正确吗? 下次如何避免此类愚蠢且耗时的错误?

真诚的

编辑:

nn = new BasicNetwork();
     nn.addLayer(new BasicLayer(null, true, 29));
     nn.addLayer(new BasicLayer(new ActivationSigmoid(), true, 1000));
     nn.addLayer(new BasicLayer(new ActivationSigmoid(), true, 100));
     nn.addLayer(new BasicLayer(new ActivationSigmoid(), true, 100));
     nn.addLayer(new BasicLayer(new ActivationTANH()  ,false, 4));

     nn.getStructure().finalizeStructure();
     nn.reset();

使用Sigmoid函数后,仍然会出现问题。 该如何解决?

1 个答案:

答案 0 :(得分:1)

- Write using a very smaller learning rate like 0.0001 or even smaller.
- Randomly initialize the weights.
- Initialize the biases as 1 initially.
- Try using Batch Normalization 

ReLU函数实际上不能压缩值,因为数字为正,它将获得y = x。 由于梯度增加,该值继续变得更大。