在 Tensorflow 2.0 中实现自定义损失函数

use*_*101 4 keras tensorflow loss-function tensorflow2.0

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

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"])
Run Code Online (Sandbox Code Playgroud)

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

hic*_*sou 5

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

class_weight:可选字典将类索引(整数)映射到权重(浮点数)值,用于对损失函数进行加权(仅在训练期间)。这对于告诉模型“更多关注”来自代表性不足的类的样本很有用。

如:

{
    0: 0.31, 
    1: 0.33, 
    2: 0.36, 
    3: 0.42, 
    4: 0.48
}
Run Code Online (Sandbox Code Playgroud)

来源


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

  • 感谢您的答复。但是,我可以通过使用自定义函数而不是将权重传递给“model.fit”函数来获得相同的结果吗? (3认同)