You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Keras单目深度估计代码调用next()触发StopIteration错误如何修复

StopIteration错误排查修复方案

这个错误的本质是你构造的DataGenerator迭代器首次取数时就没有可用数据返回,按照以下步骤排查即可:

1. 检查数据集基础参数

  • 先执行print(len(df))确认数据集总样本数,必须满足总样本数 ≥ 当前设置的batch_size=6,如果样本数小于6,迭代器第一次取数就会直接触发空迭代报错
  • 检查HEIGHT、WIDTH参数是否和数据集图片的尺寸要求匹配,有没有因为尺寸校验过滤掉了全部样本,导致实际可用样本数为0
  • 确认DataGenerator的__len__方法实现是否正确,标准实现应该返回总批次数量,返回值≤0就会直接终止迭代

2. 检查DataGenerator核心逻辑

  • 确认__getitem__方法中是否添加了非法数据过滤逻辑,比如图片读取失败直接跳过的规则,如果过滤后当前批次没有可用数据,也会间接触发空迭代报错
  • 确认索引取值范围是否合法,有没有出现索引超出len(df)范围的逻辑,导致取不到有效样本

3. 临时验证方法

你可以先把batch_size改成1测试是否能正常返回数据,如果修改后运行正常,就能确认是数据集总样本数不足以支撑batch_size=6的要求:

# 测试生成器可用性
test_gen = DataGenerator(data=df, batch_size=1, dim=(HEIGHT, WIDTH))
print("生成器总批次:", len(test_gen))
print("单批次样本:", next(iter(test_gen)))

4. 对应修复方案

  • 如果是数据集样本数不足:要么扩充数据集到至少6条,要么把batch_size调整为小于等于总样本数的值,同时要把visualize_depth_map函数中循环的range(6)修改为对应batch_size的大小,避免后续索引越界
  • 如果是__len__方法实现错误,修正为标准写法即可:
import math
def __len__(self):
    return math.ceil(len(self.data) / self.batch_size)
  • 如果是数据过滤逻辑导致空批次:要么放宽过滤校验规则,要么添加补全逻辑,当过滤后样本不足时自动补全重复样本凑够batch_size大小

内容的提问来源于stack exchange,提问作者be_real

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 20:36:02