발생 위치
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))