索引越界错误排查:axis 0维度大小4141却访问索引11186
问题:IndexError索引越界异常
运行机器学习项目时反复触发IndexError,每次报错的索引值不同,但始终提示:
index X is out of bounds for axis 0 with size 4141
报错溯源:
- 触发位置:
datasets.py第154行__getitem__方法调用iterator(index) - 最终报错语句:第116行
prepair_training_pairs方法中的labels = self.labels[index, :]
已知代码关联信息
generated_train_batch_label函数生成的labels.pkl中,张量形状为tensor.Size([4141, 18]),即axis 0维度长度为4141- 数据集类的
__len__方法返回len(self.filenames),但prepair_training_pairs、prepair_test_pairs方法使用传入的index访问self.labels
根因分析
核心矛盾是数据集长度和标签集长度不匹配:self.filenames的长度大于4141,导致__getitem__方法传入的index范围超过了self.labels的axis 0维度上限(最大有效索引为4140),触发越界报错。
修复方案
- 对齐数据集与标签集长度:检查
self.filenames的生成逻辑,过滤掉没有对应标签的文件条目,确保len(self.filenames)等于4141 - 修正
__len__方法返回值:将数据集类的__len__方法改为返回self.labels.shape[0],限制索引的取值范围,避免超出标签集维度上限 - 检查标签生成逻辑:确认
generated_train_batch_label函数是否遗漏部分标签生成,确保标签集axis 0长度与self.filenames长度一致
内容的提问来源于stack exchange,提问作者Parachutes
相关产品推荐
相关产品推荐

