Прогнозы модели Кераса со странным поведением: высокий балл при «обучении=Верно», в противном случае плохо

#python #keras #prediction

Вопрос:

Я пытаюсь дополнить свои данные обучением на основе эпизодов (https://arxiv.org/abs/1711.06025). Я воспроизвел оригинальную бумажную модель и обучил ее на своих данных-задаче бинарной классификации 900 изображений.

Потеря, похоже, стабилизировалась с учетом переоснащения, которого я ожидал. Проблема в том, что модель просто предсказывает правильно, находясь в режиме обучения.

 batch, label = epg.get_episode(X_train)

logits = model(batch, training=True)
# model.predict(batch) gets same result as model(batch, training=False)

print("pred:", K.eval(logits)[0, 0])
print("target:", K.eval(label)[0, 0])
 

С параметром training=True я получаю 99,6% acc. Выключив его, я получаю около 30% (это меньше, чем случайная ха-ха-двоичная проблема).
Обратите внимание, что я не изменяю данные, это то же самое, что используется для обучения.

В поисках этой проблемы я нашел несколько похожих, указывающих на BatchNormalization слой, или не масштабируйте данные перед прогнозом. Это имеет смысл, но я не знаю, как это будет в моем случае, так как я использую один и тот же генератор данных как для обучения True , так и False .

Ответ №1:

Я до сих пор точно не знаю, что именно вызвало такое поведение, но мне удалось решить эту проблему, просто тренируя модель все дальше и дальше, наблюдая за предсказаниями, training=False становясь равными, как и True с.

Я все еще думаю, что это как-то связано со BatchNormalization() слоем, хотя раньше этого никогда не случалось с другими моими моделями.