Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 带有自定义损失函数的Tensorflow nan错误_Python_Debugging_Tensorflow_Nan - Fatal编程技术网

Python 带有自定义损失函数的Tensorflow nan错误

Python 带有自定义损失函数的Tensorflow nan错误,python,debugging,tensorflow,nan,Python,Debugging,Tensorflow,Nan,我在调试tensorflow代码以查找nan值的来源时遇到一些问题。我修改了代码,以便l1 loss现在计算像素之间的颜色距离: with tf.name_scope("generator_loss"): # predict_fake => 1 # abs(targets - outputs) => 0 kl = 1.0 k1 = 0.045 k2 = 0.015 targetslab

我在调试tensorflow代码以查找nan值的来源时遇到一些问题。我修改了代码,以便l1 loss现在计算像素之间的颜色距离:

 with tf.name_scope("generator_loss"):
        # predict_fake => 1
        # abs(targets - outputs) => 0
        kl = 1.0
        k1 = 0.045
        k2 = 0.015
        targetslab = rgb_to_lab(targets)
        outputslab = rgb_to_lab(outputs)

        targets_l, targets_a, targets_b = preprocess_lab(targetslab)
        outputs_l, outputs_a, outputs_b = preprocess_lab(outputslab)
        euclidean = tf.sqrt(tf.square(targets_l-outputs_l) + tf.square(targets_a-outputs_a) + tf.square(targets_b-outputs_b))
        delta_l = tf.abs(targets_l - outputs_l)
        c1 = tf.sqrt(tf.square(targets_a) + tf.square(targets_b))
        c2 = tf.sqrt(tf.square(outputs_a) + tf.square(outputs_b))
        delta_c = tf.abs(c1 - c2)
        delta_h = tf.sqrt(tf.square(euclidean) - tf.square(delta_l) - tf.square(delta_c))
        #delta_a = tf.abs(targets_a - outputs_a)
        #delta_b = tf.abs(targets_b - outputs_b)
        sl = 1.0
        sc = 1.0 + tf.multiply(k1, c1)
        sh = 1.0 + tf.multiply(k2, c1)
        gen_loss_L1 = tf.reduce_mean(tf.sqrt(tf.square(tf.truediv(delta_l, tf.multiply(kl, sl))
                                                       + tf.truediv(delta_c, sc) + tf.truediv(delta_h, sh))))
        gen_loss_GAN = tf.reduce_mean(-tf.log(predict_fake + EPS))
        #gen_loss_L1 = tf.reduce_mean(tf.abs(targets - outputs))
        gen_loss = gen_loss_GAN * a.gan_weight + gen_loss_L1 * a.l1_weight

从l1更改为自定义损失函数后,我在输出中不断获得nan值。以前一切正常,所以我在目标/输出中肯定没有nan值。

是您在
delta\u h
中取的平方根值,非负?
gen\u loss\u L1
正在计算平方和,我假设您需要平方和。目前它计算的是
sqrt(square(…)
,与
abs(…)
@blender相同,我已经添加了
tf.abs
,仍然可以使用nan@interjay,谢谢,修复了它解决了nan问题吗?