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的Cookie.py模块支持冒号做key的方法
Dec 28 Python
Python采用socket模拟TCP通讯的实现方法
Nov 19 Python
Python常用知识点汇总
May 08 Python
Django objects.all()、objects.get()与objects.filter()之间的区别介绍
Jun 12 Python
Python Flask基础教程示例代码
Feb 07 Python
python 处理dataframe中的时间字段方法
Apr 10 Python
python 控制Asterisk AMI接口外呼电话的例子
Aug 08 Python
Python3.6+selenium2.53.6自动化测试_读取excel文件的方法
Sep 06 Python
解决Python二维数组赋值问题
Nov 28 Python
python爬虫添加请求头代码实例
Dec 28 Python
基于python实现简单网页服务器代码实例
Sep 14 Python
Selenium关闭INFO:CONSOLE提示的解决
Dec 07 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
使用sockets:从新闻组中获取文章(一)
2006/10/09 PHP
PHP中通过HTTP_USER_AGENT判断是否为手机移动终端的函数代码
2013/02/14 PHP
destoon切换城市后实现logo旁边显示地区名称的方法
2014/08/21 PHP
php实现多维数组中每个单元值(数字)翻倍的方法
2015/02/16 PHP
php中ob_flush函数和flush函数用法分析
2015/03/18 PHP
JavaScript 反科里化 this [译]
2012/09/20 Javascript
JS版的date函数(和PHP的date函数一样)
2014/05/12 Javascript
jQery使网页在显示器上居中显示适用于任何分辨率
2014/06/09 Javascript
Javascript中实现String.startsWith和endsWith方法
2015/06/10 Javascript
ReactJs快速入门教程(精华版)
2016/11/28 Javascript
Bootstrap导航中表单简单实现代码
2017/03/06 Javascript
react-native ListView下拉刷新上拉加载实现代码
2017/08/03 Javascript
详解vue-cli快速构建vue应用并实现webpack打包
2017/12/13 Javascript
JS实现的点击按钮图片上下滚动效果示例
2019/01/28 Javascript
vue+高德地图写地图选址组件的方法
2019/05/18 Javascript
Python数据类型之列表和元组的方法实例详解
2019/07/08 Python
python 字段拆分详解
2019/12/17 Python
Python 通过爬虫实现GitHub网页的模拟登录的示例代码
2020/08/17 Python
python 用struct模块解决黏包问题
2020/11/07 Python
一篇文章教你用python画动态爱心表白
2020/11/22 Python
python通过cython加密代码
2020/12/11 Python
python将YUV420P文件转PNG图片格式的两种方法
2021/01/22 Python
2021年值得向Python开发者推荐的VS Code扩展插件
2021/01/25 Python
Python入门基础之数字字符串与列表
2021/02/01 Python
全球独特生活方式产品和礼品购物网站:AHAlife
2018/09/18 全球购物
书香校园活动方案
2014/02/28 职场文书
出纳会计岗位职责
2014/03/12 职场文书
毕业生求职信
2014/06/10 职场文书
部门活动策划方案
2014/08/16 职场文书
2015大学自主招生自荐信范文
2015/03/04 职场文书
幼儿园安全教育随笔
2015/08/14 职场文书
2016清明节森林防火广播稿
2015/12/17 职场文书
高中英语教学反思范文
2016/03/02 职场文书
应届生们该怎么书写求职信?
2019/07/05 职场文书
干货:企业内部人才推荐奖励方案!
2019/07/09 职场文书
Mysql 如何查询时间段交集
2021/06/08 MySQL