#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()
слоем, хотя раньше этого никогда не случалось с другими моими моделями.