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

TensorFlow2.0Beta1中tf.data.from_generator多参数传递及报错解决

解决tf.data.Dataset.from_generator传递None参数的报错问题

这个报错的核心原因是:在TensorFlow 2.0 Beta1中,from_generator的args参数要求所有传入的值都能被转换为tf.Tensor对象,但你传入的None(对应classes和class_mode参数)属于不支持转换的类型,所以触发了ValueError。

要解决这个问题,我们可以绕过args参数的限制,用自定义生成器函数或者lambda表达式来封装ImageDataGenerator.flow_from_directory的调用,把那些无法转为Tensor的参数直接在函数内部传递,而不是通过args传入。

方法1:自定义生成器函数

from tensorflow.keras.preprocessing.image import ImageDataGenerator

# 初始化ImageDataGenerator
gen = ImageDataGenerator()
data_path = "你的图片目录路径"

def image_generator():
    # 直接在生成器内部调用flow_from_directory,传入所有参数
    for batch in gen.flow_from_directory(
        directory=data_path,
        target_size=(160, 120),  # 修正为你需求的目标尺寸
        color_mode='rgb',
        classes=None,
        class_mode=None,
        batch_size=32,
        shuffle=True
    ):
        yield batch

# 构建tf.data.Dataset
real_imgs_dataset = tf.data.Dataset.from_generator(
    generator=image_generator,
    output_types=tf.float32,
    output_shapes=tf.TensorShape([None, 160, 120, 3])
)

方法2:使用lambda表达式(更简洁)

如果不想单独定义生成器函数,可以用lambda直接包装flow_from_directory的调用:

real_imgs_dataset = tf.data.Dataset.from_generator(
    lambda: gen.flow_from_directory(
        data_path,
        target_size=(160, 120),
        color_mode='rgb',
        classes=None,
        class_mode=None,
        batch_size=32,
        shuffle=True
    ),
    output_types=tf.float32,
    output_shapes=tf.TensorShape([None, 160, 120, 3])
)

额外注意点

你原代码里的target_size写的是(160,128),但题目需求是调整为(160,120),记得修正这个参数,确保输出图片尺寸符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:35:04