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

2024-09-30 22:21:01 发布

您现在位置:Python中文网/ 问答频道 /正文

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

nonlabels = list(np.where(predictions<threshold)[1])
loss_fg_nT = 0
probs_nT = tf.gather(probs_fg,nonlabels,axis=3)
for i in range(len(nonlabels)):
    probs_temp = tf.reshape(probs_nT[:,:,:,i],[-1])
    prob_max = tf.math.reduce_max(probs_temp)
    const = tf.constant(0.000001)
    prob_max = tf.math.add(prob_max,const)
    #prob_max = tf.math.subtract(tf.constant(1.0),prob_max)
    val = K.log(prob_max)
    loss_fg_nT -= val
    loss_fg_nT = loss_fg_nT/(len(nonlabels)+0.000001)

如果我删除prob_max = tf.math.subtract(tf.constant(1.0),prob_max)行,函数运行良好,但是当我获取(1-prob_max)值的log时,它给出了nan值。我无法理解这背后的原因,因为我添加了一个名义值以避免同时使用log 0。有人能帮我纠正这个错误吗。在


Tags: 函数loglentfmathtempmaxconstant
1条回答
网友
1楼 · 发布于 2024-09-30 22:21:01

您得到了一个nan错误,因为您将K.log()作为一个负值。另外,如果K.log()为零值,则会出现inf错误。我附上一张图片来证明attach_1

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

编码快乐!在

相关问题 更多 >