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 相关文章推荐
python读写ini文件示例(python读写文件)
Mar 25 Python
Python原始字符串(raw strings)用法实例
Oct 13 Python
Python脚本实现DNSPod DNS动态解析域名
Feb 14 Python
Python3中多线程编程的队列运作示例
Apr 16 Python
Python判断某个用户对某个文件的权限
Oct 13 Python
Python开发中爬虫使用代理proxy抓取网页的方法示例
Sep 26 Python
Python3简单实例计算同花的概率代码
Dec 06 Python
selenium python浏览器多窗口处理代码示例
Jan 15 Python
详解Python连接MySQL数据库的多种方式
Apr 16 Python
Win10系统下安装labelme及json文件批量转化方法
Jul 30 Python
常用python爬虫库介绍与简要说明
Jan 25 Python
使用 Python 在京东上抢口罩的思路详解
Feb 27 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
UCenter 批量添加用户的php代码
2012/07/17 PHP
php jq jquery getJSON跨域提交数据完整版
2013/09/13 PHP
php中的curl_multi系列函数使用例子
2014/07/29 PHP
php连接mysql数据库
2017/03/21 PHP
php头像上传预览实例代码
2017/05/02 PHP
laravel 框架配置404等异常页面
2019/01/07 PHP
php使用pecl方式安装扩展操作示例
2019/08/12 PHP
非主流的textarea自增长实现js代码
2011/12/20 Javascript
js动态创建表格,删除行列的小例子
2013/07/20 Javascript
兼容FF和IE的动态table示例自写
2013/10/21 Javascript
JS小功能(offsetLeft实现图片滚动效果)实例代码
2013/11/28 Javascript
使用纯javascript实现放大镜效果
2015/03/18 Javascript
javascript带回调函数的异步脚本载入方法实例分析
2015/07/02 Javascript
莱鸟介绍window.print()方法
2016/01/06 Javascript
Webwork 实现文件上传下载代码详解
2016/02/02 Javascript
javascript创建对象的3种方法
2016/11/02 Javascript
Js利用prototype自定义数组方法示例
2017/10/20 Javascript
vue基础之data存储数据及v-for循环用法示例
2019/03/08 Javascript
JS实现电脑虚拟键盘的操作
2020/06/24 Javascript
Vue中正确使用Element-UI组件的方法实例
2020/10/13 Javascript
urllib2自定义opener详解
2014/02/07 Python
python编写暴力破解FTP密码小工具
2014/11/19 Python
使用Python3中的gettext模块翻译Python源码以支持多语言
2015/03/31 Python
Python OS模块常用函数说明
2015/05/23 Python
Python实现统计文本文件字数的方法
2017/05/05 Python
通过python将大量文件按修改时间分类的方法
2018/10/17 Python
Python的信号库Blinker用法详解
2020/12/31 Python
HTML5通过调用canvas对象的getContext()方法来获取绘图环境
2014/06/23 HTML / CSS
淘宝网店营销策划书
2014/01/11 职场文书
便利店的创业计划书
2014/01/15 职场文书
“三支一扶”支教教师思想汇报
2014/09/13 职场文书
乡镇干部个人对照检查材料思想汇报(原创篇)
2014/09/28 职场文书
骨干教师事迹材料
2014/12/17 职场文书
初三语文教学计划
2015/01/22 职场文书
红色影片观后感
2015/06/18 职场文书
css3 选择器
2022/05/11 HTML / CSS