为什么tf.nn.relu和tf.nn.sigmoid在此自定义估算器中都一样工作

时间:2019-05-11 10:01:42

标签: tensorflow tensorflow-estimator activation-function sigmoid relu

这是在TensorFlow中进行自定义估算器的指南: https://www.tensorflow.org/guide/custom_estimators

隐藏层是使用tf.nn.relu制成的:

# Build the hidden layers, sized according to the 'hidden_units' param.
for units in params['hidden_units']:
    net = tf.layers.dense(net, units=units, activation=tf.nn.relu)

我使用hidden_units=[4]n_classes=2对示例进行了一些改动以学习 XOR 。当激活功能更改为tf.nn.sigmoid时,该示例照常工作。 为什么会这样?因为XOR输入只是零和一,它是否仍能给出正确的结果?

这两个函数都可使平滑的损耗曲线收敛到零线。

1 个答案:

答案 0 :(得分:1)

关于XOR问题,relu解决了一个消失的梯度,即由于反向传播而产生的误差值在深的隐藏层中消失了。

因此,Sigmoid仅在制作一个隐藏层时有效。

enter image description here

Sigmoid具有0〜1的粘胶。 通过偏微分方程,从输出层反向传播的错误值在远离输出层的地方将很小。

enter image description here

蓝线是Relu,黄线是Sigmoid。

如果Relu大于0,则具有x值。 因此,错误值可以达到第一层。