2016-12-15 20 views
4

Kerasのデータ補強に関するいくつかの資料を読みましたが、私にとってはまだまだ曖昧です。データ増強ステップで各入力画像から作成された画像の数を制御するパラメータはありますか? this exampleでは、各画像から作成された画像の数を制御するパラメータは表示されません。Kerasデータ補強パラメータ

たとえば、以下のコードでは、各入力イメージから作成されプレビューと呼ばれるフォルダに格納されるイメージの数を制御するパラメータ(num_imgs)を使用できます。リアルタイムデータ補強にはこの目的のためのパラメータはありません。全ての入力画像が一度生成された後、ここで

from keras.preprocessing.image import ImageDataGenerator, array_to_img, img_to_array, load_img 
num_imgs = 20 
datagen = ImageDataGenerator(
     rotation_range=40, 
     width_shift_range=0.2, 
     height_shift_range=0.2, 
     shear_range=0.2, 
     zoom_range=0.2, 
     horizontal_flip=True, 
     fill_mode='nearest') 

img = load_img('data/train/cats/cat.0.jpg') # this is a PIL image 
x = img_to_array(img) # this is a Numpy array with shape (3, 150, 150) 
x = x.reshape((1,) + x.shape) # this is a Numpy array with shape (1, 3, 150, 150) 

# the .flow() command below generates batches of randomly transformed images 
# and saves the results to the `preview/` directory 
i = 0 
for batch in datagen.flow(x, batch_size=1, 
          save_to_dir='preview', save_prefix='cat', save_format='jpeg'): 
    i += 1 
    if i > num_imgs: 
     break # otherwise the generator would loop indefinitely 

答えて

6

データの拡張が動作するソースコードを見てみることができます:指定された範囲内でランダムに選択されたパラメータを用いて、各学習エポック変換でトレーニングセット内のすべての元の画像に適用されます。エポックが完了した後、すなわち、トレーニングアルゴリズムのセット全体に学習アルゴリズムを公開した後、次の学習エポックが開始され、元のトレーニングデータに特定の変換を適用することによってトレーニングデータが再び増強される。

こうして、各画像が増強される回数は、学習エポックの数に等しい。リコールフォームthe example that you linked

# Fit the model on the batches generated by datagen.flow(). 
model.fit_generator(datagen.flow(X_train, Y_train, 
        batch_size=batch_size), 
        samples_per_epoch=X_train.shape[0], 
        nb_epoch=nb_epoch, 
        validation_data=(X_test, Y_test)) 

ここdatagenオブジェクトがmodelnb_epoch倍にトレーニングセットを公開しますので、各画像はnb_epoch回増補されるだろう。このようにして、各エポック訓練の例がランダムに変形されるので、学習アルゴリズムはまったく同じ訓練例を2つも全く見かけることはない。

+0

ご意見ありがとうございます。ですから、もし私が1000の画像を持っていれば、各画期的に1000の新しい画像が元の画像から生成され、訓練のためにモデルにフィードインされます。次に、次のエポック1000において、元の画像から新しい画像が生成され、訓練のためにモデルに供給され、以下同様である。だから、モデルは元のデータを見ることができない可能性があります。 – SaraG

+0

もう1つのアプローチは、新しい画像を生成して保存し、それを使用してモデルを訓練することです。たとえば、各入力イメージから10個のイメージを生成すると、10,000個の新しいイメージが作成されます。ですから、私は完全に1万1千の画像をトレーニング用に用意しています。これらのアプローチのどちらが優れていますか? – SaraG

+1

はい、そうです。元のデータが表示されない可能性があります。より多くの変換が適用されるほど、モデルに元のデータが表示される可能性は低くなります。変換パラメータの範囲は、その確率にも影響します。 2番目のコメントで提案したアプローチも妥当と思われます。どちらが優れていると言うのは難しいです、私は両方の選択肢を試し、最良の結果をもたらすものを選ぶでしょう! –

3

はそれだけで、各入力画像に対して1枚の画像を生成し、それがどのように動作するか基本的に、それは再びやり直すます。

あなたの例では、合計で1つの入力イメージしかないため、20まではそのイメージの異なるバージョンを繰り返し生成します。

は、次のように、ここで

関連する問題