torch.embedding 报错 IndexError: index out of range in self

devtools/2024/11/13 9:11:22/

文章目录

  • 1. 报错
  • 2. 原因
  • 3. 解决方法


1. 报错

torch.embedding 报错:

IndexError: index out of range in self

2. 原因

首先看下正常情况:

python">import torch
import torch.nn.functional as Finputs = torch.tensor([[1, 2, 4, 5], [4, 3, 2, 9]])
embedding_matrix = torch.rand(10, 3)
print(embedding_matrix)
print(F.embedding(inputs, embedding_matrix))

输出:

tensor([[0.8832, 0.2487, 0.7640],[0.8973, 0.5747, 0.8496],[0.2269, 0.2961, 0.7951],[0.7736, 0.9914, 0.9448],[0.4134, 0.7143, 0.4455],[0.3482, 0.1837, 0.3179],[0.4071, 0.9485, 0.1735],[0.7494, 0.8119, 0.7899],[0.3922, 0.2944, 0.4924],[0.2391, 0.8299, 0.3299]])
tensor([[[0.8973, 0.5747, 0.8496],[0.2269, 0.2961, 0.7951],[0.4134, 0.7143, 0.4455],[0.3482, 0.1837, 0.3179]],[[0.4134, 0.7143, 0.4455],[0.7736, 0.9914, 0.9448],[0.2269, 0.2961, 0.7951],[0.2391, 0.8299, 0.3299]]])

在这里,embedding_matrix 是一个全量的权重表,需要根据 inputs 的列表来选择权重列表的第几行。

例如:inputs[0] = [1, 2, 4, 5],注意这里是从0开始的,那么依次选择 embedding_matrix 的第2行、第3行、第5行、第6行,则对应的列表组成为:

python">[[0.8973, 0.5747, 0.8496],
[0.2269, 0.2961, 0.7951],
[0.4134, 0.7143, 0.4455],
[0.3482, 0.1837, 0.3179]]

这就是输出的第一部分,对于inputs[1] = [4, 3, 2, 9] 同样如此。

到这里,应该就清楚了出现 IndexError: index out of range in self 报错的原因了。如果 inputs 中出现超过权重表长度的数,就会报错。

例如上面例子权重表有10行,所以 inputs 最大数应该为9,如果 inputs[1] = [4, 3, 2, 10],如下:

python">import torch
import torch.nn.functional as Finputs = torch.tensor([[1, 2, 4, 5], [4, 3, 2, 10]])
embedding_matrix = torch.rand(10, 3)
print(embedding_matrix)
print(F.embedding(inputs, embedding_matrix))

那么报错如下:
在这里插入图片描述

3. 解决方法

知道报错原因之后,那么需要弄清楚的就是 inputs 中为什么会出现超过 embedding_matrix 权重表长度的数,这里就需要具体分析了。


http://www.ppmy.cn/devtools/114240.html

相关文章

计算机网络-第二章【新】

目录 计算机网络文章汇总 物理层的基本概念 数据通信的基础知识 数据通信系统的模型 有关信道的几个基本概念 信道信息交互的方式: 信道的极限容量 信道能够通过的频率范围 信噪比 物理层下面的传输媒体 导引型传输媒体 双绞线 同轴电缆 光缆 非导引型…

【鸿蒙】HarmonyOS NEXT星河入门到实战6-组件化开发-样式结构重用常见组件

目录 1、Swiper轮播组件 1.1 Swiper基本用法 1.2 Swiper的常见属性 1.3 Swiper的样式自定义 1.3.1 基本语法 1.3.2 案例小米有品 2、样式&结构重用 2.1 Extend:扩展组件(样式、事件) 2.2 Styles:抽取通用属性、事件 2.3 Builder:自定义构建函数(结构、样式、事…

Golang 中实现动态代理

在 Go 语言中,没有像 Java 中那样直接支持的动态代理机制,因为 Go 是静态类型的编程语言,不支持像 Java 反射那样基于接口的动态代理。但我们可以通过组合使用反射(reflect 包)和高阶函数的方式,实现类似于…

win10怎么配置dnat规则,访问win10的网口A ip的6443端口,映射到1.1.1.1的6443端口去

在Windows 10上配置DNAT(Destination Network Address Translation)规则,可以使用Windows自带的netsh命令来实现。以下是具体步骤: 打开命令提示符(以管理员身份运行): 按 Win X,…

python学习笔记目录

基于windows下docker安装HDDM-CSDN博客 在python中安装HDDM-CSDN博客(这个办法没安装成功)

【鸿蒙】HarmonyOS NEXT星河入门到实战9-组件化开发进阶应用状态管理

目录 1.1 创建页面 1.2 页面跳转和后退 1.3 页面栈 1.4 路由模式 1.5 路由传参 2、生命周期 3、Stage模型 3.1 目录概览 3.2 app.json5应用配置 3.3 module.json5模型配置 3.4 UIAbility组件 3.5 UIAbility的添加和设置启动 3.6 UIAbility组件的生命周期 3.7 拉起另…

RT-DETR改进策略:BackBone改进|Swin Transformer,最强主干改进RT-DETR

摘要 在深度学习与计算机视觉领域,Swin Transformer作为一种强大的视觉Transformer架构,以其卓越的特征提取能力和自注意力机制,正逐步引领着图像识别与检测技术的革新。近期,我们成功地将Swin Transformer引入并深度整合至RT-DERT(一种高效的实时目标检测与识别框架)中…

硬件工程师笔试面试——无线通讯模块

目录 15、无线通讯模块 15.1 基础 无线通讯模块实物图 15.1.1 概念 15.1.2 常见的无线通讯模块及其特点 15.1.3 无线通讯模块参数 15.1.4 无线通讯模块工作原理 15.2 相关问题 15.2.1 如何根据项目需求选择合适的无线通讯模块? 15.2.2 无线通讯模块的安全性如何,如…