tensorflow 훈련을 사용할 때`training = true` 전달
TensorFlow의 공식 튜토리얼에 따르면 BN 레이어가 평균과 분산을 업데이트하지 않도록 훈련 중에 base_model (trainin = False)을 전달해야합니다. 내 질문은 : 왜? 평균과 분산을 업데이트 할 필요가없는 이유는 BN에 이미지 넷 평균과 분산이 있으며 이미지 넷의 평균과 분산을 사용하고 새 데이터를 업데이트하지 않는 것이 유용한 이유는 무엇입니까? 미세 조정 중에도이 경우 전체 모델이 가중치를 업데이트하지만 BN 계층에는 여전히 이미지 넷 평균과 분산이 있습니다. 편집 :이 튜토리얼을 사용하고 있습니다.https://www.tensorflow.org/tutorials/images/transfer_learning
답변
모델이 초기화에서 학습되면 언급 한대로 평균과 분산을 조정하기 위해 batchnorm을 활성화해야합니다. 미세 조정 또는 전이 학습은 약간 다른 것입니다. 이미 필요한 것보다 더 많은 작업을 수행 할 수있는 모델이 있고 데이터 세트에서 작업 / 작업을 수행하기 위해 사전 훈련 된 모델의 특정 전문화를 수행하려고합니다. 이 경우 가중치의 일부가 고정되고 출력에 가장 가까운 일부 레이어 만 변경됩니다. BN 레이어는 모델 전체에서 사용되므로이를 동결해야합니다. 이 설명을 다시 확인하십시오.
BatchNormalization 레이어에 대한 중요 참고 사항 많은 모델에는 tf.keras.layers.BatchNormalization 레이어가 포함되어 있습니다. 이 계층은 특수한 경우이며이 자습서의 뒷부분에서 볼 수 있듯이 미세 조정 컨텍스트에서 예방 조치를 취해야합니다.
layer.trainable = False로 설정하면 BatchNormalization 계층은 추론 모드에서 실행되며 평균 및 분산 통계를 업데이트하지 않습니다.
미세 조정을 수행하기 위해 BatchNormalization 레이어가 포함 된 모델을 고정 해제하는 경우 기본 모델을 호출 할 때 training = False를 전달하여 BatchNormalization 레이어를 추론 모드로 유지해야합니다. 그렇지 않으면 훈련 불가능한 가중치에 적용된 업데이트가 모델이 학습 한 내용을 파괴합니다.
출처 : 전이 학습 , 동결 관련 세부 정보