Python 如何使用批处理为大型数据集安装Keras ImageDataGenerator

Python 如何使用批处理为大型数据集安装Keras ImageDataGenerator,python,keras,data-augmentation,Python,Keras,Data Augmentation,我想使用Keras ImageDataGenerator进行数据扩充。 为此,我必须使用我的训练数据作为参数对实例化的ImageDataGenerator对象调用.fit()函数,如下所示 image_datagen = ImageDataGenerator(featurewise_center=True, rotation_range=90) image_datagen.fit(X_train, augment=True) train_generator = image_datagen.flo

我想使用Keras ImageDataGenerator进行数据扩充。 为此,我必须使用我的训练数据作为参数对实例化的ImageDataGenerator对象调用.fit()函数,如下所示

image_datagen = ImageDataGenerator(featurewise_center=True, rotation_range=90)
image_datagen.fit(X_train, augment=True)
train_generator = image_datagen.flow_from_directory('data/images')
model.fit_generator(train_generator, steps_per_epoch=2000, epochs=50)
但是,我的训练数据集太大,无法在一次加载时放入内存。 因此,我想使用我的训练数据的子集分几个步骤来拟合生成器

有办法做到这一点吗

我想到的一个潜在解决方案是使用自定义生成器函数加载成批的训练数据,并在循环中多次拟合图像生成器。但是,我不确定ImageDataGenerator的fit功能是否可以以这种方式使用,因为它可能会在每个拟合方法上重置

作为其工作原理的示例:

def custom_train_generator():
    # Code loading training data subsets X_batch
    yield X_batch


image_datagen = ImageDataGenerator(featurewise_center=True, rotation_range=90)
gen = custom_train_generator()

for batch in gen:
    image_datagen.fit(batch, augment=True)

train_generator = image_datagen.flow_from_directory('data/images')
model.fit_generator(train_generator, steps_per_epoch=2000, epochs=50)
ImageDataGenerator()
为您提供了将数据加载到批处理中的可能性;实际上,您可以在
fit_generator()
方法中使用参数batch_size,该参数与
ImageDataGenerator()
一起使用;无需从头开始编写生成器(如果您希望,只需要良好的实践)

重要提示:

从TensorFlow 2.1开始,
.fit\u generator()
已被弃用,您应该使用
.fit()

来自Keras官方文件的示例:

datagen = ImageDataGenerator(
    featurewise_center=True,
    featurewise_std_normalization=True,
    rotation_range=20,
    width_shift_range=0.2,
    height_shift_range=0.2,
    horizontal_flip=True)

# compute quantities required for featurewise normalization
# (std, mean, and principal components if ZCA whitening is applied)
datagen.fit(x_train)

# TF <= 2.0
# fits the model on batches with real-time data augmentation:
model.fit_generator(datagen.flow(x_train, y_train, batch_size=32),
                    steps_per_epoch=len(x_train) // 32, epochs=epochs)

#TF >= 2.1
model.fit(datagen.flow(x_train, y_train, batch_size=32),
         steps_per_epoch=len(x_train) // 32, epochs=epochs)
要创建自己的数据生成器,应查看以下链接(作为起点):

重要说明(2):

如果您使用Tensorflow中的Keras(Tensorflow中的Keras),那么对于提供的代码和参考的教程,请确保替换导入/神经网络创建片段:

from keras.x.y.z import A


谢谢你的回答和文章!我明白了,安装图像发生器本身并不总是必要的,所以我可以省略它,因此我不需要加载整个x_序列。然而,据我了解,对于某些增强操作(例如缩放),我必须在图像数据生成器上使用.fit(),然后才能从_目录()调用.flow()或.flow_。有没有一种方法可以使用
datagen.fit(x_-train)
而不必一次加载整个x_-train?我的问题与@C.S.相同。有什么方法可以满足他的要求吗?很抱歉回答得太晚。您可以创建自己的数据生成器(子类化tensorflow.keras.utils.Sequence)并在批处理级别应用图像增强。一个很好的起点是这样的链接:@TimbusCalin当像素已经出现在数据帧中时(如中),您如何加载和增强图像?你能在那里回答吗?
from keras.x.y.z import A
from tensorflow.keras.x.y.z import A