将多个参数传递给tf.data.Datasets.from_generator中的Generator

问题描述 投票:0回答:1

我有一个包含各种尺寸图像的文件夹。我需要将它们全部调整为(160,120)并创建一个tf.data.Dataset。为此,我使用了tf.data.Dataset.from_generator。但是我似乎无法弄清楚如何将其他参数(如目录本身)发送给生成器,例如target_size,class_mode等。[注意:我正在使用Tensorflow 2.0 Beta1]

args参数采用tf.Tensor对象,并将其用作生成器的参数。我尝试将所有参数作为列表传递。

# gen is the ImageDataGenerator

real_imgs_dataset = tf.data.Dataset.from_generator(gen.flow_from_directory,
                                      args = 
                                            (data_path,    # DIRECTORY
                                            (160, 128),    # TARGET SIZE
                                            'rgb',         # COLOR MODE
                                             None,         # CLASSES
                                             None,         # CLASS MODE
                                             32,           # BATCH SIZE
                                             True),        # SHUFFLE
                                        output_types = tf.float32, 
                                        output_shapes = ([None,160,128,3])
                                       )

我想做的是将图像传递给生成器,然后生成器将逐批吐出图像并创建一个tf.data.Dataset。但是,当我尝试运行上面的代码片段时,出现错误消息:-

“ ValueError:尝试将不受支持的类型()的值(无)转换为张量”

python tensorflow generator tensorflow-datasets
1个回答
0
投票

我在该处报告了类似的问题:https://github.com/tensorflow/tensorflow/issues/33133

适合您的情况的建议解决方案是:

gen_mod = gen.flow_from_directory(directory=data_path, target_size=(
    160, 128), class_mode=None, batch_size=32, shuffle=True)

real_imgs_dataset = tf.data.Dataset.from_generator(
    lambda: gen_mod,
    output_types=tf.float32,
    output_shapes=([None, 160, 128, 3])
)

希望它有所帮助!

© www.soinside.com 2019 - 2024. All rights reserved.