Различаются между подгонкой и оценкой в ​​керасе - PullRequest
0 голосов
/ 23 декабря 2018

Я использовал 100000 образцов для обучения общей модели в Керасе и достижения хороших результатов.Затем, для конкретного образца, я хочу использовать обученные веса в качестве инициализации и продолжать оптимизировать веса для дальнейшей оптимизации потери конкретного образца.

Однако проблема возникла.Сначала я легко загружаю тренировочный вес с помощью API keras, затем я оцениваю потерю одного конкретного образца, и эта потеря близка к потере валидации во время обучения модели.Я думаю, что это нормально.Однако, когда я использую тренировочный вес в качестве исходного и дополнительно оптимизирую вес для одного образца на model.fit(), потеря действительно странная.Это намного выше результата оценки и постепенно стало нормальным после нескольких эпох.

Мне кажется странным, что при одинаковой простоте и загрузке одного и того же веса модели, почему model.fit() и model.evaluate() дают разные результаты.Я использовал слои нормализации партии в моей модели, и мне интересно, что это может быть причиной.Результат model.evaluate() кажется нормальным, поскольку он близок к тому, что я видел в наборе валидации ранее.

Так в чем же разница между подгонкой и оценкой?Как я могу решить это?

1 Ответ

0 голосов
/ 23 декабря 2018

Я думаю, что ваша основная проблема заключается в том, что вы наблюдаете два разных значения потерь во время fit и evaluate.Это подробно обсуждалось здесь , здесь , здесь и здесь .

Потеря функции fit() включаетВклад от:

  1. Регуляризаторы: потеря регуляризации L1 / L2 будет добавлена ​​во время обучения, увеличив значение потери
  2. Вариации нормы партии: во время нормы партии, среднего значения и дисперсии партиибудет собираться, а затем эти статистические данные будут использоваться для нормализации, независимо от того, установлена ​​ли норма партии для обучения или нет.Подробнее об этом см. здесь .
  3. Несколько партий: Конечно, потери на обучение будут усреднены по нескольким партиям.Таким образом, если вы берете в среднем первые 100 партий и оцениваете только для 100-й партии, результаты будут другими.

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

Суть в том, что вы не должны сравнивать потери в обучении и проверке (или подбирать и оцениватьпотеря).Эти функции делают разные вещи.Ищите другие метрики, чтобы проверить, хорошо ли тренируется ваша модель.

...