ImageDataGenerator dtype 不会改变数据类型

Mat*_*hio 9 python casting generator keras

我正在尝试将 my 的输出数据转换ImageDataGenerator为整数。这是我的发电机:

train_mask_data_gen = ImageDataGenerator(rotation_range=10,
                                         width_shift_range=10,
                                         height_shift_range=10,
                                         zoom_range=0.3,
                                         horizontal_flip=True,
                                         vertical_flip=True,
                                         fill_mode='nearest',#interpolation used for augmenting the image
                                         cval=0,
                                         rescale=1./255,
                                         dtype='int32')
Run Code Online (Sandbox Code Playgroud)

进而:

train_mask_gen = train_mask_data_gen.flow_from_directory(os.path.join(training_dir, 'masks'),
                                                     target_size=(img_h, img_w),
                                                     batch_size=bs,
                                                     class_mode=None, # Because we have no class subfolders in this case
                                                     shuffle=True,
                                                     interpolation='nearest',#interpolation used for resizing
                                                     #color_mode='grayscale',
                                                     seed=SEED)
Run Code Online (Sandbox Code Playgroud)

输入是二进制图像(0 或 255 作为值),我将它们归一化并且我想获得整数值(例如,每个像素只能有 0 或 1 个值)。

到目前为止,如果我“测试”我获得的生成数据的类型,'numpy.float32'但我是dtype='int32在我的生成器中写入的。似乎该dtype条目被完全忽略了,我只是得到了默认值(如文档中所述:Keras Image Generator 为什么会发生这种情况?如何“强制”我的数据为整数?

mrk*_*mrk 2

这些老问题压力很大,但今天我会尝试一下。

在查看 的文档ImageDataGenerator,该dtype参数似乎并不直接影响生成图像的数据类型,而是定义:

“用于生成的数组的 Dtype。”

因此,dtype参数 inImageDataGenerator用于在生成器返回之前设置保存增强图像数据的内部数组的数据类型。它不会影响生成图像本身的数据类型。

在图像数据生成的情况下,生成的图像仍将具有 的数据类型,无论生成器中float32指定的值如何。dtype

如何强制我的数据为整数?

要在生成的图像中获得整数值,您需要在生成图像后手动将其转换为整数。

import numpy as np

# Generate images using the generator
generated_images = train_mask_gen.next()

# Convert the images to integers
generated_images = np.round(generated_images).astype(np.int32)
Run Code Online (Sandbox Code Playgroud)