在TensorFlow2.0.0中创建自定义激活

时间:2020-02-24 12:36:21

标签: python tensorflow keras tensorflow2.0

我正在研究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已启用了急切执行功能。因此,这是否意味着无需设置Session就可以评估tf.math.log(x)?自定义激活似乎适用于其他变体,例如tf.math.abs(x)。知道我在做什么错吗?是因为Colab还是我选择激活?任何帮助表示赞赏。预先感谢。

1 个答案:

答案 0 :(得分:2)

您不能真正将对数用作激活函数,因为它没有为值x <= 0.0定义,因此,如果Dense层在任何时候产生负值或零值,对数将产生{{1 }},然后传播到损失中。

您可以轻松地对此进行测试:

nan

哪个会产生:

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

所以这不是编程问题,而是数学上的理解。