Przekazywanie „training = true” podczas korzystania z treningu tensorflow
Oficjalny samouczek TensorFlow mówi, że podczas treningu powinniśmy przekazać base_model (trainin = False), aby warstwa BN nie aktualizowała średniej i wariancji. moje pytanie brzmi: dlaczego? dlaczego nie musimy aktualizować średniej i wariancji, mam na myśli, że BN ma średnią imagenet i wariancję i dlaczego warto używać średniej i wariancji imagenet, a nie aktualizować ich na nowych danych? nawet podczas precyzyjnego strojenia, w tym przypadku cały model aktualizuje wagi, ale warstwa BN nadal będzie miała średnią imagenet i wariancję. edycja: używam tego samouczka:https://www.tensorflow.org/tutorials/images/transfer_learning
Odpowiedzi
Kiedy model jest uczony od inicjalizacji, należy włączyć batchnorm, aby dostroić ich średnią i wariancję, jak wspomniałeś. Dokończenie lub transfer uczenia się to trochę inna sprawa: masz już model, który może zrobić więcej niż potrzebujesz i chcesz wykonać określoną specjalizację wstępnie wytrenowanego modelu, aby wykonać swoje zadanie / pracę na swoim zestawie danych. W tym przypadku część wag jest zamrożona i tylko niektóre warstwy najbliższe wynikowi są zmieniane. Ponieważ warstwy BN są używane dookoła modelu, należy je również zamrozić. Sprawdź ponownie to wyjaśnienie:
Ważna uwaga na temat warstw BatchNormalization Wiele modeli zawiera warstwy tf.keras.layers.BatchNormalization. Ta warstwa to szczególny przypadek i należy podjąć środki ostrożności w kontekście dostrajania, jak pokazano w dalszej części tego samouczka.
Jeśli ustawisz layer.trainable = False, warstwa BatchNormalization będzie działać w trybie wnioskowania i nie będzie aktualizować statystyk średniej i wariancji.
Po odblokowaniu modelu, który zawiera warstwy Normalizacji Batch w celu dostrojenia, należy zachować warstwy Normalizacji Batch w trybie wnioskowania, przekazując training = False podczas wywoływania modelu podstawowego. W przeciwnym razie aktualizacje zastosowane do ciężarów, których nie można trenować, zniszczą to, czego nauczył się model.
Źródło: uczenie transferowe , szczegóły dotyczące zamrożenia