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
ご意見ありがとうございます。ですから、もし私が1000の画像を持っていれば、各画期的に1000の新しい画像が元の画像から生成され、訓練のためにモデルにフィードインされます。次に、次のエポック1000において、元の画像から新しい画像が生成され、訓練のためにモデルに供給され、以下同様である。だから、モデルは元のデータを見ることができない可能性があります。 – SaraG
もう1つのアプローチは、新しい画像を生成して保存し、それを使用してモデルを訓練することです。たとえば、各入力イメージから10個のイメージを生成すると、10,000個の新しいイメージが作成されます。ですから、私は完全に1万1千の画像をトレーニング用に用意しています。これらのアプローチのどちらが優れていますか? – SaraG
はい、そうです。元のデータが表示されない可能性があります。より多くの変換が適用されるほど、モデルに元のデータが表示される可能性は低くなります。変換パラメータの範囲は、その確率にも影響します。 2番目のコメントで提案したアプローチも妥当と思われます。どちらが優れていると言うのは難しいです、私は両方の選択肢を試し、最良の結果をもたらすものを選ぶでしょう! –