为UNET编写特定的损失函数

问题描述 投票:0回答:1

我正在尝试为UNET编写自己的损失函数。在此函数中,我想将y_truey_pred之间的所有大于10的差异分配给10,并将所有小于1的小于1的差异分配给比较和分配张量?

def weighted_cross_entropyy(i):
    def loss(y_true, y_pred):
        diff = K.abs(y_true - y_pred)
        diff[K.less(diff, 1)] == 1
        diff[K.greater(diff, 10)] == 10
        return K.mean(K.square((y_pred - y_true)* diff), axis= -1)

    return loss
python conv-neural-network image-segmentation loss-function unity3d-unet
1个回答
0
投票

我试图解决问题,并到达此处,但仍然收到以下错误

def weighted_cross_entropyy(i):

def loss(y_true, y_pred):
    def f1():
        return K.mean(K.square(y_pred - y_true), axis= - 1)
    def f2():
        return K.mean(K.square(y_pred - y_true), axis= - 1) * 10
    def f3(w):
        return K.mean(K.square(y_pred - y_true), axis= - 1) * w


    w = K.sqrt(K.sum(K.square(y_true - y_pred), axis=-1))
    print(w)
    r = tf.case([(tf.less(w, 0), f1), (tf.greater(w, 10), f2)], default = f3(w), exclusive=True)

    return r
return loss

错误:对于“ loss_6 / conv2d_168_loss / case / cond / Switch”(运算符:“ Switch”),形状必须为0,但其输入形状为[[,128,800],[?, 128,800]。

© www.soinside.com 2019 - 2024. All rights reserved.