TensorFlow 1.15中Dataset.from_generator加载数据的打印异常问题
以下是几种可能的核心原因:
生成器索引/循环逻辑错误:若你通过
range(0, len(file_list), batch_size)这类步长遍历方式构建批次,当文件总数不是batch_size的整数倍时,索引边界可能出错。比如总共有7个文件(image0-image6),步长3的话,最后一次循环只会取到image6,而非你预期的image4-6——这说明文件列表排序或索引计算逻辑存在问题,导致image6未被加入目标批次。预取机制与生成器终止的冲突:TensorFlow 1.15的Estimator底层用
tf.data.Dataset.from_generator()封装生成器,默认开启预取优化。当生成器迭代至最后一批时,Estimator可能在生成器抛出StopIteration异常后直接终止,导致预取的最后一个文件(image6)还未触发打印语句就被丢弃。这种情况常发生在生成器的yield操作早于打印步骤,或预取逻辑提前消耗了生成器的终止信号。批次构建逻辑漏洞:若生成器是逐个收集文件,攒够batch_size个再
yield,可能存在循环条件错误,导致遍历到image5就终止,未处理image6。比如循环的终止条件写成了i < len(file_list)-1,而非i < len(file_list)。文件读取静默异常:image6.npy可能存在损坏、权限不足或路径错误,生成器读取时触发异常,但TensorFlow 1.15的Estimator在predict模式下可能静默跳过异常元素,导致该文件的打印语句未被执行,且无报错提示。
内容的提问来源于stack exchange,提问作者Alessandro

