Keras:使用flow-from-u目录将图像增强与训练数据相匹配

2024-04-25 08:53:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在Keras中使用图像增强。我当前的代码如下:

# define image augmentations
train_datagen = ImageDataGenerator(
featurewise_center=True,
featurewise_std_normalization=True,
zca_whitening=True)

# generate image batches from directory
train_datagen.flow_from_directory(train_dir)

使用此函数运行模型时,会出现以下错误:

"ImageDataGenerator specifies `featurewise_std_normalization`, but it hasn't been fit on any training data."

但是我没有找到关于如何将train_dataget.fit()flow_from_directory一起使用的明确信息。

谢谢你的帮助。 马里奥


Tags: 代码fromimagetruetrainflowdirectoryfit
1条回答
网友
1楼 · 发布于 2024-04-25 08:53:06

你说得对,docs对这件事不是很有启发。。。

你需要的实际上是一个4步的过程:

  1. 定义数据扩充
  2. 适应增强
  3. 使用flow_from_directory()设置生成器
  4. fit_generator()训练您的模型

以下是假设图像分类情况的必要代码:

# define data augmentation configuration
train_datagen = ImageDataGenerator(featurewise_center=True,
                                   featurewise_std_normalization=True,
                                   zca_whitening=True)

# fit the data augmentation
train_datagen.fit(x_train)

# setup generator
train_generator = train_datagen.flow_from_directory(
        train_data_dir,
        target_size=(img_height, img_width),
        batch_size=batch_size,
        class_mode='categorical')

# train model
model.fit_generator(
    train_generator,
    steps_per_epoch=nb_train_samples,
    epochs=epochs,
    validation_data=validation_generator, # optional - if used needs to be defined
    validation_steps=nb_validation_samples) 

很明显,有几个参数需要定义(train_data_dirnb_train_samples等),但希望您能理解。

如果您还需要像我的示例中那样使用validation_generator,那么应该以与您的train_generator相同的方式定义它。

更新(评论后)

步骤2需要一些讨论;这里,x_train是实际的数据,理想情况下,应该放在主内存中。同样(documentation),这个步骤是

Only required if featurewise_center or featurewise_std_normalization or zca_whitening.

然而,在现实世界中有许多情况下,要求所有的训练数据都能装入内存显然是不现实的。在这种情况下,如何集中/规范化/白数据本身就是一个(巨大的)子字段,可以说是Spark等大数据处理框架存在的主要原因。

那么,在实践中该怎么做呢?好吧,在这种情况下,下一个逻辑操作是对数据进行采样;实际上,这正是社区的建议-这里是Keras创建者Francois Chollet onWorking with large datasets like Imagenet

datagen.fit(X_sample) # let's say X_sample is a small-ish but statistically representative sample of your data

以及ongoing open discussion中关于扩展ImageDataGenerator的另一段引述(强调部分已添加):

fit is required for feature-wise standardization and ZCA , and it only takes an array as parameter, there is no fit for directory. For now, we need to manually read a subset of the image to do this fit for a directory. One idea is we can change fit() to accept the generator itself(flow_from_directory), of course, standardization should be disabled during fit.

希望这有帮助。。。

相关问题 更多 >