Передача `training=true` при использовании обучения тензорному потоку

В официальном руководстве TensorFlow говорится, что мы должны передавать base_model(trainin=False) во время обучения, чтобы слой BN не обновлял среднее значение и дисперсию. мой вопрос: почему? почему нам не нужно обновлять среднее значение и дисперсию, я имею в виду, что BN имеет среднее значение и дисперсию imagenet, и почему полезно использовать среднее значение и дисперсию imagenet, а не обновлять их на новых данных? даже во время точной настройки, в этом случае вся модель обновляет веса, но слой BN по-прежнему будет иметь среднее значение и дисперсию imagenet. редактировать: я использую этот учебник: https://www.tensorflow.org/tutorials/images/transfer_learning

Пожалуйста, поделитесь ссылкой на официальный учебник, который вы используете

Alex K. 13.12.2020 13:00

@АлексК. tensorflow.org/tutorials/images/transfer_learning

Dato Nefaridze 13.12.2020 13:49
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
2
683
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Когда модель обучается с момента инициализации, пакетная норма должна быть включена для настройки их среднего значения и дисперсии, как вы упомянули. Тонкая настройка или перенос обучения — это немного другое: у вас уже есть модель, которая может делать больше, чем вам нужно, и вы хотите выполнить определенную специализацию предварительно обученной модели для выполнения вашей задачи/работы с вашим набором данных. В этом случае часть весов замораживается, а изменяются только некоторые слои, ближайшие к выходу. Поскольку слои BN используются по всей модели, их также следует заморозить. Проверьте еще раз это объяснение:

Важное примечание о слоях BatchNormalization Многие модели содержат Слои tf.keras.layers.BatchNormalization. Этот слой является особым случай и меры предосторожности должны быть приняты в контексте тонкой настройки, как показано далее в этом руководстве.

Когда вы устанавливаете layer.trainable = False, слой BatchNormalization будет работать в режиме вывода и не будет обновлять свое среднее значение и дисперсию статистика.

Когда вы размораживаете модель, содержащую слои BatchNormalization в Чтобы выполнить тонкую настройку, вы должны сохранить слои BatchNormalization в режиме вывода путем прохождения обучения = False при вызове базы модель. В противном случае обновления применялись к необучаемым весам. разрушит то, чему научилась модель.

Источник: трансферное обучение , подробности о заморозке

Я понимаю, а как быть, когда разморозят все веса? кажется, что все веса обновлены, кроме среднего значения BN и дисперсии, это все еще правильно?

Dato Nefaridze 13.12.2020 14:24

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

Alex K. 13.12.2020 14:29

Я имею в виду, вы тренируете голову сети, а затем размораживаете всю модель. в этом случае они все еще используют слои BN в режиме вывода

Dato Nefaridze 13.12.2020 14:50

Проверьте это объяснение. Основная идея размораживания BN делает практически бессмысленным использование предварительно обученной модели.

Alex K. 13.12.2020 15:22

Другие вопросы по теме