pytorch小知识点(二)-------CrossEntropyLoss(reduction参数)

在使用Pytorch时经常碰见这些函数cross_entropy,CrossEntropyLoss, log_softmax, softmax。

首先要知道上面提到的这些函数一部分是来自于torch.nn,而另一部分则来自于torch.nn.functional(常缩写为F)。二者函数的区别可参见 知乎:torch.nn和funtional函数区别是什么?

下面是对与cross entropy有关的函数做的总结:

torch.nntorch.nn.functional (F)
CrossEntropyLosscross_entropy
LogSoftmaxlog_softmax
NLLLossnll_loss

下面将主要介绍torch.nn.functional中的函数为主,torch.nn中对应的函数其实就是对F里的函数进行包装以便管理变量等操作。

一、F.cross_entropy( )

这个函数就是我们常说的softmax Loss。这里暂时只说一下pytorch中该函数的用法(主要是一些平时被忽略的参数)

函数原型为:

cross_entropy(input, target, weight=None, size_average=None, ignore_index=-100, reduce=None, reduction='elementwise_mean')
  • input 一个shape为[N,C]的Tensor,其中N代表样本个数,C代表类别数目
  • target 样本标签,其shape要求为大小为 n 的 1—D tensor,包含类别的索引(0到 n-1),要求 0 <= targets[i] <= C-1
  • weight 该参数指定每个类别占loss的权重.。1-D tensor,n个元素,分别代表n类的权重,如果你的训练样本很不均衡的话,是非常有用的。默认值为None。,默认各类loss权重相同
  • size_average(该参数不建议使用,后续版本可能被废弃),该参数指定loss是否在一个Batch内平均,即是否除以N。默认为True
  • ignore_index 指定忽略某些类别的loss
  • reduce (该参数不建议使用,后续版本可能会废弃),首先说明该参数与size_average冲突,当该参数指定为False时size_average不生效,该参数默认为True。reduce为False时,对batch内的每个样本单独计算loss,loss的返回值Shape为[N],每一个数对应一个样本的loss。reduce为True时,根据size_average决定对N个样本的loss进行求和还是平均,此时返回的loss是一个数。
  • reduction 该参数在新版本中是为了取代size_average和reduce参数的。它共有三种选项'elementwise_mean','sum'和'none'。'elementwise_mean'为默认情况,表明对N个样本的loss进行求平均之后返回(相当于reduce=True,size_average=True);'sum'指对n个样本的loss求和(相当于reduce=True,size_average=False);'none'表示直接返回n分样本的loss(相当于reduce=False)

举几个例子来说明情况(只讲讲reduction,其他都好理解就不说了)

1.默认情况,reduction = 'elementwise_mean'

假设网络的输出为out,标签为target(需要LongTensor)。我们的Batch_size为2,总共两个样本,3类。

import torch.nn.functional as F

out = torch.Tensor([[1,2,3],[3,4,1]])
target = torch.LongTensor([0,1])

loss = F.cross_entropy(out,target)
print(loss)


"""
out 为
tensor(1.3783)
"""

2.reduction = 'sum'

import torch.nn.functional as F

out = torch.Tensor([[1,2,3],[3,4,1]])
target = torch.LongTensor([0,1])
loss = F.cross_entropy(out,target,reduction='sum')
print(loss)



"""
out 为
tensor(2.7566)
"""

观察一下,是不是等于1中loss的两倍呢?

3.reduction = 'none'

import torch.nn.functional as F

out = torch.Tensor([[1,2,3],[3,4,1]])
target = torch.LongTensor([0,1])
loss = F.cross_entropy(out,target,reduction='none')
print(loss)



"""
out 为
tensor([2.4076, 0.3490])
"""

此次输出就是一个和样本数相等的向量了(前两个情况都是一个数),观察一下对这个向量求和或者求平均是不是等于前两个情况呢?

 

  • 72
    点赞
  • 145
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: pytorch-multi-label-classifier-master是一个基于PyTorch的多标签分类器项目。该项目旨在使用PyTorch框架构建一个能够对具有多个标签的数据样本进行分类的模型。 PyTorch是一个流行的深度学习框架,能够实现多种深度学习模型的构建与训练。它提供了丰富的工具和函数,简化了模型的复杂性,并提供了高效的计算能力。 在这个项目中,multi-label指的是数据样本可以被分为多个标签。与传统的单标签分类不同,每个样本可以被分为多个类别,这增加了分类问题的复杂性。模型需要学习如何给每个样本分配正确的标签。 pytorch-multi-label-classifier-master项目提供了一个设置多标签分类模型的基础架构。它包含了数据预处理、模型构建、训练和评估等步骤。用户可以根据自己的数据集和需求,对该项目进行定制。 通过使用pytorch-multi-label-classifier-master项目,用户可以快速搭建一个多标签分类器,用于解决具有多个标签的数据分类问题。同时,该项目还提供了一些示例数据和模型,帮助用户更好地理解和使用多标签分类技术。 总而言之,pytorch-multi-label-classifier-master是一个基于PyTorch框架用于多标签分类的项目,为用户提供了一个简单且灵活的搭建多标签分类器的框架,方便用户解决多标签分类问题。 ### 回答2: pytorch-multi-label-classifier-master是一个基于PyTorch的多标签分类器项目。它提供了一种使用神经网络模型来处理多标签分类任务的解决方案。 该项目的主要目标是通过深度学习技术来提高多标签分类问题的准确度。它使用PyTorch作为深度学习框架,该框架提供了丰富的工具和功能来构建和训练神经网络模型。 在pytorch-multi-label-classifier-master中,你可以找到许多工具和函数来进行数据预处理、模型构建、训练和评估。它支持常见的多标签分类算法,如卷积神经网络(CNN)和递归神经网络(RNN)。你可以根据自己的需求选择合适的模型,并通过简单的配置来进行训练。 该项目还提供了一些示例数据集和预训练模型,以帮助你更快地开始。你可以使用这些数据集来测试和调试你的模型,或者使用预训练模型来进行迁移学习。 pytorch-multi-label-classifier-master还支持一些常见的性能评估指标,如准确率、精确率、召回率和F1值。你可以使用这些指标来评估你的模型在多标签分类任务上的性能。 总的来说,pytorch-multi-label-classifier-master是一个方便易用的项目,旨在帮助你构建和训练用于多标签分类的深度学习模型。它提供了丰富的功能和工具,使你能够快速搭建一个准确度较高的多标签分类器。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值