二元分类loss函数binary_crossentropy和BinaryCrossentropy的区别

这篇博客对比了在自定义训练模式下,TensorFlow中BinaryCrossentropy和binary_crossentropy的用法。BinaryCrossentropy可以直接声明,且输出为loss的均值,而binary_crossentropy需要传入y_true和y_pred参数,输出的loss大小与batch_size相同。在模型编译时通常使用小写形式的binary_crossentropy。

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

在自定义训练模式里:

1.loss函数的声明及输出维度

  BinaryCrossentropy(官网链接)可以直接申明,如下:

#set loss func
loss=tf.losses.BinaryCrossentropy(from_logits=True) # from_logits=True表示最后一层没有添加激活

  其在作为独立函数使用时,输出的时loss的均值,维度为1

# Example 1: (batch_size = 1, number of samples = 4)
y_true = [0, 1, 0, 0]
y_pred = [-18.6, 0.51, 2.94, -12.8]
bce = tf.keras.losses.BinaryCrossentropy(from_logits=True)
bce(y_true, y_pred).numpy()
0.865

  而binary_crossentropy(官网链接)不可以申明

loss=tf.losses.binary_crossentropy()

TypeError: binary_crossentropy() missing 2 required positional arguments: 'y_true' and 'y_pred'

  binary_crossentropy直接使用填入数据,输出loss大小和BATCHSIZE相同,维度为1*BATCHSIZE

y_true = [[0, 1], [0, 0]]
y_pred = [[0.6, 0.4], [0.4, 0.6]]
loss = tf.keras.losses.binary_crossentropy(y_true, y_pred)
assert loss.shape == (2,)
loss.numpy()
array([0.916, 0.714], dtype=float32)

2.在使用上

一般compile的时候,使用的是小写的binary_crossentropy

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值