我正在尝试为UNET编写自己的损失函数。在此函数中,我想将y_true
和y_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
我试图解决问题,并到达此处,但仍然收到以下错误
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]。