交叉熵损失计算正确的代码
时间: 2024-06-10 14:02:22 浏览: 131
tensorflow中常用交叉熵损失函数(cross_entropy)的比较总结与代码示例
交叉熵损失(Cross-Entropy Loss)是一种用于训练分类模型的常用损失函数,其计算方式如下:
$loss=-\frac{1}{N}\sum_{i=1}^N\sum_{j=1}^My_{i,j}\log\hat{y}_{i,j}$
其中,$y_{i,j}$表示第$i$个样本的真实标签,$\hat{y}_{i,j}$表示模型对第$i$个样本在第$j$个类别上的预测值,$N$表示样本总数,$M$表示类别总数。
在Python中,可以通过以下代码计算交叉熵损失:
```python
import numpy as np
def cross_entropy_loss(y_pred, y_true):
"""
计算交叉熵损失
:param y_pred: 预测值,shape为(N, M),N为样本数,M为类别数
:param y_true: 真实标签,shape为(N, M)
:return: 交叉熵损失
"""
epsilon = 1e-12 # 防止出现log(0)的情况
y_pred = np.clip(y_pred, epsilon, 1. - epsilon) # 将预测值限制在[epsilon, 1-epsilon]范围内
loss = -np.sum(y_true * np.log(y_pred)) / y_true.shape # 计算交叉熵损失
return loss
```
其中,`np.clip`函数将预测值限制在一个较小的范围内,避免出现`log(0)`的情况。`y_true`和`y_pred`都是二维的矩阵,第一维表示样本数,第二维表示类别数。`np.log`函数计算每个预测值的对数,然后与真实标签相乘并求和得到总损失,最后再除以样本数得到平均损失。
阅读全文