Согласно официальным документам от tenorflow:
Об установке layer.trainable = False для слоя BatchNormalization:
Значение параметра layer.trainable = False состоит в том, чтобы заморозить слой, т.е. его внутреннее состояние не изменится во время обучения: его обучаемые веса не будут обновляться во время fit () или train_on_batch (), и его обновления состояния не будут выполняться.
Обычно это не обязательно означает, что уровень выполняется в режиме вывода (который обычно контролируется аргументом обучения, который может быть передан, когда вызов слоя). Замороженное состояние и режим вывода - это две разные концепции.
Однако в случае слоя BatchNormalization установка для слоя trainable = False означает, что слой впоследствии будет запускаться в режиме вывода (что означает, что он будет использовать движущийся среднее значение и скользящая дисперсия для нормализации текущего пакета вместо использования среднего и дисперсии текущего пакета).
Это поведение было введено в TensorFlow 2.0, чтобы позволить layer.trainable = False производить больше всего обычно ожидаемое поведение в случае использования настройки convnet.
Я не совсем понимаю термины «замороженное состояние» и «режим вывода» в этой концепции. Я попытался выполнить точную настройку, установив для trainable
значение False, и обнаружил, что скользящее среднее и скользящая дисперсия не обновляются.
Итак, у меня есть следующие вопросы:
- В чем разница между тренировкой по 2 атрибутам и возможностью тренировки?
- Обновляются ли гамма и бета в процессе обучения, если для параметра trainable установлено значение false?
- Почему при тонкой настройке необходимо устанавливать для обучаемого значение false?