Почему и tf.nn.relu, и tf.nn.sigmoid работают одинаково в этой пользовательской оценке - PullRequest
1 голос
/ 11 мая 2019

Это руководство по созданию пользовательской оценки в 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 , с hidden_units=[4] и n_classes=2. Когда функция активации изменяется на tf.nn.sigmoid, пример работает как обычно. Почему это так? Это все еще дает правильный результат, потому что входы XOR - только нули и единицы?

Обе функции дают плавные кривые потерь, сходящиеся к нулевой линии.

1 Ответ

1 голос
/ 11 мая 2019

Что касается проблемы XOR, relu решил исчезающий градиент, что значение ошибки обратного распространения исчезает в глубоких скрытых слоях.

Итак, Sigmoid работает, если вы делаете только один скрытый слой.

enter image description here

Сигмоид имеет vlue в 0 ~ 1. Значение ошибки при обратном распространении из выходного слоя будет очень малым значением вдали от выходного уровня по уравнению в частных производных.

enter image description here

Синяя линия - Релу, а Желтая линия - Сигмоид.

Relu имеет значение x, если оно больше 0. Таким образом, значение ошибки может быть достигнуто до 1-го уровня.

...