【解决办法】torch交叉熵使用时遇到 Dimension out of range
简述
其实这个问题我很久以前用pytorch写程序的时候就遇到过这个问题,当时纠结了很久之后最后解决了。当时本来就想来写个东西来记录下避免其他人也遇到这样的问题。但后面我个菜鸡就完全忘记了emmmm
展示说明
不同于我以往直接给出结论。这次我会通过展示的方式较为详细的讲解下。
- 导入包
import torch
import torch.nn as nn
- 创造这个损失函数类
loss = nn.CrossEntropyLoss()
- 随机生成下这个数据A
A = torch.randn(3, 5, requires_grad=True)
内容如下:
A
tensor([[ 1.0483, -1.4251, 1.0502, 0.2437, 0.1477],[-0.1300, -1.0798, -1.0835, -1.0473, 1.2076],[-0.1647, -1.1366, 0.7088, 1.3719, 1.9135]], requires_grad=True)
- 随机生成3个label
target = torch.empty(3, dtype=torch.long).random_(5)
内容如下:
target
tensor([2, 2, 3])
没有问题
output = loss(A, target)
- 这时候就是没有问题的
output
tensor(1.6934, grad_fn=<NllLossBackward>)
有问题的情况演示
- 将前面创建的A在一维上取argmax。得到对应的label
A_arg = torch.argmax(A, dim=1)
内容如下:
A_arg
tensor([2, 4, 4])
- 调用,出现题目所示的bug
output = loss(A_arg, target)
报错非常一大串emmm。关键就是下面这句。
RuntimeError: Dimension out of range (expected to be in range of [-1, 0], but got 1)
解释
其实就是因为torch的交叉熵的输入第一个位置的输入应该是在每个label下的概率, 而不是对应的label。
所以直接写成label的你,就出现上面所说的错误了。
NLLoss还是CE两者都是类似的。第一个输入为每个样本在不同label下的概率值(矩阵),第二个输入为label。注意,这里的label本质上都是概率矩阵在列方向上的index(也就是对应于某个样本的index类别)
【解决办法】torch交叉熵使用时遇到 Dimension out of range相关推荐
- python 和 torch 交叉熵损失
pytorch多维度交叉熵损失用法: criterion = nn.CrossEntropyLoss() loss = criterion(logit, target.long()) 其中,logit ...
- 成功解决:计算交叉熵lossFunction报错“1D target tensor expected, multi-target not supported”的解决办法
https://blog.csdn.net/weixin_43429591/article/details/107047895
- Keil | 解决Keil与VScode配合使用时,代码与注释位置不一样的问题。
文章目录 一.前言 二.代码与注释位置不一样 三.解决方法 一.前言 Keil是一个代码体验非常差的代码编辑器,不过Keil作为一个代码编译器与代码调试工具是非常棒的.有一些嵌入式的老前辈使用Keil ...
- 关于iOS 解决微信SDK1.8.6 使用时“universal link校验不通过”问题
1.前言 最近对App 第三方库进行检查更新的时候,发现微信使用universal link 进行登录.分享等操作.然后一直遇到"universal link 校验不通过"的问题, ...
- Keil | 解决Keil与Source Insight4.0配合使用时,代码与注释位置(乱码)不一样的问题
文章目录 一.前言 二.解决问题 2.1.Keil 2.2.Source Insight4.0 一.前言 Keil | 解决Keil与VScode配合使用时,代码与注释位置不一样的问题 上一次解决VS ...
- 开关怎么使用_水龙头漏水怎么办?使用时把控开关力度很重要
水龙头漏水是家居生活中器件中常见的故障之一,导致水龙头漏水的原因有很多,严重就需要我们更换新的水龙头了.水龙头漏水怎么办呢?其实,我们掌握一些家居生活的知识也是对我们很有帮助的,下面是水龙头漏水的解决 ...
- 总结 | Revit安装失败的常见问题及解决办法
Revit作为最常用的BIM软件之一,由于体量大.不同电脑软硬件情况不同等原因,安装经常是不那么顺利的. 特别是初次安装的系统,经常会安装失败.下面就来总结一下Revit安装失败的常见问题及解决办法, ...
- 总结:Revit安装失败的常见问题及解决办法
Revit作为最常用的BIM软件之一,由于体量大.不同电脑软硬件情况不同等原因,安装经常是不那么顺利的. 特别是初次安装的系统,经常会安装失败.下面就来总结一下Revit安装失败的常见问题及解决办法, ...
- “交叉熵”如何做损失函数?打包理解“信息量”、“比特”、“熵”、“KL散度”、“交叉熵”
[本文内容是对下面视频的整理和修正] "交叉熵"如何做损失函数?打包理解"信息量"."比特"."熵"."KL散 ...
最新文章
- 【leetcode】589. N-ary Tree Preorder Traversal
- 【408预推免复习】计算机网络(谢希仁第七版)第一章——概述
- NHibernate——Criteria条件查询
- 穿越时空,跟我一起探索云栖数字谷(2021云栖大会免费送票)
- navicat for mysql 连接时报错:1251-Client does not support authentication protocol requested by server
- 异步任务---SpringBoot
- 阿里云移动端播放器高级功能---截图和音频波形 1
- rxtx串口事件不触发_一种串口高效收发思路及方案
- Pose-Aware Face Recognition in the Wild--填坑1
- 什么是立即执行函数,有什么作用?
- Freescale MC9S08AW60汇编学习笔记(三)
- python查看所有异常类_Python调试常见异常汇总
- python分页PDF
- 傅里叶分析之掐死教程(完整版)
- 计算机教学模式有待创新,计算机软件教学中教学评价模式的创新与探索
- mt4服务器显示无连接,MT4登录显示“无效账户”,“无法连接”怎么解决
- 微信小程序获取当前地址以及选择地址详解
- 01-01-osg GL3 环境搭建
- 全网最强maven教程-使用Maven搭建Struts2框架的开发环境
- 年薪10万与年薪100万的程序员,写出代码的区别
热门文章
- 基于Android Studio搭建Android应用开发环境
- WINCE下SOS驱动开发
- 安装RVDS2.2破解版
- 放弃 PowerPoint,改用 reveal.js
- 使用secureCRT连接VMware-Ubuntukylin虚拟机
- Java线程:线程栈模型与线程的变量
- 关于分组序号在MySQL中的实现
- SVM分类器原理详解
- [Caffe]:关于*** Aborted at 1479432790 (unix time) try date -d @1479432790 错误的另一种原因
- 【Python学习系列九】Python机器学习库scikit-learn实现SVM案例