簡體   English   中英

使用 flow_from_directory 將圖像增強擬合到訓練數據

[英]Fit Image augmentations to training data using flow_from_directory

我想在 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一起使用的明確信息。

你是對的,文檔在這方面並不是很有啟發性......

您需要的實際上是一個 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是實際數據,理想情況下,應該適合主內存。 另外(文檔),這一步是

僅在 featurewise_center 或 featurewise_std_normalization 或 zca_whitening 時才需要。

然而,在許多現實世界中,將所有訓練數據都放入內存中的要求顯然是不現實的。 在這種情況下,如何對數據進行中心化/標准化/白色化本身就是一個(巨大的)子領域,可以說是 Spark 等大數據處理框架存在的主要原因。

那么,在這里實踐中該怎么做呢? 那么,在這種情況下,下一個合乎邏輯的操作是對您的數據進行采樣 實際上,這正是社區所建議的——這是 Keras 創建者 Francois Chollet 關於使用 Imagenet 等大型數據集的內容

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

另一個引用來自正在進行的關於擴展ImageDataGenerator公開討論(強調):

fit 是 feature-wise 標准化和 ZCA 所必需的,它只需要一個數組作為參數,沒有適合目錄。 現在,我們需要手動讀取圖像的一個子集以適應目錄 一個想法是我們可以改變fit()來接受生成器本身( flow_from_directory ),當然,在 fit 期間應該禁用標准化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM