Создание пользовательских активаций в TensorFlow2.0.0 - PullRequest
0 голосов
/ 24 февраля 2020

Я работаю над проектом на Colab. Я хочу создать настраиваемую активацию для использования в TensorFlow 2.0.0 следующим образом:

def custom_activation(x):
  return tf.math.log(x)

model = tf.keras.models.Sequential([
  ... # some layers 
  tf.keras.layers.Dense(10, activation=custom_activation),
  tf.keras.layers.Dense(1)
])

Во время обучения я вижу следующее:

Epoch 1/100
      9/Unknown - 6s 674ms/step - loss: nan - mae: nan

Почему потеря и мэй нэн? Насколько я понимаю, в TF2.0.0 включено активное выполнение. Так не значит ли это, что я мог бы оценить tf.math.log (x) без настройки сеанса? Пользовательская активация, похоже, работает для других вариантов, таких как tf.math.abs (x). Есть идеи, что я здесь делаю не так? Это из-за Colab или моего выбора активации? Любая помощь приветствуется. Заранее спасибо.

1 Ответ

2 голосов
/ 24 февраля 2020

Вы не можете просто использовать логарифм в качестве функции активации, так как он не определен для значений x <= 0.0, поэтому, если в какой-то момент слой Плотный выдает отрицательное или нулевое значение, логарифм выдаст nan, что затем распространяется на потери.

Вы можете легко проверить это как:

import tensorflow as tf
print(tf.math.log(-1.0))

, который производит:

<tf.Tensor: id=1, shape=(), dtype=float32, numpy=nan>

Так что это не проблема программирования, а математическая понимание одного.

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