• 카테고리

    질문 & 답변
  • 세부 분야

    딥러닝 · 머신러닝

  • 해결 여부

    미해결

파이토치책 코드오류 질문

22.05.24 22:03 작성 조회수 762

0

안녕하세요 항상 좋은 강의 감사드립니다. 출간하신 파이토치 책과 함께 학습 중에 오류가 있어서 질문드립니다.

강의와 다르게 책에는 CIFAR10 이미지에 맞도록   model.conv1 = nn.Conv2d(364, kernel_size=3, stride=1, padding=1) 코드를 넣어주신 것 같은데,

이후에 나와있는model.load_state_dict(torch.load("/models/cifar10_resnet18.pth")) 코드를 구동하였을 때,

RuntimeError: Error(s) in loading state_dict for ResNet: Missing key(s) in state_dict: "conv1.bias". size mismatch for conv1.weight: copying a param with shape torch.Size([64, 3, 7, 7]) from checkpoint, the shape in current model is torch.Size([64, 3, 3, 3]).

이러한 오류가 발생합니다.

보기에는 로드한 모델 파라미터가 7x7의 Conv1 커널 사이즈에 맞춰저있는 것 같은데 맞는지 궁금합니다. 또한 Conv1 선언시 bias=False 도 같이 넣어줘야 하는 것인지 궁금합니다.

우선은 오류로 인해 model.conv1 선언 없이 강의 코드대로 했을 경우에는 정상적으로 작동하였습니다.

 

또한 추가 질문으로, 학습된 모델에 대해서 model.fc 를 항등함수로 바꾸어 주기에 model.fc = nn.Linear(num_ftrs, 10) 코드는 사실상 사용안하여도 되는 것처럼 보이는데 맞는지 궁금합니다!!!

 

답변 1

답변을 작성해보세요.

0

안녕하세요. 

책과 강의는 코드가 다른 부분들이 있기 때문에 책에 대한 질문을 하실 경우에는 책에서 제공하는 파일명 알려주시면 감사하겠습니다! 일단 책과 강의 코드 모두 확인하였습니다.

 

1. 책 코드 10.2 t-SNE, PCA.ipynb 파일에서는 오류가 확인되지 않습니다.

2. 강의 코드 13강 Visualization.ipynb 파일도 오류가 확인되지 않습니다.

혹시 책과 강의 코드 및 모델 파일을  혼용해서 사용하셨는지 확인 부탁드립니다. 

3. 클래스1000개를 가진 이미지넷으로 사전학습한 resnet을 사용하였기 때문에 model.fc = nn.Linear(num_ftrs, 10)을 사용하여 클래스 10개로 바꿔주셔야만 우리가 CIFAR10으로 만든 모델을 불러올 수 있습니다.

 

감사합니다!