pytorch交叉熵损失函数的weight参数的使用


Posted in Python onMay 24, 2021

首先

必须将权重也转为Tensor的cuda格式;

然后

将该class_weight作为交叉熵函数对应参数的输入值。

class_weight = torch.FloatTensor([0.13859937, 0.5821059, 0.63871904, 2.30220396, 7.1588294, 0]).cuda()

补充:关于pytorch的CrossEntropyLoss的weight参数

首先这个weight参数比想象中的要考虑的多

你可以试试下面代码

import torch
import torch.nn as nn
inputs = torch.FloatTensor([0,1,0,0,0,1])
outputs = torch.LongTensor([0,1])
inputs = inputs.view((1,3,2))
outputs = outputs.view((1,2))
weight_CE = torch.FloatTensor([1,1,1])
ce = nn.CrossEntropyLoss(ignore_index=255,weight=weight_CE)
loss = ce(inputs,outputs)
print(loss)
tensor(1.4803)

这里的手动计算是:

loss1 = 0 + ln(e0 + e0 + e0) = 1.098

loss2 = 0 + ln(e1 + e0 + e1) = 1.86

求平均 = (loss1 *1 + loss2 *1)/ 2 = 1.4803

加权呢?

import torch
import torch.nn as nn
inputs = torch.FloatTensor([0,1,0,0,0,1])
outputs = torch.LongTensor([0,1])
inputs = inputs.view((1,3,2))
outputs = outputs.view((1,2))
weight_CE = torch.FloatTensor([1,2,3])
ce = nn.CrossEntropyLoss(ignore_index=255,weight=weight_CE)
loss = ce(inputs,outputs)
print(loss)
tensor(1.6075)

手算发现,并不是单纯的那权重相乘:

loss1 = 0 + ln(e0 + e0 + e0) = 1.098

loss2 = 0 + ln(e1 + e0 + e1) = 1.86

求平均 = (loss1 * 1 + loss2 * 2)/ 2 = 2.4113

而是

loss1 = 0 + ln(e0 + e0 + e0) = 1.098

loss2 = 0 + ln(e1 + e0 + e1) = 1.86

求平均 = (loss1 *1 + loss2 *2) / 3 = 1.6075

发现了么,加权后,除以的是权重的和,不是数目的和。

我们再验证一遍:

import torch
import torch.nn as nn
inputs = torch.FloatTensor([0,1,2,0,0,0,0,0,0,1,0,0.5])
outputs = torch.LongTensor([0,1,2,2])
inputs = inputs.view((1,3,4))
outputs = outputs.view((1,4))
weight_CE = torch.FloatTensor([1,2,3])
ce = nn.CrossEntropyLoss(weight=weight_CE)
# ce = nn.CrossEntropyLoss(ignore_index=255)
loss = ce(inputs,outputs)
print(loss)
tensor(1.5472)

手算:

loss1 = 0 + ln(e0 + e0 + e0) = 1.098

loss2 = 0 + ln(e1 + e0 + e1) = 1.86

loss3 = 0 + ln(e2 + e0 + e0) = 2.2395

loss4 = -0.5 + ln(e0.5 + e0 + e0) = 0.7943

求平均 = (loss1 * 1 + loss2 * 2+loss3 * 3+loss4 * 3) / 9 = 1.5472

可能有人对loss的CE计算过程有疑问,我这里细致写写交叉熵的计算过程,就拿最后一个例子的loss4的计算说明

pytorch交叉熵损失函数的weight参数的使用

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
通过数据库向Django模型添加字段的示例
Jul 21 Python
django1.8使用表单上传文件的实现方法
Nov 04 Python
利用python实现简单的邮件发送客户端示例
Dec 23 Python
Python实现嵌套列表去重方法示例
Dec 28 Python
python获取交互式ssh shell的方法
Feb 14 Python
Python面向对象总结及类与正则表达式详解
Apr 18 Python
python并发编程多进程之守护进程原理解析
Aug 20 Python
浅谈python元素如何去重,去重后如何保持原来元素的顺序不变
Feb 28 Python
python可迭代对象去重实例
May 15 Python
Python基于正则表达式实现计算器功能
Jul 13 Python
python安装mysql的依赖包mysql-python操作
Jan 01 Python
Python Pandas解析读写 CSV 文件
Apr 11 Python
pytorch 实现变分自动编码器的操作
May 24 #Python
Pytorch数据读取之Dataset和DataLoader知识总结
May 23 #Python
Python基础之函数嵌套知识总结
May 23 #Python
利用python Pandas实现批量拆分Excel与合并Excel
May 23 #Python
Python基础之元编程知识总结
May 23 #Python
Python利用folium实现地图可视化
python爬虫之selenium库的安装及使用教程
You might like
PHP网页游戏学习之Xnova(ogame)源码解读(八)
2014/06/23 PHP
PHP获取文件夹内文件数的方法
2015/03/12 PHP
PHP 7的一些引人注目的新特性简单介绍
2015/11/08 PHP
PHP实现类似题库抽题效果
2018/08/16 PHP
再谈javascript 动态添加样式规则 W3C校检
2009/12/25 Javascript
JavaScript之编码规范 推荐
2012/05/23 Javascript
JavaScript中判断页面关闭、页面刷新的实现代码
2014/08/27 Javascript
jquery结合CSS使用validate实现漂亮的验证
2015/01/29 Javascript
基于javascript实现九宫格大转盘效果
2020/05/28 Javascript
node+koa实现数据mock接口的方法
2017/09/20 Javascript
微信小程序之蓝牙的链接
2017/09/26 Javascript
详解处理bootstrap4不支持远程静态框问题
2018/07/20 Javascript
图文讲解用vue-cli脚手架创建vue项目步骤
2019/02/12 Javascript
js实现跟随鼠标移动的小球
2019/08/26 Javascript
Vue-CLI 项目在pycharm中配置方法
2019/08/30 Javascript
vue实现瀑布流组件滑动加载更多
2020/03/10 Javascript
[01:06:07]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS CIS
2014/05/22 DOTA
[54:09]RNG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
[03:43]TI9战队采访——PSG.LGD
2019/08/22 DOTA
python读取并写入mat文件的方法
2019/07/12 Python
使用pyqt5 tablewidget 单元格设置正则表达式
2019/12/13 Python
Python切割图片成九宫格的示例代码
2020/03/10 Python
python GUI框架pyqt5 对图片进行流式布局的方法(瀑布流flowlayout)
2020/03/12 Python
使用Python合成图片的实现代码(图片添加个性化文本,图片上叠加其他图片)
2020/04/30 Python
Python调用REST API接口的几种方式汇总
2020/10/19 Python
pandas使用函数批量处理数据(map、apply、applymap)
2020/11/27 Python
htnl5利用svg页面高斯模糊的方法
2018/07/20 HTML / CSS
幼儿园教师备课制度
2014/01/12 职场文书
男方父母婚礼答谢词
2014/01/25 职场文书
喝酒检查书范文
2014/02/23 职场文书
高中生的自我评价
2014/03/04 职场文书
献爱心大型公益活动策划方案
2014/09/15 职场文书
财务工作失职检讨书
2014/11/21 职场文书
2015年收银员个人工作总结
2015/04/01 职场文书
住房公积金贷款工资证明
2015/06/12 职场文书
深入理解redis中multi与pipeline
2021/06/02 Redis