Passar `training = true` ao usar o treinamento tensorflow

Dec 13 2020

O tutorial oficial do TensorFlow diz que devemos passar o base_model (trainin = False) durante o treinamento para que a camada BN não atualize a média e a variância. minha pergunta é: por quê? por que não precisamos atualizar a média e a variância, quero dizer, BN tem a média e a variância da imagenet e por que é útil usar a média e a variância da imagenet e não atualizá-las em novos dados? mesmo durante o ajuste fino, neste caso, todo o modelo atualiza os pesos, mas a camada BN ainda terá média e variância de imagenet. editar: estou usando este tutorial:https://www.tensorflow.org/tutorials/images/transfer_learning

Respostas

1 AlexK. Dec 13 2020 at 20:16

Quando o modelo é treinado desde a inicialização, batchnorm deve ser habilitado para ajustar sua média e variância como você mencionou. Finetuning ou transferência de aprendizagem é uma coisa um pouco diferente: você já tem um modelo que pode fazer mais do que você precisa e deseja realizar uma especialização particular do modelo pré-treinado para fazer sua tarefa / trabalho em seu conjunto de dados. Neste caso, parte dos pesos são congelados e apenas algumas camadas mais próximas da saída são alteradas. Como as camadas BN são usadas em todo o modelo, você também deve congelá-las. Verifique novamente esta explicação:

Observação importante sobre camadas BatchNormalization Muitos modelos contêm camadas tf.keras.layers.BatchNormalization. Esta camada é um caso especial e deve-se tomar precauções no contexto do ajuste fino, conforme mostrado posteriormente neste tutorial.

Quando você define layer.trainable = False, a camada BatchNormalization será executada no modo de inferência e não atualizará suas estatísticas de média e variância.

Ao descongelar um modelo que contém camadas BatchNormalization para fazer o ajuste fino, você deve manter as camadas BatchNormalization no modo de inferência passando training = False ao chamar o modelo base. Caso contrário, as atualizações aplicadas aos pesos não treináveis ​​destruirão o que o modelo aprendeu.

Fonte: transferência de aprendizagem , detalhes sobre congelamento