Почему я запутался:Почему перестановка моей проверки в Keras меняет производительность моей модели?
Если я проверить свою модель на примерах [A, B, C], он получит определенную точность. Если я тестирую ту же модель на примерах [C, B, A], она должна получить такую же точность. Другими словами, перетасовка примеров не должна изменять точность моей модели. Но это то, что, кажется, происходит следующим образом:
Шаг за шагом:
Вот где я тренируюсь модель:
model.fit_generator(batches, batches.nb_sample, nb_epoch=1, verbose=2,
validation_data=val_batches,
nb_val_samples=val_batches.nb_sample)
Вот где я проверить модель, без перетасовки набор проверки:
gen = ImageDataGenerator()
results = []
for _ in range(3):
val_batches = gen.flow_from_directory(path+"valid", batch_size=batch_size*2,
target_size=target_size, shuffle=False)
result = model.evaluate_generator(val_batches, val_batches.nb_sample)
results.append(result)
Вот результаты (val_loss, val_acc):
[2.8174608421325682, 0.17300000002980231]
[2.8174608421325682, 0.17300000002980231]
[2.8174608421325682, 0.17300000002980231]
Обратите внимание, что точность проверки одинакова.
Вот где я проверить модель, с перемешиваются набора проверки:
results = []
for _ in range(3):
val_batches = gen.flow_from_directory(path+"valid", batch_size=batch_size*2,
target_size=target_size, shuffle=True)
result = model.evaluate_generator(val_batches, val_batches.nb_sample)
results.append(result)
Вот результаты (val_loss, val_acc):
[2.8174608802795409, 0.17299999999999999]
[2.8174608554840086, 0.1730000001192093]
[2.8174608268737793, 0.17300000059604645]
Обратите внимание, что в точности проверки не соответствуют, несмотря на неизменный набор валидации и неизмененную модель. Что происходит?
Примечание:
Я оценка по всей проверке набора каждый раз. model.evaluate_generator возвращает после оценки модели число примеров, равное val_batches.nb_sample
, что является числом примеров в наборе проверки.
Вы уверены, что набор валидаций неизменен каждый раз? Если вы каждый раз перетасовываете и сублимируете данные каждый раз, этот набор может отличаться на каждой итерации в тестовом цикле. – bnaecker
Я не вижу проблемы, вы сказали keras перетасовать набор данных, и это немного изменит окончательные решения. –
Я не подбираю данные. 'valu_generator' возвращает после оценки модели на примерах' val_batches.nb_sample', что является общим числом примеров в наборе валидации. Это слишком неявно. Я сделаю это более явным в пошаговом руководстве. Спасибо. –