【问题标题】:Implement custom loss function in Tensorflow 2.0在 TensorFlow 2.0 中实现自定义损失函数
【发布时间】:2019-12-16 06:06:29
【问题描述】:

我正在构建时间序列分类模型。数据非常不平衡,所以我决定使用加权交叉熵函数作为我的损失。

Tensorflow 提供了tf.nn.weighted_cross_entropy_with_logits,但我不确定如何在 TF 2.0 中使用它。因为我的模型是使用 tf.keras API 构建的,所以我正在考虑像这样创建我的自定义损失函数:

pos_weight=10
def weighted_cross_entropy_with_logits(y_true,y_pred):
  return tf.nn.weighted_cross_entropy_with_logits(y_true,y_pred,pos_weight)

# .....
model.compile(loss=weighted_cross_entropy_with_logits,optimizer="adam",metrics=["acc"])

我的问题是:有没有办法直接将 tf.nn.weighted_cross_entropy_with_logits 与 tf.keras API 一起使用?

【问题讨论】:

    标签: tensorflow keras loss-function tensorflow2.0


    【解决方案1】:

    您可以将类权重直接传递给model.fit 函数。

    class_weight: 可选字典映射类索引(整数)到 一个权重(浮点)值,用于加权损失函数(在 仅限培训)。这对于告诉模型“支付更多 注意”来自代表性不足的班级的样本。

    如:

    {
        0: 0.31, 
        1: 0.33, 
        2: 0.36, 
        3: 0.42, 
        4: 0.48
    }
    

    Source


    编辑: JL Meunier answer 很好地解释了如何将 logits 与类权重相乘。

    【讨论】:

    • 感谢您的回复。但是我可以通过使用我的自定义函数而不是将权重传递给model.fit 函数来获得相同的结果吗?
    猜你喜欢
    • 2020-07-29
    • 2021-06-07
    • 1970-01-01
    • 1970-01-01
    • 2018-10-28
    • 2017-12-29
    • 2019-06-13
    • 2020-01-21
    • 1970-01-01
    相关资源
    最近更新 更多