Pytorch基础(九)——损失函数

一、概念

损失函数在深度学习领域是用来计算搭建模型预测的输出值和真实值之间的误差。
具体实现过程:在一个批次(batch)前向传播完成后,得到预测值,然后损失函数计算出预测值和真实值之间的差值,反向传播去更新权值和偏置等参数,以降低差值,不断向真实值接近,最终得到效果良好的模型。
常见的损失函数包括:MSE(均方差, 也可以叫L2Loss),Cross Entropy Loss(交叉熵),L1 Loss(L1平均绝对值误差),Smooth L1 Loss(平滑的L1 loss),BCELoss (Binary Cross Entropy)等。下面分别对这些损失函数举例说明。
只写了一部分,后面陆续增加。。

二、Pytorch举例

2.1 MSELoss

MSELoss 就是计算真实值和预测值的均方差,也可以叫L2 Loss。
特点:MSE收敛速度比较快,能提供最大似然估计,是回归问题、模式识别、图像处理中最常使用的损失函数。
在这里插入图片描述

import torch
from torch import nn
from torch.nn import MSELossinputs = torch.tensor([1, 2, 3], dtype=torch.float32)
outputs = torch.tensor([2, 2, 4], dtype=torch.float32)# MSE
# size_average为True,表示计算批前向传播后损失函数的平均值,如果为False,则计算损失函数的和。
# 同样,reduce为True,返回标量;reduce为False, size_average参数失效,直接返回向量形式的loss
# reduction目的为减少tensor中元素的数量。为none,表示不减少;为'sum',表示求和;为'mean',表示求平均值loss_mse = nn.MSELoss()
result_mse = loss_mse(inputs, outputs)
print(result_mse)loss_mse1 = nn.MSELoss(reduction='sum')
result_mse1 = loss_mse1(inputs, outputs)
print(result_mse1)loss_mse2 = nn.MSELoss(size_average=False, reduce=False, reduction='sum')
result_mse2 = loss_mse2(inputs, outputs)
print(result_mse2)

输出

tensor(0.6667)
tensor(2.)
tensor([1., 0., 1.])

2.2 L1Loss

L1Loss是计算预测值和真实值的平均绝对误差。
特点:对异常点的鲁棒性更强,但在残差为零处不可导,收敛速度比较慢。在这里插入图片描述

loss_l1 = L1Loss()
result_l1 = loss_l1(inputs, outputs)
print(result_l1)
tensor(0.6667)

2.3 SmoothL1loss

SmoothL1loss是L1Loss 和MSE的混合,最早在Fast R-CNN中提出。
特点:收敛速度稳定,模型更容易收敛到局部最优,防止梯度爆炸。
在这里插入图片描述

# beta默认为1,表示指定要在L1和L2损失之间更改的阈值。
loss_smol1 = SmoothL1Loss()
result_smol1 = loss_smol1(inputs, outputs)
print(result_smol1)
tensor(0.3333)

2.4 CrossEntropyLoss

CrossEntropyLoss表示概率分布之间的距离,当交叉熵越小说明二者之间越接近,对于高维输入比较有用。一般都需要激活函数将输入转变为(0,1)之间。
经典公式:
在这里插入图片描述
其实这个表示BCELoss(二分类交叉熵)。

pytorch的公式表示的是多分类问题:
1)当目标targets 包括类索引,ignore_index才可以设置.
在这里插入图片描述
2)表示每个类别的概率;当每个小批项目需要超过单个类别的标签时非常有用,例如混合标签、标签平滑等。
在这里插入图片描述
其中: x为输入值,y为目标值,C代表类别数量,w为权值参数。

# weight :为每个类指定的手动重缩放权重。
# ignore_index:ignore_index表示指定忽略目标值,但不影响输入梯度。
# label_smoothing :在[0.0,1.0]之间的浮点型。指定计算损失时的平滑量,其中 0.0 表示不平滑。 如重新思考计算机视觉的初始架构中所述,目标成为原始基本事实和均匀分布的混合。 
# 交叉熵损失
x = torch.tensor([0.5, 0.2, 0.3])
x = torch.reshape(x, (1, 3))
print(x)
y = torch.tensor([1])loss_cross = CrossEntropyLoss()
result_cross = loss_cross(x, y)
print(result_cross)
tensor([[0.5000, 0.2000, 0.3000]])
tensor(1.2398)

三、参考文章

目标检测回归损失函数简介:SmoothL1/IoU/GIoU/DIoU/CIoU Loss
损失函数(八)

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

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

相关文章

用程序猿思维、程序设计师思维两种方式写求斐波那契数列的方法。

//用Java实现斐波那契数列(Fibonacci) public class Test {public int f(int n)//n代表第几个数字。程序返回它相应的值{return n>2?f(n-1)f(n-2):1;//看似如此优雅的一句程序}//程序设计师的思维:会重构上面的代码。让他们更易读。推荐!&#xff01…

【图像处理】——图像的差集、并集、补集、交集以及两个图像相减出现负数的处理方法

目录 目录 1、交集 2、差集 3、并集 4、补集 5、差为负值,和超过255的解决办法

Pytorch基础(十)——优化器(SGD,Adagrad,RMSprop,Adam,LBFGS等)

一、概念 Pytorch中优化器的目的:将损失函数计算出的差值Loss减小。 优化过程:优化器计算网络参数的梯度,然后使用一定的算法策略来对参数进行计算,用新的参数来重新进行训练,最终降低Loss。 其中官网提供了13种优化算…

【图像处理】——改变图像的大小(降采样重采样)下采样和上采样

转载自:https://jingyan.baidu.com/article/a3a3f81139be1f8da2eb8ade.html 上采样、下采样和金字塔加速参考:https://blog.csdn.net/Eastmount/article/details/89341077 目录 1、拉伸图片——重采样 2、缩小图片 1)三次插值法cv2.INTER_CUBIC

一段代码到可执行程序所有经历

如果你写的代码是hello.c,你的程序将经历下面的步骤到达硬盘或者内存成为可执行文件。 第一步:hello.c(文本)经过预编译生成hello.i(文本) 第二步:hello.i(文本)经过编译…

js获取url参数值

今天碰到要在一个页面获取另外一个页面url传过来的参数,一开始很本能的想到了用 split("?")这样一步步的分解出需要的参数。 后来想了一下,肯定会有更加简单的方法的!所以在网上找到了两个很又简单实用的方法,mark下 方…

[PyCharm]unindent does not match any outer indentation level解决方法

转载:https://www.jianshu.com/p/b34f30717eb2 问题出现原因 1、代码前后缩进量不一致 2、tab和space混用(如果一段代码既使用space又使用tab进行缩进,会发生错误,这个时候PyCharm会自动进行判断,根据设置的预先缩进…

为什么要选择Apache Pulsar(二)

这是介绍Apache Pulsar关键特性系列文章的第二篇。Pulsar是由Yahoo开发并开源的下一代发布订阅消息系统。在第一篇文章里,我们介绍了Pulsar对消息模型的灵活支持、多租户、多地域复制和持久性。在这一篇文章里,我们将继续介绍Pulsar的IO隔离机制、伸缩性…

Yolov5目标检测模型运行遇到的相关问题汇总

一、yolov5-5.0常见错误 1. pycocotools工具包无法安装 具体报错如下: requirements: pycocotools>2.0 not found and is required by YOLOv5 pkg_resources.DistributionNotFound: The pycocotools>2.0 distribution was not found and is required by th…

PHP反射之类的反射

最近在琢磨如何用PHP实现站点的插件功能,需要用到反射,于是现学了一下,笔记如下: class Person {public $name Lily;public $gender male;public $age 20;public function eat(){echo Lily is eating!;}public function run(){…

数据结构(复习)--------关于平衡二叉树(转载)

在上一个专题中,我们在谈论二叉查找树的效率的时候。不同结构的二叉查找树,查找效率有很大的不同(单支树结构的查找效率退化成了顺序查找)。如何解决这个问题呢?关键在于如何最大限度的减小树的深度。正是基于这个想法…

mysql外键

效果 a,b,c 如果c设置到a的外键,那么只能在删除c的记录后,才能删除a的记录。 https://stackoverflow.com/questions/1905470/cannot-delete-or-update-a-parent-row-a-foreign-key-constraint-fails CREATE TABLE IF NOT EXISTS advertisers ( adverti…

C++总结笔记(一)—— 基础知识汇总

很长时间没有再复习C的基础知识&#xff0c;现在将一些容易遗忘的知识点做一个简单的汇总。 1、注释 ❤️分为单行注释和多行注释 //cout<<endl;/*int i1;cout<<i<<endl;*/2、常量 ❤️宏常量&#xff1a;#define &#xff0c;宏常量没有类型&#xff0c;…

微软自带iscsi客户端对iqn的要求

节点名称&#xff1a;Microsoft iSCSI 发起程序严格遵守为 iSCSI 节点名称指定的规则。这些规则也适用于 Microsoft iSCSI 发起程序节点名称以及发现的任何目标节点名称。构建 iSCSI 节点名称的规则&#xff08;如 iSCSI 规范以及“iSCSI 名称的字符串配置文件”Internet 草稿中…

【Python数据结构】——链表

仅仅为了记录 # 定义一个类&#xff0c;用于创建链表的结点 class LNode():def __init__(self,elem,next_ None):# 类的初始化方法,在实例化类的时候会自动调用self.elem elemself.next next_list1 LNode(1)# 类的实例化&#xff0c;LNode(1)为第一个链表结点&#xff0c;…

天猫双11凭什么达到1682亿?这些支撑技术或许可以告诉你

历年「双 11」都会掀起一股买买买的购物热潮 阿里巴巴将这个原本普通的日子赋予了非凡的意义 今年&#xff0c;天猫以 1682 亿的成交额再破记录 而在这一系列疯狂“秒杀”动作的背后 有一个叫云化架构的技术体系支撑着十几亿人的消费狂欢 12 月 8 日 ArchSummit 阿里技术专场 来…

PageLayoutControl的基本操作

整理了下对PageLayoutControl的基本功能操作 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071…

C++总结笔记(二)——指针

一、概念 1.1 指针的原理 找到一个比较精练的概述指针原理的句子&#xff1a; 指针变量就是在内存中保存变量的地址&#xff0c;然后通过地址来访问数据。 int a 1; int* p &a; cout << p << endl;009DFEB4可以知道变量p在内存中的值就是a的地址&#xff…

Content的startActivity方法需添加FLAG_ACTIVITY_NEW_TASK flag

Content的startActivity方法需添加FLAG_ACTIVITY_NEW_TASK flag转载于:https://www.cnblogs.com/zhujiabin/p/5085688.html