A trap of parameter ‘size_average’ in pytorch 详解

简介: pytorch的入门教程中有这样的一句: 12345loss = torch.nn.

pytorch的入门教程中有这样的一句:

上面的程序很简单,设定一个loss函数,然后设定一个input和target进行loss计算,然后再backward。

这里我们不看反向过程,只看output的值是多少:

这个4是output的值,可以看待这个值是一个scalar而并不是一个向量。

我们再来看一段程序:

同样一段程序,怎么就变成16了,原因是在设置loss函数中我们把参数size_average设为了False。

当size_average为Ture的时候,我们得到4,反之我们得到16,结合size_average参数的官方解释:



也就是说True的loss除以了loss的数量(此处n=4),False的时候loss为summed的也就是全部loss的总和。

size_average参数默认为True,也就是说我们平时计算的时候得到的loss是平均loss。

这样会出现怎么问题呢:

这个参数默认是True,我们平时的训练集都是规整的,也就是说训练集中的每个类数量几乎差不多的训练集,然后我们算出了损失,比如这个损失是个[10]的Tensor,这里的10就是你之前说的N 也就是分类的数量,这个参数设为True则在得出的所有loss中除以N 如果为Flase则不处理直接把所有类的loss直接加起来给你。这个平时加起来和除以N在实际计算中影响不大,但是如果是别的任务 比如RNN 这时候分类loss就需要权重了。每个分类的loss的权重系数应该不一样,或者说训练集中某些类的数据没有另一类多,得出的损失有可能也有缺陷也需要参数,这时在pytorch中我们就无能为力了,因为其只能输出平均或者总和的loss 不能输出a batch of losses 也就是一个类一个损失,这种输出后期我们可以自由处理 。所以说这个是pytorch的一个缺陷 ,在github中的issue中有人提出来了。pytorch的编写人员正在修改底层。

该问题相关的链接:

如何自定义不同权重loss:https://github.com/pytorch/pytorch/issues/563

loss中奇怪的问题:https://discuss.pytorch.org/t/the-default-value-of-size-average-true-in-loss-function-is-a-trap/4251

How to combine multiple criterions to a loss function?
Get loss for individual samples
losses per-batch-element:https://github.com/pytorch/pytorch/issues/264

 

目录
相关文章
|
Java 关系型数据库 数据库连接
MyBatis Plus 解决大数据量查询慢问题
MyBatis Plus 解决大数据量查询慢问题
|
10月前
|
前端开发 安全 应用服务中间件
前端性能调优:HTTP/2与HTTPS在Web加速中的应用
【10月更文挑战第26天】随着互联网的快速发展,前端性能调优成为开发者的重要任务。本文探讨了HTTP/2与HTTPS在前端性能优化中的应用,介绍了二进制分帧、多路复用和服务器推送等特性,并通过Nginx配置示例展示了如何启用HTTP/2和HTTPS,以提升Web应用的性能和安全性。
194 3
|
SQL 存储 关系型数据库
小知识随手记:使用Navicat进行数据库表设计
小知识随手记:使用Navicat进行数据库表设计
小知识随手记:使用Navicat进行数据库表设计
我们需要安装`websockets`库(如果尚未安装)
我们需要安装`websockets`库(如果尚未安装)
|
API 网络安全 数据安全/隐私保护
outlook邮箱imap怎么开启
outlook邮箱imap怎么开启
|
边缘计算 安全 数据可视化
网络安全之资产及攻击面管理
“摸清家底,认清风险”做好资产管理是安全运营的第一步。那么什么是资产,资产管理的难点痛点是什么,如何做好资产管理,认清风险。带着这些问题我们来认识一下资产及攻击面管理。
1581 0
|
机器学习/深度学习 数据采集 存储
Fluid
Fluid是一种用于构建和部署大规模机器学习模型的开源框架,由阿里巴巴集团开发。Fluid的目标是简化模型训练和部署的过程,以便更快地构建和部署高质量的机器学习模型。
368 1
|
Java Go 数据库
SpringBoot配置文件(properties & yml)
SpringBoot配置文件(properties & yml)
|
设计模式 缓存 Java
又快又稳!Alibaba出品Java性能优化高级笔记(全彩版)震撼来袭
性能优化 作为一个程序员,性能优化是常有的事情,不管你是刚入行的小白还是已经入坑了很久的小秃头都会经历很多不同层次的性能优化——小到代码审查大到整个系统设计的优化!大势所趋之下,如何让自己的优化方向精准到性能瓶颈的那个点以及尽可能的提高优化的性价比已经慢慢成为每一个程序员都要考虑的问题了~ 下面是目前程序员进行性能优化时需要遵循的一些原则以及注意的一些点,大家可以看看自己在进行优化的时候是否有考虑到这些:
|
缓存
Http实战之缓存、重定向(2)
Http实战之缓存、重定向(2)
400 0
Http实战之缓存、重定向(2)