lab 1: basic frameworks - seoul national university · lab 1: basic frameworks 실습 이현도,...
TRANSCRIPT
Lab 1: Basic Frameworks
<기계학습개론> 실습
이현도, 최원석, 김윤성
2019.09.26
Biointelligence Laboratory
School of Computer Science and Engineering
Seoul National University
Contents
◼ Google Colab
◼ Numpy
◼ Pytorch basics
2
Google Colab 사용법
1-1
3
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/
Jupyter Notebook?
◼ 웹브라우저에서파이썬코드를작성하고실행해볼수있는개발도구
◼ 원격코딩가능
◼ 코드블록단위로실행 / 디버깅
◼ Text block을이용한문서화
◼ Figure plotting 등 GUI
5
147.46.123.123
147.46.123.123:8888
Google Colab?
◼ Google Colaboratory = Google Drive + Jupyter Notebook
◼ 구글계정전용의가상머신지원 – GPU 포함
◼ Google drive 문서와같이링크만으로접근 / 협업가능
◼ 코드실행시딜레이존재
6
Google server
Google Colab - 사용법
◼ 개인구글계정필요
◼ Colab과 Jupyter Notebook 사용방법은유사한부분이많음
◼ 실습수업에서는 Colab 위주로설명
◼ GPU가내장된서버를사용할수있을시로컬에서작업을권장
7
Google Colab - 사용법
◼ 파일생성/접근방법
◼ 개인구글계정으로접속
◼ https://colab.research.google.com 접속
◼ GOOGLE 드라이브탭이동
◼ 새 PYTHON 노트선택
◼실습은 python3로진행할예정
8
버전선택
◼ 파일이름변경
◼ Code cell, Text cell
◼ .ipynb 파일은 code cell과 text cell로구성
◼ 각셀하단에마우스를대거나, 화면좌상단버튼으로셀추가가능
◼ 셀선택(마우스) 후셀우상단삭제버튼으로셀삭제가능
Google Colab - 사용법
9
Text cell
Code cell
셀추가
이름변경
셀추가
Google Colab - 사용법
◼ Code cell
◼ 일반적인파이썬코딩방식과동일
◼ 각셀은한번에실행할단위를뜻함
◼ 실행이후에도메모리는유지되어다른셀실행시영향을줌
◼런타임다시시작시초기화
◼ 상단메뉴의런타임
◼실행중인셀중단
◼런타임다시시작
10
실행(Ctrl + Enter)
실행결과
실행번호
실행중단런타임재시작
Google Colab - 사용법
◼ Text cell
◼ 여러줄주석의효과적인시각화
◼ 마크다운(Markdown) 문법
◼ 자동목차생성
11
목차생성
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
Google Colab - 사용법
◼ GPU 설정
◼ 런타임 -> 런타임유형변경 -> 하드웨어가속기를 GPU로변경
◼ 유의사항 – GPU는최대 12시간실행을지원
◼ 12시간실행이후에는런타임재시작으로 VM을교체해야함
13
Google Colab - 사용법
◼ 명령어실행하기
◼ !코드셀에를붙이고터미널명령어를입력하여실행하면터미널에서실행하는것과같은결과가출력됨
◼ 예외로 cd 명령어는 %cd /your/desired/path
14
Google Colab - 사용법
◼ 구글드라이브연동
◼ 간단한인증절차이후구글드라이브의파일을 Colab에서접근가능
15
Google Colab - 사용법
◼ Github 연동
◼ 단일 .ipynb 파일을 clone 하는방법
◼ https://github.com/~~~ 부분을https://colab.research.google.com/github/~~~ 로교체
◼파일 -> 드라이브에사본저장
◼ 전체 repository cloning
◼ !git clone project.git
◼ github repository에파일을올리는방법
◼파일 - Github에사본저장선택
◼저장소, 브랜치, 경로지정16
Google Colab - tips
◼ 장시간사용할때의 issue들
◼ GPU 사용/미사용관계없이최대 12시간
◼ 아무것도안하는 idle 상태돌입이후 90분에런타임자동으로 shutdown
◼ Shutdown 전에창을끄고다시켜도런타임은유지됨
◼ 동시에최대 2개의 notebook 가동가능
17
Google Colab - tips
◼ Jupyter로코딩하고싶은데 Colab GPU만쓰고싶은경우
◼ 로컬에서작업후 drive에올리고 Colab으로실행
◼ 학습된모델 weight만다운로드후로컬에서분석
◼ Jupyter도쓰기싫은경우
◼ Drive에올리고실행해야할파일(ex: train.py)를 Colab에서커맨드로실행(!train.py)
◼ 그냥 Colab 쓰는게싫은경우
◼ 학기마다 GPU 서버사용신청을할수있음(서울대학교구성원)
18
Numpy, Pytorch tensor
1-2
19
Numpy
◼ ML 프로그래밍의데이터자료형은기본적으로 multi-dimensional
array (혹은 tensor)
◼ Numpy는 multi-dimensional array 연산을편리하게하기위한라이브러리
◼ Numpy 모듈설치 - pip3 install numpy
◼ Colab에는기본적으로설치되어있다.
◼ Import - import numpy (as np)
20
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
Pytorch basics
1-3
22
Pytorch basics
23
ModelStructure, Weights
Label: 2
DatasetInput, Labels
Output -> Label
Optimizing model weight
Training Phase
Test PhaseEvaluating output
◼ Pytorch를활용한딥러닝프로그램의기본구조
Pytorch basics
◼ Pytorch를활용한딥러닝프로그램의기본구조
◼ Model(nn.Module) : Class
◼전체적인인공신경망의구조를선언하는부분
◼ __init__, forward 등의 method는꼭필요함
◼ Dataset : Class
◼학습에필요한데이터셋을선언하는부분
◼ __init__, __len__, __getitem__의 method는꼭필요함
◼ Training
◼학습을진행하는부분
◼ {Validation & Test}
◼학습된결과를확인하는부분
24
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
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]
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()
Logic Gate Example
◼ Single Perceptron Separator
◼ 단일퍼셉트론 : out = 𝑓 𝑥, 𝑦 = 𝑔 𝑎𝑥 + 𝑏𝑦 − 𝑐 × 1 = 𝑔 𝑎𝑥 + 𝑏𝑦 − 𝑐
◼ Activation function 𝑔 𝑥 : sigmoid, relu, etc. (Softmax는포함안됨)
28
𝑓(𝑥, 𝑦)
𝑥
𝑦
1
𝑜𝑢𝑡
Bias == 역치
𝑎
𝑏
−𝑐
Logic Gate Example
◼ Single Perceptron Separator
◼ 단일퍼셉트론 : out = 𝑓 𝑥, 𝑦 = 𝑔 𝑎𝑥 + 𝑏𝑦 − 𝑐 × 1 = 𝑔 𝑎𝑥 + 𝑏𝑦 − 𝑐
◼ 공간분할측면에서의퍼셉트론 (Sigmoid)
29
1
0
𝑓(𝑥, 𝑦)
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
Logic Gate Example
◼ Imports
◼ torch : 가장기본적인 pytorch 모듈
◼ torch.nn : 인공신경망관련함수/
클래스등이선언된모듈
◼ torch.optim : optimizer가정의된모듈◼ Adam : Adam Optimizer
◼ torch.utils.data.* : 학습세팅을편하게해주기위한 dataset의 class
가선언된모듈들
◼ matplotlib : 결과를시각화하는모듈
31
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
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
Logic Gate Example
◼ Training setup
◼ LEARNING_RATE
◼ 한번의학습을통해변화시키는정도
◼ 문제마다적절한값설정필요
◼ BATCH_SIZE
◼ 한번에전체데이터를넣는것은크기가너무클뿐아니라, 좋지않음
◼ Batch의크기를설정하여 random
sampling
◼ NUM_EPOCHES
◼ 전체반복할총 epoch의수
◼ 1 epoch == 데이터셋의한 iter
34
Logic Gate Example
◼ Training part
◼ tot_loss
◼ 한 epoch에서의모든 loss를계산
◼ 결과출력을위함
◼ Tensor.cuda()
◼ 기본적으로 Tensor를선언하면 CPU
에할당
◼ .cuda()를통해 GPU로계산하도록함
◼ optimizer.zero_grad()
◼ 각 batch마다 gradient 값을초기화
35
Logic Gate Example
◼ Training part◼ loss.backward()
◼ 계산된 tensor에대해역으로계산하며gradient를구함
◼ optimizer.step()
◼ gradient를활용하여 backpropagation을수행, w를 update
◼ Test part◼ plt.scatter
◼ 그래프에산포도를찍는함수
◼ plt.plot
◼ 그래프에선을긋는함수
◼ plt.show
◼ 그래프를보여주는함수
36
Logic Gate Example
◼ 결과 1 (AND)
37
◼ 결과 2 (OR)
Logic Gate Example
◼ 결과 3 (XOR)
◼ 단일퍼셉트론만으로는 XOR에해당하는함수를근사할수없음
◼ 해결방법?
38
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
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