Batch_size在 TensorFlow Keras 中进行图像增强的目的是什么?

purpose of Batch_size in image augmentation in tensorflow keras?

提问人:Ali a 提问时间:11/15/2023 最后编辑:Ali a 更新时间:11/15/2023 访问量:58

问:

我正在尝试使用 keras 和 tensorflow 进行图像增强。但是,我无法理解batch_size参数对增强数据的影响。我给出了 1 张图像作为输入,代码运行了 3 次,我的输出只有 3 张图像(代码附在下面)。我尝试多次更改batch_size和迭代,即使 chatgpt 说,在这种情况下,我应该有 6 张图像(3 次迭代,2 batch_size)作为输出。

无论如何,我的想法是输出图像(对于一个图像输入)= batch_size * 1(对于每次迭代) 因此,如果batch_size不是每个图像输入的乘数,那么它的目的是什么?或者我错过了什么?

有关代码的更多信息: https://blog.keras.io/building-powerful-image-classification-models-using-very-little-data.html

from keras.preprocessing.image import ImageDataGenerator, array_to_img, img_to_array, load_img

datagen = ImageDataGenerator(
        rotation_range=40,
        width_shift_range=0.2,
        height_shift_range=0.2,
        shear_range=0.2,
        zoom_range=0.2,
        horizontal_flip=True,
        fill_mode='nearest')

img = load_img('/content/library.png')  
x = img_to_array(img)  
x = x.reshape((1,) + x.shape)  

i = 0
for batch in datagen.flow(x, batch_size=2,
                          save_to_dir='libra', save_prefix='lib', save_format='jpeg'):
    i += 1
    if i > 2:
        break
Python TensorFlow 机器学习 Keras

评论

0赞 Hossein 11/15/2023
我不熟悉 TF/keras,但可能是它覆盖了磁盘上以前创建的映像吗?尝试显示图像并确保您得到您期望的内容,当您这样做时,我想这会将其缩小到被覆盖!
0赞 Ali a 11/16/2023
谢谢侯赛因的友好回应。我确实检查过,它没有覆盖 - 生成图像的路径与单个输入图像不同。

答:

0赞 mhenning 11/15/2023 #1

根据文档,提供了一个生成批量数据的生成器。 将采用一组图像,每次迭代生成器(使用循环、列表推导或类似方法)时,它都会输出一批图像。您可以使用该参数控制批处理的大小。
因此,如果你有一个包含 100 个图像的数组 x,则在每次循环迭代中都会给你 32 个不同的增强图像。如果图像少于批量大小,则不会多次输出它们以填充。
ImageDataGeneratorflowforbatch_size.flow(x, batch_size=32)batchbatch_size

此外,如果您使用 Generator,则 tf.数据集或类似数据,则无需指定 in ,因为数据已分批出现。(链接,信息框batch_sizemodel.fit()batch_size)

不过,有一条信息,在文档中指出已弃用:ImageDataGenerator

已弃用:tf.keras.preprocessing.image.ImageDataGenerator 不是 建议用于新代码。首选加载图像 tf.keras.utils.image_dataset_from_directory和转换 输出带有预处理层的 tf.data.Dataset。查看更多 信息,请参阅有关加载图像和增强的教程 图像,以及预处理层指南。

评论

0赞 Ali a 11/16/2023
非常感谢您的友好回应。我知道文档是怎么说的,运行上面的代码,它不会起作用 - 就每个循环的批量乘数而言。即使您给出 batch_size = 32,生成的图像也将基于循环运行的次数。(就像 5/6 即使batch_size是 32。 当我有一个非常结构化的二进制数据时,每个图像有 1000 张图像,它起作用了。对于单个图像处理batch_size参数失败(上面的代码)。关于 ImageDataGenerator,我将其用于图像处理参数,而不是仅用于将图像从目录上传到 collab。
0赞 mhenning 11/16/2023
我不确定这是否是一个后续问题。正如我所提到的,使用该参数不是从一个图像中获取多个图像。它只是用来分批拆分东西,如果没有要拆分的东西,它就不会被拆分或多重。batch_size