目录
交叉熵损失函数(Cross-Entropy Loss)
1.定义
交叉熵损失函数:编辑
2.手动实现交叉熵损失函数
3.总结
回血的核心是专注
—— 24.12.5
交叉熵损失函数(Cross-Entropy Loss)
1.定义
交叉熵损失函数是深度学习中常用的一种损失函数,特别是在分类任务中。它衡量了模型预测的概率分布与真实标签的概率分布之间的差异。交叉熵损失函数通常用于多分类问题,并且在二分类问题中也有应用。
交叉熵损失函数:
在 PyTorch 中,交叉熵损失函数可以通过 torch.nn.CrossEntropyLoss类 来实现
也可以使用 nn.CrossEntropyLoss()函数 来实现
2.手动实现交叉熵损失函数
import torch
import torch.nn as nn
import numpy as np'''
手动实现交叉熵的计算
'''#使用torch计算交叉熵
ce_loss = nn.CrossEntropyLoss()#假设有3个样本(Batch_size = 3),每个预测都在做3分类
pred = torch.FloatTensor([[1.3, 0.1, 0.3],[0.9, 1.2, 0.9],[0.5, 1.4, 0.2]]) #n * class_num#正确的类别分别为1,2,0
target = torch.LongTensor([1,2,0])'''
等效类别划分语句:one-hot:
target = torch.FloatTensor([[0,1,0],[0,0,1],[1,0,0]])
'''# 使用交叉熵计算损失函数
loss = ce_loss(pred, target)
print("torch输出交叉熵:", loss)#手动实现交叉熵
def cross_entropy(pred, target):batch_size, class_num = pred.shapepred = softmax(pred)target = to_one_hot(target, pred.shape)entropy = - np.sum(target * np.log(pred), axis=1)return sum(entropy) / batch_size#实现softmax函数 进行归一化
def softmax(matrix):# exp函数是e的指数函数,exp(x) = e ^ x,x为任意实数或复数return np.exp(matrix) / np.sum(np.exp(matrix), axis=1, keepdims=True)#验证softmax函数
# print(torch.softmax(pred, dim=1))
# print(softmax(pred.numpy()))#将输入转化为onehot矩阵型
def to_one_hot(target, shape):one_hot_target = np.zeros(shape)for i, t in enumerate(target):one_hot_target[i][t] = 1return one_hot_targetprint("手动实现交叉熵:", cross_entropy(pred.numpy(), target.numpy()))
3.总结
交叉熵损失函数是衡量模型预测的概率分布与真实标签的概率分布之间差异的一种常用方法。在 PyTorch中,可以通过 torch.nn.CrossEntropyLoss 类来实现交叉熵损失函数。通过前向传递和反向传播,神经网络可以逐步优化,提高分类性能。