简述

其实这个问题我很久以前用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相关推荐

  1. python 和 torch 交叉熵损失

    pytorch多维度交叉熵损失用法: criterion = nn.CrossEntropyLoss() loss = criterion(logit, target.long()) 其中,logit ...

  2. 成功解决:计算交叉熵lossFunction报错“1D target tensor expected, multi-target not supported”的解决办法

    https://blog.csdn.net/weixin_43429591/article/details/107047895

  3. Keil | 解决Keil与VScode配合使用时,代码与注释位置不一样的问题。

    文章目录 一.前言 二.代码与注释位置不一样 三.解决方法 一.前言 Keil是一个代码体验非常差的代码编辑器,不过Keil作为一个代码编译器与代码调试工具是非常棒的.有一些嵌入式的老前辈使用Keil ...

  4. 关于iOS 解决微信SDK1.8.6 使用时“universal link校验不通过”问题

    1.前言 最近对App 第三方库进行检查更新的时候,发现微信使用universal link 进行登录.分享等操作.然后一直遇到"universal link 校验不通过"的问题, ...

  5. Keil | 解决Keil与Source Insight4.0配合使用时,代码与注释位置(乱码)不一样的问题

    文章目录 一.前言 二.解决问题 2.1.Keil 2.2.Source Insight4.0 一.前言 Keil | 解决Keil与VScode配合使用时,代码与注释位置不一样的问题 上一次解决VS ...

  6. 开关怎么使用_水龙头漏水怎么办?使用时把控开关力度很重要

    水龙头漏水是家居生活中器件中常见的故障之一,导致水龙头漏水的原因有很多,严重就需要我们更换新的水龙头了.水龙头漏水怎么办呢?其实,我们掌握一些家居生活的知识也是对我们很有帮助的,下面是水龙头漏水的解决 ...

  7. 总结 | Revit安装失败的常见问题及解决办法

    Revit作为最常用的BIM软件之一,由于体量大.不同电脑软硬件情况不同等原因,安装经常是不那么顺利的. 特别是初次安装的系统,经常会安装失败.下面就来总结一下Revit安装失败的常见问题及解决办法, ...

  8. 总结:Revit安装失败的常见问题及解决办法

    Revit作为最常用的BIM软件之一,由于体量大.不同电脑软硬件情况不同等原因,安装经常是不那么顺利的. 特别是初次安装的系统,经常会安装失败.下面就来总结一下Revit安装失败的常见问题及解决办法, ...

  9. “交叉熵”如何做损失函数?打包理解“信息量”、“比特”、“熵”、“KL散度”、“交叉熵”

    [本文内容是对下面视频的整理和修正] "交叉熵"如何做损失函数?打包理解"信息量"."比特"."熵"."KL散 ...

最新文章

  1. 【leetcode】589. N-ary Tree Preorder Traversal
  2. 【408预推免复习】计算机网络(谢希仁第七版)第一章——概述
  3. NHibernate——Criteria条件查询
  4. 穿越时空,跟我一起探索云栖数字谷(2021云栖大会免费送票)
  5. navicat for mysql 连接时报错:1251-Client does not support authentication protocol requested by server
  6. 异步任务---SpringBoot
  7. 阿里云移动端播放器高级功能---截图和音频波形 1
  8. rxtx串口事件不触发_一种串口高效收发思路及方案
  9. Pose-Aware Face Recognition in the Wild--填坑1
  10. 什么是立即执行函数,有什么作用?
  11. Freescale MC9S08AW60汇编学习笔记(三)
  12. python查看所有异常类_Python调试常见异常汇总
  13. python分页PDF
  14. 傅里叶分析之掐死教程(完整版)
  15. 计算机教学模式有待创新,计算机软件教学中教学评价模式的创新与探索
  16. mt4服务器显示无连接,MT4登录显示“无效账户”,“无法连接”怎么解决
  17. 微信小程序获取当前地址以及选择地址详解
  18. 01-01-osg GL3 环境搭建
  19. 全网最强maven教程-使用Maven搭建Struts2框架的开发环境
  20. 年薪10万与年薪100万的程序员,写出代码的区别

热门文章

  1. 基于Android Studio搭建Android应用开发环境
  2. WINCE下SOS驱动开发
  3. 安装RVDS2.2破解版
  4. 放弃 PowerPoint,改用 reveal.js
  5. 使用secureCRT连接VMware-Ubuntukylin虚拟机
  6. Java线程:线程栈模型与线程的变量
  7. 关于分组序号在MySQL中的实现
  8. SVM分类器原理详解
  9. [Caffe]:关于*** Aborted at 1479432790 (unix time) try date -d @1479432790 错误的另一种原因
  10. 【Python学习系列九】Python机器学习库scikit-learn实现SVM案例