단위 테스트 중 에러가 발생하여 내용을 정리합니다.
[Source]
a = torch.tensor([1, 2], requires_grad=True)
[Error Message]
RuntimeError Traceback (most recent call last) in ----> 1 a = torch.tensor([1, 2], requires_grad=True) RuntimeError: Only Tensors of floating point dtype can require gradients
에러 문구를 한국말로 번역하면 다음과 같습니다.
RuntimeError: Only Tensors of floating point dtype can require gradients
floating point dtype 텐서만 gradients가 필요합니다.
문제점은 gradient를 지원하는 텐서의 타입은 floating인데, 텐서를 선언할 때 값을 torch.int32인 1, 2로 대입한게 문제였습니다. 미분한 결과는 소수점으로 나오니 어찌보면 당연한 내용입니다.
[Resolve]
다음은 해결 방법입니다.
tensor를 선언할 때 floating 타입으로 선언하면 해결 됩니다. 참고로 둘 중 하나만 floating 타입으로 설정해도 tensor는 floating 타입으로 만들어 집니다. 또는 dtype=torch.float32을 별도로 선언해도 됩니다.
a = torch.tensor([1., 2], requires_grad=True) # 하나만 torch.floating으로 선어 a = torch.tensor([1, 2.], requires_grad=True) # 하나만 torch.floating으로 선어 a = torch.tensor([1., 2.], requires_grad=True) a = torch.tensor([1, 2], dtype=torch.float32, requires_grad=True) # 데이터 tensor.int32 + dtype 선언 a = torch.tensor([1., 2.], dtype=torch.float32, requires_grad=True)
감사합니다.
댓글
댓글 쓰기