Tensorflow 两个交叉熵损失函数的区别

本文详细解析了TensorFlow中两种交叉熵损失函数tf.nn.sparse_softmax_cross_entropy_with_logits和tf.nn.softmax_cross_entropy_with_logits的区别。前者适用于每种样本只属于一种类别的场景,输入label为非独热编码;后者则适用于每种样本可能属于多种类别的场景,输入label为独热编码。通过具体的代码示例,帮助读者理解这两种函数的应用场景。

tf.nn.sparse_softmax_cross_entropy_with_logits

label:不含独热编码,shape:[batch_size, ]
logits:原始预测概率分布向量,shape:[batch_size, num_classes]

logits = np.array([[0.3, 0.4, 0.3], [0.5, 0.2, 0.3], [0.1, 0.1, 0.8]])
labels = np.array([1, 0, 2])

这样的label参数决定了该函数只适合于每种样本只属于一种类别的情况


tf.nn.softmax_cross_entropy_with_logits

label:独热编码,shape:[batch_size, num_classes]
logits:原始预测概率分布向量,shape:[batch_size, num_classes]

logits = np.array([[0.3, 0.4, 0.3], [0.5, 0.2, 0.3], [0.1, 0.8, 0.1]])
labels = np.array([[0, 1, 0], [1, 0, 0], [0, 1, 0]])

独热编码的label参数决定了该函数可适合于每种样本属于多种类别的情况

### 交叉熵损失函数与二值交叉熵损失函数区别 #### 定义与区别 交叉熵损失函数(Cross-Entropy Loss)是一种常用的多分类任务中的损失函数,适用于多个类别的情况。其核心思想是比较模型预测的概率分布与真实概率分布之间的差异[^4]。 而二值交叉熵损失函数(Binary Cross-Entropy Loss, BCELoss),则专门针对二分类问题设计。它是交叉熵损失的一个特例,仅用于两个类别的区分情况[^3]。 两者的主要区别在于适用的任务类型以及输入数据的形式: 1. **交叉熵损失函数** 主要用于多分类任务,假设每个样本属于且只属于一个类别。它的公式如下: \[ L = -\frac{1}{N} \sum_{i=1}^{N} \sum_{j=1}^{C} y_{ij} \log(p_{ij}) \] 其中 \( N \) 是样本数量,\( C \) 是类别数,\( y_{ij} \) 表示第 \( i \) 个样本的真实标签向量的第 \( j \) 维,\( p_{ij} \) 则表示对应的预测概率。 2. **二值交叉熵损失函数** 针对的是二分类问题,通常将正负两类分别编码为0和1。其公式简化为: \[ L = -\frac{1}{N} \sum_{i=1}^{N} \left( y_i \log(p_i) + (1-y_i) \log(1-p_i) \right) \] 这里 \( y_i \in \{0, 1\} \),代表第 \( i \) 个样本的实际标签;\( p_i \) 是该样本被预测为正类的概率。 --- #### 应用场景对比 | 特性 | 交叉熵损失函数 | 二值交叉熵损失函数 | |-------------------|-------------------------------------|----------------------------------| | **主要用途** | 多分类任务 | 二分类任务 | | **输出形式** | 软max层后的概率分布 | sigmoid激活后的单个概率 | | **典型应用领域** | 图像分类、文本分类 | 垃圾邮件检测、疾病诊断 | 具体来说,在深度学习框架PyTorch和TensorFlow中实现这两种损失函数的方式也有所不同: ##### PyTorch 实现 ```python import torch.nn as nn # 交叉熵损失函数 criterion_ce = nn.CrossEntropyLoss() # 二值交叉熵损失函数 criterion_bce = nn.BCELoss() ``` ##### TensorFlow 实现 ```python from tensorflow.keras.losses import BinaryCrossentropy, CategoricalCrossentropy # 交叉熵损失函数 loss_fn_ce = CategoricalCrossentropy(from_logits=True) # 二值交叉熵损失函数 loss_fn_bce = BinaryCrossentropy(from_logits=False) ``` 需要注意的是,`nn.CrossEntropyLoss()` 和 `tf.keras.losses.CategoricalCrossentropy` 默认会自动计算softmax操作,因此无需手动调用softmax[^1]。而对于BCELoss,则需要先通过sigmoid激活函数得到概率值后再传入损失函数。 --- ### 总结 交叉熵损失函数适合于多分类任务,能够有效评估模型对于整个类别空间的学习效果;而二值交叉熵损失函数则是专为二分类任务定制的设计方案,具有更简单的结构和更高的效率。两者的本质都是基于信息论的思想来最小化预测分布与真实分布间的距离。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值