PyTorch - Pytorch Basics
17 Aug 2021 | Deep Learning- 행렬의 사칙연산
- 행렬곱 (Matrix Multiplication)
- Norm
- Indexing
- Expanding
- Tensor
- Tensor - Creation Ops
- Tensor - Indexing, Slicing, Joining, Mutating Ops
- Tensor - Random sampling
- Tensor - Math operations - Pointwise Ops
- Tensor - Math operations - Reduction Ops
- Tensor - Math operations - Comparison Ops
- Tensor - Math operations - Other Operations
- Tensor - Math operations - BLAS and LAPACK Operations
First of All
들어가기 앞서 왜 다른 Ai 프레임워크(TF, Keras, Caffe 등)가 아닌 PyTorch를 채택했는지 알아보자.
Keras는 일단 Lower-level 프레임워크를 High-level로 이용하게 해주는 포장재라 생각하고, 비슷한 Level에 있다 생각되는 Tensorflow와 비교해보자.
일단 둘 다 상당히 Lower-level로 구동되며 속도도 빠르다.
또한 Torch가 디버깅을 하기 더 편하며 큰 데이터들을 다룰 때 유리하다고 한다.
또한 코드가 Pythonic 하다는 느낌이 강하다.
마지막으로 Backpropagation 관련해서 PyTorch가 좀 더 동적으로 돌아간다고 한다.
Tensor
numPy + AutoGrad
기본적으로 numpy.ndarray
와 동일한 구조를 가진다. 생성자 또한 거의 동일하며 PyTorch의 가장 핵심적인 클래스이다.
이에 자동으로 미분함수와 값을 저장해주는 AutoGrad 기능이 추가된것이다.
Documentation
프레임워크를 가장 잘 사용하려면 공식 문서를 보는것이 가장 중요할것이다.
아래에선 공식 문서를 기반으로 자주 사용하는 메소드를 정리하는 식으로 진행할것이다.
행렬의 사칙연산
행렬곱 (Matrix Multiplication)
- torch.mm
[n,m] x [m,p] = [n,p]를 구현한다. - torch.bmm
[b,n,m] x [b,m,p] = [b,n,p]를 구현한다. - torch.matmul
mm의 기능을 좀 더 편리하게 구성해놓은 어댑터의 역할이다. 대충 써도 원하는 결과가 나올 가능성이 높다는 장점이 있지만, 그만큼 내부적인 연산이 많아 직관성이 떨어지는 단점이 있다.
Norm
- torch.linalg.norm
인자로 여러가지 설정이 가능하다.
Indexing
- torch.index_select
행렬에서 원하는 값을 가져올 때 사용된다. - torch.Tensor.view
행렬을 원하는 형태로 view를 만드는 방법이다. view는 contig reshape, transpose, permute 등 여러가지 함수가 있는데, 여기를 참조하자.
Expanding
- torch.expand
주의할 점은 확장할 dimension의 shape이 1이여야 한다. - torch.repeat
확장할 dimension이 1이 아니어도 된다. 덩어리 째로 복사가 된다.
Tensor
- torch.Tensor
일단 Tensor는 Class이다. 가장 기본적인 형태라고 보면 된다. - torch.tensor
작명법에서도 유추할 수 있듯이, tensor는 함수이다.
Tensor를 만들어주는 팩토리 함수라고 이해하면 좋을 것 같다. 물론 Tensor로 직접 만들수도 있지만 tensor가 더 편한 기능을 제공할것이다. - torch.is_tensor
말 그대로 Tensor인지 확인하고 Boolean 값을 리턴하는 함수이다.
Tensor - Creation Ops
- torch.tensor
- torch.as_tensor
데이터를 Tensor 형으로 바꾼다. - torch.as_strided
기존의 Tensor에 stride를 붙여 생성한다 - torch.from_numpy
ndarray같은 데이터타입을 변환하는데, 동일한 메모리를 공유한다. - torch.zeros
인자로 준 값에 맞춰 0으로 채워진 매트릭스를 생성한다. - torch.zeros_like
인자로 준 매트릭스와 동일한 크기에 0으로 채워진 매트릭스를 생성한다.
one, zero는 동일한 개념이므로 같이 써놨다.
torch.full은 정해진 value로 채운다.
empty는 빈 값으로 채운다. - torch.arange
차원이 1이며 인자로받은 [start-end)인 Tensor를 만든다.
torch.range는 arange+1의 값을 갖는다.Tensor - Indexing, Slicing, Joining, Mutating Ops
- torch.cat
튜플로 받은 데이터를 지정 차원에 맞춰 붙인다. - torch.chunk
Tensor를 설정한 크기로 자른다, 마지막에 남은 나머지는 더 적은 값을 가진다. - torch.dsplit
3번째 디멘션을 따라 텐서를 자른다. - torch.dstack
3번째 디멘션을 따라 텐서를 쌓는다.
vstack, hstach같이 비슷한 알고리즘인데 적용 차원이 다른 함수가 있다. - torch.movedim, torch.moveaxis
원소의 순서는 유지하며 차원을 바꾼다. 1차원으로 쫙 편다음에 다시 재조립한다고 생각하자. - torch.gather
index값이 설정되어있는 Tensor를 받아 타겟 Tensor에서 인덱스값을 불러오는 기능이다. 대각선의 값을 추출할 때 쓰인다. - torch.narrow
입력 텐서를 축소시킨(삭제된) 텐서를 반환한다. 주소를 공유한다. - torch.nonzero
입력 Tensor 중 0이 아닌 부분의 인덱스를 반환한다. - torch.reshape
데이터는 같지만 지정된 shape인 텐서를 반환한다. Contiguous하느냐에 따라 View를 반환할 때도 있다. - torch.split
텐서단위로 chunk를 분리한다. 반환은 view로 하게된다. - torch.squeeze
Tensor에서 1인 차원들을 모두 없앤다. - torch.unsqueeze
Tensor에 차원을 추가한다. - torch.Tensor.view
행렬을 원하는 형태로 view를 만드는 방법이다. view는 contig reshape, transpose, permute 등 여러가지 함수가 있는데, 여기를 참조하자.
Tensor - Random sampling
- torch.seed
랜덤한 값을 반환한다. 시드 값에 따라 달라진다. - torch.manual_seed
시드의 값을 바꾼다. - torch.initial_seed
현재 시드의 값을 출력한다.
Tensor - Math operations - Pointwise Ops
- Pointwise Ops
분량이 너무 많아져서…
절대값과 삼각함수, 각도와 비트연산 등 이런거 없나? 하는 연산들은 전부 여기 들어있다.Tensor - Math operations - Reduction Ops
-
torch.argmax torch.argmin
입력 텐서 중 최대,최소 값을 반환한다. - torch.amax torch.amin
입력 텐서에서 해당 차원을 기준으로 최대, 최소값의 텐서를 반환한다. - torch.all torch.any
and, or 연산이라고 보면 된다. - torch.norm
Norm 연산 값을 반환한다. - torch.mean torch.median torch.nanmedian
이름 그대로다. nanmedian은 nan값을 무시한다. - torch.count_nonzero
각 dim단위로 0의 숫자를 센다.Tensor - Math operations - Comparison Ops
양이 너무 많은데 다 거기서 거기라.. 리눅스 쉘 스크립트의 문법과 비슷하다.
Tensor - Math operations - Other Operations
- torch.atleast_1dtorch.atleast_2dtorch.atleast_3d
입력으로 받은 0차원을 최소 n-dimension 으로 반환해준다. - torch.diff
입력으로 받은 두 텐서의 각각 요소의 차이를 가진 텐서를 반환한다. - torch.einsum
아인슈타인 합을 반환한다.Tensor - Math operations - BLAS and LAPACK Operations
- 선형대수에 관련된 함수들로, 유용한것들이 상당히 많다.
양이 너무 많다.. 필요할 때 가져다 써보자.