변환은 간단하지만 메모리 공유 여부는 확인해야 해
PyTorch와 NumPy는 쉽게 오갈 수 있어. 꼭 기억할 건 언제 메모리를 공유하고 언제 복사하는가야:
torch.from_numpy(arr): 메모리를 공유해. 한쪽을 바꾸면 다른 쪽도 바뀌어.tensor.numpy(): 텐서가 CPU에 있고 연속 배치라면 메모리를 공유해. GPU 텐서에는 바로 쓸 수 없어.torch.tensor(arr): 항상 복사해. 서로 독립된 데이터를 원할 때 써.torch.as_tensor(arr): 가능하면 메모리를 공유하고, 불가능하면 복사해. 어느 쪽이어도 괜찮을 때 유용해.
GPU 규칙
NumPy 배열로 바꿀 수 있는 건 CPU 텐서뿐이야. GPU에 있다면 먼저 .cpu()로 옮겨. 기울기를 추적 중이라면 그보다 먼저 .detach()를 호출해 계산 그래프와 연결을 끊어야 해. 그렇지 않으면 NumPy가 변환을 거부해.
모델 출력을 NumPy 배열로 바꾸는 완전한 연쇄는 output.detach().cpu().numpy()야. 평가지표를 계산하거나 그래프를 그릴 때 계속 쓰게 되니 순서까지 익혀 둬.