본문 바로가기
인공지능/PyTorch

Tensor of PyTorch

by spaul 2024. 2. 28.

우리가 딥러닝 모델을 훈련시키거나 테스트할 때, 데이터(이미지, 텍스트 등)를 일정한 형태의 벡터로 변환한 뒤 그것을 인공 신경망의 입력으로 넣어 결과가 나올 때 까지 진행시킨다. 벡터들은 수의 집합으로 이루어져 있고, 딥러닝 모델의 성능을 높인다는 것은 곧 원하는 답이 출력되도록 얼마나 파라미터들이 최적화되어있느냐는 질문과 동일하다. 결론적으로 잘 작동하는 딥러닝 모델을 만들기 위해 실제 세계의 데이터들을 적절히 변환하여 딥러닝 모델이 소화할 수 있는 형태로 만들어줘야 한다.

 

출처 - Deep Learning with PyTorch

 

딥러닝 모델을 설계를 위해서 PyTorch는 근본적인 데이터 구조인 텐서(Tensor)를 제공한다. 파이토치의 Tensor는 하나의 데이터 형으로, 차원 수에 관계 없이 일반화된 벡터 또는 행렬이라고 볼 수 있다. 즉, 하나의 숫자를 Tensor type에 저장하더라도 그것은 Tensor가 된다. 이는 선형대수학에서 정의하는 텐서의 의미와도 일맥상통한다. 

 

출처 - Deep Learning with PyTorch

 

텐서와 동일하게 사용되는 용어로 다차원 배열(multidimensional array)가 있다. 텐서의 차원은 텐서의 스칼라 값을 참조하기 위한 인덱스의 수와 일치한다.

 

사실 파이토치에서만 텐서 데이터 구조를 지원하는 것은 아니고 NumPy(넘파이)에서도 동일하게 지원하긴 하는데, 파이토치와 넘파이의 차이점은 넘파이는 CPU에서만 텐서 연산을 사용할 수 있지만, PyTorch에서는 GPU를 사용하여 텐서 연산을 병렬처리 하여 더 빠르게 연산할 수 있다. 앞으로 NumPy에서도 GPU 텐서 연산을 지원할지도 모르는 일이긴 하다.

 

기본적인 텐서 사용법은 아래  코드처럼 torch를 import하고 원하는 텐서를 생성하면 된다. torch.ones()는 원하는 크기의 일(one)행렬을 생성한다.

 

# In[4]:

import torch

a = torch.ones(3)

a

 

# Out[4]:

tensor([1., 1., 1.])

 

# In[5]:

b = torch.ones(3,3)
b

 

# Out[5]:

tensor([[1., 1., 1.],
            [1., 1., 1.],
            [1., 1., 1.]])

 

사실 그냥 봤을 때, 왜 굳이 PyTorch의 텐서를 사용해야하는지 의아할 수 있다. 왜냐하면, 파이썬에는 이미 텐서와 비슷한 역할을 하는 리스트(List)가 존재하기 때문이다. 하지만 두 데이터 구조의 메모리 저장 방식을 살펴본다면 왜 텐서를 사용하는 지 알 수 있을 것이다.

출처 - Deep Learning with PyTorch

 

리스트 자료형 내의 각각의 element는 메모리 공간 내에서 분리되어 각각 저장된다. 하지만 텐서나 Numpy의 Array는 메모리 공간 내에 연속적으로 저장된다. 크기가 작을 때는 리스트나 텐서나 그 속도나 메모리 저장 공간이 별 차이 없겠지만, 요즘 나오는 딥러닝 모델들의 파라미터 수는 최소 수 천만 ~ 수 천억개이다. 따라서, 대용량의 행렬 연산을 수행할 때, 텐서가 압도적으로 우월한 성능을 보인다.

 

# In[6]

c = torch.tensor([[4,2,1],
                          [1,7,3],
                          [5,4,2]])
c

 

# Out[6]

tensor([[4, 2, 1],
            [1, 7, 3],
            [5, 4, 2]])

 

일반적인 텐서 객체를 생성하는 방법은 위와 같다. torch.tensor()에 넘파이 배열이나 리스트를 인수로 넣어주면 된다. 이 외에도 torch.randn(), torch.zeros() 등의 텐서 생성 메서드가 존재한다. 자세한 내용은 필요할 때마다 자신이 사용하는 파이토치 버전의 공식문서를 참조하자. (https://pytorch.org/docs/2.1/)

 

References

1. Deep Learning with Pytorch, Eli Stevens, Luca Antiga, Thomas viehmann

2. PyTorch Documentation (https://pytorch.org/docs/2.1/)

'인공지능 > PyTorch' 카테고리의 다른 글

PyTorch로 사전학습 된 모델 사용하기  (0) 2024.02.21