使用flow_from_dataframe方法时出现'list index out of range'错误求助
解决
flow_from_dataframe生成测试集时的IndexError问题 我来帮你拆解这个问题——你碰到的IndexError: list index out of range本质原因很直接:你设置的测试batch size(512)超过了df_valid里的样本总数。
为什么会出现这个错误?
flow_from_dataframe生成的迭代器在创建批次时,会按照你指定的batch_size去尝试从数据集中提取对应数量的样本。如果你的验证集(df_valid)实际样本数小于512,迭代器内部生成的索引数组长度就会不够,当它尝试访问超出范围的索引时,就会抛出这个错误。原Kaggle内核能正常运行,大概率是因为它的验证集样本数≥512,而你的数据集里验证集规模更小。
具体解决方案
1. 先确认验证集样本数量
先加一行代码查看df_valid的实际样本数:
print(f"验证集样本总数:{len(df_valid)}")
然后把batch_size设置成不超过这个数值的整数。
2. 动态匹配batch_size(推荐)
如果你需要一次性获取所有验证集数据,可以直接把batch_size设为验证集的样本总数,这样就不会出现索引越界:
# 动态设置batch_size为验证集样本总数 test_batch_size = len(df_valid) test_X, test_Y = next(flow_from_dataframe( train_datagen, df_valid, path_col='path', y_col='bone_age_zscore', target_size=IMG_SIZE, color_mode='rgb', batch_size=test_batch_size ))
3. 测试集建议关闭数据增强
另外要注意:你当前用的train_datagen包含了水平翻转、位移等数据增强操作,这对于测试/验证数据来说是不合适的(会干扰模型评估的准确性)。建议单独创建一个不带增强的生成器:
# 创建仅含预处理的测试生成器 test_datagen = ImageDataGenerator(preprocessing_function=preprocess_input) test_X, test_Y = next(test_datagen.flow_from_dataframe( df_valid, path_col='path', y_col='bone_age_zscore', target_size=IMG_SIZE, color_mode='rgb', batch_size=len(df_valid), shuffle=False # 关闭打乱,保证样本顺序与df_valid一致 ))
这样调整后,应该就能顺利获取测试集的test_X和test_Y了。
内容的提问来源于stack exchange,提问作者Divyan Hirasen
相关产品推荐
相关产品推荐

