よっしーの私的空間

機械学習を中心に興味のあることについて更新します

ImageDataGeneratorにおいてfeaturewise系のオプションがうまく機能しない問題

tensorflow.kerasの画像拡張用モジュールImageDataGeneratorを使ってデータ拡張する際に、featurewise系のオプションの使用方法で躓いていたのですが、解決策が分かったのでまとめます。結論は至極シンプルで、しかも公式ドキュメントにちゃんと書かれているので、この記事を公開するのも恥ずかしいのですが、意外と躓いている人がいるかもしれないので公開します。

躓いた事象

ImageDataGeneratorのfeaturewise系のオプションを指定しても画像データが何も変わらない。featurewise系のオプションとは具体的には以下。

  • featurewise_center:データセット全体で,入力の平均を0にする
  • featurewise_std_normalization:入力をデータセット標準偏差で正規化する
  • zca_whitening:ZCA白色化を適用する

結論

flow()の前に、fit()を使用する。以上。

datagen = ImageDataGenerator(
    featurewise_center=True, 
    featurewise_std_normalization=True,
    zca_whitening=True,
    zca_epsilon=1e-06,
)

datagen.fit(x)

g = datagen.flow(x, batch_size=x.shape[0], shuffle=False)

当たり前なのですが、データ全体の平均を0にしたりするためにはデータセットの統計量を計算する必要があります。fit()でこれらの統計量を計算しているようです。