Pytorch

[Pytorch] Pytorch Tutorial - Basics of Pytorch

Younghun 2022. 10. 2. 22:04

컴퓨터비전 웹 프로젝트 준비

이번 학기 프로메테우스 동아리에서 컴퓨터비전 웹 프로젝트를 진행하기로 했다.

서비스 내용은 사용자가 음식점 리뷰 사진들을 올리면 그 중 메뉴판을 분류해서 따로 보여주는 것이다.

1주차 때 사전 준비를 위한 커리큘럼과 일정 회의 등을 했고, 2주차 과제로 Pytorch Tutorial을 하기로 했다.

 

해외 kaggle 유저가 친절하게도 파이토치 튜토리얼 코드를 올려주었다. 이것을 보고 연습할 계획이다.

Pytorch Tutorial for Deep Learning Lovers | Kaggle

 

Pytorch Tutorial for Deep Learning Lovers

Explore and run machine learning code with Kaggle Notebooks | Using data from Digit Recognizer

www.kaggle.com

 

위 링크로 들어가면 전체 코드를 확인할 수 있다.


Matrices

  • 파이토치에서 행렬(array)는 텐서(tensor)로 불린다.
  • numpy array는 np.array() 메소드를 활용해 만들 수 있다. np.shape() 을 사용해 array의 모양을 알 수 있다.
  • 튜토리얼에서는 np.shape()이 Row x Column 이라고 썼지만 이것은 2차원에서만 적용된다고 한다.

 

  • 이제 파이토치를 이용해서 텐서를 만들어보자.
  • 텐서는 torch.Tensor() 메소드를 이용해 만들 수 있다.
  • 텐서는 type과 shape이라는 속성(attribute)을 가지고 있다.

 

이제 넘파이와 파이토치 메소드를 비교해보자

ones는 값이 전부 1인 행렬을 만들고, rand는 0~1사이의 랜덤 값을 가진 행렬을 만든다.

사실 넘파이나 파이토치나 별로 차이가 없는데 튜토리얼에서는 넘파이가 보기 편해서 마지막 출력할 때는 텐서를 넘파이로 바꾼다고 한다.

 

 

넘파이와 텐서는 변환(conversion)이 가능하다.

  • torch.form_numpy() : 넘파이에서 텐서로 바꿔준다.
  • numpy() : 텐서를 넘파이로 바꿔준다.


Basic Math with Pytorch

텐서는 다양한 연산을 수행할 수 있다.

  • Resize: view()
  • Addition, Subtraction: torch.add(a,b) / a.sub(b)
  • Multiplication과 Division은 Element wise로 수행된다: torch.mul(a,b) / torch.div(a,b)
  • 평균(mean)과 표준편차(standard deviation) 연산도 지원된다: a.mean() / a.std()


Variables

torch.autograd.Variable은 지금은 잘 사용되지 않는다고 한다. 최신 버전에서는 모든 tensor가 자동적으로 Variable의 성질을 지니기 때문이다. 그러나 과거 버전의 코드를 이해하기 위해서 알아두면 좋다.

 

backpropagation을 수행하기 위해서는 gradient 계산이 필수적이다. 이것을 지원하는 것이 Variable이다. Variable에는 gradient가 축적된다. 다음 코드를 보자.

x.grad를 사용해 누적된 gradient를 확인할 수 있다.


후기

이번 튜토리얼에서 핵심은 Numpy와 tensor의 편리한 변환과 Element wise 연산들인 것 같다.

Variable은 이제 tensor에서 자동으로 지원한다고 하니 더 편해진 것 같다. 다음에는 본격적으로 ANN에 대해 공부해 볼 것이다. 화이팅!