Pasando `training = true` cuando se usa el entrenamiento de tensorflow
El tutorial oficial de TensorFlow dice que debemos pasar base_model (trainin = False) durante el entrenamiento para que la capa BN no actualice la media y la varianza. mi pregunta es: ¿por qué? ¿Por qué no necesitamos actualizar la media y la varianza, quiero decir, BN tiene la media y la varianza de imagenet y por qué es útil usar la media y la varianza de imagenet, y no actualizarlos con datos nuevos? incluso durante el ajuste fino, en este caso, el modelo completo actualiza los pesos, pero la capa BN seguirá teniendo la media y la varianza de la red de imágenes. editar: estoy usando este tutorial:https://www.tensorflow.org/tutorials/images/transfer_learning
Respuestas
Cuando el modelo se entrena desde la inicialización, batchnorm debe estar habilitado para ajustar su media y varianza como mencionaste. El ajuste fino o el aprendizaje de transferencia es algo diferente: ya tiene un modelo que puede hacer más de lo que necesita y desea realizar una especialización particular del modelo preentrenado para realizar su tarea / trabajo en su conjunto de datos. En este caso, parte de los pesos se congelan y solo se cambian algunas capas más cercanas a la salida. Dado que las capas BN se utilizan en todo el modelo, también debe congelarlas. Vuelve a comprobar esta explicación:
Nota importante sobre las capas de BatchNormalization Muchos modelos contienen capas tf.keras.layers.BatchNormalization. Esta capa es un caso especial y se deben tomar precauciones en el contexto del ajuste fino, como se muestra más adelante en este tutorial.
Cuando establece layer.trainable = False, la capa BatchNormalization se ejecutará en modo de inferencia y no actualizará sus estadísticas de media y varianza.
Cuando descongela un modelo que contiene capas de BatchNormalization para realizar un ajuste fino, debe mantener las capas de BatchNormalization en modo de inferencia pasando training = False al llamar al modelo base. De lo contrario, las actualizaciones aplicadas a los pesos no entrenables destruirán lo que ha aprendido el modelo.
Fuente: aprendizaje de transferencia , detalles sobre la congelación