PyTorch中常见损失函数的简单解释和使用

这篇具有很好参考价值的文章主要介绍了PyTorch中常见损失函数的简单解释和使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

损失函数

损失函数,又叫目标函数。在编译神经网络模型必须的两个参数之一。另一个必不可少的就是优化器,我将在后面详解到。

重点
损失函数是指计算机标签值和预测值直接差异的函数。

这里我们会结束几种常见的损失函数的计算方法,pytorch中也是以及定义了很多类型的预定义函数,具体的公式不需要去深究(学了也不一定remember),这里暂时能做就是了解。

我们先来定义两个二维的数组,然后用不同的损失函数计算其损失值。

import torch
from torch.autograd import Variable
import torch.nn as nn

sample=Variable(torch.ones(2,2))
a=torch.Tensor(2,2)
a[0,0]=0
a[0,1]=1
a[1,0]=2
a[1,1]=3
target=Variable(a)
print(sample,target)

这里:
sample的值为tensor([[1., 1.],[1., 1.]])

target的值为tensor([[0., 1.],[2., 3.]])

nn.L1Loss

l o s s ( x , y ) = 1 N ∑ i = 1 N ∣ x − y ∣ loss(x,y)=\frac{1}{N}\sum_{i=1}^{N}\left |x-y \right | loss(x,y)=N1i=1Nxy
L1Loss计算方法很简单,取预测值和真实值的绝对误差的平均数。

loss=FunLoss(sample,target)['L1Loss']
print(loss)

在控制台中打印出来是

tensor(1.)

它的计算过程是这样的: ( ∣ 0 − 1 ∣ + ∣ 1 − 1 ∣ + ∣ 2 − 1 ∣ + ∣ 3 − 1 ∣ ) / 4 = 1 (\left |0-1 \right |+\left |1-1 \right |+\left |2-1 \right |+\left |3-1 \right |)/4=1 (01+11+21+31)/4=1,先计算的是绝对值求和,然后再平均。

nn.SmoothL1Loss

SmoothL1Loss的误差在(-1,1)上是平方损失,其他情况是L1损失。
l o s s ( x , y ) = 1 N { 1 2 ( x i − y i ) 2 i f ∣ x i − y i ∣ < 1 ∣ x i − y i ∣ − 1 2 o t h e r w i s e loss(x,y)=\frac{1}{N}\left\{\begin{matrix} \frac{1}{2}(x_{i}-y_{i})^{2} \quad\quad if \left | x_{i}-y_{i} \right |<1 & \\ \left | x_{i}-y_{i} \right |-\frac{1}{2} \quad\quad\quad otherwise & \end{matrix}\right. loss(x,y)=N1{21(xiyi)2ifxiyi<1xiyi21otherwise

loss=FunLoss(sample,target)['SmoothL1Loss']
print(loss)

在控制台中打印出来是

tensor(0.6250)

nn.MSELoss

平方损失函数。其计算公式是预测值和真实值之间的平方和的平均数。
l o s s ( x , y ) = 1 N ∑ i = 1 N ∣ x − y ∣ 2 loss(x,y)=\frac{1}{N}\sum_{i=1}^{N}\left |x-y \right |^{2} loss(x,y)=N1i=1Nxy2

loss=FunLoss(sample,target)['MSELoss']
print(loss)

在控制台中打印出来是

tensor(1.5000)

nn.CrossEntropyLoss

交叉熵损失公式
l o s s ( x , l a b e l ) = − l o g e x l a b e l ∑ j = 1 N e x j = − x l a b e l + l o g ∑ j = 1 N e x j loss(x,label)=-log\frac{e^{x_{label}}}{\sum_{j=1}^{N}e^{x_{j}}} \\ \quad=-x_{label}+log\sum_{j=1}^{N}e^{x_{j}} loss(x,label)=logj=1Nexjexlabel=xlabel+logj=1Nexj

此公式常在图像分类神经网络模型中会常常用到。

loss=FunLoss(sample,target)['CrossEntropyLoss']
print(loss)

在控制台中打印出来是

tensor(2.0794)

nn.NLLLoss

负对数似然损失函数
l o s s ( x , l a b e l ) = − x l a b e l loss(x,label)=-x_{label} loss(x,label)=xlabel
需要注意的是,这里的 x l a b e l x_{label} xlabel和上面的交叉熵损失里的是不一样的,这里是经过log运算后的数值。这个损失函数一般用在图像识别的模型上。

loss=FunLoss(sample,target)['NLLLoss']
print(loss)

这里,控制台报错,需要0D或1D目标张量,不支持多目标。可能需要其他的一些条件,这里我们如果遇到了再说。

损失函数模块化设计

class FunLoss():
    def __init__(self, sample, target):
        self.sample = sample
        self.target = target
        self.loss = {
            'L1Loss': nn.L1Loss(),
            'SmoothL1Loss': nn.SmoothL1Loss(),
            'MSELoss': nn.MSELoss(),
            'CrossEntropyLoss': nn.CrossEntropyLoss(),
            'NLLLoss': nn.NLLLoss()
        }

    def __getitem__(self, loss_type):
        if loss_type in self.loss:
            loss_func = self.loss[loss_type]
            return loss_func(self.sample, self.target)
        else:
            raise KeyError(f"Invalid loss type '{loss_type}'")

if __name__=="__main__":
    loss=FunLoss(sample,target)['NLLLoss']
    print(loss)

总结

这篇博客适合那些希望了解在PyTorch中常见损失函数的读者。通过FunLoss我们自己也能简单的去调用。文章来源地址https://www.toymoban.com/news/detail-494086.html

到了这里,关于PyTorch中常见损失函数的简单解释和使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • PyTorch损失函数(二)

    nn.L1Loss 是一个用于计算输入和目标之间差异的损失函数,它计算输入和目标之间的绝对值差异。 主要参数: reduction :计算模式,可以是 none 、 sum 或 mean 。 none :逐个元素计算损失,返回一个与输入大小相同的张量。 sum :将所有元素的损失求和,返回一个标量值。 mean :

    2024年01月17日
    浏览(38)
  • Pytorch——常用损失函数详解

    首先直接贴上个人看过比较好的一些的解析: 深度学习之常用损失函数 损失函数loss大总结 损失函数(Loss Function) pytorch中的gather函数_PyTorch中的损失函数–L1Loss /L2Loss/SmoothL1Loss 很全的Pytorch loss函数汇总: pytorch loss function 总结 1. 余弦损失函数 torch.nn.CosineEmbeddingLoss 余弦损失

    2024年02月09日
    浏览(37)
  • 神经网络基础-神经网络补充概念-14-逻辑回归中损失函数的解释

    逻辑回归损失函数是用来衡量逻辑回归模型预测与实际观测之间差异的函数。它的目标是找到一组模型参数,使得预测结果尽可能接近实际观测。 在逻辑回归中,常用的损失函数是对数似然损失(Log-Likelihood Loss),也称为交叉熵损失(Cross-Entropy Loss)。它在分类问题中非常

    2024年02月12日
    浏览(46)
  • [pytorch] 8.损失函数和反向传播

    torch提供了很多损失函数,可查看官方文档Loss Functions部分 作用: 计算实际输出和目标输出之间的差距 为更新输出提供一定的依据(反向传播),grad 损失函数用法差不多,这里以L1Loss和MSEloss为例 L1Loss 注意传入的数据要为float类型,不然会报错,所以inputs和outputs处要加上类

    2024年01月25日
    浏览(36)
  • pytorch-损失函数-分类和回归区别

    torch.nn 库和 torch.nn.functional库的区别 torch.nn 库:这个库提供了许多预定义的层,如全连接层(Linear)、卷积层(Conv2d)等,以及一些损失函数(如MSELoss、CrossEntropyLoss等)。这些层都是类,它们都继承自 nn.Module ,因此可以很方便地集成到自定义的模型中。 torch.nn 库中的层都

    2024年02月05日
    浏览(45)
  • 损失函数(Loss Function)一文详解-分类问题常见损失函数Python代码实现+计算原理解析

    目录 前言 一、损失函数概述 二、损失函数分类 1.分类问题的损失函数

    2023年04月26日
    浏览(41)
  • PyTorch各种损失函数解析:深度学习模型优化的关键(2)

    目录 详解pytorch中各种Loss functions mse_loss 用途 用法 使用技巧 注意事项 参数 数学理论公式 代码演示  margin_ranking_loss 用途 用法 使用技巧 注意事项 参数 数学理论公式  代码演示 multilabel_margin_loss 用途 用法 使用技巧 注意事项 参数 数学理论公式 代码演示 multilabel_soft_margin_

    2024年01月19日
    浏览(65)
  • 简单的损失函数

    损失函数用来衡量真实值与预测值之间的差异。 损失 = 真实值-预测值的平方 1/2的作用是幂函数求导时可以与落下的2抵消,方便计算。 当预测值距真实值较大,梯度较大;越接近真实值,梯度越小。 损失 = 真实值-预测值的绝对值 当预测值距真实值较大,梯度为常数;越接

    2024年01月20日
    浏览(29)
  • 利用pytorch自定义CNN网络(四):损失函数和优化器

    本文是利用pytorch自定义CNN网络系列的第四篇,主要介绍如何训练一个CNN网络,关于本系列的全文见这里。 笔者的运行环境:CPU (AMD Ryzen™ 5 4600U) + pytorch (1.13,CPU版) + jupyter; 训练模型是为了得到合适的参数权重,设计模型的训练时,最重要的就是损失函数和优化器的选择。

    2024年02月13日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包