학습을 끝내고 성능 테스트 때 괜찮은 성능을 보였다.

그런 모델을 저장하고, 다른 코드에서 load_state_dict 으로 불러들여서 사용하려한다.


근데 모델을 저장하기 전 성능이 나오질 않는다.


이럴 땐 일부 레이어를 list 안에 넣어놨는 지 의심해야한다.

model 클래스는 다 nn.Module을 상속해서 정의하는데,

self의 속성으로 레이어를 직접 정의하지 않고,

self.layers = [nn.Linear, nn.Conv2D 등..] 식으로 저장하고 사용했다면

위와 같은 문제가 발생한다.


그 이유는 list로 저장해두면 모델 저장 시, 이 레이어들이 인식되지 않는다.

그래서 list안의 레이어들만 빼놓고 나머지 layer들의 weight만 저장된다.


이에 따라 다른 코드에서 load_state_dict 시, list 안의 layer는 학습되지 않은 날 레이어들이 된다.


이 문제는 nn.ModuleList로 해결 가능하다.

위의 self.layers를

self.layer_module = nn.ModuleList(self.layers)

과 같이 선언하고

self.layer_module을 list처럼 쓰면 말끔히 해결한다. (리스트 처럼 인덱싱 가능, +로 이어 붙이기도 가능)


이걸 몰라서 정말 많은 고생을 했다....

'실습 > pytorch' 카테고리의 다른 글

Pytorch eval 성능 문제  (0) 2018.11.08
PyTorch GPU check  (1) 2018.08.29
pytorch 메모  (0) 2018.03.11

+ Recent posts