-
[이거 어떡하지] torch.load 했는데 'model' object has no attribute 'copy' 뜰 때Pytorch 2021. 8. 6. 12:49
증상:
raise ModuleAttributeError("'{}' object has no attribute '{}'".format(torch.nn.modules.module.ModuleAttributeError: 'model' object has no attribute 'copy'
해결 방법 요약:
1. torch.save() 오사용
2. torch.save(model.state_dict(), "path.pt")로 model을 save 해야 함. torch.save(model, "path.pt")로 모델을 저장하지 않았는지 확인해서 재학습
해설:
'error를 살펴보면, model은 copy라는 attribute(method 혹은 class 변수)가 없다.'라고 합니다.
torch.save(), torch.load()에서 발생하는 issue pytorch로 딥러닝 모델을 선언해서 학습시키고 추후에 추가 학습을 하거나, inference를 진행하고싶으면 학습되고 있는 모델을 checkpoint로 저장할 수 있습니다.
그 과정에서 torch.save() 함수를 쓰게 되는데, model instance자체를 저장하는 것이 아니라, model의 state_dict()을 통해 얻어지는 model의 state를 저장합니다.
엄밀하게는 model을 저장하게 되면 model class 변수, class method 정보를 모두 저장해아하지만, model의 state를 저장하면 class 내에서torch.Parameter로 지정된 variable 값만 저장하게 됩니다.
문제는 torch.save 함수를 쓸 때 model을 저장하는 것이 아니라 model.state_dict()를 저장해야합니다. 제목의 error는 model을 저장한 파일을 불러왔을때 나는 오류입니다.
(class instance 자체를 저장하려고 시도하는 경우에 error를 내보내거나 warning을 내보내주는게 좋을 것 같은데)
실수로 model instance 자체를 저장하고 torch.load를 수행할 때 에러가 나게 됩니다. torch.load()를 해야만 에러가 나는 것은 문제가 있다고 생각하는데, 버전업이 되어가면서 warning을 띄워줄 것이라 생각됩니다.
'Pytorch' 카테고리의 다른 글