Точность валидации и тестирования сильно различается
В настоящее время я работаю над набором данных в kaggle. После обучения модели обучающих данных я протестировал ее на данных валидации и получил точность около 0,49.
Тем не менее, та же модель дает точность 0,05 на данных испытаний.
Я использую нейронные сети в качестве модели
Итак, каковы возможные причины этого и как начать проверять и исправлять эти проблемы?
1 ответ
Решение
Причины высокого разрыва в обобщении:
- Различные дистрибутивы: набор для проверки и тестирования может быть из разных дистрибутивов. Попробуйте убедиться, что они действительно взяты из того же процесса в вашем коде.
- Количество образцов: Размер проверки и / или набора тестов слишком мал. Это означает, что распределения эмпирических данных слишком сильно различаются, что объясняет различные сообщенные погрешности. Одним из примеров может быть набор данных, состоящий из тысяч изображений, а также тысяч классов. Затем набор тестов может содержать некоторые классы, которых нет в наборе проверки (и наоборот). Используйте перекрестную проверку, чтобы проверить, является ли точность теста всегда ниже, чем точность проверки, или они просто обычно сильно отличаются в каждом сгибе.
- Hyperparameter Overfitting: это также связано с размером двух наборов. Вы делали настройку гиперпараметра? Если это так, вы можете проверить, существует ли разрыв в точности, прежде чем настраивать гиперпараметры, так как вы могли бы "переопределить" гиперпараметры в наборе проверки.
- Функция потери против точности: вы сообщили о различных точностях. Вы также проверили потери в поездах, валидации и тестах? Вы обучаете свою модель функции потери, так что это самый прямой показатель эффективности. Если точность только слабо связана с вашей функцией потерь, а тестовые потери примерно так же низки, как и потери при валидации, это может объяснить разрыв в точности.
- Ошибка в коде: если набор тестов и проверок взят из одного и того же процесса и достаточно велики, они взаимозаменяемы. Это означает, что потери при испытаниях и валидации должны быть примерно равными. Итак, если вы проверили четыре пункта выше, моим следующим лучшим предположением будет ошибка в коде. Например, вы случайно натренировали свою модель на наборе валидации. Возможно, вы захотите натренировать вашу модель на большем наборе данных, а затем проверить, расходятся ли еще точности.