gpt4 book ai didi

python - 在分类焦点损失中使用 1-a 权重

转载 作者:行者123 更新时间:2023-12-01 07:18:49 27 4
gpt4 key购买 nike

我正在尝试在 keras/tensorflow 中使用具有多个类的焦点损失,这导致使用我猜的分类焦点损失。我找到了一些实现heretherethere

据我了解,焦点损失中的参数a主要用于二元焦点损失情况,其中存在2个类,其中一个类得到a 作为权重,另一个获取 1-a 作为权重。在分类焦点损失的情况下,我发现所有实现仅在每个类损失前面使用权重a,例如:

    # Calculate weight that consists of  modulating factor and weighting factor
weight = alpha * y_true * K.pow((1-y_pred), gamma)
# Calculate focal loss
loss = weight * cross_entropy

    # Calculate Cross Entropy
cross_entropy = -y_true * K.log(y_pred)
# Calculate Focal Loss
loss = alpha * K.pow(1 - y_pred, gamma) * cross_entropy

所以,我的问题是为什么这样的权重因子会对训练过程产生任何影响?当然,损失通常用于计算每次迭代后添加的权重(当然乘以学习率)。但这只是意味着每个类别在损失部分之前都会获得相同的系数,所以没什么大不了的。这是否意味着我可以调整学习率并获得相同的效果?我在这里缺少什么?参数a的确切用途是什么?

我还发现了这个实现 here他们似乎也使用 (1-a) 作为否定示例,尽管他们将值传递给 keras.backend.binary_crossentropy 我猜这使得它变得更加复杂。

知道哪个是正确的实现吗?

最佳答案

我和你一样困惑,为什么他们将损失乘以一个常数。您提供的代码将 alpha 作为参数,默认值设置为 0.25,但也许当您调用您应该的函数时而是提供一个张量(与 y_pred/y_true 形状相同)以及该参数的权重?这是我能想到的唯一解释。

但是,我确实认为您可以简单地在代码中完全省略这些权重,而是将权重提供给 tf.fit()class_weight参数,然后它就会为你进行加权。您能让我了解这是否有效吗?

关于python - 在分类焦点损失中使用 1-a 权重,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57807175/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com