2016-05-04 3 views
5

Я пытаюсь создать классификатор изображений класса 11 с 13000 образов и 3000 изображений проверки. Я использую глубокую нейронную сеть, которую обучают с использованием mxnet. Точность обучения увеличивается и достигает более 80%, но точность проверки приближается в пределах 54-57% и ее не увеличивается. В чем тут проблема? Должен ли я увеличить количество изображений?Как повысить точность проверки с помощью глубокой нейронной сети?

+0

Была ли точность проверки повышена шаг за шагом, пока она не была зафиксирована на уровне 54-57%. Или это было почти то же самое с самого начала? –

+0

Не была повышена точность проверки, а затем она была зафиксирована на уровне 54-57% – sau

+0

, как вы вычислили точность обучения? Вы вычислили его для каждой партии, которую вы тренировали? Или для всего набора тренировок? – Chaine

ответ

17

Проблема заключается в том, что ваша сеть перестает изучать полезные общие функции в какой-то момент и начинает адаптироваться к особенностям вашего набора тренировок (перегружая его в результате). Вы хотите, чтобы «заставить» вашу сеть, чтобы сохранить полезные функции обучения и у вас есть несколько вариантов здесь:

  1. Используйте вес упорядочению. Он пытается сохранить низкие веса, что очень часто приводит к лучшему обобщению. Экспериментируйте с различными коэффициентами регуляризации. Попробуйте 0.1, 0.01, 0.001 и посмотрите, какое влияние они оказывают на точность.
  2. Коррумпируйте ваш вход (например, произвольно замените некоторые пиксели черным или белым). Таким образом вы удаляете информацию из своего ввода и «заставляете» сеть получать важные общие функции. Экспериментируйте с коэффициентами шума, которые определяют, какая часть вашего ввода должна быть повреждена. Исследования показывают, что все в диапазоне от 15% до 45% работает хорошо.
  3. Развернуть свой тренировочный комплект. Поскольку вы имеете дело с изображениями, вы можете расширить свой набор путем вращения/масштабирования и т. Д. Ваших существующих изображений (как было предложено). Вы также можете поэкспериментировать с предварительной обработкой ваших изображений (например, сопоставление их с черно-белыми, оттенками серого и т. Д., Но эффективность этого метода будет зависеть от ваших точных изображений и классов)
  4. Предварительно обучите свои слои с помощью шумоподавителя. Здесь вы предварительно настраиваете каждый уровень своей сети, прежде чем настраивать всю сеть. Предварительно тренировать слои «сил», чтобы подобрать важные общие функции, которые полезны для восстановления входного сигнала. Например, посмотрите на автокодеры (они были применены к классификации изображений в прошлом).
  5. Эксперимент с сетевой архитектурой. Возможно, ваша сеть не обладает достаточной учебной способностью. Экспериментируйте с различными типами нейронов, количеством слоев и количеством скрытых нейронов. Обязательно попробуйте сжать архитектуры (меньше нейронов, чем входы) и разреженные архитектуры (больше нейронов, чем исходных).

К сожалению, процесс обучения сети, который хорошо обобщается, включает в себя много экспериментов и почти грубой разведки пространства параметров с небольшим контролем человека (вы увидите много исследовательских работ, использующих этот подход). Хорошо попробовать 3-5 значений для каждого параметра и посмотреть, приведет ли он вас куда-нибудь.

Когда вы экспериментируете точность/стоимость/f1 графика в зависимости от количества итераций и смотрите, как он себя ведет.Часто вы заметите пик точности для своего тестового набора, а затем непрерывное падение. Таким образом, помимо хорошей архитектуры, регуляризации, коррупции и т. Д. Вы также ищете большое количество итераций, которые дают наилучшие результаты.

Еще один совет: убедитесь, что каждая тренировочная эпоха ранжирует порядок изображений.

+0

Спасибо за ответ. Я использую регуляцию веса с 0,0001. Теперь я должен переучивать модель с разными значениями с начала или возобновления обучения с помощью модели, сохраненной в некоторую эпоху с измененным значением регуляризации. Я собираюсь попробовать несколько вещей и поиграть с некоторыми значениями параметров, и я собираюсь увеличить свои обучающие образы. – sau

+0

Попробуйте использовать разные значения с начала, не используйте сохраненную модель. И попробуйте также более высокие значения коэффициента регуляризации: 0,001, 0,01, 0,1. – krychu

+0

Я пробовал с 0.001, но теперь модель не сходится. Последние 10 эпохальных моделей и точность проверки приближаются к 9-10%. Кроме того, я использую исключение в своей нейронной сети, которая является своего рода регуляризацией. – sau

1

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

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

+0

Я думаю, что с высокой скоростью обучения скорость обучения тоже уменьшится. Я это подтвердил. Но да, это случай переобучения, и мне просто интересно, почему это происходит, когда я сам выбрал каждое изображение, и если он может точно распознать учебное изображение, он также должен распознать изображение проверки с такой же точностью. Образцы обучения и валидации очень похожи. – sau

+0

Предполагая, что изображения обучения и валидации будут «очень похожими» - это смутное представление о толковании вещей. Как насчет того, чтобы сохранить точный образ тренировки для проверки? Это дает ту же точность, что и обучение? –