2016-05-05 2 views
7

Я использую mxnet для обучения классификатору изображений 11 классов. Я наблюдаю за странным поведением, точность обучения постепенно возрастала и достигла 39%, а в следующую эпоху она снизилась до 9%, а затем осталась на уровне 9% для отдыха. Я перезапустил тренировку с сохраненной моделью (с точностью тренировки 39%), сохраняя при этом все остальные параметры. Теперь точность обучения снова увеличивается. Что может быть причиной здесь? Я не могу это понять. И его трудно тренировать модель таким образом, так как она требует от меня постоянно видеть значения точности обучения.Внезапное падение точности при тренировке глубокой нейронной сети

скорость обучения является постоянной на уровне 0,01

+0

Скорее всего, ваша скорость обучения слишком высока, и модель прыгает. Трудно сказать, не зная ваших гиперпараметров – fabrizioM

+0

учебная скорость в 0.01 – sau

+0

Как-то у меня была аналогичная проблема, когда случайно я установил линейную активацию и использовал категориальную кросс-энтропию как функцию стоимости. –

ответ

7

, как вы можете видеть вашу поздно точность около одной случайных. в этом случае существует 2 распространенных вопроса.

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

Возможно, это произошло потому, что 0log0 возвращает NaN.

Вы можете избежать этого;

cross_entropy = -tf.reduce_sum(labels*tf.log(tf.clip_by_value(logits,1e-10,1.0)))

+0

Вы не должны ограничивать градиент, ограничивая потерю, отсекая логиты, это фактически создает градиент 0 в этих интервалах и сеть застревает. Вместо этого вы должны кликнуть градиент. –

1

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

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

0

Я столкнулся с той же проблемой. И я решил ее использовать (y-a)^функцию потерь вместо функции кросс-энтропии (из-за log (0)). Надеюсь, что для этой проблемы есть лучшее решение.

Смежные вопросы