Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.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 为什么我的损失计算作为一个度量是正确的,而不是作为张量流中的损失?_Python_Tensorflow_Keras_Loss Function - Fatal编程技术网

Python 为什么我的损失计算作为一个度量是正确的,而不是作为张量流中的损失?

Python 为什么我的损失计算作为一个度量是正确的,而不是作为张量流中的损失?,python,tensorflow,keras,loss-function,Python,Tensorflow,Keras,Loss Function,我正在训练一个3D U型网络,并试图用Tensorflow实现一个骰子损失。我创建了以下函数,它可以返回骰子分数或相应的损失(1-score) 在训练模特时,我设定了损失和分数 model.compile(optimizer=optimizer, loss=dice_coefficient(_type="loss"), metrics=dice_coefficient(_type="score"))

我正在训练一个3D U型网络,并试图用Tensorflow实现一个骰子损失。我创建了以下函数,它可以返回骰子分数或相应的损失
(1-score)

在训练模特时,我设定了损失和分数

model.compile(optimizer=optimizer,
              loss=dice_coefficient(_type="loss"),
              metrics=dice_coefficient(_type="score"))
然而,我得到了损失的
nan
和分数的数值:损失不应该是上面定义的
1-score

144/Unknown - 68s 473ms/step - loss: nan - dice_score: 0.0209

我已经实现了骰子损失函数来优化图像分割。您可以在此路径上签出代码 下面是代码片段

class Dice(Loss):
      def call(self, y_true, y_pred):
        y_pred = ops.convert_to_tensor_v2(y_pred)
        y_true = gen_math_ops.cast(y_true, y_pred.dtype)
        y_true = tf.keras.backend.clip(y_true, tf.keras.backend.epsilon(), 1-tf.keras.backend.epsilon())
        y_pred = tf.keras.backend.clip(y_pred, tf.keras.backend.epsilon(), 1-tf.keras.backend.epsilon())
        
        intersection = tf.keras.backend.sum(tf.keras.backend.abs(y_true * y_pred), axis=-1)
        numerator = (2. * intersection + 1) 
        denominator = (tf.keras.backend.sum(tf.keras.backend.square(y_true),-1) + tf.keras.backend.sum(tf.keras.backend.square(y_pred),-1) + 1)
        return 1 - (numerator/denominator)
class Dice(Loss):
      def call(self, y_true, y_pred):
        y_pred = ops.convert_to_tensor_v2(y_pred)
        y_true = gen_math_ops.cast(y_true, y_pred.dtype)
        y_true = tf.keras.backend.clip(y_true, tf.keras.backend.epsilon(), 1-tf.keras.backend.epsilon())
        y_pred = tf.keras.backend.clip(y_pred, tf.keras.backend.epsilon(), 1-tf.keras.backend.epsilon())
        
        intersection = tf.keras.backend.sum(tf.keras.backend.abs(y_true * y_pred), axis=-1)
        numerator = (2. * intersection + 1) 
        denominator = (tf.keras.backend.sum(tf.keras.backend.square(y_true),-1) + tf.keras.backend.sum(tf.keras.backend.square(y_pred),-1) + 1)
        return 1 - (numerator/denominator)