gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 01:38:04 26 4
gpt4 key购买 nike

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

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) 值时它是赋予 nan 值。我无法理解这背后的原因,因为我添加了一个标称值以避免也采用 log 0。有人可以帮我纠正这个错误。

最佳答案

您收到 nan 错误,因为您使用 K.log() 获取负值。此外,如果您将 K.log() 设为零值,则会出现 inf 错误。我附上一张图片来证明 attach_1

附上我调试的代码,希望对大家以后手动调试有帮助 attach_2

编码愉快!

关于python - 为什么 K.log 值在 keras 中给我 nan,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58722640/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com