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
_と一緒に使用する方法についての明確な情報は見つかりませんでした。
ご協力ありがとうございました。マリオ
あなたは正しいです、 docs はこれについてあまり啓発的ではありません...
必要なのは、実際には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
の拡張について(強調を追加):
機能ごとの標準化とZCAにはfitが必要であり、パラメータとして配列のみを取り、ディレクトリにはfitはありません。 今のところ、ディレクトリにこれを合わせるには、画像のサブセットを手動で読み取る必要があります。 1つのアイデアは、ジェネレータ自体を受け入れるように
fit()
を変更できることです(_flow_from_directory
_)。もちろん、フィット中は標準化を無効にする必要があります。
お役に立てれば...