我正在研究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还是我选择激活?任何帮助表示赞赏。预先感谢。
答案 0 :(得分:2)
您不能真正将对数用作激活函数,因为它没有为值x <= 0.0
定义,因此,如果Dense层在任何时候产生负值或零值,对数将产生{{1 }},然后传播到损失中。
您可以轻松地对此进行测试:
nan
哪个会产生:
import tensorflow as tf
print(tf.math.log(-1.0))
所以这不是编程问题,而是数学上的理解。