尝试对int16图像使用骰子系数损失功能

问题描述

我正在使用Python 3.7.7。和Tensorflow 2.3.0。

当我尝试使用此丢失功能时:

def dice_coef(y_true,y_pred):
    y_true_f = K.flatten(y_true)
    y_pred_f = K.flatten(y_pred)
    intersection = K.sum(y_true_f * y_pred_f)
    return (2 * intersection + 1) // (K.sum(y_true_f) + K.sum(y_pred_f) + 1)

def dice_coef_loss(y_true,y_pred):
    return 1-dice_coef(y_true,y_pred)

使用U-Net:

model.compile(tf.keras.optimizers.Adam(lr=(1e-4) * 2),loss=dice_coef_loss,metrics=['accuracy'])

我收到此错误

TypeError                                 Traceback (most recent call last)

<ipython-input-25-91bea884e0c8> in <module>()
----> 1 results = model.fit(X_train,y_train,batch_size=4,epochs=50,validation_data=(X_valid,y_valid))

            10 frames

/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/func_graph.py in wrapper(*args,**kwargs)
    971           except Exception as e:  # pylint:disable=broad-except
    972             if hasattr(e,"ag_error_Metadata"):
--> 973               raise e.ag_error_Metadata.to_exception(e)
    974             else:
    975               raise

TypeError: in user code:

    /usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py:806 train_function  *
        return step_function(self,iterator)
    <ipython-input-19-deec0ad5082f>:8 dice_coef_loss  *
        return 1-dice_coef(y_true,y_pred)
    <ipython-input-24-8de47985e665>:4 dice_coef  *
        intersection = K.sum(y_true_f * y_pred_f)
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/math_ops.py:1141 binary_op_wrapper
        raise e
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/math_ops.py:1125 binary_op_wrapper
        return func(x,y,name=name)
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/math_ops.py:1457 _mul_dispatch
        return multiply(x,name=name)
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/util/dispatch.py:201 wrapper
        return target(*args,**kwargs)
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/math_ops.py:509 multiply
        return gen_math_ops.mul(x,name)
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/gen_math_ops.py:6176 mul
        "Mul",x=x,y=y,name=name)
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/op_def_library.py:506 _apply_op_helper
        inferred_from[input_arg.type_attr]))

    TypeError: Input 'y' of 'Mul' Op has type float32 that does not match type int16 of argument 'x'.

关于如何解决它的任何想法?

我也尝试过使用此版本:

def dice_coef(y_true,y_pred):
    y_true_f = K.flatten(y_true)
    y_pred_f = K.flatten(y_pred)
    intersection = K.sum(y_true_f * y_pred_f)
    return (2.0 * intersection + 1.0) / (K.sum(y_true_f) + K.sum(y_pred_f) + 1.0)

def dice_coef_loss(y_true,y_pred)

但是我遇到同样的错误

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)