본문 바로가기
오류 해결

[Pytorch] RuntimeError: Expected object of scalar type Float but got scalar type Double

by First Adventure 2024. 9. 21.
반응형

에러 메시지 설명

  이 오류는 PyTorch에서 데이터의 자료형이 예상한 것과 다를 때 발생합니다. PyTorch 연산이 Float 형식의 데이터를 기대하고 있지만, 입력된 데이터가 Double 형식일 때 이 오류가 발생합니다. Float과 Double은 모두 부동소수점 자료형이지만, PyTorch에서 주로 사용하는 자료형은 Float입니다.

 

발생 원인

  • 데이터의 자료형 불일치: PyTorch 연산이 Float을 기대하지만, 모델에 전달된 데이터나 텐서가 Double 형식일 때 발생합니다.
  • 잘못된 입력 데이터형: 입력 데이터가 Double 형식으로 로드되었거나, 중간 연산에서 Double로 변환되었을 수 있습니다​.

 

해결 방법

  • 자료형 변환: 텐서의 자료형을 Float 형식으로 변환하여 오류를 해결할 수 있습니다. float() 메서드를 사용하여 텐서를 변환하세요.
tensor = tensor.float()  # Double에서 Float로 변환

 

  • 모델 및 연산에 일관된 자료형 사용: 모델에 입력되는 모든 텐서가 동일한 자료형(Float)을 가지도록 관리하는 것이 중요합니다. 만약 일부 텐서가 Double 형식으로 로드되었다면, 학습 시작 전에 자료형을 통일하세요.
model_input = model_input.float()  # 입력 텐서를 Float로 변환

 

  • 데이터 로드 시 자료형 지정: 데이터를 로드할 때 Float 형식으로 로드되도록 설정할 수 있습니다. 예를 들어, torchvision을 사용할 경우 ToTensor() 변환을 사용할 때 Float으로 변환되도록 처리할 수 있습니다.
from torchvision import transforms
transform = transforms.Compose([transforms.ToTensor(), transforms.Lambda(lambda x: x.float())])

 

  • 자료형 확인: 오류가 발생한 부분에서 텐서의 자료형을 출력하여 문제의 원인을 확인할 수 있습니다. 자료형을 명시적으로 float()로 변환할 수 있습니다.
print(tensor.dtype)  # 텐서의 자료형 확인

 

관련 내용 및 추가 팁

  • 이 오류는 주로 부동소수점 자료형 간의 불일치로 인해 발생하며, PyTorch에서 자주 사용되는 자료형은 Float입니다. Double 형식은 더 많은 메모리를 사용하므로, 모델 학습 중에는 Float 형식을 사용하는 것이 일반적입니다​.
  • 데이터 전처리 시 일관된 자료형을 유지하고, 모델에 입력되기 전에 float()로 변환하는 습관을 가지세요.
  • 모델의 연산에 필요한 자료형을 명확히 이해하고, 불필요한 자료형 변환을 방지하세요.
반응형