lab 1: basic frameworks - seoul national university · lab 1: basic frameworks 실습 이현도,...

40
Lab 1: Basic Frameworks <기계학습 개론> 실습 이현도, 최원석, 김윤성 2019.09.26 Biointelligence Laboratory School of Computer Science and Engineering Seoul National University

Upload: others

Post on 03-Jun-2020

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Lab 1: Basic Frameworks - Seoul National University · Lab 1: Basic Frameworks  실습 이현도, 최원석, 김윤성 2019.09.26 Biointelligence Laboratory

Lab 1: Basic Frameworks

<기계학습개론> 실습

이현도, 최원석, 김윤성

2019.09.26

Biointelligence Laboratory

School of Computer Science and Engineering

Seoul National University

Page 2: Lab 1: Basic Frameworks - Seoul National University · Lab 1: Basic Frameworks  실습 이현도, 최원석, 김윤성 2019.09.26 Biointelligence Laboratory

Contents

◼ Google Colab

◼ Numpy

◼ Pytorch basics

2

Page 3: Lab 1: Basic Frameworks - Seoul National University · Lab 1: Basic Frameworks  실습 이현도, 최원석, 김윤성 2019.09.26 Biointelligence Laboratory

Google Colab 사용법

1-1

3

Page 4: Lab 1: Basic Frameworks - Seoul National University · Lab 1: Basic Frameworks  실습 이현도, 최원석, 김윤성 2019.09.26 Biointelligence Laboratory

Programming language for Machine Learning

◼ Python

◼ ML 연구분야에있어서대체하기어려운프로그래밍언어

◼ Tensorflow, Pytorch 등의딥러닝프레임워크

◼ Numpy, Jupyter Notebook, Matplotlib, Pandas, …

4

출처 - http://artificialintelligencemania.com/2018/07/02/the-best-

programming-language-for-machine-learning/

Page 5: Lab 1: Basic Frameworks - Seoul National University · Lab 1: Basic Frameworks  실습 이현도, 최원석, 김윤성 2019.09.26 Biointelligence Laboratory

Jupyter Notebook?

◼ 웹브라우저에서파이썬코드를작성하고실행해볼수있는개발도구

◼ 원격코딩가능

◼ 코드블록단위로실행 / 디버깅

◼ Text block을이용한문서화

◼ Figure plotting 등 GUI

5

147.46.123.123

147.46.123.123:8888

Page 6: Lab 1: Basic Frameworks - Seoul National University · Lab 1: Basic Frameworks  실습 이현도, 최원석, 김윤성 2019.09.26 Biointelligence Laboratory

Google Colab?

◼ Google Colaboratory = Google Drive + Jupyter Notebook

◼ 구글계정전용의가상머신지원 – GPU 포함

◼ Google drive 문서와같이링크만으로접근 / 협업가능

◼ 코드실행시딜레이존재

6

Google server

Page 7: Lab 1: Basic Frameworks - Seoul National University · Lab 1: Basic Frameworks  실습 이현도, 최원석, 김윤성 2019.09.26 Biointelligence Laboratory

Google Colab - 사용법

◼ 개인구글계정필요

◼ Colab과 Jupyter Notebook 사용방법은유사한부분이많음

◼ 실습수업에서는 Colab 위주로설명

◼ GPU가내장된서버를사용할수있을시로컬에서작업을권장

7

Page 8: Lab 1: Basic Frameworks - Seoul National University · Lab 1: Basic Frameworks  실습 이현도, 최원석, 김윤성 2019.09.26 Biointelligence Laboratory

Google Colab - 사용법

◼ 파일생성/접근방법

◼ 개인구글계정으로접속

◼ https://colab.research.google.com 접속

◼ GOOGLE 드라이브탭이동

◼ 새 PYTHON 노트선택

◼실습은 python3로진행할예정

8

버전선택

Page 9: Lab 1: Basic Frameworks - Seoul National University · Lab 1: Basic Frameworks  실습 이현도, 최원석, 김윤성 2019.09.26 Biointelligence Laboratory

◼ 파일이름변경

◼ Code cell, Text cell

◼ .ipynb 파일은 code cell과 text cell로구성

◼ 각셀하단에마우스를대거나, 화면좌상단버튼으로셀추가가능

◼ 셀선택(마우스) 후셀우상단삭제버튼으로셀삭제가능

Google Colab - 사용법

9

Text cell

Code cell

셀추가

이름변경

셀추가

Page 10: Lab 1: Basic Frameworks - Seoul National University · Lab 1: Basic Frameworks  실습 이현도, 최원석, 김윤성 2019.09.26 Biointelligence Laboratory

Google Colab - 사용법

◼ Code cell

◼ 일반적인파이썬코딩방식과동일

◼ 각셀은한번에실행할단위를뜻함

◼ 실행이후에도메모리는유지되어다른셀실행시영향을줌

◼런타임다시시작시초기화

◼ 상단메뉴의런타임

◼실행중인셀중단

◼런타임다시시작

10

실행(Ctrl + Enter)

실행결과

실행번호

실행중단런타임재시작

Page 11: Lab 1: Basic Frameworks - Seoul National University · Lab 1: Basic Frameworks  실습 이현도, 최원석, 김윤성 2019.09.26 Biointelligence Laboratory

Google Colab - 사용법

◼ Text cell

◼ 여러줄주석의효과적인시각화

◼ 마크다운(Markdown) 문법

◼ 자동목차생성

11

목차생성

Page 12: Lab 1: Basic Frameworks - Seoul National University · Lab 1: Basic Frameworks  실습 이현도, 최원석, 김윤성 2019.09.26 Biointelligence Laboratory

Google Colab - 사용법

◼ 단축키

◼ 대부분의작업은단축키로실행가능

◼ 단축키설정가능

◼ 단축키설정화면 – Ctrl+M H

◼ 유용한단축키

◼코드셀생성 – Ctrl+M A(B)

◼코드셀실행 – Ctrl+Enter

◼셀삭제 – Ctrl+M D

◼실행중인셀중단 – Ctrl+M I

◼런타임다시시작 – Ctrl+M .

◼코드(텍스트) 셀로변환 – Ctrl+M Y(M)

◼마지막셀작업실행취소 – Ctrl+Shift+Z12

Page 13: Lab 1: Basic Frameworks - Seoul National University · Lab 1: Basic Frameworks  실습 이현도, 최원석, 김윤성 2019.09.26 Biointelligence Laboratory

Google Colab - 사용법

◼ GPU 설정

◼ 런타임 -> 런타임유형변경 -> 하드웨어가속기를 GPU로변경

◼ 유의사항 – GPU는최대 12시간실행을지원

◼ 12시간실행이후에는런타임재시작으로 VM을교체해야함

13

Page 14: Lab 1: Basic Frameworks - Seoul National University · Lab 1: Basic Frameworks  실습 이현도, 최원석, 김윤성 2019.09.26 Biointelligence Laboratory

Google Colab - 사용법

◼ 명령어실행하기

◼ !코드셀에를붙이고터미널명령어를입력하여실행하면터미널에서실행하는것과같은결과가출력됨

◼ 예외로 cd 명령어는 %cd /your/desired/path

14

Page 15: Lab 1: Basic Frameworks - Seoul National University · Lab 1: Basic Frameworks  실습 이현도, 최원석, 김윤성 2019.09.26 Biointelligence Laboratory

Google Colab - 사용법

◼ 구글드라이브연동

◼ 간단한인증절차이후구글드라이브의파일을 Colab에서접근가능

15

Page 16: Lab 1: Basic Frameworks - Seoul National University · Lab 1: Basic Frameworks  실습 이현도, 최원석, 김윤성 2019.09.26 Biointelligence Laboratory

Google Colab - 사용법

◼ Github 연동

◼ 단일 .ipynb 파일을 clone 하는방법

◼ https://github.com/~~~ 부분을https://colab.research.google.com/github/~~~ 로교체

◼파일 -> 드라이브에사본저장

◼ 전체 repository cloning

◼ !git clone project.git

◼ github repository에파일을올리는방법

◼파일 - Github에사본저장선택

◼저장소, 브랜치, 경로지정16

Page 17: Lab 1: Basic Frameworks - Seoul National University · Lab 1: Basic Frameworks  실습 이현도, 최원석, 김윤성 2019.09.26 Biointelligence Laboratory

Google Colab - tips

◼ 장시간사용할때의 issue들

◼ GPU 사용/미사용관계없이최대 12시간

◼ 아무것도안하는 idle 상태돌입이후 90분에런타임자동으로 shutdown

◼ Shutdown 전에창을끄고다시켜도런타임은유지됨

◼ 동시에최대 2개의 notebook 가동가능

17

Page 18: Lab 1: Basic Frameworks - Seoul National University · Lab 1: Basic Frameworks  실습 이현도, 최원석, 김윤성 2019.09.26 Biointelligence Laboratory

Google Colab - tips

◼ Jupyter로코딩하고싶은데 Colab GPU만쓰고싶은경우

◼ 로컬에서작업후 drive에올리고 Colab으로실행

◼ 학습된모델 weight만다운로드후로컬에서분석

◼ Jupyter도쓰기싫은경우

◼ Drive에올리고실행해야할파일(ex: train.py)를 Colab에서커맨드로실행(!train.py)

◼ 그냥 Colab 쓰는게싫은경우

◼ 학기마다 GPU 서버사용신청을할수있음(서울대학교구성원)

18

Page 19: Lab 1: Basic Frameworks - Seoul National University · Lab 1: Basic Frameworks  실습 이현도, 최원석, 김윤성 2019.09.26 Biointelligence Laboratory

Numpy, Pytorch tensor

1-2

19

Page 20: Lab 1: Basic Frameworks - Seoul National University · Lab 1: Basic Frameworks  실습 이현도, 최원석, 김윤성 2019.09.26 Biointelligence Laboratory

Numpy

◼ ML 프로그래밍의데이터자료형은기본적으로 multi-dimensional

array (혹은 tensor)

◼ Numpy는 multi-dimensional array 연산을편리하게하기위한라이브러리

◼ Numpy 모듈설치 - pip3 install numpy

◼ Colab에는기본적으로설치되어있다.

◼ Import - import numpy (as np)

20

Page 21: Lab 1: Basic Frameworks - Seoul National University · Lab 1: Basic Frameworks  실습 이현도, 최원석, 김윤성 2019.09.26 Biointelligence Laboratory

Numpy array

◼ numpy array는모양(shape)과데이터타입(dtype)을가진다.

◼ 길이가 𝑛인정수벡터 – shape: 𝑛, dtype: np.int32

◼ 𝑛 ×𝑚실수행렬 – shape: (𝑛,𝑚), dtype: np.float32(64)

◼ 𝑛 ×𝑚 × 𝑘 복소수텐서 – shape: (𝑛,𝑚, 𝑘), dtype: np.complex6421

출처:

https://www.safaribooksonline.com/library/view/el

egant-scipy/9781491922927/ch01.html

Page 22: Lab 1: Basic Frameworks - Seoul National University · Lab 1: Basic Frameworks  실습 이현도, 최원석, 김윤성 2019.09.26 Biointelligence Laboratory

Pytorch basics

1-3

22

Page 23: Lab 1: Basic Frameworks - Seoul National University · Lab 1: Basic Frameworks  실습 이현도, 최원석, 김윤성 2019.09.26 Biointelligence Laboratory

Pytorch basics

23

ModelStructure, Weights

Label: 2

DatasetInput, Labels

Output -> Label

Optimizing model weight

Training Phase

Test PhaseEvaluating output

◼ Pytorch를활용한딥러닝프로그램의기본구조

Page 24: Lab 1: Basic Frameworks - Seoul National University · Lab 1: Basic Frameworks  실습 이현도, 최원석, 김윤성 2019.09.26 Biointelligence Laboratory

Pytorch basics

◼ Pytorch를활용한딥러닝프로그램의기본구조

◼ Model(nn.Module) : Class

◼전체적인인공신경망의구조를선언하는부분

◼ __init__, forward 등의 method는꼭필요함

◼ Dataset : Class

◼학습에필요한데이터셋을선언하는부분

◼ __init__, __len__, __getitem__의 method는꼭필요함

◼ Training

◼학습을진행하는부분

◼ {Validation & Test}

◼학습된결과를확인하는부분

24

Page 25: Lab 1: Basic Frameworks - Seoul National University · Lab 1: Basic Frameworks  실습 이현도, 최원석, 김윤성 2019.09.26 Biointelligence Laboratory

Pytorch basics

◼ Model

25

Class Model(nn.Module):

def __init__(self, PARAMETERS):

super(Model, self).__init__()

…SOME DECLAIRATION…

def forward(self, INPUTS):

…SOME COMPUTATIONS…

return OUTPUT

Page 26: Lab 1: Basic Frameworks - Seoul National University · Lab 1: Basic Frameworks  실습 이현도, 최원석, 김윤성 2019.09.26 Biointelligence Laboratory

Pytorch basics

◼ Dataset

26

Class Dataset(Dataset):

def __init__(self, PARAMETERS):

…SOME DECLAIRATION…

def __len__(self):

return length_of_dataset

def __getitem__(self, index):

return Dataset[index]

Page 27: Lab 1: Basic Frameworks - Seoul National University · Lab 1: Basic Frameworks  실습 이현도, 최원석, 김윤성 2019.09.26 Biointelligence Laboratory

Pytorch basics

◼ Training part

27

DECLAIR DATASET, DATALOADER

DECLAIR HYPERPARAMETERS

model = Model(PARAMETERS)

optimizer = OPTIMIZER(model.parameters(), lr=LEARNING_RATE)

for epoch in range(NUM_EPOCHES):

for (INPUTS, REAL_VALUES) in DATALOADER:

optimizer.zero_grad()

OUTPUTS = model(INPUTS)

loss = LOSS_FUNCTION(OUTPUT, REAL_VALUES)

loss.backward()

optimizer.step()

Page 28: Lab 1: Basic Frameworks - Seoul National University · Lab 1: Basic Frameworks  실습 이현도, 최원석, 김윤성 2019.09.26 Biointelligence Laboratory

Logic Gate Example

◼ Single Perceptron Separator

◼ 단일퍼셉트론 : out = 𝑓 𝑥, 𝑦 = 𝑔 𝑎𝑥 + 𝑏𝑦 − 𝑐 × 1 = 𝑔 𝑎𝑥 + 𝑏𝑦 − 𝑐

◼ Activation function 𝑔 𝑥 : sigmoid, relu, etc. (Softmax는포함안됨)

28

𝑓(𝑥, 𝑦)

𝑥

𝑦

1

𝑜𝑢𝑡

Bias == 역치

𝑎

𝑏

−𝑐

Page 29: Lab 1: Basic Frameworks - Seoul National University · Lab 1: Basic Frameworks  실습 이현도, 최원석, 김윤성 2019.09.26 Biointelligence Laboratory

Logic Gate Example

◼ Single Perceptron Separator

◼ 단일퍼셉트론 : out = 𝑓 𝑥, 𝑦 = 𝑔 𝑎𝑥 + 𝑏𝑦 − 𝑐 × 1 = 𝑔 𝑎𝑥 + 𝑏𝑦 − 𝑐

◼ 공간분할측면에서의퍼셉트론 (Sigmoid)

29

1

0

𝑓(𝑥, 𝑦)

Page 30: Lab 1: Basic Frameworks - Seoul National University · Lab 1: Basic Frameworks  실습 이현도, 최원석, 김윤성 2019.09.26 Biointelligence Laboratory

Logic Gate Example

◼ Single Perceptron Separator

◼ 문제 : 단순한 Boolean 함수근사(AND, OR, XOR)

◼ 입력

◼노이즈를포함하는 0 혹은 1의값을가지는 x, y

◼ 출력

◼예측된함수의결과 : val_(𝑣𝑎𝑙∗)

◼ Loss function

◼실제함수의결과와예측된결과의차이를최소화

◼ ℒ = σ𝑛=1𝑁 𝑣𝑎𝑙 − 𝑣𝑎𝑙∗

2(L2 loss, reduce sum)

30

1

0

Page 31: Lab 1: Basic Frameworks - Seoul National University · Lab 1: Basic Frameworks  실습 이현도, 최원석, 김윤성 2019.09.26 Biointelligence Laboratory

Logic Gate Example

◼ Imports

◼ torch : 가장기본적인 pytorch 모듈

◼ torch.nn : 인공신경망관련함수/

클래스등이선언된모듈

◼ torch.optim : optimizer가정의된모듈◼ Adam : Adam Optimizer

◼ torch.utils.data.* : 학습세팅을편하게해주기위한 dataset의 class

가선언된모듈들

◼ matplotlib : 결과를시각화하는모듈

31

Page 32: Lab 1: Basic Frameworks - Seoul National University · Lab 1: Basic Frameworks  실습 이현도, 최원석, 김윤성 2019.09.26 Biointelligence Laboratory

Logic Gate Example

◼ Class Separator

◼ torch.nn.Parameter(TENSOR)

◼ 학습의대상이되는변수(w)를설정

◼ torch.Tensor(INITIAL_VALUE)

◼ Tensor의형태로 initial value를변환

◼ Pytorch에서는 Tensor로연산

◼ Tensor.item() : 값을가져옴

◼ torch.sigmoid

◼ 모든원소에 sigmoid 함수연산수행

◼ forward(INPUT)

◼ 모델이계산할 main function

32

Page 33: Lab 1: Basic Frameworks - Seoul National University · Lab 1: Basic Frameworks  실습 이현도, 최원석, 김윤성 2019.09.26 Biointelligence Laboratory

Logic Gate Example

◼ Class DataGenerator

◼ val : (x,y)값이 (0,0), (0,1), (1,0),

(1,1)일때의값을저장함

◼ x,y : {0,1}에서값을가져오고N(0,0.16)의노이즈를더함

33

Page 34: Lab 1: Basic Frameworks - Seoul National University · Lab 1: Basic Frameworks  실습 이현도, 최원석, 김윤성 2019.09.26 Biointelligence Laboratory

Logic Gate Example

◼ Training setup

◼ LEARNING_RATE

◼ 한번의학습을통해변화시키는정도

◼ 문제마다적절한값설정필요

◼ BATCH_SIZE

◼ 한번에전체데이터를넣는것은크기가너무클뿐아니라, 좋지않음

◼ Batch의크기를설정하여 random

sampling

◼ NUM_EPOCHES

◼ 전체반복할총 epoch의수

◼ 1 epoch == 데이터셋의한 iter

34

Page 35: Lab 1: Basic Frameworks - Seoul National University · Lab 1: Basic Frameworks  실습 이현도, 최원석, 김윤성 2019.09.26 Biointelligence Laboratory

Logic Gate Example

◼ Training part

◼ tot_loss

◼ 한 epoch에서의모든 loss를계산

◼ 결과출력을위함

◼ Tensor.cuda()

◼ 기본적으로 Tensor를선언하면 CPU

에할당

◼ .cuda()를통해 GPU로계산하도록함

◼ optimizer.zero_grad()

◼ 각 batch마다 gradient 값을초기화

35

Page 36: Lab 1: Basic Frameworks - Seoul National University · Lab 1: Basic Frameworks  실습 이현도, 최원석, 김윤성 2019.09.26 Biointelligence Laboratory

Logic Gate Example

◼ Training part◼ loss.backward()

◼ 계산된 tensor에대해역으로계산하며gradient를구함

◼ optimizer.step()

◼ gradient를활용하여 backpropagation을수행, w를 update

◼ Test part◼ plt.scatter

◼ 그래프에산포도를찍는함수

◼ plt.plot

◼ 그래프에선을긋는함수

◼ plt.show

◼ 그래프를보여주는함수

36

Page 37: Lab 1: Basic Frameworks - Seoul National University · Lab 1: Basic Frameworks  실습 이현도, 최원석, 김윤성 2019.09.26 Biointelligence Laboratory

Logic Gate Example

◼ 결과 1 (AND)

37

◼ 결과 2 (OR)

Page 38: Lab 1: Basic Frameworks - Seoul National University · Lab 1: Basic Frameworks  실습 이현도, 최원석, 김윤성 2019.09.26 Biointelligence Laboratory

Logic Gate Example

◼ 결과 3 (XOR)

◼ 단일퍼셉트론만으로는 XOR에해당하는함수를근사할수없음

◼ 해결방법?

38

Page 39: Lab 1: Basic Frameworks - Seoul National University · Lab 1: Basic Frameworks  실습 이현도, 최원석, 김윤성 2019.09.26 Biointelligence Laboratory

Codes

◼ 실습코드 Github 주소

◼ https://github.com/illhyhl1111/SNU_ML2019

◼ Colab 링크

◼ https://colab.research.google.com/github/illhyhl1111/SNU_ML2019/blob/mast

er/Lab1_1.ipynb

◼ https://colab.research.google.com/github/illhyhl1111/SNU_ML2019/blob/mast

er/Lab1_2.ipynb

◼ https://colab.research.google.com/github/illhyhl1111/SNU_ML2019/blob/mast

er/Lab1_3.ipynb

39

Page 40: Lab 1: Basic Frameworks - Seoul National University · Lab 1: Basic Frameworks  실습 이현도, 최원석, 김윤성 2019.09.26 Biointelligence Laboratory

References

◼ https://zzsza.github.io/data/2018/08/30/google-colab/

◼ https://stackoverflow.com/questions/55050988/can-i-run-a-google-

colab-free-edition-script-and-then-shutdown-my-computer

40