Я тренирую простую CNN с Nt = 148 + Nv = 37 изображений для обучения и проверки соответственно.Я использовал метод ImageGenerator.flow_from_directory()
, потому что я планирую использовать расширение данных в будущем, но в настоящее время я не хочу никакого увеличения данных.Я просто хочу читать изображения с диска одно за другим (и каждое ровно один раз, это в первую очередь важно для проверки), чтобы избежать загрузки всех их в память.
Но следующее заставляет меня думать, что что-то другоечем ожидалось:
- точность обучения и проверки достигают значений, которые не похожи на дробь с 148 или 37 в качестве знаменателя.На самом деле попытка оценить разумный знаменатель из множества множителей дельты приводит к числам, намного превышающим 148 (около 534 или 551, см. Ниже (*), почему я думаю, что они должны быть кратны 19) и 37
- проверка всех прогнозов как для обучающих, так и для проверочных наборов данных (с отдельной программой, которая читает каталог проверки только один раз и не использует вышеуказанные генераторы), показывает количество сбоев, которое не совсем точно (1-val_acc) *Н.В., как я и ожидал
(*) Наконец, я обнаружил, что размер партии, который я использовал для обоих, равен 19, поэтому я ожидаю, что я обеспечу 19 * 7 = 133 или 19 * 8 = 152 обученияизображений за эпоху и 19 или 38 изображений в качестве проверки, установленной в конце каждой эпохи.
Кстати: можно ли использовать model.fit_generator()
с генераторами, построенными из ImageGenerator.flow_from_directory()
, для достижения: - отсутствия увеличения данных - оба генератора должны соответственно предоставлять все изображения для процесса обучения и для валидацииобрабатывать ровно один раз за эпоху - тасование хорошо и действительно желательно, так что каждая эпоха работает по-разному
Тем временем я ориентируюсь на то, чтобы установить размер пакета равным длине проверочного набора (т.е. 37).Будучи делителем численности обучающего набора, я думаю, что это должно работать с числами.
Но, тем не менее, я не уверен, что следующий код соответствует требованию «вообще никакого увеличения данных»
valid_augmenter = ImageDataGenerator(rescale=1./255)
val_batch_size = 37
train_generator = train_augmenter.flow_from_directory(
train_data_dir,
target_size=(img_height, img_width),
batch_size=val_batch_size,
class_mode='binary',
color_mode='grayscale',
follow_links=True )
validation_generator = valid_augmenter.flow_from_directory(
validation_data_dir,
target_size=(img_height,img_width),
batch_size=val_batch_size,
class_mode='binary',
color_mode='grayscale',
follow_links=True )