我正在使用Mxnet训练XOR神经网络,但损失不会下降,它们总是高于0.5。
下面是我在Mxnet 1.1.0中的代码; Python 3.6; OS X El Capitan 10.11.6
我尝试了2种失功功能……
我在其他地方找到了这个问题,所以我打算在这里发布答案。
基本上,我原始代码中的问题是多维的。
net.initialize()
实际上
net.initialize(initializer.Uniform(标度= 0.07))
显然这些初始权重太小,网络永远不会跳出来。所以修复是
net.initialize(mx.init.Uniform(1))
执行此操作后,网络可以使用 sigmoid/tanh 作为 的 激活 强> 和使用 L2Loss 作为 的 损失功能 强> 。它与之合作 sigmoid 和 SigmoidBCELoss 。但是,它仍然没有用 tanh 和 SigmoidBCELoss ,可以通过下面的第二项修复。
sigmoid/tanh
L2Loss
sigmoid
SigmoidBCELoss
tanh
SigmoidBCELoss 必须在输出层的这两个场景中使用。
2.1。 的 线性激活 强> 和 SigmoidBCELoss(from_sigmoid=False) ;
SigmoidBCELoss(from_sigmoid=False)
2.2。 的 非线性激活 强> 和 SigmoidBCELoss(from_sigmoid=True) ,其中非线性函数的输出落入(0,1)。
SigmoidBCELoss(from_sigmoid=True)
在我的原始代码中,当我使用时 SigmoidBCELoss ,我正在使用全部 sigmoid 或者全部 tanh 。所以只需要更改输出层中的激活 tanh 至 sigmoid ,网络可以融合。我还可以 tanh 在隐藏的图层中。
希望这可以帮助!