TF梯度返回零的简单问题

时间:2019-06-20 06:32:00

标签: python tensorflow tensorflow2.0

在TF 2.0中,我追溯了一个错误并隔离到这个简单的问题: tf.gradient给出零梯度,应该是无穷大。

bxe = tf.keras.losses.BinaryCrossentropy(); 
a=tf.Variable(1.0) 
with tf.GradientTape() as tape: 
   loss = bxe([0.], a) 
grads = tape.gradient(loss, a) # compute gradients 
print(loss, grads) 

tf.Tensor(15.333239, shape=(), dtype=float32) 
tf.Tensor(0.0, shape=(), dtype=float32)

如您所见,损失应该是二进制互熵中的无限原因-log(1-1)。但是,我查阅了文档,发现它们在应用日志之前先裁剪了数字,这就是为什么显示15.333而不是无穷大的原因。太好了,并且可以避免训练过程中的许多麻烦,但是,渐变怎么样?它产生零! 根据我的数学,它应该是无限的,因此,至少它应该产生非常高的值,而不是零。因此,我的训练停滞了!为什么会这样呢?我什至是怎么到达这一点的?当我使用Keras高级构建的分类器模型时,为什么不会发生这种情况?

0 个答案:

没有答案