Вопрос или проблема
Я обучаю сеть CNN с переносом обучения на 161 изображении, которые были увеличены до 966 фотографий, 4 класса. Я обучаю на сбалансированном наборе данных, так что в каждой классе по 52 изображения, и также в валидационных и тестовых данных я сохраняю баланс.
Я использую MobileNet в качестве сети для переноса обучения и фактически использую только первые 8 слоев как нелинейные слои, остальные слои обучаемые, потом я добавил еще 3 плотных слоя с активационными функциями relu, а последний – softmax, чтобы не столкнуться с исчезающим градиентом.
В настоящее время я использую компилятора adam с обучающей ставкой 1e-6, beta_1=0.9, beta_2=0.999, decay=0.0000001 и amsgrad=True. Функция потерь – categorical_crossentropy, а метрики – accuracy.
Сейчас я запускаю 35 эпох, и с каждой эпохой точность изменяется от 0 до 40% (она меняется каждые эпохи, на данный момент acc=0.4 была максимальной, что я видел, и не всегда начинается с 0, она меняется), но в конце каждой эпохи валидационная точность составляет 0.2, а следующая эпоха начинает запускаться, кажется, случайно. Почему это происходит и как это исправить? Как будто каждая эпоха начинает обучение с самого начала. Кроме того, фактическая потеря вообще не изменилась, она началась, в первой партии первой эпохи с потерей 1.3866 и колеблется максимум +-0.01 (даже не).
Заранее спасибо!
Сложность вашей модели достаточно высока, чтобы обучать признаки и давать результаты лучше 20%. Хотя я бы предложил увеличить вашу обучающую ставку до 1e-3 или 1e-4.
Точность в эпохе относится к точности для партии, на которой она обучается, поэтому она может колебаться. Но если валидационная точность и потеря одинаковы, это означает, что модель не обучает различимые признаки. Это может означать, что задача сложная.
Ответ или решение
Ваша ситуация с обучением модели глубинного обучения поднимает несколько важных вопросов, которые требуют внимательного рассмотрения. Давайте подробно разберем возможные причины, почему ваша модель показывает небольшие изменения в точности в каждой эпохе, но валидная точность остается неизменной.
1. Проблемы с обучением
Ваши наблюдения о том, что точность варьируется от 0 до 40% в каждом эпизоде, но валидная точность все время остается на уровне 0.2, указывают на проблему недообучения или переобучения модели. Возможно, модель не способна адекватно захватывать особенности данных, что может быть вызвано несколькими факторами:
- Сложность данных: Если данные слишком сложны или неразличимы, модель может не находить переменные для обучения.
- Недостаток данных: 161 изначальная фотография, даже с увеличением, может быть недостаточной для полноценного обучения глубокой нейронной сети.
2. Гиперпараметры
Ваши текущие параметры компиляции могут влиять на результат обучения. Например, использование learning rate 1e-6 может быть слишком низким для вашей задачи. Рекомендую попробовать скорости от 1e-4 до 1e-3. Это может помочь модели быстрее терять и обучаться:
- Learning Rate: Увеличение learning rate может ускорить обучение и улучшить метрики.
- Adam Optimizer: Вы правильно выбрали Adam как оптимизатор, но игра с параметрами может помочь. Проверьте значение beta_1 и beta_2, поэкспериментируйте с их изменениями.
3. Структура сети
Вы упомянули, что используете по сути первые 8 слоев MobileNet как невоспроизводимые. Это может ограничить способности модели к обучению, так как вы не используете мощные слои для извлечения признаков:
- Слои MobileNet: Попробуйте сделать больше слоев или даже немного расширить структуру сети, добавив регуляризацию для предотвращения переобучения.
- Новые слои: Возможно, стоит изменить архитектуру добавленных вами слоев, например, увеличить количество нейронов или изменить функции активации.
4. Методология обучения
Ваше взаимодействие с данными также может быть причиной проблем. Убедитесь, что данные разбиваются на обучающую, валидационную и тестовую подмножества аккуртно и сбалансировано. Проверьте, равномерно ли распределены классы в каждой выборке.
5. Мониторинг и гибкость
Рекомендуется использовать более гибкие подходы для мониторинга процесса обучения. Попробуйте использовать колбек-функции, такие как EarlyStopping
, чтобы остановить обучение, если валидационные метрики не улучшаются в течение определенного количества эпох. Это может помочь избежать чрезмерного времени тренировки и предотвратить застревание на плохих точностях.
Заключение
Ваша задача может потребовать несколько итераций для настройки и улучшения всех вышеперечисленных факторов. Обратите внимание на параметры, структуру модели и данные, чтобы повысить общую эффективность. Проводите эксперименты и терпеливо отслеживайте их результаты.
Надеюсь, что эти рекомендации помогут вам улучшить производительность вашей модели и достигнуть желаемых результатов. Если у вас возникнут дополнительные вопросы, не стесняйтесь обращаться за помощью.