В чем разница между атрибутами "обучаемый" и "обучение" в слое BatchNormalization в Keras Tensorfolow?

Согласно официальным документам от tenorflow:

Об установке layer.trainable = False для слоя BatchNormalization:
Значение параметра layer.trainable = False состоит в том, чтобы заморозить слой, т.е. его внутреннее состояние не изменится во время обучения: его обучаемые веса не будут обновляться во время fit () или train_on_batch (), и его обновления состояния не будут выполняться.
Обычно это не обязательно означает, что уровень выполняется в режиме вывода (который обычно контролируется аргументом обучения, который может быть передан, когда вызов слоя). Замороженное состояние и режим вывода - это две разные концепции.
Однако в случае слоя BatchNormalization установка для слоя trainable = False означает, что слой впоследствии будет запускаться в режиме вывода (что означает, что он будет использовать движущийся среднее значение и скользящая дисперсия для нормализации текущего пакета вместо использования среднего и дисперсии текущего пакета).
Это поведение было введено в TensorFlow 2.0, чтобы позволить layer.trainable = False производить больше всего обычно ожидаемое поведение в случае использования настройки convnet.

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

Итак, у меня есть следующие вопросы:

  1. В чем разница между тренировкой по 2 атрибутам и возможностью тренировки?
  2. Обновляются ли гамма и бета в процессе обучения, если для параметра trainable установлено значение false?
  3. Почему при тонкой настройке необходимо устанавливать для обучаемого значение false?

person PokeLu    schedule 04.07.2020    source источник


Ответы (1)


What's the difference between 2 attributes training and trainable?

обучаемый: - (если True) в основном означает, что обучаемые веса параметра (слоя) будут обновляться при обратном распространении.

обучение: - Некоторые слои по-разному работают на этапах обучения и вывода (или тестирования). Некоторые примеры включают Dropout Layer, Batch-Normalization Layer. Таким образом, этот атрибут сообщает слою, каким образом он должен работать.

Is gamma and beta getting updated in the training process if set trainable to false?

Поскольку гамма и бета являются обучаемыми параметрами слоя BN, они НЕ будут обновляться в процессе обучения, если для параметра trainable установлено значение False.

Why is it necessary to set trainable to false when fine-tuning?

При выполнении тонкой настройки мы сначала добавляем вверху наш собственный слой FC классификации, который инициализируется случайным образом, но наша предварительно обученная модель уже откалибрована (немного) для этой задачи.

В качестве аналогии подумайте так.

У вас есть числовая линия от 0 до 10. На этой числовой строке «0» представляет собой полностью рандомизированную модель, тогда как «10» представляет собой своего рода идеальную модель. Наша предварительно обученная модель находится где-то около 5, может быть, 6 или, может быть, 7, то есть, скорее всего, лучше, чем случайная модель. Слой FC, который мы добавили вверху, имеет значение «0», так как он рандомизирован в начале.

Мы устанавливаем trainable = False для предварительно обученной модели, чтобы мы могли заставить FC Layer быстро достичь уровня предварительно обученной модели, то есть с более высокой скоростью обучения. Если мы не установим trainable = False для предварительно обученной модели и не будем использовать более высокую скорость обучения, это нанесет ущерб.

Поэтому изначально мы устанавливаем более высокую скорость обучения и trainable = False для предварительно обученной модели и обучаем слой FC. После этого мы размораживаем нашу предварительно обученную модель и используем очень низкую скорость обучения для достижения нашей цели.

Не стесняйтесь просить дополнительных разъяснений, если это необходимо, и проголосовать, если вы сочтете это полезным.

person Mrityu    schedule 27.01.2021
comment
В чем разница между аргументом обучения в call () и атрибутом обучаемого? теперь также рассматривается в официальном FAQ по Keras - person vcucu; 28.04.2021