Как повысить точность валидации с помощью глубокой нейронной сети?
Я пытаюсь построить классификатор изображений 11 класса с 13000 обучающими изображениями и 3000 валидационными изображениями. Я использую глубокую нейронную сеть, которая обучается с помощью mxnet. Точность обучения увеличивается и достигает более 80% , но точность валидации находится в диапазоне 54-57% и не увеличивается. В чем здесь может быть проблема? Должен ли я увеличить no изображений?
2 ответов
проблема здесь в том, что ваша сеть перестает изучать полезные общие функции в какой-то момент и начинает адаптироваться к особенностям вашего учебного набора (в результате его подгонки). Вы хотите "заставить" свою сеть продолжать изучать полезные функции, и у вас есть несколько вариантов здесь:
- использовать регуляризацию веса. Он пытается сохранить низкие веса, что очень часто приводит к лучшему обобщению. Эксперимент с различными коэффициентами регуляризации. Попробовать 0.1, 0.01, 0,001 и посмотреть, какое влияние они оказывают на точность.
- повредить ваш вклад (например, случайным образом замените некоторые пиксели черным или белым). Таким образом, вы удаляете информацию из своего ввода и "заставляете" сеть воспринимать важные общие функции. Поэкспериментируйте с коэффициентами шума, которые определяют, сколько ваших входных данных должно быть повреждено. Исследования показывают, что все в диапазоне 15% - 45% работает хорошо.
- расширить обучение set. Поскольку вы имеете дело с изображениями, вы можете расширить свой набор, вращая / масштабируя и т. д. ваши существующие изображения (как предложено). Вы также можете поэкспериментировать с предварительной обработкой ваших изображений (например, сопоставление их с черно-белыми, оттенками серого и т. д. но эффективность этой техники будет зависеть от ваших точных изображений и классов)
- предварительно натренируйте свои слои с помощью denoising critera. Здесь вы предварительно тренируете каждый слой вашей сети индивидуально перед тонкой настройкой вся сеть. Предварительная подготовка " сил " слоев, чтобы подобрать на важных общих особенностей, которые полезны для реконструкции входного сигнала. Посмотри в авто-кодеры например (они применялись для классификации изображений в прошлом).
- эксперимент с сетевой архитектурой. Возможно, у вашей сети недостаточно возможностей для обучения. Экспериментируйте с различными типами нейронов, количеством слоев и количеством скрытых нейронов. Обязательно попробуйте сжать архитектуры (меньше нейронов, чем входы) и разреженные архитектуры (больше нейронов, чем входы).
к сожалению, процесс обучения сети, которая обобщает хорошо включает в себя много экспериментов и почти грубой силы исследование пространства параметров с немного человеческого наблюдения (вы увидите много исследовательских работ, использующих этот подход). Хорошо попробовать 3-5 значений для каждого параметра и посмотреть, приведет ли он вас куда-нибудь.
когда вы экспериментируете точность графика / стоимость / f1 в зависимости от количества итераций и посмотреть, как он ведет себя. Часто вы заметите пик точности для вашего набора тестов, а после этого непрерывное падение. Так что помимо хорошей архитектуры, регуляризации, коррупции и т. д. вы также ищете хорошее количество итераций, которые дают лучшие результаты.
еще один намек: убедитесь, что каждая учебная эпоха рандомизирует порядок изображений.
Это явно похоже на случай, когда модель подходит для учебного набора, поскольку точность проверки улучшалась шаг за шагом, пока она не была зафиксирована на определенном значении. Если бы скорость обучения была немного выше, вы бы увидели, что точность проверки уменьшается, с увеличением точности для набора обучения.
увеличение количества учебных наборов является лучшим решением этой проблемы. Вы также можете попробовать применить различные преобразования (листать, обрезка случайных частей из немного большего изображения)к существующему набору изображений и посмотреть, лучше ли модель учится.