CrossEntropyLoss 和NLLLoss的关系

交叉熵损失在做一件什么事?

看公式:

x是预测(不需要softmax归一化),y是label, N是batch维度的数量,交叉熵损失,干了三件事.

1. 对输入在类别维度求softmax

2. 多softmax后的数,求log

3. 对(样本数, 类别数)为shape的tensor计算NLLLoss.

其中,NLLloss做的就是log取负, 和one-hot编码点乘.相加得到最终的总损失,因为reduction默认为mean,所以除以样本数.看以下代码.

代码实现

# import torch
import torch.nn as nn#
# cross entropy loss = softmax + log + nllloss
# 先softmax, 再 log,# 初始化 input_ 和 target
input_ = torch.randn(3,3)
target = torch.tensor([0,2,1])
mask = torch.zeros(3,3)
mask[0,0] = 1
mask[1,2] = 1
mask[2,1] = 1# 1.0 输入softmax
sft_ = nn.Softmax(dim = -1)(input_)# 2.0 log
log_ = torch.log(sft_)# 3.0 nllloss
loss = nn.NLLLoss()print("split loss")
print(loss(log_, target))# 4.0 crossentropy
print("ce loss")
loss = nn.CrossEntropyLoss()
print(loss(input_, target))print("manual loss")
neg_log = 0 - log_
print(torch.sum(mask *neg_log ) / 3)# ----------输出--------------
>> loss_function python crossEntropyLoss.py
>> split loss
>> tensor(1.2294)
>> ce loss
>> tensor(1.2294)
>> manual loss
>> tensor(1.2294)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/539189.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java并发编程之 volatile关键字

1、简单介绍一下JMM Java 内存模型(Java Memory Model 简称JMM)是一种抽象的概念,并不真实存在,指一组规则或规范,通过这组规范定义了程序中各个变量的访问方式。java内存模型(JMM)屏蔽掉各种硬件和操作系统的内存访问…

如何正确地设置Outlook SMTP发送电子邮件?

Outlook SMTP发送邮件配置方法?Outlook怎么开启SMTP? 在使用Outlook发送邮件时,正确设置SMTP服务器是确保邮件能够顺利发送的关键步骤。接下来,就让AokSend一起探讨如何正确地设置Outlook SMTP发送电子邮件吧! Outlo…

java kafka客户端何时设置的kafka消费者默认值

kafka为什么有些属性没有配置却能正常工作,那是因为kafka-clients对有些消费者设置了默认值,具体看下ConsumerConfig类的静态模块,具体如下所示: kafka为什么有些属性没有配置却能正常工作,那是因为kafka-clients对有…

【Leetcode每日一刷】顺/逆时针旋转矩阵 |48. 旋转图像、矩阵的螺旋遍历 |54. 螺旋矩阵

一、48. 旋转图像 1.1:题目 48. 旋转图像 1.2:解题思路 题型:顺/逆时针旋转矩阵; ❗❗核心思想/ 关键:不可暴力模拟,先镜像,后水平翻转 这题的意思很简单,就是让我们把矩阵顺时…

[云原生] Prometheus自动服务发现部署

一、部署服务发现 1.1 基于文件的服务发现 基于文件的服务发现是仅仅略优于静态配置的服务发现方式,它不依赖于任何平台或第三方服务,因而也是最为简单和通用的实现方式。 Prometheus Server 会定期从文件中加载 Target 信息,文件可使用 YAM…

Suervisor http://localhost:9001 refused connection

(desk_env) rootvdi:/opt/pyenv/desk_env/bin# supervisorctl http://localhost:9001 refused connection当后台启动supervisord后,使用supervisorctl命令进行任务管理时, 一、报错原因: http://localhost:9001 refused connection 显示拒绝连…

低代码与AI:构建面向未来的智能化应用

引言 在当今数字时代,技术的快速发展为各行各业带来了前所未有的机遇和挑战。企业和组织面临着如何迅速开发和交付高质量应用的需求,同时还需要应对日益复杂的业务需求和用户期望。在这样的背景下,低代码与人工智能(AI&#xff0…

Vue3基础笔记(1)模版语法 属性绑定 渲染

Vue全称Vue.js是一种渐进式的JavaScript框架,采用自底向上增量开发的设计,核心库只关注视图层。性能丰富,完全有能力驱动采用单文件组件和Vue生态系统支持的库开发的复杂单页应用,适用于场景丰富的web前端框架。灵活性和可逐步集成…

适用于系统版本:CentOS 6/7/8的基线安全检测脚本

#!/bin/bash #适用于系统版本:CentOS 6/7/8 echo "----------------检测是否符合密码复杂度要求----------------" #把minlen(密码最小长度)设置为8-32位,把minclass(至少包含小写字母、大写字母、数字、特殊…

vscode 向下复制当前行(即visual studio 中的Ctrl + D)功能快捷键

参考:https://blog.csdn.net/haihui1996/article/details/87937912 打开vscode左下角键盘快捷键设置,找到copy line down,即可查看当前默认快捷键为“shift Alt ↓” 双击快捷键,输入自己想要的快捷组合,如CtrlD,然…

Spring基础——使用注解开发SpringMVC

目录 配置SpringMVC的初始化信息配置ServletWebApplicationContext配置RootWebApplicationContext配置ServletContext 创建Controller控制器配置Controller响应路径接收用户传递参数接收JSON数据接收简单类型对象封装参数 接收数组类型 Restful 文章源码仓库:Spring…

JavaEE之多线程(创建线程的五种写法)详解

😽博主CSDN主页: 小源_😽 🖋️个人专栏: JavaEE 😀努力追逐大佬们的步伐~ 目录 1. 前言 2. 操作系统"内核" 3. 创建线程的五种写法 (我们重点要掌握最后一种写法!!) 3.1 继承 Thread, 重写 run 3. 2 实现 Runnabl…