首页 > 解决方案 > 为什么 tf.nn.relu 和 tf.nn.sigmoid 在这个自定义估计器中的工作方式相同

问题描述

这是在 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)

我稍微改变了这个例子来学习XOR, withhidden_units=[4]n_classes=2。当激活函数更改为tf.nn.sigmoid时,示例照常工作。为什么会这样?它是否仍然给出正确的结果,因为 XOR 输入只是零和一?

这两个函数都给出了平滑的损失曲线收敛到零线。

标签: tensorflowtensorflow-estimatoractivation-functionsigmoidrelu

解决方案


关于异或问题,relu解决了一个消失梯度,即反向传播导致的误差值在深层隐藏层中消失。

所以,Sigmoid如果你只制作一个隐藏层,就可以了。

在此处输入图像描述

Sigmoid 在 0~1 中有一个值。通过偏微分方程,来自输出层的反向传播的误差值在远离输出层的地方将是非常小的值。

在此处输入图像描述

蓝线是 Relu,黄线是 Sigmoid。

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


推荐阅读