В официальном руководстве TensorFlow говорится, что мы должны передавать base_model(trainin=False) во время обучения, чтобы слой BN не обновлял среднее значение и дисперсию. мой вопрос: почему? почему нам не нужно обновлять среднее значение и дисперсию, я имею в виду, что BN имеет среднее значение и дисперсию imagenet, и почему полезно использовать среднее значение и дисперсию imagenet, а не обновлять их на новых данных? даже во время точной настройки, в этом случае вся модель обновляет веса, но слой BN по-прежнему будет иметь среднее значение и дисперсию imagenet. редактировать: я использую этот учебник: https://www.tensorflow.org/tutorials/images/transfer_learning
@АлексК. tensorflow.org/tutorials/images/transfer_learning
Когда модель обучается с момента инициализации, пакетная норма должна быть включена для настройки их среднего значения и дисперсии, как вы упомянули. Тонкая настройка или перенос обучения — это немного другое: у вас уже есть модель, которая может делать больше, чем вам нужно, и вы хотите выполнить определенную специализацию предварительно обученной модели для выполнения вашей задачи/работы с вашим набором данных. В этом случае часть весов замораживается, а изменяются только некоторые слои, ближайшие к выходу. Поскольку слои BN используются по всей модели, их также следует заморозить. Проверьте еще раз это объяснение:
Важное примечание о слоях BatchNormalization Многие модели содержат Слои tf.keras.layers.BatchNormalization. Этот слой является особым случай и меры предосторожности должны быть приняты в контексте тонкой настройки, как показано далее в этом руководстве.
Когда вы устанавливаете layer.trainable = False, слой BatchNormalization будет работать в режиме вывода и не будет обновлять свое среднее значение и дисперсию статистика.
Когда вы размораживаете модель, содержащую слои BatchNormalization в Чтобы выполнить тонкую настройку, вы должны сохранить слои BatchNormalization в режиме вывода путем прохождения обучения = False при вызове базы модель. В противном случае обновления применялись к необучаемым весам. разрушит то, чему научилась модель.
Источник: трансферное обучение , подробности о заморозке
Я понимаю, а как быть, когда разморозят все веса? кажется, что все веса обновлены, кроме среднего значения BN и дисперсии, это все еще правильно?
На мой взгляд, если вы разморозите все веса, начальная предварительная тренировка не имеет значения. Вы получите почти такой же результат, как и при случайной инициализации. Так что этот сценарий возможен, но бесполезен.
Я имею в виду, вы тренируете голову сети, а затем размораживаете всю модель. в этом случае они все еще используют слои BN в режиме вывода
Проверьте это объяснение. Основная идея размораживания BN делает практически бессмысленным использование предварительно обученной модели.
Пожалуйста, поделитесь ссылкой на официальный учебник, который вы используете