PyTorch出现Index Out of Range in self错误 推荐模型预测报错如何解决
PyTorch推荐引擎预测Index out of range报错原因
这个报错绝大多数场景由Embedding层索引越界触发,少数由代码语法/变量错误导致,具体原因如下:
- 低级变量/语法错误
你给出的代码片段本身存在两处基础错误:- 列名引用漏写引号:
input['user_id]、input['content_id]需改为input['user_id']、input['content_id'] - 变量名不匹配:你将ID列表存储到了
users、content变量中,转张量时却调用了未定义的user_id、content_id变量,修正为:
user_id_tensor = torch.tensor(users, dtype=torch.long) content_id_tensor = torch.tensor(content, dtype=torch.long) - 列名引用漏写引号:
- Embedding层索引越界(最常见原因)
PyTorch的nn.Embedding要求输入的索引必须在[0, num_embeddings - 1]范围内,超出就会触发该报错,推荐场景下通常由两种问题导致:- 未做ID连续映射:直接使用原始业务ID作为Embedding输入,训练时的最大ID小于预测时的输入ID,比如训练时用户最大ID是1,Embedding的
num_embeddings设为2,预测时传入了ID为2的用户,超出索引范围 - 训练/预测映射逻辑不一致:训练时你对原始ID做了重映射(比如原始ID1映射为0、原始ID2映射为1),但预测时没有复用同一套映射表转换输入ID,直接传入原始ID导致索引越界
- 未做ID连续映射:直接使用原始业务ID作为Embedding输入,训练时的最大ID小于预测时的输入ID,比如训练时用户最大ID是1,Embedding的
- 张量数据类型错误
输入ID的张量如果是浮点型,也会触发索引校验错误,转张量时必须指定为torch.long整型。
内容的提问来源于stack exchange,提问作者titu84hh
相关产品推荐
相关产品推荐

