can't convert cuda:0 device type tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory first.

xdfc1745·2021년 11월 29일
0
  • 발생 위치

    train_accuracy(y, prediction)를 실행하는 중에 발생

  • 발생 원인

    함수 내에서 prediction을 numpy의 array로 바꿔주는데 현재 prediction이 gpu에 할당되어 있어 문제가 발생하는 것이다.

    즉, gpu에 할당되어 있는 텐서값을 numpy배열로 바꿀때 발생하는 에러이다.

  • 해결 방법

    gpu로 할당되어 있는 텐서를 cpu 텐서로 바꿔주면 된다.

    #support X si GPU tensor
    X.numpy # this cause error 
    X.cpu().numpy()

    위에 명령어를 실행할 경우

    Can not squeeze dim[1], expected a dimension of 1, got 30 [Op:Squeeze]

    cpu로 바꿔줬을 때, 이와 같은 에러가 다시 발생했다.

    이경우는 차원의 문제로 기대값은 1차원의 값이나 30차원의 값이 들어옴으로써 발생하는 에러였다.

    따라서 예측값 중 가장 유사도(?)가 높은 값을 찾아 하나의 값만 인자로 넘겨주면 해결할 수 있다.

    y = y.cpu()
    prediction = prediction.cpu()
    train_accuracy(y, prediction.argmax(0))
profile
안녕하세요 ㅎㅎ

0개의 댓글