반응형
TypeError: can't convert cuda:0 device type tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory first.
cuda를 사용하여 MNIST 데이터에 대한 간단한 두 모델을 비교하기 위해 두 가지 모델의 loss 값을 matplotlib 통해 시각화하는 과정에서 다음 오류가 발생했다.
해당 오류는 gpu에 할당되어 있는 텐서를 numpy 배열로 변환할 때 생기는 에러라고 한다.
그래서 저장된 loss 값을 확인해보니 다음과 같았다.
이렇게 저장되어있는 값을 바로 matplotlib을 통해 시각화를 진행하는 과정에서 자동으로 numpy값으로 변환하려다 보니 오류가 발생한 것 같다.
해당 오류는 gpu에 할당된 텐서를 cpu 텐서로 변환해주면 해결된다.
위의 이미지와 같이 모든 값을 cpu 텐서로 변환해주면 numpy 값으로 변환이 잘 되는 모습을 확인할 수 있다.
리스트 컴프리헨션을 통해 모든 값을 cpu 텐서로 변환해주니 오류가 해결되었다.
loss 값이 이중배열(리스트)에 저장되어있어 다음과 같은 코드로 변환했다.
train_losses = [[value.cpu() for value in row] for row in train_losses]
train_accs = [[value.cpu() for value in row] for row in train_accs]
valid_losses = [[value.cpu() for value in row] for row in valid_losses]
valid_accs = [[value.cpu() for value in row] for row in valid_accs]
Reference
반응형
댓글