Pytorch损失函数

news2024/10/6 14:36:07

基本用法

  1. criterion = LossCriterion() #构造函数有自己的参数
  2. loss = criterion(x, y) #调用标准时也有参数

1 L1范数损失 L1Loss

计算 output 和 target 之差的绝对值。

torch.nn.L1Loss(reduction='mean')
参数:
reduction-三个值
none: 不使用约简;
mean:返回loss和的平均值;
sum:返回loss的和。
默认:mean。

2 均方误差损失 MSELoss

计算 output 和 target 之差的均方差。


torch.nn.MSELoss(reduction='mean')

参数:

reduction-三个值。none: 不使用约简;mean:返回loss和的平均值;sum:返回loss的和。
默认:mean。

3 交叉熵损失 CrossEntropyLoss

当训练有 C 个类别的分类问题时很有效. 可选参数 weight 必须是一个1维 Tensor, 权重将被分配给各个类别. 对于不平衡的训练集非常有效。
在多分类任务中,经常采用 softmax 激活函数+交叉熵损失函数,因为交叉熵描述了两个概率分布的差异,然而神经网络输出的是向量,并不是概率分布的形式。所以需要 softmax激活函数将一个向量进行“归一化”成概率分布的形式,再采用交叉熵损失函数计算 loss。

在这里插入图片描述

torch.nn.CrossEntropyLoss(weight=None,ignore_index=-100, reduction='mean')

参数:

weight (Tensor, optional) – 自定义的每个类别的权重. 必须是一个长度为 C 的 Tensor
ignore_index (int, optional) – 设置一个目标值, 该目标值会被忽略, 从而不会影响到 输入的梯度。
reduction-三个值。none: 不使用约简;mean:返回loss和的平均值;sum:返回loss的和。默认:mean。

4 KL 散度损失 KLDivLoss

计算 input 和 target 之间的 KL 散度。KL 散度可用于衡量不同的连续分布之间的距离, 在连续的输出分布的空间上(离散采样)上进行直接回归时 很有效。


torch.nn.KLDivLoss(reduction='mean')

参数:

reduction-三个值。none: 不使用约简;mean:返回loss和的平均值;sum:返回loss的和。默认:mean。

5 二进制交叉熵损失 BCELoss

二分类任务时的交叉熵计算函数。用于测量重构的误差, 例如自动编码机. 注意目标的值 t[i] 的范围为0到1之间。


torch.nn.BCELoss(weight=None, reduction='mean')

参数:

weight (Tensor, optional) – 自定义的每个 batch 元素的 loss 的权重. 必须是一个长度为 “nbatch” 的 的 Tensor

6 BCEWithLogitsLoss

BCEWithLogitsLoss损失函数把 Sigmoid 层集成到了 BCELoss 类中. 该版比用一个简单的 Sigmoid 层和 BCELoss 在数值上更稳定, 因为把这两个操作合并为一个层之后, 可以利用 log-sum-exp 的 技巧来实现数值稳定。


torch.nn.BCEWithLogitsLoss(weight=None, reduction='mean', pos_weight=None)

参数:

weight (Tensor, optional) – 自定义的每个 batch 元素的 loss 的权重. 必须是一个长度 为 “nbatch” 的 Tensor

7 MarginRankingLoss

torch.nn.MarginRankingLoss(margin=0.0, reduction='mean')

对于 mini-batch(小批量) 中每个实例的损失函数如下:
在这里插入图片描述
参数:

margin:默认值0

8 HingeEmbeddingLoss

torch.nn.HingeEmbeddingLoss(margin=1.0,  reduction='mean')

对于 mini-batch(小批量) 中每个实例的损失函数如下:

在这里插入图片描述
参数:

margin:默认值1

9 多标签分类损失 MultiLabelMarginLoss


torch.nn.MultiLabelMarginLoss(reduction='mean')

对于mini-batch(小批量) 中的每个样本按如下公式计算损失:
在这里插入图片描述

10 平滑版L1损失 SmoothL1Loss

也被称为 Huber 损失函数。


torch.nn.SmoothL1Loss(reduction='mean')

在这里插入图片描述
其中
在这里插入图片描述

12 多标签 one-versus-all 损失 MultiLabelSoftMarginLoss


torch.nn.MultiLabelSoftMarginLoss(weight=None, reduction='mean')

在这里插入图片描述

13 cosine 损失 CosineEmbeddingLoss


torch.nn.CosineEmbeddingLoss(margin=0.0, reduction='mean')

在这里插入图片描述
参数:

margin:默认值0

14 多类别分类的hinge损失 MultiMarginLoss


torch.nn.MultiMarginLoss(p=1, margin=1.0, weight=None,  reduction='mean')

在这里插入图片描述
参数:

p=1或者2 默认值:1
margin:默认值1

15 三元组损失 TripletMarginLoss

和孪生网络相似,具体例子:给一个A,然后再给B、C,看看B、C谁和A更像。
在这里插入图片描述

torch.nn.TripletMarginLoss(margin=1.0, p=2.0, eps=1e-06, swap=False, reduction='mean')

在这里插入图片描述

其中:
在这里插入图片描述

16 连接时序分类损失 CTCLoss

CTC连接时序分类损失,可以对没有对齐的数据进行自动对齐,主要用在没有事先对齐的序列化数据训练上。比如语音识别、ocr识别等等。


torch.nn.CTCLoss(blank=0, reduction='mean')

参数:

reduction-三个值。none: 不使用约简;mean:返回loss和的平均值;sum:返回loss的和。默认:mean。

17 负对数似然损失 NLLLoss

负对数似然损失. 用于训练 C 个类别的分类问题.

torch.nn.NLLLoss(weight=None, ignore_index=-100,  reduction='mean')

参数:

weight (Tensor, optional) – 自定义的每个类别的权重. 必须是一个长度为 C 的 Tensor
ignore_index (int, optional) – 设置一个目标值, 该目标值会被忽略, 从而不会影响到 输入的梯度.

18 NLLLoss2d

对于图片输入的负对数似然损失. 它计算每个像素的负对数似然损失.

torch.nn.NLLLoss2d(weight=None, ignore_index=-100, reduction=‘mean’)
参数:

weight (Tensor, optional) – 自定义的每个类别的权重. 必须是一个长度为 C 的 Tensor
reduction-三个值,none: 不使用约简;mean:返回loss和的平均值;sum:返回loss的和。默认:mean。

19 PoissonNLLLoss

目标值为泊松分布的负对数似然损失


torch.nn.PoissonNLLLoss(log_input=True, full=False,  eps=1e-08,  reduction='mean')

参数:

log_input (bool, optional) – 如果设置为 True , loss 将会按照公 式 exp(input) - target * input 来计算, 如果设置为 False , loss 将会按照 input - target * log(input+eps) 计算.
full (bool, optional) – 是否计算全部的 loss, i. e. 加上 Stirling 近似项 target * log(target) - target + 0.5 * log(2 * pi * target).
eps (float, optional) – 默认值: 1e-8

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

S32K系列MCU学习介绍

前言 最近因为工作需要,在学习恩智浦的S32K312,开发一款汽车PDU。 一、S32K3系列 1.特点 S32K系列是恩智浦公司于2017年推出的面向汽车电子的微控制器。S32K3 系列包括基于 Arm Cortex-M7 的 MCU,采用单步、双步和锁步内核配置&#xff0…

滴水逆向3期笔记与作业——01汇编

防止OneNote丢失。 海哥牛逼。 01汇编笔记 01进制进制定义10-2进制转换八进制 02数据宽度/逻辑运算数据宽度与存储逻辑运算计算机做加法的本质作业 03通用寄存器_内存读写通用寄存器表通用寄存器图内存读写计算机操作系统位数意义 04内存地址_堆栈寻址公式PUSH指令POP指令作业 …

《稻》念袁老,孙溟㠭先生为纪念袁隆平老先生治印一方

孙溟㠭篆刻作品《稻》 孙溟㠭篆刻作品《稻》 稻穗熟了,袁老走了。溟㠭先生为纪念袁隆平老先生而治印一枚。 拓印左侧禾苗繁茂,稻田里蛙声一片。拓印右侧为袁老的样子,人瘦心厚,顶着烈日,照料自己试验的稻田。袁老一…

3.黑马springboot开发篇自己修改笔记

SpringBoot开发实用篇 ​ KF-1.热部署 ​ 什么是热部署?简单说就是你程序改了,现在要重新启动服务器,嫌麻烦?不用重启,服务器会自己悄悄的把更新后的程序给重新加载一遍,这就是热部署。 ​ 热部署的功能…

[渗透教程]-017-入侵检测与社交网络安全

文章目录 1.入侵检测1.1 入侵检测基本概念1.2 入侵艰难侧系统评估指标1.3 入侵检测基本技术1.4 通用入侵检测框架2.社交网络安全1.入侵检测 1.1 入侵检测基本概念 入侵检测(Intrusion Detection),指对系统的运行状态进行监视,发现各种攻击企图、攻击行为或者攻击结果,以保证…

大神们分享STM32的学习方法

单片机用处这么广,尤其是STM32生态这么火!如何快速上手学习呢? 第一:你要考虑的是,要用STM32实现什么 为什么使用STM32而不是8051? 是因为51的频率太低,无法满足计算需求?是51的管脚太少,无法…

MySQL单表操作

二、数据的新增、修改、删除 1.回顾ishop的数据表 mysql> use ishop; Database changed mysql> show tables; ----------------- | Tables_in_ishop | ----------------- | commodity | | commoditytype | | customer | | order | ----------…

【人工智能】遗传算法

人工智能算法---遗传算法(基础篇) 知识导图:遗传算法(概念)1.初始化种群二进制编码与解码 2.选择操作3.交叉操作4.评估操作5.终止操作 知识导图: 遗传算法(概念) 可以把遗传算法类比…

关于API接口应用

随着互联网技术的发展,API接口已成为众多应用程序开发中的必备工具,它不仅方便了开发者进行应用程序开发,也为应用程序提供了更多的功能和服务。本文将介绍API接口的概念和应用,以及API接口的优势和未来趋势。 一、什么是API接口…

Android 系统架构大图

android的系统架构和其操作系统一样,采用了分层的架构。从架构图看,android分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和Linux核心层。 1.应用程序 Android会同一系列核心应用程序包一起发布,该应用…

Kubernetes快速部署

2 Kubernetes快速部署 kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具。 这个工具能通过两条指令完成一个kubernetes集群的部署&#xff1a; # 创建一个 Master 节点 $ kubeadm init# 将一个 Node 节点加入到当前集群中 $ kubeadm join <Master节点的IP和…

堆排序详解

如有错误&#xff0c;感谢不吝赐教、交流 文章目录 算法原理堆大根堆构建大根堆 小根堆 Java实现完整代码总结 算法原理 堆 堆是一个数组&#xff0c;可以被看成一个近似的完全二叉树&#xff0c;树上的每一个结点对应数组中的一个元素。除了最底层外&#xff0c;该树是完全…

Linux如何定时执行任务

目录 crontab 介绍 安装crontab 服务操作说明 操作案例 crontab 介绍 Linux crontab是采用定期执行程序的命令&#xff0c;当安装完成操作 系统后&#xff0c;默认便会启动此任务调度命令&#xff0c;crond命令每分钟都会定期检查是否要执行任务的工作&#xff0c;如果要执…

【链表】力扣206题:反转链表

【链表】力扣206题&#xff1a;反转链表 力扣206题&#xff1a;反转链表 建议在看题目之前先了解数组的具体知识点&#xff0c;可以看这里&#xff1a; 算法基础&#xff08;三&#xff09;&#xff1a;链表知识点及题型讲解。 其它题目&#xff1a; 【链表】力扣203题&#xf…

12 JS03——数据类型

目标&#xff1a; 1、数据类型简介 2、简单数据类型 3、获取变量数据类型 4、数据类型转换 5、拓展阅读 一、数据类型简介 1、为什么需要数据类型 在计算机中&#xff0c;不同的数据所需占用的存储空间是不同的&#xff0c;为了便于把数据分成所需内存大小不同的数据&#x…

GWO灰狼优化算法以及Matlab代码

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 GWO灰狼算法原理进化更新位置更新&#xff08;紧随3只头狼&#xff09; GWO灰狼算法流程图GWO优化算法matlab代码main函数适应度函数GWO主体代码测试结果F1~ F6测试…

ESP8266通过MQTT协议连接onenet云平台

中国移动onenet平台 文章目录 中国移动onenet平台前言一、onenet平台二、ESP82661.完整代码2.联网代码3.连云代码4.数据处理 总结 前言 最近在弄onenet平台&#xff0c;用arduino结合esp8266&#xff0c;就是不知道怎么回事&#xff0c;一直连不上wifi&#xff0c;然后就用esp…

基础知识回顾

1.数组 数组工具类 二维数组 1.1概念 数组&#xff0c;标志是[ ],用于存储多个相同类型数据的集合&#xff0c;获取数组中的元素通过脚标&#xff08;下标&#xff09;来获取&#xff0c;数组下标是从0开始的 1.2创建数组 创建数组的方式分为两种 动态初始化 int[] a ne…

〖ChatGPT实践指南 - 零基础扫盲篇②〗- 深度体验 ChatGPT

文章目录 ⭐ ChatGPT 最主要的对话功能⭐ ChatGPT 对话功能的演示&#x1f31f; 搞怪案例 ① - 询问如何做 "红烧肉"&#x1f31f; 演示案例 ② - 文本翻译[翻译源码]&#x1f31f; 演示案例 ③ - 代码问题&#x1f31f; 演示案例 ④ - 修复Bug&#x1f31f; 演示案例…

串口收发字符/字符串

分析过程&#xff1a; 框图&#xff1a; 通过以上框图分析可知&#xff0c;需要分析芯片手册 RCC / GPIO / UART 1.RCC章节&#xff1a;使能对应GPIOG/GPIOB/UART4控制器 2.GPIO章节&#xff1a;1)设置引脚为复用功能模式 2)设置复用功能为串口功能 3.UART章节&#xff1a;1…