【问题标题】:Keras backend Custom Loss FunctionKeras 后端自定义损失函数
【发布时间】:2018-12-26 00:13:32
【问题描述】:

我正在尝试计算 (tp+tn)/total_samples 作为我的自定义损失函数。我知道如何在列表和列表理解中执行此操作,但我想我无法将 y_truey_pred 转换为列表。

目前我写的代码是:

def CustomLossFunction(y_true, y_pred):
   y_true_mask_less_zero = K.less(y_true, 0)
   y_true_mask_greater_zero = K.greater(y_true, 0)

   y_pred_mask_less_zero = K.less(y_pred, 0)
   y_pred_mask_greater_zero = K.greater(y_pred, 0)

   t_zeros = K.equal(y_pred_mask_less_zero, y_true_mask_less_zero)
   t_ones = K.equal(y_pred_mask_greater_zero, y_true_mask_greater_zero)

现在我需要将 t_zeros 和 t_ones 中的 TRUES 总数相加,然后将它们相加并除以总样本

我在这一行遇到错误:

sum_of_true_negatives = K.sum(t_zeros)

传递给参数“输入”的值的 DataType bool 不在允许值列表中:float32、float64、int32、uint8、int16

问题:

  • “(tp+tn)/total_samples”有没有内置的损失函数
  • 如果不是,那么如何使用 Keras 后端进行计算?

【问题讨论】:

    标签: python keras loss-function


    【解决方案1】:

    在将它们放入计算之前,您必须 cast 您的布尔张量浮动。

    但是一个警告,所以你不要浪费你的时间:

    此损失函数将不起作用,因为它不可微分。您不能像这样简单地丢弃y_pred 中存在的“连续性”。 (你会得到像“不支持无值”或“一个操作没有梯度”这样的错误)

    使用一些现有的标准函数进行分类,例如binary_crossentropycategorical_crossentropy

    选角:

    t_zeros = K.cast(t_zeros, K.floatx())
    t_ones = K.cast(t_ones, K.floatx())
    

    【讨论】:

      猜你喜欢
      • 2018-08-06
      • 1970-01-01
      • 2020-12-19
      • 2017-12-18
      • 2020-03-27
      • 1970-01-01
      • 2019-11-07
      • 1970-01-01
      • 2018-12-03
      相关资源
      最近更新 更多