Eu estou jogando com o aumento de dados em Keras ultimamente e estou usando o basic ImageDataGenerator. Eu aprendi da maneira mais difícil é na verdade um gerador, não iterador (porque type(train_aug_ds)
dá <class 'keras.preprocessing.image.DirectoryIterator'>
Eu pensei que é uma iteração). Eu também verificado alguns blogs sobre a usá-lo, mas eles não responder a todas as minhas perguntas.
Então, eu carreguei a minha dados como este:
train_aug = ImageDataGenerator(
rescale=1./255,
horizontal_flip=True,
height_shift_range=0.1,
width_shift_range=0.1,
brightness_range=(0.5,1.5),
zoom_range = [1, 1.5],
)
train_aug_ds = train_aug.flow_from_directory(
directory='./train',
target_size=image_size,
batch_size=batch_size,
)
E para treinar o meu modelo eu fiz o seguinte:
model.fit(
train_aug_ds,
epochs=150,
validation_data=(valid_aug_ds,),
)
E funcionou. Estou um pouco confuso em como ele funciona, porque train_aug_ds
é um gerador, de modo que deve dar infinitamente grande conjunto de dados. Documentação e diz:
Quando passar uma infinita repetição de conjunto de dados, você deve especificar o steps_per_epoch argumento.
O que eu não fiz, ainda assim, ele funciona. Ele, de alguma forma, inferir o número de passos? Além disso, ele usa apenas dados aumentados, ou ele usa também não aumentada imagens em lote?
Então, basicamente, a minha pergunta é como usar este gerador corretamente com a função fit
para ter todos os dados na minha conjunto de treinamento, incluindo o original, não aumentada imagens e aumentada imagens, e para percorrer várias vezes/passos (agora parece que é apenas um passo por época)?