*model.eval()

- torch.save나 torch.load를 이용할 경우, 환경에 따라서 동작 안 할 수도 있다.

- torch.save는 pickle을 이용하여 serialization 수행, serialization 잘 안 될 경우 dill 패키지 설치 후 사용(pickle_module=dill)

- torch.load 후, 이어서 학습하려면 torch.eval() 한 번 호출해야 한다. (batch_norm이나 drop_out이 기본값으로 설정되어 있어서, 이전 학습에서 사용된 파라미터들을 가져 와야 한다.)

- 추론을 실행하기 전에는 반드시 model.eval() 을 호출하여 드롭아웃 및 배치 정규화를 평가 모드로 설정하여야 한다. 이것을 하지 않으면 추론 결과가 일관성 없게 출력된다.

 

*torch.save

- 직렬화된 객체를 디스크에 저장합니다. 이 함수는 Python의 pickle을 사용하여 직렬화

- 이 함수를 사용하여 모든 종류의 객체의 모델, Tensor 및 dict를 저장할 수 있다.

 

*torch.load

- pickle을 사용하여 저장된 객체 파일들을 역직렬화하여 메모리에 올린다.

- 이 함수는 데이터를 장치에 불러올 때도 사용

 

*torch.nn.Module.load_state_dict

- 역직렬화된 state_dict를 사용하여 모델의 매개변수들을 불러온다.

 

*state_dict

- pytorch에서 torch.nn.Module 모델의 학습 가능한 매개변수들은 모델의 매개변수에 포함되어 있다. (model.parameters()로 접근한다.)

- state_dict는 각 계층을 매개변수 텐서로 매핑하는 python dict 객체

- 이 때, 학습 가능한 매개변수를 갖는 계층(합성곱 계층, 선형 계층 등) 및 등록된 버퍼들(batchnorm의 running_mean)만이 모델의 state_dict에 항목을 가짐

- optimizer 객체(torch.optim) 또한 optimizer의 상태 뿐만 아니라, 사용된 Hyper-parameter 정보가 포함된 state_dict을 갖는다.

- state_dict 객체는 python dictionary 이기 때문에, 쉽게 저장하거나 갱신하거나 바꾸거나 되살릴 수 있으며, pytorch 모델과 optimizer에 엄청난 modularity 를 제공한다.

 

*pickle (python의 module 중 하나)

- 텍스트를 파일로 저장할 때는 파일 입출력을 이용

- (텍스트가 아닌) 리스트나 클래스 자료형은 파일 입출력 방법으로는 데이터를 저장하거나 불러올 수 없다.

- 솔루션 : pickle 모듈 이용

 

 

반응형

'스타트업 > AI' 카테고리의 다른 글

[AI] Mutil-GPU(in Pytorch)  (0) 2020.02.04
[AI] cudnn.benchmark = True  (0) 2020.02.03
[AI] radam  (0) 2020.02.03
[AI] 상대 경로, 절대 경로  (0) 2020.01.31
[AI] RPN(Region Proposal Network)  (1) 2020.01.31

+ Recent posts