使用tf.keras.utils.image_dataset_from_directory创建图像数据集时出现OUT_OF_RANGE日志的原因咨询
tf.keras.utils.image_dataset_from_directory创建图像数据集时出现OUT_OF_RANGE日志的原因咨询
嗨,这个问题我之前也碰到过,别慌——那个OUT_OF_RANGE: End of sequence其实只是TensorFlow的INFO级日志,不是真的错误或者需要修复的警告,属于正常的内部提示,我来给你拆解清楚:
触发日志的原因
你的代码里有一行len(list(dataset.as_numpy_iterator())),这行代码会把整个数据集的所有batch完整遍历一遍(相当于把数据集迭代器耗尽)。当TensorFlow的数据集迭代器走到最后一个batch之后,会抛出OUT_OF_RANGE状态来表示“没有更多数据可以迭代了”,虽然这个状态会被Python的迭代逻辑自动处理掉,但TensorFlow会把这个内部过程以INFO日志的形式打印出来。为什么数据集功能完全正常?
放心,tf.data.Dataset本身是支持重复迭代的,哪怕你用as_numpy_iterator()遍历过一次,后续调用dataset.take(1)依然能重新生成迭代器获取数据,所以你能正常打印图像和标签的形状,数据集大小的计算也是准确的。这个日志只是在告诉你“刚才的那次全量迭代已经走到尽头了”,完全不会影响数据集的后续使用。如果想屏蔽这个日志该怎么做?
要是觉得这类INFO日志太烦人,可以在代码开头调整TensorFlow的日志级别,只显示警告及以上的内容:import tensorflow as tf tf.get_logger().setLevel('WARN')你也可以在运行脚本前通过环境变量设置:
export TF_CPP_MIN_LOG_LEVEL=2这样就能直接屏蔽掉INFO和DEBUG级别的日志输出了。
内容来源于stack exchange
相关产品推荐
相关产品推荐

