관리 메뉴

TEAM EDA

[파이토치로 시작하는 딥러닝 기초] 1.1 Tensor Manipulation 본문

EDA Study/PyTorch

[파이토치로 시작하는 딥러닝 기초] 1.1 Tensor Manipulation

김현우 2020. 3. 19. 21:36

이번 글에서는 PyTorch의 기본적인 연산 법에 대해서 배워보도록 하겠습니다. 이번 글은 EDWITH에서 진행하는 파이토치로 시작하는 딥러닝 기초를 토대로 작성하였습니다. 

목차 

  • Vector, Matrix and Tensor 
  • NumPy Review
  • PyTorch Tensor Allocation 
  • Matrix Multiplication 
  • Other Basic Ops

1. Vector, Matrix and Tensor 

  • 스칼라(scala) : 차원이 없는 값
  • 벡터(vector) : 1차원으로 이루어진 값(1D)
  • 행렬(matrix) : 2차원으로 이루어진 값(2D)
  • 텐서(tensor) : 3차원으로 이루어진 값(3D) 

Tensor의 Shape를 계산할 수 있는 것이 중요함. 

  • 2D : (batch size, dim) 
  • 3D : (batch size, width, height) - computer vision , (batch size, length, dim) - Language

2. Numpy Review

3. PyTorch Tensor Allocation 

3.1 Broadcasting

  • Matrix간의 연산 시에 크기가 작은 행렬을 크기가 큰 행렬과 크기가 맞도록 조정해주는 작업 
  • 자동적으로 이루어지기에 사용 시에 매우 주의해야 함

3.2.1 Vector + Scalar

  • m2의 [3]이 -> [[3, 3]]으로 수정 

3.2.2 Vector + Vector 

  • m1의 [[1, 2]]가 [[1, 2], [1, 2]]으로 수정 
  • m2의 [[3], [4]]가 [[3, 3], [4, 4]]으로 수정

4. Multiplication vs Matrix Multiplication 

  • matmul : 내적 
  • * 혹은 mul : 원소 곱 (Broadcasting을 통해서 자동적으로 계산됨 )

5. Other Basic Ops

  • Mean 
  • Sum 
  • Max and Argmax 

5.1 Mean 

  • FloatTensor에서는 mean이 가능하지만 Long에 대해서는 불가능함
  • dim을 통해서 해당 방향을 없앨 수 있음 
    • 예) dim이 0인 경우에 대해서 (2 x 2) -> (1 x 2)이 되고 이렇게 계산이 되려면 같은 col끼리 평균이 매겨져야 함

5.2 Sum 

5.3 Max and Argmax 

  • Max : 최댓값을 추출
  • Argmax : 최댓값의 index를 추출 
    • max()[1]으로 계산 

5.4 View (Reshape)

  • 차원의 크기를 바꿔주는 함수

(2, 2, 3) -> (2 x 2, 3) = (4, 3)으로 변경 됨. -1의 경우 shape를 지정해주지 않고 앞의 값들을 곱하라는 의미임 

 

(2, 2, 3) -> (2 x 2, 1, 3) = (4, 1, 3)으로 변경됨. 

 

5.5 Squeeze 

  • view 함수를 사용한 것과 비슷하지만 Squeeze는 dim의 Element의 갯수가 1인 경우를 없애줌
  • 아래의 예시에서는 [3, 1]에서 1이 사라지는 역할 
  • Squeeze(dim = ?)을 통해서? 의 dimension이 1을 가지면 지우고 아니면 내버려둠

5.6 Unsqueeze 

  • Squeeze의 반대로 내가 원하는 dim에 1을 넣어주는 역할을 함
  • view에서도 똑같이 구현할 수 있음

5.7 Type Casting 

  • tensor의 type을 변경해주는 함수

5.8 Concatenate

  • 두 개의 tensor를 결합 
  • dim이 0 : 위아래로 결합 
  • dim이 1 : 옆으로 결합 

5.9 Stacking 

  • 여러 개의여러 개의 tensor를 결합 
  • dim이 0 :  위아래로 결합
  • dim이 1 : 옆으로 결합 

5.10 Ones and Zeros 

  • ones_like : 똑같은 크기의 tensor를 1로 채워서 반환 
  • zeros_like : 똑같은 크기의 tensor를 0으로 채워서 반환 
  • 같은 device간의 tensor 계산을 용이하게 해 주고 Multiple gpu 간의 연산도 용이 

 

5.11 In-place Operation 

  • _가 붙게되어서 memory를 새로 선언하지 않고 기존의 tensor에 넣어라