#python #pytorch #object-detection #nan #yolo
Вопрос:
Сейчас я пытаюсь обучить обнаружению объектов — YOLOv1, используя этот код. В начале я использовал momentum
и weight_decay
, но потеря тренировок после пары эпох становится NaN
. Насколько я знаю, это из-за взрыва градиента, поэтому я искал несколько способов избавиться от этого NaN
, а затем проигнорировал momentum
и weight decay
. В результате я ничего не получил NaN
, однако моя модель не смогла сойтись так, как я ожидал. Когда я подсчитал mAP
, это было всего 0,29. Я использую данные VOC 2007 и 2012 годов для обучения и в качестве тестового набора VOC 2007.
Итак, мои вопросы следующие:
- Как я могу избавиться от
NaN
этого во время тренировки? - Где я могу получить лучшие конфигурации обучения?
- Является ли взрыв градиента нормальным в задаче обнаружения объектов?
- Нормально ли в YOLOv1 получать вес 1,1 Гб после тренировки?
Буду признателен за любые предложения здесь.
Ответ №1:
После проверки вашего кода я увидел, что после первой эпохи вы установите скорость обучения 0.01
до 75-й эпохи. На мой взгляд, эта большая скорость обучения является основной причиной того, что ваши параметры стали исчезать/взрываться. Обычно скорость обучения 0.001
увеличивается с коэффициентом 2,1,0.1
.
Следуйте конфигурации в этом репо (самая известная реализация репо YOLOv1 согласно paperwithcode), вы можете увидеть настройку их конфигураций. Вы можете следить за их гиперпараметрами momentum=0.9
и decay=0.0005
в своем вопросе.
Примечание: пожалуйста, будьте осторожны, чтобы импульс пакетной нормы в Tensorflow = 1 — импульс в Pytorch.
Наконец, количество параметров до и после тренировки должно быть одинаковым, поэтому, если ваша модель тяжелее/легче после тренировочного процесса, это означает, что с вашим учебным кодом что-то не так.
Комментарии:
1. Спасибо за ваш любезный ответ. Итак, я должен установить значение
momentum
0.9 или 0.1? Сначала я использовалmomentum=0.9
иdecay=0.0005
но получилnan
.2. как я уже сказал, причина вашего Nan, возможно, кроется в вашей высокой скорости обучения, уменьшите ее до 0,001 и тренируйте ее снова.
momentum
Вы говорите о том, является ли импульс в оптимизации, или в EAM, или в уровне пакетной нормы? Пожалуйста, проясните это3. Установите значение 0,1 для формулы
x_new = (1 - momentum) * x momentum * x_t
, следуйте этим документам4. Я буду тренироваться с этими парами, а затем, если все будет в порядке, я выберу ваш ответ как правильный.
5. спасибо за вашу помощь. Для этого нет никакой точной причины. Кажется, я забыл его сменить.