본문 바로가기

Deep Learning

모두를 위한 딥러닝 시즌 2 [Pytorch] - Tensor Manipulation

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값이 변함