본문 바로가기

컴퓨터

PyTorch에서 텐서란 무엇이고, NumPy의 Array(배열)과 어떤 차이가 있나

기본 정의 :

  • PyTorch에서 텐서(Tensor)는 다차원 배열로 수학적으로는 벡터(1차원), 행렬(2차원) 등 모든 차원의 데이터를 포괄하는 데이터 구조.  Tensor는 PyTorch에서 딥러닝 모델의 입력, 출력, 가중치 등 모든 데이터를 표현하는 기본 단위.
  • NumPy의 배열(Array) 역시 다차원 수치 데이터를 저장하고 연산하는데 사용되는 자료구조로 Tensor와 구조적으로 매우 흡사.  실제로 PyTorch Tensor와 NumPy Array는 생성, 인덱싱, 슬라이싱, 기본 연산 등 대부분의 사용법이 거의 흡사함.

차이점 :

  • 자동 미분 지원 - PyTorch Tensor는 Deeplearning 학습에 필수적인 자동 미분(Autograd) 기능을 내장함.  Tensor에 requires_grad=True 옵션을 주면 연산 기록을 자동으로 추적하여 역전파 시 기울기(gradient)를 자동으로 계산할 수 있음.
  • GPU 가속 - PyTorch Tensor는 CPU뿐 아니라 GPU(CUDA)에서도 연산이 가능함.  대규모 행렬 연산이나 Deeplearning 학습 시 GPU 가속을 쉽게 활용할 수 있음. NumPy Array는 기본적으로 CPU에서만 동작.
  • Memory 공유 및 변환 - PyTorch Tensor와 NumPy Array는 서로 쉽게 변환됨.  torch.from_numpy()로 NumPy Array를 Tensor로  변환하면 memory를 공유하며, torch.tensor()로 변환하면 별도의 복사본이 생성되어 메모리를 공유하지 않음. Tensor의 .numpy()  매서드는 memory를 공유하는 Numpy Array를 반환.
  • Framework 통합성 - PyTorch의 Deeplearning 기능(모델, 옵티마이저, 손실함수 등)은 Tensor 자료형을 기본적으로 사용.  PyTorch로 Deeplearning을 구현할 때는 반드시 Tensor를 사용해야 하며 NumPy Array는 직접적으로 사용할 수 없음.

 

*아래 그래프는 AI로 그려본 Tensor와 Array의 퍼포먼스를 비교한 그래프

 


expand_less