gpt4 book ai didi

machine-learning - Keras:加权二元交叉熵

转载 作者:行者123 更新时间:2023-11-30 08:21:30 24 4
gpt4 key购买 nike

我尝试用 Keras 实现加权二进制交叉熵,但我不确定代码是否正确。训练输出似乎有点困惑。经过几个时期后,我的准确度仅为 ~0.15。我认为这太少了(即使是随机猜测)。

输出中一般约有 11% 为 1,89% 为 0,因此权重为 w_zero=0.89 和 w_one=0.11。

我的代码:

def create_weighted_binary_crossentropy(zero_weight, one_weight):

def weighted_binary_crossentropy(y_true, y_pred):

# Original binary crossentropy (see losses.py):
# K.mean(K.binary_crossentropy(y_true, y_pred), axis=-1)

# Calculate the binary crossentropy
b_ce = K.binary_crossentropy(y_true, y_pred)

# Apply the weights
weight_vector = y_true * one_weight + (1. - y_true) * zero_weight
weighted_b_ce = weight_vector * b_ce

# Return the mean error
return K.mean(weighted_b_ce)

return weighted_binary_crossentropy

也许有人发现出了什么问题?

谢谢

最佳答案

通常,少数群体的类(class)权重较高。最好使用 one_weight=0.89, Zero_weight=0.11 (顺便说一句,您可以使用 class_weight={0: 0.11, 1: 0.89},如评论)。

在类别不平衡的情况下,您的模型看到的 0 比 1 多得多。它还将学会预测比 1 更多的 0,因为这样做可以最大限度地减少训练损失。这也是您看到的准确度接近比例 0.11 的原因。如果对模型预测取平均值,它应该非常接近于零。

使用类别权重的目的是改变损失函数,以便训练损失不能通过“简单的解决方案”(即预测零)来最小化,这就是为什么最好使用更高的权重的。

请注意,最佳权重不一定是 0.89 和 0.11。有时您可能需要尝试一些方法,例如取对数或平方根(或任何满足 one_weight > Zero_weight 的权重)才能使其发挥作用。

关于machine-learning - Keras:加权二元交叉熵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46009619/

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