1

当我在输出层使用 sigmoid 时,我对一个现象感到困惑,网络工作正常。但是如果我将输出的激活设置为 Relu,网络不会收敛。在第一个 epoch 之后,训练损失不会减少。任何人都可以解释这种现象。

网络的输入是图像。像素被重新缩放为 0-1。输出是一个从 0-1 变化的值。

谢谢。

4

2 回答 2

0

我有一个类似的问题,现在已经解决了。神经网络只有 3 层来训练 MNIST 数据。Sigmoid 激活有效,但 relu 没有,其他一切都一样。我将学习率从 3 降低到 0.1,然后 Relu 工作了。我从这里得到了想法:NN 与 Relu 不收敛

于 2020-09-28T17:06:00.273 回答
0

根据我从您上面的问题中了解到的是,当您ReLu将模型用作最终激活时,模型不会收敛:

如果是这种情况,那么答案就在ReLu函数本身中,它的ReLu作用是它不会在之间缩放网络输出,[0,1]而是返回max(0, x)您不想要的,因为您output/ground truth在 [0, 1] 之间缩放并且sigmoid确实缩放了网络输出两者之间[0, 1]是根据你的真实情况。

为了更好地理解,请考虑网络的最后一层返回概率[0, 1]是通过使用实现的,但由于函数定义sigmoid而无法实现。ReLu

因此,要计算损失,您ground-truth和您的损失network output应该在 sigmoid 实现的相同范围内,因此模型sigmoid在您的情况下会收敛。

于 2020-01-07T04:11:59.383 回答