Почему TensorFlow использует `None` в качестве активации по умолчанию? - PullRequest
0 голосов
/ 24 мая 2018

В API-интерфейсе TensorFlow Python значение по умолчанию для activation kwarg tf.layers.dense равно None, затем в документации говорится:

активация: используется функция активации.Если вы ничего не указали, активация не применяется (т. Е. «Линейная» активация: a (x) = x).

Почему бы просто не использовать функцию идентификации в качестве значения по умолчанию при определениифункционировать?например:

def dense(..., activation=lambda x: x, ...):
    pass

Таким образом, вам не нужно беспокоиться о несоответствии между документацией и кодом.

Является ли это (используя None для представления функции по умолчанию) простостиль кодирования, или есть какое-то предостережение относительно использования функции в качестве значения по умолчанию для аргумента kw?

Здесь не избежать ненужных вызовов функций, поскольку функция идентификации все еще создается и вызывается, даже если None передаетсядо activation.Кроме того, поскольку это происходит во время построения графа, нет смысла проводить такую ​​оптимизацию - предполагая, что это действительно оптимизация.

Исправление:

Как указывает @ y-luo,реализация tf фактически не создает функцию идентификации.Но реализация tf.keras делает.

1 Ответ

0 голосов
/ 24 мая 2018

Я не думаю, что на самом деле есть функция идентичности или какие-либо функции.Для примера :

class Dense(base.Layer):

  ...

  def call(self, inputs):
    ...
    if self.activation is not None:
      return self.activation(outputs)  # pylint: disable=not-callable
    return outputs

Как видите, активация None действительно правильная, поскольку она служит условием, а не реальной функцией.Это просто эквивалентно «линейной» активации: a(x) = x

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...