训练PyTorch CNN时出现IndexError索引越界错误是什么原因
报错诱因
错误提示:index 748 is out of bounds for axis 0 with size 1
该错误完全由标签张量的维度不匹配导致:
你使用的标签labels_ch维度为(1, 18900),其第0维的长度仅为1,仅支持索引值0。而自定义Dataset的__getitem__方法中,直接使用样本索引idx(取值范围为0~18899)作为第0维下标读取标签,当读取第748个样本时,执行的操作为labels_ch[748],自然会触发第0维越界报错。
解决方法
- 先对标签张量做维度压缩,去掉多余的第0维:执行
labels_ch = labels_ch.squeeze(0),处理后标签维度会变为(18900,),第0维长度和训练集样本总数完全匹配。 - 检查自定义Dataset的
__getitem__实现,确认取标签的逻辑为return 样本张量, labels_ch[idx]即可。 - 若调整后仍有报错,可临时在
__getitem__中添加打印语句,输出idx的取值范围和labels_ch的当前维度,确认维度调整生效、索引未超出样本总数范围。
内容的提问来源于stack exchange,提问作者George
相关产品推荐
相关产品推荐

