深度学习中6种loss函数Pytorch API调用示例

自定义数据

复制代码
import torch
import torch.nn as nn
import torch.nn.functional as F

batchsize=2
num_class=4

logits=torch.randn(batchsize,num_class)
target=torch.randint(num_class,size=(batchsize,))#delta目标分布
target_logits=torch.randn(batchsize,num_class)#非delta目标分布

交叉熵 CrossEntropyLoss

python 复制代码
## 1. CE Loss  交叉熵

ce_loss_fn=torch.nn.CrossEntropyLoss()
ce_loss=ce_loss_fn(logits,target)
print("ce_loss1:",ce_loss)

ce_loss=ce_loss_fn(logits,torch.softmax(target_logits,dim=-1))
print("ce_loss2:",ce_loss)

负对数似然 NLLLoss

python 复制代码
## 2. NLL Loss 负对数似然
nll_fn=torch.nn.NLLLoss()
nll_loss=nll_fn(torch.log(torch.softmax(logits,dim=-1)+1e-7),target)
print("nll_loss:",nll_loss)

####CE LOSS value = NLL LOSS value

KL散度 KLDivLoss

python 复制代码
## 3. KL loss  KL散度
kl_loss_fn=torch.nn.KLDivLoss()
kl_loss=kl_loss_fn(torch.log(torch.softmax(logits,dim=-1)+1e-7),torch.softmax(target_logits,dim=-1))
print("kl_loss:", kl_loss)

交叉熵=信息熵+KL散度 CE=IE+KLD

python 复制代码
## 4. 验证 CE=IE+KLD
print("===========================")
ce_loss_fn_sample=torch.nn.CrossEntropyLoss(reduction="none")#单独对每个样本求交叉熵
ce_loss_sample=ce_loss_fn_sample(logits,torch.softmax(target_logits,dim=-1))
print("ce_loss_sample:",ce_loss_sample)

kl_loss_fn_sample=torch.nn.KLDivLoss(reduction="none")
kl_loss_sample=kl_loss_fn_sample(torch.log(torch.softmax(logits,dim=-1)+1e-7),torch.softmax(target_logits,dim=-1)).sum(-1)
print("kl_loss_sample:",kl_loss_sample)

target_information_entropy=torch.distributions.Categorical(probs=torch.softmax(target_logits,dim=-1)).entropy()
print("target_information_entropy:", target_information_entropy)# IE为常数,如果目标分布是delta分布IE=0

print(torch.allclose(ce_loss_sample,kl_loss_sample+target_information_entropy))#对比两个浮点张量是否相等

二分类交叉熵 BCELoss

python 复制代码
## 5. BCE Loss  二分类交叉熵
print("===========================")
bce_loss_fn=torch.nn.BCELoss()
logits=torch.rand(batchsize)
prob_1=torch.sigmoid(logits)
target=torch.randint(2,size=(batchsize,))
bce_loss=bce_loss_fn(prob_1,target.float())
print("bce_loss:",bce_loss)

### NLL Loss是BCE Loss的一般形式,用NLL Loss代替BCE loss做二分类
prob_0=1-prob_1.unsqueeze(-1)
prob=torch.cat([prob_0,prob_1.unsqueeze(-1)],dim=-1)
nll_loss_binary=nll_fn(torch.log(prob),target)
print("nll_loss_binary:",nll_loss_binary)

余弦相似度 CosineEmbeddingLoss

python 复制代码
## 6. cosine similarity loss 余弦相似度
cosine_loss_fn=torch.nn.CosineEmbeddingLoss()
v1=torch.randn(batchsize,512)
v2=torch.randn(batchsize,512)
target=torch.randint(2,size=(batchsize,))*2-1 #生成【-1,1】之间的随机值
cosine_loss=cosine_loss_fn(v1,v2,target)
print("consine_loss:",cosine_loss)
相关推荐
Rubin智造社4 分钟前
OpenAI发布GPT-5.4 mini/nano,性能差距悬殊,费用直降1/12
人工智能·gpt
宸津-代码粉碎机5 分钟前
SpringBoot 任务执行链路追踪实战:TraceID 透传全解析,实现从调度到执行的全链路可观测
开发语言·人工智能·spring boot·后端·python
春日见5 分钟前
端到端自动驾驶技术路线(E2E)
人工智能·机器学习·docker·架构·机器人·自动驾驶·汽车
这张生成的图像能检测吗5 分钟前
(论文速读)PatchTST:通道无关补丁时间序列变压器
人工智能·深度学习·神经网络·计算机视觉·注意力机制·vit·时序模型
CoderJia程序员甲7 分钟前
GitHub 热榜项目 - 日榜(2026-03-19)
人工智能·ai·大模型·github·ai教程
IT_陈寒8 分钟前
SpringBoot项目启动速度提升300%?这5个隐藏配置太关键了!
前端·人工智能·后端
rainy雨8 分钟前
精益生产系统功能拆解:利用精益生产解决多品种小批量场景下的库存积压难题
大数据·人工智能·精益工程
小碗细面8 分钟前
5 分钟上手 Claude 自定义 Subagents
前端·人工智能·ai编程
白鲸开源12 分钟前
SeaTunnel × Gravitino:Schema URL 驱动的表结构自动感知方案
大数据·人工智能·开源
Narrastory12 分钟前
明日香 - Pytorch 快速入门保姆级教程(七)
人工智能·pytorch·深度学习