본문 바로가기
AI 기초이론

Pytorch의 기본적 기능

by 피라냐콜라다 2023. 3. 15.

앞으로 pytorch를 이용해 여러 학습을 해볼 생각인데 그에 앞서 pytorch의 여러 기능들에 대해 살펴보고자 한다.

Torch의 여러 기능들은 아래의 사이트에서 확인할 수 있다.

https://pytorch.org/docs/stable/index.html

 

PyTorch documentation — PyTorch 1.13 documentation

Shortcuts

pytorch.org

pytorch는 딥러닝을 위한 라이브러리인만큼 numpy와 같이 array를 연산하는 여러 함수들이 있다. 다만 numpy에서 행렬을 ndarray라고 했다면, pytorch의 경우에는 행렬이 tensor라는 이름을 가진다. 가령 [1, 2][3, 4]의 행렬을 pytorch로 구현하고싶다면 아래와 같이 구현하면 된다.

A = torch.tensor([[1, 2],[3, 4]])

 

tensor끼리는 당연히 사칙 연산을 지원하고, 아래와 같이 표현할 수 있다

import torch
torch.add(A, B)   #A+B
torch.sub(A, B)   #A-B
torch.mul(A, B)   #A*B
torch.div(A, B)   #A/B

 

tensor에서는 reshape을 지원하지만, view라는 함수도 따로 제공한다. 둘의 출력은 동일하지만 reshape함수의 경우 contiguous하지 못하다는 특성을 가진다.

A = torch.tensor([[1, 2],[3, 4]])

B = A.view(1, 4)
C = A.reshape(1, 4)

>>> 둘다 torch.tensor([1, 2, 3, 4])를 출력값으로 가진다.

A = torch.tensor([[5, 6],[7, 8]])

print(B, C)

>>> B는 torch.tensor([[5, 6, 7, 8]])가 되지만 C는 torch.tensor([1, 2, 3, 4])일 수 있다.

 

Pytorch에는 squeezeunsqueeze라는 함수가 있다. squeeze는 값이 1인 차원을 줄이는 것이고 unsqueeze는 반대로 1인 차원을 추가해주는 함수다. squeeze에 차원을 지정해주지 않을 경우 값이 1인 모든 차원을 제거하며, unsqueeze는 값이 1인 차원을 추가해줄 차원을 반드시 지정해야 한다.

A=torch.tensor([[1], [2]])		#shape: 2 x 1

B=A.squeeze(dim=1)
>>> torch.tensor([1, 2])		#shape: 2

C=A.unsqueeze(dim=1)
>>>torch.tensor([[[1]], [[2]]])		#shape: 2 x 1 x 1

 

이 외에도 pytorch에는 여러 유용한 함수들이 있다. 빠르게 훑어보도록 하자.

torch.is_tensor() 함수는 입력값이 tensor인지 확인해준다.

x = torch.tensor([1,2,3])
y = [1, 2, 3]

torch.is_tensor(x), torch.is_tensor(y)

>>> True, False

 

torch.numel() 함수는 tensor의 element 개수를 출력한다.

x = torch.tensor([1,2,3])
torch.numel(x)

>>> 3

 

torch.chunk() 함수는 tensor의 특정 차원을 주어진 개수로 자른다.

t = torch.tensor([[1, 2, 3],
                  [4, 5, 6]])

torch.chunk(t, 2, dim=0)

>>> (tensor([[1, 2, 3]]), tensor([[4, 5, 6]]))

torch.chunk(t, 2, dim=1)

>>> (tensor([[1, 2], [4, 5]]), tensor([[3], [6]]))

 

torch.swapdims() 함수는 주어진 tensor의 특정 차원들의 값을 바꿔준다.

x = torch.tensor([[[0,1],[2,3]],[[4,5],[6,7]]])
torch.swapdims(x, 0, 1)

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

차원 0 과 1을 바꿨으므로, 원래 tensor의 [i][j][k]번째 element는 [j][i][k]번째 element로 자리가 바뀜

 

size()함수는  주어진 tensor의 크기 또는 모양을 반한한다

X = torch.Tensor([[1, 2],
                  [3, 4]])
print(X.size())

>>>torch.Size([2, 2])

 

댓글