交叉熵损失函数通常用于多类分类损失函数计算。计算公式如下:
P为真实值,Q为预测值。
使用tensorflow计算
import tensorflow as tf
import keras# 创建一个示例数据集
# 假设有3个样本,每个样本有4个特征,共2个类别
# 目标标签为稀疏表示(每个样本的类别用类别索引表示)
y_true = tf.constant([0, 1, 1]) # 真实标签
y_pred = tf.constant([[0.9, 0.1], [0.2, 0.8], [0.3, 0.7]]) # 模型预测# 使用SparseCategoricalCrossentropy计算损失
loss_fn = keras.losses.SparseCategoricalCrossentropy()
loss = loss_fn(y_true, y_pred)
print("损失值:", loss.numpy())
# 损失值: 0.22839303
手动计算
真实标签:[0,1,1]写成one-hot形式 [[1,0],[0,1],[0,1]]
预测标签(经过softmax):[[0.9, 0.1], [0.2, 0.8], [0.3, 0.7]]
import mathh1 = (1 * math.log(0.9) + 0 * math.log(0.1))
h2 = (0 * math.log(0.2) + 1 * math.log(0.8))
h3 = (0 * math.log(0.3) + 1 * math.log(0.7))
h = -(h1 + h2 + h3) / 3
print("损失值:", h)
# 损失值: 0.22839300363692283
注意多标签分类和多类分类区别与联系。
参考
- 交叉熵函数Cross_EntropyLoss()的详细计算过程
- 多标签分类任务中的损失函数