在keras中创建自定义损失函数

嗨,我一直在尝试为dice_error_coefficient在keras中创建自定义损失函数。它有它的实现tensorboard,我尝试使用相同的功能与tensorflow keras但它一直返回NoneType当我用model.train_on_batch或model.fit其中在模型中的指标使用时,它提供正确的价值观。可以请别人帮我做什么吗?我尝试过使用ahundt编写的Keras-FCN之类的库,其中他使用了自定义损失函数,但似乎都不起作用。代码中的目标和输出分别为y_true和y_pred,如keras中的loss.py文件中所使用。


def dice_hard_coe(target, output, threshold=0.5, axis=[1,2], smooth=1e-5):

    """References

    -----------

    - `Wiki-Dice <https://en.wikipedia.org/wiki/Sørensen–Dice_coefficient>`_

    """


    output = tf.cast(output > threshold, dtype=tf.float32)

    target = tf.cast(target > threshold, dtype=tf.float32)

    inse = tf.reduce_sum(tf.multiply(output, target), axis=axis)

    l = tf.reduce_sum(output, axis=axis)

    r = tf.reduce_sum(target, axis=axis)

    hard_dice = (2. * inse + smooth) / (l + r + smooth)

    hard_dice = tf.reduce_mean(hard_dice)

    return hard_dice


一只名叫tom的猫
浏览 1842回答 2
2回答

凤凰求蛊

'def dice(y_true,y_pred):return -dice_coef(y_true,y_pred,1e-5,0.5)def dice_coef(y_true,y_pred,smooth,thresh):y_pred = K.cast(y_pred> thresh,thresh,dtype = tf.float32 )y_true = K.cast(y_true> thresh,dtype = tf.float32)y_true_f = K.flatten(y_true)y_pred_f = K.flatten(y_pred)交集= K.sum(y_true_f * y_pred_f)返回(2. *交集+平滑)/(K.sum(y_true_f)+ K.sum(y_pred_f)+平滑)Final_Model.compile(optimizer = opt,loss = dice,metrics = ['acc'])'这给了我一个错误'试图转换'x'到张量并失败。错误:不支持任何值。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python