![](/img/trans.png)
[英]Keras: Plot Image augmentations samples for training data using 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 步過程:
flow_from_directory()
設置您的生成器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_dir
、 nb_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.