개발/Python

[파이썬] pytorch에서 model.eval()은 무엇을 합니까?

MinorMan 2022. 10. 6. 23:36
반응형

<질문>

언제 사용해야합니까.eval()? "내 모델을 평가"할 수 있어야한다는 것을 이해합니다. 교육을 위해 어떻게 다시 끄나요?

예제 교육code 사용.eval().


<답변1>

model.eval() 훈련 및 추론(평가) 시간 동안 다르게 동작하는 모델의 일부 특정 계층/부분에 대한 일종의 스위치입니다. 예를 들어, Dropouts Layers, BatchNorm Layers 등. 모델 평가 중에는 꺼야 하며,.eval() 당신을 위해 그것을 할 것입니다. 또한 평가/검증을 위한 일반적인 관행은 다음을 사용하는 것입니다.torch.no_grad() 와 쌍으로model.eval() 그라디언트 계산을 끄려면:

# evaluate model:
model.eval()

with torch.no_grad():
    ...
    out_data = model(data)
    ...

그러나 다음으로 돌아가는 것을 잊지 마십시오.training 평가 단계 후 모드:

# training step
...
model.train()
...

<답변2>

다음을 실행하여 평가 모드를 끌 수 있습니다.model.train(). 모델을 추론 엔진으로 실행할 때, 즉 테스트, 검증 및 예측할 때 사용해야 합니다(모델에differently behaving layers).


<답변3>

model.eval 의 방법이다torch.nn.Module:

평가() 모듈을 평가 모드로 설정합니다. 이것은 특정 모듈에만 영향을 미칩니다. 영향을 받는 경우 훈련/평가 모드에서의 동작에 대한 자세한 내용은 특정 모듈의 설명서를 참조하십시오. 드롭아웃, BatchNorm 등 이것은 self.train(False)과 동일합니다.

반대 방법은model.train Umang Gupta가 친절하게 설명했습니다.


<답변4>

위의 답변에 추가 사항:

나는 최근에 작업을 시작했습니다Pytorch-lightning, 훈련-검증-테스트 파이프라인에서 상용구의 많은 부분을 래핑합니다.

무엇보다도 그것은model.eval() 그리고model.train() 허용함으로써 거의 중복train_step 그리고validation_step 래핑하는 콜백eval 그리고train 그래서 당신은 결코 잊지 않습니다.

반응형