博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
A trap of parameter ‘size_average’ in pytorch 详解
阅读量:6628 次
发布时间:2019-06-25

本文共 1571 字,大约阅读时间需要 5 分钟。

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:

loss中奇怪的问题:

losses per-batch-element:pytorch/pytorch/issues/264

 

转载地址:http://lmqpo.baihongyu.com/

你可能感兴趣的文章
ssh 免登录
查看>>
分享牛人就是的volatilekeyword
查看>>
Windows 7/8/8.1 误删EFI启动项,无法开机解决方式(U盘+原版镜像)
查看>>
临时表空间操作总结
查看>>
【游普罗旺斯薰衣草庄园】诗一首
查看>>
Python Socket 编程——聊天室演示样例程序
查看>>
关于项目中根据当前数据库中最大ID生成下一个ID问题——(五)
查看>>
Android数据加密概述及多种加密方式 聊天记录及账户加密 提供高质量的数据保护...
查看>>
C++运算符优先级
查看>>
Makefile中用宏定义进行条件编译(gcc -D)/在Makefile中进行宏定义-D【转】
查看>>
iOS中 支付宝钱包具体解释/第三方支付 韩俊强的博客
查看>>
solidity代码
查看>>
【转】C++可变参数列表处理宏va_list、va_start、va_end的使用
查看>>
跨站脚本攻击XSS
查看>>
Android Studio 中的FindBugs插件使用,轻松帮你发现Bug (转)
查看>>
linux ls 命令
查看>>
聊一聊PV和并发、以及计算web服务器的数量的方法
查看>>
Win10 IoT C#开发 4 - UART 串口通信
查看>>
UWP入门(一) -- 先写几个简单控件简单熟悉下(别看这个)
查看>>
Spring+CXF整合来管理webservice(服务器启动发布webservice)
查看>>