为UNET编写特定损失函数

2024-09-30 08:28:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试为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

Tags: 方法函数trueunetreturndefdiffabs
1条回答
网友
1楼 · 发布于 2024-09-30 08:28:08

我试图解决这个问题,并达到这里,但我仍然收到下面的错误

def加权交叉熵(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

错误: 对于输入形状为[?,128800],[?,128800]的“loss_6/conv2d_168_loss/case/cond/Switch”(op:“Switch”)的形状,其等级必须为0,但为3

相关问题 更多 >

    热门问题