tf.nn.relu против tf.contrib.layers.relu?

Я вижу это "tf.nn.relu", задокументированное здесь: https://www.tensorflow.org/api_docs/python/tf/nn/relu

Но тогда я также вижу использование tf.contrib.layers.relu на этой странице в "model_fn": https://www.tensorflow.org/extend/estimators

Похоже, что последний не описан как первый в стиле API, а только представлен в использовании.

Почему это? Документы устарели? Почему два - один старый и больше не поддерживается / будет удален?

2 ответа

Решение

Они не одно и то же.

Последнее является не функцией активации, а fully_connected слой, для которого задана функция активации nn.relu:

relu = functools.partial(fully_connected, activation_fn=nn.relu)
# ^                                                     |<   >|
# |_ tf.contrib.layers.relu                     tf.nn.relu_|

Если вы читаете документы для contrib.layers, ты найдешь:

Псевдонимы для fully_connected которые устанавливают функцию активации по умолчанию, доступны: relu, relu6 а также linear,

Суммарно, tf.contrib.layers.relu это псевдоним для fully_connected слой с активацией Relu в то время как tf.nn.relu сама функция активации REctified Linear Unit.

Во время саммита TensorFlow Dev 2017tf.contrib Раздел проекта TensorFlow был описан как полигон для тестирования функций более высокого уровня. Эти функции предназначены для использования и тестирования сообществом. Тем не менее, нет гарантии, что при переносе функций в tf.core интерфейс не будет изменен. Между версиями Tensorflow r0.12 и r1.0 многие из tf.contrib.layer функции были перенесены в tf.layers (который не существовал до r1.0). Короче говоря, документация по tf.contrib никогда не будет так хороша, как tf.core.

Другие вопросы по тегам