Python 为什么K.log值在keras中给我nan

Python 为什么K.log值在keras中给我nan,python,tensorflow,keras,deep-learning,conv-neural-network,Python,Tensorflow,Keras,Deep Learning,Conv Neural Network,我正在写一个自定义损失函数,我想取计算值的1-对数。我正在使用tensorflow后端编写keras,如下所示: nonlabels=list(np.where(predictions您将得到一个错误,因为您将K.log()作为负值。此外,如果将K.log()作为零值,您将得到inf error。我附上一张图片来演示这一点 我还附上了我用来调试的代码,希望这能帮助你以后手动调试 快乐编码!对K.log()的输入太小。因此,请防止prob\u max变得太小: prob_max = K.clip

我正在写一个自定义损失函数,我想取计算值的1-对数。我正在使用tensorflow后端编写keras,如下所示:


nonlabels=list(np.where(predictions您将得到一个错误,因为您将K.log()作为负值。此外,如果将K.log()作为零值,您将得到inf error。我附上一张图片来演示这一点

我还附上了我用来调试的代码,希望这能帮助你以后手动调试

快乐编码!

K.log()
的输入太小。因此,请防止
prob\u max
变得太小:

prob_max = K.clip(prob_max, 1e-36, 1e36)
val = K.log(prob_max)

<>我的实验:<代码> 1E-36很好,但是<代码> 1E-40太小。

值<代码> PROFIXMAX < <代码> K.Log/<代码>屈服NANS。您可以通过<代码>查找除块之外;还考虑使用<代码> Kε()。
而不是
0.00..1
,确保所有
reduce\u max
输出均为正,并尝试
tf.math.log
而不是
K.log
它为每个值提供
nan
。我使用了
K.epsilon()
,也使用了
tf.math.abs(probs\max)
只是为了避免负值,使用了
tf.math.log
。但我仍然面临着同样的问题。这太奇怪了!!是的,它很奇怪-太奇怪了;可能是安装问题。在去那里之前,
打印的输出是什么(K.get\u值(K.log(tf.constant(0.9)))
?如果
nan
,请告诉我,我可以为其建议步骤。最后,您从何处导入
keras.backend
?确保它与其他导入一致,并且它不是@overordgolddragon,
打印(K.get\u值(K.log(tf.constant(0.9)))
,这给了我正确的值,而不是
nan
。我将keras后端导入为
keras.backend
。我会发现的输出很有用;您可以将它粘贴到这里作为PasteBin,但即使我这样做了
tf.math.abs(probs_max)
,我得到了相同的错误。这确保了我总是有一个正值,对吗?如果我错了,请纠正我。是的,使用tf.math.abs()使值为正值,即我的“附件2”在最后一步中,becames~138023而不是NaN,请尝试使用prob_max的替代名称,就像我做的那样,我曾经遇到错误,因为我保留了prob_max的相同名称,所以我更改为prob_max_1,prob_max_2,prob_max_3,请确保prob_max的维度正确(1),范围为(0-1)prob_max的值肯定在0和1之间,因为我使用了softmax函数来获取概率。在重命名变量后,我仍然存在这个问题。你能打印出这行prob_max=tf.math.reduce_max(probs_temp)的值吗?你可以使用tf.Session()作为sess,然后打印(prob_max,feed_dict={probs_temp:probs_temp}),请小心检查是否没有其他名为prob_max的变量,它可能会打印最后一个名为prob_max的变量