【问题标题】:Custom Loss with mask matrix in KerasKeras中带有掩码矩阵的自定义损失
【发布时间】:2020-03-13 04:24:47
【问题描述】:

我正在尝试在 Keras 中使用我自己的损失函数。 特别是,作为 y_pred 预测向量和 y_true 真实向量,我想要:

y_pred[i] = y_pred[i] if y_true[i] != 0
y_pred[i] = 0 if y_true[i] == 0

所以我尝试了以下方法:

def myloss(y_true, y_pred):
        mask = K.not_equal(y_true, 0)
        mask = K.cast(mask, dtype = 'float32')
        loss_value = K.mean(K.square(mask*y_pred - y_true), axis = 1)
        return loss_value

但我收到此错误:

TypeError:传递给参数“x”的值的 DataType bool 不在允许值列表中:bfloat16、float16、float32、float64、uint8、int8、uint16、int16、int32、int64、complex64、complex128

有人知道如何帮助我吗?

【问题讨论】:

  • 标签的形状和数据类型是什么?
  • 数据类型为float64,形状为(n, 30),其中n是我传递给网络的图片数量
  • 你能发布完整的错误堆栈跟踪吗?因为这个损失函数不会导致任何错误。尽管您可能想查看此函数,因为它返回长度为 (n,) 的数组,而不是单个损失值。
  • 您好 Vivek,非常感谢您的帮助。我正在尝试一种不同的方法,似乎它可以工作,所以也许最后我会添加解决方案。再次感谢
  • @Gianluca_27 你设法解决了这个问题吗?如果是的话,请您分享一下它的详细信息。

标签: python tensorflow keras loss-function


【解决方案1】:

您可以尝试使用tf.boolean_mask

def myloss(y_true, y_pred):
        mask = K.not_equal(y_true, 0)
        pred_masked = tf.boolean_mask(y_pred - y_true, mask)
        loss_value = K.mean(K.square(pred_masked), axis = 1)
        return loss_value

【讨论】:

    猜你喜欢
    • 2020-02-18
    • 1970-01-01
    • 2020-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-25
    相关资源
    最近更新 更多