交叉熵损失函数计算例子
时间: 2023-11-07 21:47:49 浏览: 208
交叉熵损失函数的计算例子如下:
假设我们有一个二分类任务,标签为0或1。假设我们的模型对某个样本的预测是0.8,而真实标签是1。根据交叉熵损失函数的公式,我们可以计算出该样本的损失如下:
Loss = -[ylogŷ + (1-y)log(1-ŷ)]
其中,y表示真实值,ŷ表示预测值。在这个例子中,y=1,预测值ŷ=0.8。将这些值代入公式中,计算出的损失如下:
Loss = -[1log0.8 + (1-1)log(1-0.8)]
= -[0.223]
= 0.223
因此,对于这个样本而言,其交叉熵损失为0.223。这个值表示了模型预测与真实标签之间的差异程度,越小表示预测越准确。在训练过程中,我们会使用优化算法(如梯度下降)来最小化交叉熵损失,从而使模型的预测更接近真实标签。
相关问题
二元交叉熵 损失函数计算
### 计算二元交叉熵损失函数
在机器学习中,尤其是针对分类问题时,交叉熵损失函数被广泛应用。对于二分类问题(Binary Classification),该损失函数定义如下:
\[ L(y, p) = -[y \log(p) + (1 - y) \log(1 - p)] \]
这里,
- \( y \) 表示真实标签,其值为0或1;
- \( p \) 则表示模型预测样本属于正类别的概率,通常通过激活函数如Sigmoid获得。
具体来说,在神经网络训练过程中,当输出层采用Sigmoid作为激活函数时,如果选择了基于交叉熵驱动的反向传播算法,则会按照上述公式计算每个样例对应的损失,并据此调整权重以减少整体误差[^3]。
为了更直观理解这一过程,下面给出一段Python代码实现了一个简单的例子来展示如何手动计算二元交叉熵损失:
```python
import numpy as np
def binary_cross_entropy_loss(y_true, y_pred):
epsilon = 1e-15 # 防止log(0)
y_pred_clipped = np.clip(y_pred, epsilon, 1 - epsilon)
loss = -(y_true * np.log(y_pred_clipped) + (1 - y_true) * np.log(1 - y_pred_clipped))
return np.mean(loss)
# 测试数据
true_labels = np.array([1, 0])
predicted_probabilities = np.array([0.9, 0.2])
loss_value = binary_cross_entropy_loss(true_labels, predicted_probabilities)
print(f'Binary Cross Entropy Loss: {loss_value}')
```
这段程序首先导入必要的库并定义了`binary_cross_entropy_loss()` 函数用于接收真实的类别标签 `y_true` 和由模型产生的预测概率 `y_pred` 。接着利用NumPy中的操作实现了前述公式的运算逻辑,最后返回平均后的损失值。
举一个交叉熵损失函数三分类的例子
### 使用交叉熵损失函数进行三分类
在机器学习中,当面对一个多类别分类问题时,意味着要预测的目标超过两个类别。实际上,在某些情况下存在三种花卉种类[^1]。针对这样的问题,可以采用神经网络来进行处理,并且通常会应用到softmax函数配合交叉熵作为损失函数。
对于三个类别的分类任务来说,假设有一个样本属于其中一个类别\( y \in {0, 1, 2} \),而模型给出的概率分布为 \( p(y|x; W) \),其中W代表模型参数,则二者的负对数似然可定义为:
\[ L_{CE}(y,p)= -\sum _{i=0}^{2}\mathbb{I}[y=i]\log(p(i)) \]
这里\(\mathbb{I}\)[条件]是一个指示符函数,只有当内部的条件成立时它才等于1;否则就等于0。这意呸着如果实际标签是第 i 类的话,那么仅该项会被计算入总的损失之中。
下面展示了一个简单的Python实现例子来说明如何构建一个用于解决三分类问题的人工神经网络并利用PyTorch框架中的`nn.CrossEntropyLoss()`方法自动完成上述过程:
```python
import torch
from torch import nn
class ThreeClassClassifier(nn.Module):
def __init__(self, input_size):
super(ThreeClassClassifier, self).__init__()
self.fc = nn.Linear(input_size, 3)
def forward(self, x):
out = self.fc(x)
return out
# 假设输入维度大小为4
model = ThreeClassClassifier(input_size=4)
criterion = nn.CrossEntropyLoss()
inputs = torch.randn((5, 4), dtype=torch.float32) # batch size * feature dimension
labels = torch.tensor([0, 1, 2, 1, 0], dtype=torch.long)
outputs = model(inputs)
loss = criterion(outputs, labels)
print(f'Loss: {loss.item()}')
```
在这个代码片段里创建了一个线性的三层全连接层网络接受四维特征向量作为输入,并输出三维的结果对应于每种花的不同可能性。之后使用了内置好的交叉熵损失函数计算预测值与真实标签间的差异度。
阅读全文
相关推荐
![txt](https://img-home.csdnimg.cn/images/20241231045021.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)