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

4
我正在构建一个时间序列分类模型。数据非常不平衡,因此我决定使用加权交叉熵函数作为损失。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.keras API的方法来使用tf.nn.weighted_cross_entropy_with_logits?
1个回答

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

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

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

来源


编辑: JL Meunier回答很好地解释了如何使用类权重将logits乘以。


4
谢谢您的回复。但是,如果我使用自定义函数而不是将权重传递给model.fit函数,我是否可以得到相同的结果? - username0101

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接