Мой главный вопрос: перебирает ли он каждый образец в каталоге для каждой эпохи? У меня есть каталог с 6 классами с почти одинаковым количеством выборок в каждом классе, когда я обучал модель с batch_size=16
, она вообще не работала, правильно предсказывал только 1 класс. Сделав batch_size=128
, он может предсказывать 3 класса с высокой точностью, а 3 других никогда не появлялись в тестовых предсказаниях. Почему так? Каждый ли steps_per_epoch
генерируется однозначно и запоминает только образцы этой партии? Это означает, что он не запоминает последние использованные выборки партии и создает новую случайную партию с возможностью использовать уже использованные выборки и пропускать другие, если это так, то это означает, что он пропускает выборки целого класса, и единственный способ преодолеть это - увеличение batch_size
чтобы он запомнил это в одной партии. Я не могу увеличить batch_size
более чем на 128, потому что на моем GPU недостаточно памяти.
Так что мне делать?
Вот мой код для ImageDataGenerator
train_d = ImageDataGenerator(rescale=1. / 255, shear_range=0.2, zoom_range=0.1, validation_split=0.2,
rotation_range=10.,
width_shift_range=0.1,
height_shift_range=0.1)
train_s = train_d.flow_from_directory('./images/', target_size=(width, height),
class_mode='categorical',
batch_size=32, subset='training')
validation_s = train_d.flow_from_directory('./images/', target_size=(width, height), class_mode='categorical',
subset='validation')
А вот код для fit_generator
classifier.fit_generator(train_s, epochs=20, steps_per_epoch=100, validation_data=validation_s,
validation_steps=20, class_weight=class_weights)