Pytorch - 1. 기본

Ui Jin·2022년 9월 27일
0

Pytorch

목록 보기
1/4

Pytorch

PyTorch 공식문서
Pytorch는 쉽게 생각하면 Numpy와 AutoGrad를 합친 라이브러리 라고 생각하면 된다.

즉, 딥러닝에 필요한 파라미터들을 Tensor라고 불리는 저장공간에 저장하고, 이것들을 AutoGrad(자동미분)기능을 활용해 Update하여 작동한다.

따라서 우선 Tensor라는 자료형에 대해서 알아보고, 이를 활용하는 함수들을 살펴보자

1. Tensor

1) 설명

우리가 Python에서 주로 사용하는 저장공간은 list나 deque였다.
또 이보다 더 빠르고 다양한 기능들을 제공하는 Numpy의 Ndarray나 Pandas의 DataFrame도 사용했었다.

Tensor는 이 중 Numpy의 Ndarray를 활용해 Pytorch에서 필요한 기능들을 추가해 만든 저장 공간이다.


때문에 numpy에 존재하는 대부분의 함수들이 있다.

2) 생성

  • torch.tensor()
    : 기존의 list, Ndarray등을 이용해서 생성할 수 있다.
  • torch.zeros(), torch.ones()
    : 주어진 크기의 tensor를 0/1로 채워 생성할 수 있다
  • torch.arange()
    : 주어진 범위의 1차원 tensor를 생성한다.
  • torch.eye()
    : 대각행렬로 만들어진 tensor를 생성한다
  • torch.rand()
    : random으로 채워진 tensor를 생성한다.
  • Random Sampling
    : random하지만 특정 이산 확률 분포를 따르도록 생성할 수도 있다.

torch.tensor VS torch.Tensor

  1. torch.tensor(data)
    • Function
    • 이미 존재하는 data를 복사해 tensor를 만들어 반환하는 함수
  1. torch.Tensor(data)
    • Class
    • 이미 존재하는 data를 tensor로 바꾸고 싶을 때, 사용하는 클래스

3) Indexing

torch.index_select

: n차원 Tensor에서 단 하나의 index만 변경해가며 값을 뽑고 싶을 때, 사용한다.

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

# Output = [[1], [3]]
Output = torch.index_select(Input, 1, torch.tensor([0]))

Numpy Indexing

: Numpy의 인덱싱 방법과 똑같이 사용하더라도 변수에 접근할 수 있다.

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

# Output = [[1], [3]]
Output = Input[:, 0]

torch.gather

: 위의 두 방법과 다르게여러개의 Index를 변경시켜가며 값을 뽑을 때 사용할 수 있다.

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

# Output = [[1], [4]]
index = torch.unsqueeze(torch.arange(2), 0)
output = torch.gather(input = A, dim = 0, index = index

gather 사용법
1. 함수의 프로토타입
: torch.gather(input, dim, index, ..)

  1. 함수 사용법
    : input으로 받은 Tensor에서, 입력받은 dimension의 index를 index로 설정하면서 Output을 구해 return한다.
  1. 상세 과정

2. Tensor 연산

torch라이브러리에는 tensor의 다양한 연산을 지원해주는 함수들이 존재한다.

1) Math Operation

  • Pointwise
    : 점별연산에 관한 함수들이 있는 라이브러리
  • Reduction
    : 주어진 Tensor의 크기를 줄이는 함수들이 있는 라이브러리
  • Comparison
    : Tensor간의 비교를 지원하는 함수들이 있는 라이브러리

행렬곱셈

  1. torch.mm()
    : 행렬간 곱셈 시 broadcasting불가
  1. torch.matmul()
    : 행렬간 곱셈 시 broadcasting지원

2) Tensor변형

Reshape

  1. tensor.flatten()
    : 1차원 Tensor로 변형시켜주는 함수
  1. tensor.view()
    : Tensor를 어떻게 바라볼 것인지 정해주는 함수이다.
    : 즉, Transpose와 같은 작업으로 인해 데이터들이 메모리 상에서 연속적으로 존재하지 않을 때에는 사용할 수 없다.
    (contiuous하게 만들어 주고 사용해야 함)
  1. tensor.reshape()
    : tensor.contiguous().view()와 같은 의미를 가진다.
    : 즉, tensor간 물리적 위치를 연속적으로 만든 후, 모양을 재정의 하는 것이다.

차원변경

  1. tensor.squeeze()
    : 차원이 1인 차원 제거 함수
  1. tensor.unsqueeze()
    : 1차원 생성 함수

3) 기타

이 외에도 다음의 함수들이 존재하는데, 다음의 함수들은 자주 사용되기 때문에 미리 알아두고 넘어가자.

  • Tensor.shape
    : Tensor의 모양을 출력하는 함수이다.
  • torch.numel()
    : Python의 len()과 같은 역할을 한다.
  • torch.nn.identity()
    :
profile
github로 이전 중... (https://uijinee.github.io/)

0개의 댓글