
PyTorch에서 텐서란 무엇이고, NumPy의 Array(배열)과 어떤 차이가 있나요?
딥러닝에서 텐서(Tensor) 는 데이터를 표현하고 연산하는 기본 구조이다. 즉, 텐서는 숫자, 벡터(1차원), 행렬(2차원), 또는 더 고차원적인 데이터를 담을 수 있는 컨테이너이다.
텐서는 스칼라, 벡터, 행렬 같은 개념을 아우르는 상위 개념이다.
1) Scalar (스칼라)
스칼라는 단일 값을 의미하며, 차원이 없다. 숫자 3, 5.7 등이 스칼라의 예시이다. PyTorch에서는 아래와 같이 표현한다.
scalar = torch.tensor(3)
2) Vector (벡터)
백터는 1차원 배열로, 여러 개의 값을 선형적으로 나열한 것이다. [1, 2, 3] 등이 예시이다. PyTorch에서는 아래와 같이 표현한다.
vector = torch.tensor([1, 2, 3])
3) Matrix (행렬)
행렬은 2차원 배열로, 행(row)과 열(column)을 가지는 데이터 구조이다. [[1, 2], [3, 4]] 등이 예시이다. PyTorch에서는 아래와 같이 표현한다.
matrix = torch.tensor([[1, 2], [3, 4]])
4) 3D Tensor
3D 텐서는 행렬이 여러 개 쌓여 있는 구조이다. 이미지를 다루는 경우 주로 사용된다. PyTorch에서는 아래와 같이 표현한다.
tensor3d = torch.tensor([
[[1, 2], [3, 4]],
[[5, 6], [7, 8]],
[[9, 10], [11, 12]]
])
텐서는 다차원 배열을 표현하는 데이터 구조로, NumPy의 배열과 유사한 역할을 한다. PyTorch의 Tensor는 딥러닝과 같은 고성능 계산에 최적화된 기능을 제공한다는 점에서 NumPy 배열과 차이가 있다.
1) GPU 사용
NumPy의 Array는 주로 CPU 기반의 수학 및 과학 계산에 사용되며, GPU는 활용할 수 없다. 반면, PyTorch의 Tensor는 GPU 연산을 지원하여 대규모 데이터 처리와 딥러닝 모델 학습에 최적화되어 있다. PyTorch Tensor는 GPU로 데이터를 전송(.to('cuda'))하여 병렬 연산을 수행할 수 있다.
2) 자동 미분 기능
또한, PyTorch Tensor는 자동 미분 기능을 통해 딥러닝에서 필수적인 기울기(Gradient) 계산을 간단히 처리할 수 있다. 즉, Tensor를 사용하면 모델 학습을 효율적으로 할 수 있게 된다.
3) NumPy와의 상호 호환성
PyTorch의 Tensor는 NumPy의 Array와 상호 변환이 가능하다. NumPy의 데이터 처리 기능을 활용하면서도, PyTorch의 고성능 연산과 딥러닝 기능을 사용할 수 있다는 점에서 유용하다.
요약하자면, NumPy의 Array는 일반적인 수학 및 데이터 분석에 적합하고, PyTorch의 Tensor는 딥러닝과 GPU 가속 연산을 포함한 고성능 연산 작업에 더 적합하다고 정리할 수 있다.