Pytorch Basic Tensor Manipulation
Numpy와 유사한 부분이 많음
Vector, Matrix and Tensor
1차원으로 이루어지는 값 - Vector(벡터), 1D Tensor
2차원으로 이루어지는 값 - Matrix(행렬), 2D Tensor
3차원으로 이루어지는 값 - (3D) Tensor
2D Tensor (Typical Simple Setting)
|t|=(batch size, dim)
batch size * dimension의 사이즈를 갖고있다.
보통 (64,256)
3D Tensor(Typical Computer Vision)
|t|=(batch size, width, height)
pytorch는 세로, 가로, 깊이의 값이 순차적으로 들어간다
3D Tensor(Typical Natural Language Processing)
|t|=(batch size, length, dim)
시계열 또는 순차적 데이터(sequential data)를 다루는 경우
batch size란?
전체 트레이닝 데이터 셋을 여러 작은 그룹을 나누었을 때 batch size는 하나의 소그룹에 속하는 데이터 수를 의미. 전체 트레이닝 셋을 작게 나누는 이유는 트레이닝 데이터를 통째로 신경망에 넣으면 비효율적이 리소스 사용으로 학습 시간이 오래 걸리기 때문
Numpy Review
numpy와 pytorch는 호환성이 높고 직관적이다
1D Array with Numpy
list를 np.array 함수에 넣어 1D Vector 선언
t.ndim : 몇 개의 차원으로 이루어져 있는 지 반환
t.shape: 몇 개의 원소(element)로 이루어져 있는 지 반환
Element Accessing/Slicing
Element Accessing: t[index]
Element Slicing: t[start:end+1]
2D Array with Numpy
Pytorch Tensor
1D Array with Pytorch
Numpy와 마찬가지로 list를 torch.FloatTensor 함수에 넣어준다.
2D Array with Pytorch
Broadcasting
계산할 수 없는 크기의 행렬들을 연산하게 될 때 자동으로 size를 맞춰준다.
크기가 같아 연산이 가능한 경우
크기가 달라 m2의 크기를 1에서 (1,2)로 맞춰준 경우
m1과 m2의 크기를 모두 (2,2)로 바꾼 경우
Multiplication vs Matrix Multiplication
matmul - 일반적인 행렬의 곱
mul - 행렬의 크기를 자동으로 변환해서 곱함 ex) [[1], [2]] → [[1,`1], [2, 2]]
Mean
t.mean() 평균을 구하는 함수
LongTensor에서는 작동이 되지 않음
원하는 차원을 지정해 평균을 구할 수 있음
t.mean(dim=n)
Sum
원소들의 합을 구하는 함수
t.sum()
t.sum(dim=n)
Max and Argmax
최대값 / 최대값을 가리키는 index값을 return
t.max() - max만 return
t.max(dim=n) - n차원에 대한 max와 argmax 둘 다 return
Pytorch Basic Tensor Manipulation 2
View (Numpy의 Reshape)
ft.view([-1,3]) - 두 개의 차원을 가진 tensor로 바꾼다.
두 번째 차원에서 3 개의 원소를 갖고 첫 번째 차원은 임의로 배정된다. (4, 3)의 크기를 갖게 됨
두 번째 차원에서 1 개의 원소, 세 번째 차원은 3개의 원소를 갖는 3차원의 tensor로 바꾼다.
(4, 1, 3)의 크기를 갖게 됨
Squeeze(쥐어짜다)
View함수와 비슷하다.
dim = 1인 차원을 자동으로 없애준다.
ex) [[0],[1],[2]] (3,1) → [0, 1, 2] (3)
ft.squeeze(dim=n) - 만약 해당 차원의 dim 값이 1이라면 없애준다.
1이 아니라면 아무 일도 일어나지 않음.
Unsqueeze
원하는 dim을 1로 만들어준다. dim 명시가 필수인 함수.
[0, 1, 2] (3) → [[0, 1, 2]] (1,3)
Type Casting
long → float
byte → long / byte → float
Concatenate(이어 붙이다)
torch.cat([x,y], dim=n) - dim n이 늘어나도록 x에 y를 이어붙임
Stacking
Concatenate를 더 편리하게 사용하기 위한 함수
x, y, z를 각각 unsqueeze하고 cat함수에 넣은 것과 같은 결과를 가져온다.
Ones and Zeros
1 혹은 0으로 이루어진 x와 똑같은 크기의 tensor 생성
다른 모델이나 GPU에서 연산하면 오류가 생길 수 있는데, 이를 막기 위해 x와 같은 device로 생성해 줌
In-place Operation
x.mul() - 임의의 메모리에 값을 넣어줌, x값은 변하지 않음
x.mul_() - 메모리를 새로 선언하지 않고 기존 tensor에 값을 넣어줌, x값이 변함