tf.keras.losses.BinaryCrossentropy函数

本文详细介绍了TensorFlow中的BinaryCrossentropy函数,它用于计算二分类问题的交叉熵损失。讨论了从_logits参数的影响,以及在不同激活函数(softmax和sigmoid)下的使用示例。此外,还提供了手动计算交叉熵的公式,帮助读者深入理解该函数的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

函数原型
tf.keras.losses.BinaryCrossentropy(
    from_logits=False,
    label_smoothing=0.0,
    axis=-1,
    reduction=losses_utils.ReductionV2.AUTO,
    name='binary_crossentropy'
)
函数说明

BinaryCrossentropy函数用于计算二分类问题的交叉熵。交叉熵出自信息论中的一个概念,原来的含义是用来估算平均编码长度的。在机器学习领域中,其常常作为分类问题的损失函数。

交叉熵函数使用的公式如下:
在这里插入图片描述

参数from_logits默认为False,表示输出的logits需要经过激活函数的处理。比如,如果logits经过sigmoid函数处理后,logits的值域为(-1, 1);经过softmax激活函数处理,logits的取值范围为(0, 1)。但是如果没有经过激活函数处理,输出logits的值域为负无穷到正无穷之间。

函数使用

第一种情况,模型使用softmax激活函数输出logits:

# y_true使用one-hot编码,[0, 1]对应的是类型1,[1, 0]对应的类型0
# y_pred使用softmax激活函数,[0.8, 0.2]表示对应类型0的概率为0.8,对应类型1的概率为0.2
# batch_size=1
>>> y_true = [[0, 1]]
>>> y_pred = [[0.8, 0.2]]
>>> loss = tf.keras.losses.BinaryCrossentropy()
>>> loss_cal = loss(y_true, y_pred)
>>> loss_cal
<tf.Tensor: shape=(), dtype=float32, numpy=1.6094375>

# 使用数学公式实现
>>> a = 0 * math.log(0.8) + (1 - 0) * math.log(1 - 0.8)
>>> b = 1 * math.log(0.2) + (1 - 1) * math.log(1 - 0.2)
>>> loss_calc = - (a + b) / 2
>>> loss_calc
1.6094379124341005

# batch_size=2
>>> y_true = [[0, 1], [1, 0]]
>>> y_pred = [[0.8, 0.2], [0.5, 0.5]]
>>> loss_cal = loss(y_true, y_pred)
>>> loss_cal
<tf.Tensor: shape=(), dtype=float32, numpy=1.1512922>

第二种情况,模型使用sigmoid激活函数输出logits:

# y_true使用标签形式,1对应类型1,0对应类型0
# y_pred使用sigmoid激活函数,由于0.6相比0和1更靠近1,所以0.6更卡能对应的分类为1
# batch_size=1
>>> y_true = [1]
>>> y_pred = [0.6]
>>> loss_cal = loss(y_true, y_pred)
>>> loss_cal
<tf.Tensor: shape=(), dtype=float32, numpy=0.5108254>
# batch_size=4
>>> y_true = [1, 1, 0, 0]
>>> y_pred = [0.6, 0.5, 0.2, -0.5]
>>> loss_cal = loss(y_true, y_pred)
>>> loss_cal
<tf.Tensor: shape=(), dtype=float32, numpy=0.35677892>
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不负韶华ღ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值