사소한 부분이지만 pytorch 프레임 워크를 사용하여 학습이나 GPU 연산을 할 때
torch를 매번 device에 올려주는 것이 번거로울 수 있다
아래는 보통 일반적으로 python에서 pytorch를 사용할 때 이미지 등의 텐서를 gpu로 설정해주는 코드이다
또한 일반적으로 numpy를 torch tensor로 변형하면 아래와 같이 cpu에 로드되면서 tensor로 변형된다
위 두가지 경우 새로운 tensor를 생성하면 cpu에 로드되며,
아래의 경우처럼 numpy 등 타 data type에서 tensor로 변형했을 시 본래의 data type을 그대로 이어받게 된다
그러나 tensor 연산 시 두 텐서가 data type이 다르거나 로드되어있는 디바이스가 다르면 연산이 진행되지 않는다
(아래는 두 tensor의 device가 다른 경우)
위와 같은 두 가지 귀찮은 경우를 방지해 주기 위해 아래와 같은 코드를 최상단에 적어주면
tensor의 기본 device와 data type을 설정할 수 있어 보다 편리한 디버깅 및 학습이 가능하다
torch.set_default_tensor_type('torch.cuda.FloatTensor')
# () 내부에 원하는 device와 data type 설정
torch 세팅 후 rand로 tensor 설정해주자 가장 첫번째 사진처럼
torch.rand (기본 설정 data type=double)로 tensor를 생성해도
gpu에 로드되어있는 float32타입의 tensor가 생성되는 것을 확인할 수 있다.
소소한 기능이고 코딩 습관에 따라 오히려 불편할 수도 있겠지만,
소소하게 편리한 학습이 가능한 코드 발견해서 로그! 😀
#Expected all tensors to be on the same deivce
#tensor device 설정
#Can't convert cuda:0 device type tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory first