Python_Error

에러 해결: Expected object of scalar type Float but got scalar type Double for argument #2 'mat1' in call to _th_addmm

qlsenddl 2020. 12. 4. 20:32
728x90

 딥러닝 모델에 입력을 넣을 때 발생한 에러이다.

 단순한 딥러닝 모델을 학습시킬 때, 이미지 같은 데이터가 아닌 그냥 숫자를 넣기 위해서 직접 numpy에서 난수를 발생시켜 dataset을 구성했다.

 학습하는 코드에서 model에 해당 dataset을 입력으로 넣을 때 아래와 같은 에러메시지가 발생했다.


RuntimeError: Expected object of scalar type Float but got scalar type Double for argument #2 'mat1' in call to _th_addmm


float type의 객체가 들어올 줄 알았는데 double type의 객체가 들어왔다는 에러였다. tensor 자료형인 dataset을 출력해봤더니 tensor 마지막에 'dtype=torch.float64'이 찍혀있었다. 알아보니 float64의 경우 torch에서는 double tensor로 인식했다.

np.random.normal 함수로 난수를 발생시키고, torch.from_numpy 함수로 tensor 자료형으로 변환시켰는데, 그렇게 하면 torch.float64 자료형이 나타났다. 이 문제를 해결하기 위해서 tensor로 바꿔주고 나서 .float()를 넣어서 float 자료형으로 변환해주었다.(아래 예시 참고) numpy에서 float로 변환하면 torch.float64 자료형이 계속 나타나서 해결되지 않았다.

 .float()를 해주고 tensor를 다시 출력해주면 'dtype=torch.float64'이 사라지는 것을 확인할 수 있다. 이 후 다시 모델을 학습시키면 정상적으로 동작한다.


ex>

train_data = torch.from_numpy(np_train_data).float()

728x90