Что вызывает большие скачки в точности тренировок и потери между эпохами? - PullRequest
2 голосов
/ 14 октября 2019

Обучая нейронную сеть в Tensorflow 2.0 на python, я замечаю, что точность обучения и потери резко меняются в разные эпохи. Я знаю, что напечатанные метрики являются средними по всей эпохе, но точность, похоже, значительно падает после каждой эпохи, несмотря на то, что среднее значение постоянно увеличивается.

Потеря также демонстрирует это поведение, значительно снижаясь в каждую эпоху, но в среднем увеличивается. Вот изображение того, что я имею в виду (из Tensorboard):

strange training behavior

Я заметил такое поведение на всех моделях, которые я реализовал самтак что это может быть ошибкой, но я хочу получить второе мнение о том, является ли это нормальным поведением и если да, что это значит?

Кроме того, я использую довольно большой набор данных (примерно 3 миллиона примеров),Размер партии равен 32, и каждая точка на графиках точности / потерь представляет 50 партий (2 К на графике = 100 К партий). График скорости обучения составляет 1: 1 для пакетов.

Ответы [ 2 ]

2 голосов
/ 14 октября 2019

Я только что столкнулся с такой проблемой, когда работал над проектом, связанным с локализацией объекта. В моем случае было три основных кандидата.

  • Я не использовал тасование в своих тренировках. Это создает увеличение потерь после каждой эпохи.

  • Я определил новую функцию потерь, которая рассчитывается с использованием IOU. Это было что-то вроде:

    def new_loss(y_true, y_pred):
        mse = tf.losses.mean_squared_error(y_true, y_pred) 
        iou = calculate_iou(y_true, y_pred) 
        return mse + (1 - iou)
    

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

  • Я использовал оптимизатор Adam . Поэтому можно изменить его, чтобы увидеть, как это повлияло на тренировку.

Заключение

Я только что изменил Адам на SGD и перетасовал мои данные на тренировке. Был еще скачок в потере, но он был настолько минимальным по сравнению без изменений. Например, мой всплеск потерь составлял ~ 0,3 до изменений, и он составлял ~ 0,02.

Примечание

Мне нужно добавить, что существует множество дискуссий на эту тему. Я пытался использовать возможные решения, которые являются возможными кандидатами для моей модели.

1 голос
/ 15 октября 2019

Кажется, что это явление происходит из-за того, что модель имеет высокую дисперсию от партии к партии с точки зрения точности и потерь. Это проиллюстрировано, если я возьму график модели с фактическими показателями на шаг, а не со средним значением за эпоху:

enter image description here

Здесь вы можетевидим, что модель может широко варьироваться. (Этот график приведен только для одной эпохи, но факт остается фактом.)

Поскольку средние показатели сообщались за период, в начале следующей эпохи весьма вероятно, что средние показатели будут ниже, чемпредыдущее среднее значение, приводящее к резкому падению значения скользящего среднего, показано красным цветом ниже:

enter image description here

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

TL; DR Модель имеет очень высокую дисперсию по выходу по отношению к каждой партии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...