【问题标题】:writing specific loss function for UNET为 UNET 编写特定的损失函数
【发布时间】:2020-03-16 05:58:04
【问题描述】:

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

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

    def weighted_cross_entropy(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
    

    错误: 形状必须为 0 级,但对于输入形状为 [?,128,800]、[?,128,800] 的“loss_6/conv2d_168_loss/case/cond/Switch”(操作:“Switch”)为 3 级。

    【讨论】:

      猜你喜欢
      • 2020-09-04
      • 2021-07-23
      • 1970-01-01
      • 2018-05-05
      • 2021-03-22
      • 2021-09-21
      • 1970-01-01
      • 1970-01-01
      • 2019-06-17
      相关资源
      最近更新 更多