SlideShare uma empresa Scribd logo
1 de 45
TensorFlow hands-on 세션
2017.02.14
이승은
2
TensorFlow 실행
• 아무것도 안 뜨는 경우, docker run -it -p 8888:8888 gcr.io/tensorflow/tensorflow 실행
• token 값은 복사해서 메모장에 붙여놓기
• docker가 존재하는 경우, docker exec -it CONTAINER_ID / bin/bash 실행
docker ps 로 프로세스 존재 유무 확인
Docker 종료 시, Ctrl-P, Ctrl-Q 로 종료해야함. Ctrl-C 안됨!
3
Hands-on은 설명을 듣는 것보다는
손으로 직접 짜보는 게 훨씬 훨씬 중요합니다.
그래서 이번 시간에는 설명을 최소화하여
직접 손으로 해보고 Q&A를 진행하도록 하겠습니다.
(여기 있는 코드는 이미지라 붙여넣기 어차피 안됩니당…꼭 직접 해보세용!!)
4
TensorFlow를 잘 활용하기 위해서는
Python에 대한 이해와
Python과 연관된 Jupyter, NumPy와 같은 툴에 대한 이해도 필요합
니다.
(그러나 Python이나 NumPy는 양이 너무 많아서… 설명보단 코딩을 하며 서서히 익히는 걸로….)
물론 C++ API가 제공되고 있고,
추후 Go와 Java가 제공 예정이지만… 가장 많이 쓰는 건 역시 Python이므로!
5
00. Jupyter
6
Jupyter: interactive하게 python을 실행해볼 수 있는 좋은 web UI 제공
Jupyter에서 만든 notebook(jupyter의 파일 기본 단위)의 확장자
각종 파일 및 이미지를 올릴 수 있음
새로운 파일 및 폴더 생성 가
능.
python 노트북과 터미널을
제일 많이 쓰게 됨
현재 사용 중인 노트북 상태
(구 iPython)
7
Running 되고 있는 notebook이 너무 많으면 속도를 위해 shutdown 시켜줄 필요가 있음
터미널은 ‘exit’ 없이 창만 닫을 경우 계속 running 상태임. shutdown 클릭을 통해 손쉽게 종료 가능
8
Markdown으로 코드 사이사이
문장이나 그래프를 사용할 수
있음
Code를 적고 실행하면 바로 결과가 나옴
자주 사용하는 기능들이니 한번씩 눌러서 기능을 확인해
보세요
9
01. Basic
10
Tensorflow 코드의 시작: 필요한 library를 import 하자!
가장 많이 쓰는 삼형제: tensorflow, numpy, matplotlib
• NumPy: a package for scientific computing with Python로 N-
dimensional array object에 특화됨
• Matplotlib: 2D plotting library로 Python script나 jupyter notebook에서
많이 쓰임
마지막 줄은 matplotlib을 Notebook에서 보기 위한 명령어
11
가장 먼저 computational graph 정의와 실행의 분리 이해!
• a = a + 1인 그래프를 정의하여, 1,2,3 값을 출력하기lazy computing
잊지마세요. session.run()이 되어야 비로소 꽃이 될 수 있음을!
a=0
a=a+1
a=a+1로
업데이트하는
그래프를
3번 반복하기
shift + Enter 결과 보기
12
가장 먼저 computational graph 정의와 실행의 분리 이해!
• a = a + 1인 그래프를 정의하여, 1,2,3 값을 출력하기
놀라셨죠…? 이렇게 나와서…
13
Variable를 쓴다면 반드시 해야하는 초기화 (initialization)
• 다른 operation이 수행되기 전에 명시적 초기화(explicit initialization)가 필수
적임
• 모든 variable들을 초기화시키는 명령어 활용
sess 선언 바로 뒤에
sess.run(tf.global_variables_initializer()) 추가
14
Variable를 쓴다면 반드시 해야하는 초기화 (initialization)
• 다른 operation이 수행되기 전에 명시적 초기화(explicit initialization)가 필수
적임
• 모든 variable들을 초기화시키는 명령어 활용
잉? 어째서…?
15
Variable은 동시에 읽고 쓰기가 가능하다!
만약 동시적인 읽기/쓰기를 막기(lock 만들기) 위해서는 assign을 활용하
자
혹시 여기서 궁금하신 거 없나요?
예를 들면, sess.run(update)와 sess.run(a)의 차이가 무엇인지?
16
tf.Session.run()과 fetch
tf.Session.run(fetches, feed_dict=None, options=None, run_metadata=None)
• fetch는 말 그래도 ‘(어디를 가서) 가지고[불러] 오다’라는 뜻.
• Session.run()은 fetch에 해당하는 operation을 수행하고 수행 후 tensor 값을 전달함
temp
a
1
update
a+1
a+1
이것만 run하면
수행될 op이 음슴… 이걸 run하면 a+1 op과
그 결과를 a에 assign하는 op이 수
행됨
17
print(a) vs. print(sess.run(a)) vs. print(a.eval())
• print(a)는 a라는 tensor에 대한 정보(rank, shape, dtype)를 제공함
• 따라서 값을 fetch하기 위해서는 sess.run(a)를 출력해야하고 이에 대한 축약 버
전이 a.eval()임
18
이제 이 그림을 tensorflow로 표현해봅시다
19
Computational graph 정의
• 데이터를 읽는 두 placeholder a,b를 정의하고
• a, b를 더하는 c를 정의하고
• b에서 1을 빼는 d를 정의하고
• c와 d를 곱하는 e를 정의함
여기서 잠깐, placeholder란?
• 데이터를 읽는 방법에는 3가지가 있는데 그 중 제일 많이 쓰이는 feeding 시 필수적으로 정
의되는 tensor임
• Feeding은 그래프의 시작 뿐 아니라 중간 tensor에서도 데이터를 넣을 수 있다는 특징
때문에 reading from file 방법이나 preloaded data 방법과 차별화됨
• Placeholder는 데이터를 가지고 있는 게 아니라 나중에 feeding으로 받는 것을 전달하는
것이기 때문에 초기화가 필요 없음. 만약 feeding하지 않을 때, placeholder를 사용하면 무
조건 에러 발생!
• Reader tensor로써 dtype은 필수 속성으로 정의해야함. shape과 name은 optional 속성임
20
Session 실행
만약 a_data나 b_data가 matrix이라면 output도 matrix가 나오겠죠?
매번 sess = tf.Session()을 쓰고, sess.close()를 쓰는 게 귀찮다면?
21
c, d 값도 e와 함께 출력하고 싶다면?
22
Jupyter 사용 시 권장하는 Interactive Session
Session 대비
InteractiveSession의 특징
• 명령어 길이가 짧아서 쓰기 간
편함
• Variable이 session을 holding
하는 걸 막을 수 있음
(근데 솔직히 무슨 말인지 잘 모르겠음
…)
• 테스트 하다보니 interactive하
게, 그러니까 중간에 새로
graph를 정의하고 실행해도
에러가 안남
(이게 위에 그 소리인가 싶긴 함…)
• with tf.InteractiveSession as
sess(): 는 지원 안함
feed_dict는 feed_dict=feed_dict 랑 같아요.
인자가 하나라 전 일케 축약으로 써봤어용.
원래 이렇게 사용할 수 있어용!
23
특정 device에서 특정 연산 수행하기
그리고 이미 눈치채셨겠지만… python에선 indentation(들여쓰기)이 매우 매우 중요합니다.
다른 언어에서 사용하는 {} 대신 :과 indentation으로 block을 구분한다능!
(가끔 에러가 왜 생겼는지 보다보면 이따금 indentation으로 인한 에러일 경우도 있으니, 주의하세용!)
GPU를 쓰신다면 “/cpu:0”대신 “/gpu:0”을 쓰실 수도 있겠죠?
Cluster 모드에서 특정 job을 특정 device에서 수행하는 내용은 여기 참조
24
02. MNIST_example
25
MNIST Data
• MNIST는 computer vision 데이터셋으로 손으로 쓴 0~9까지의 숫자를 의미함
• Tensorflow는 Yann Lecun 웹사이트에 업로드된 MNIST 데이터를 쉽게 가져올
수 있는 환경을 제공함 (혹시 LeCunn 사이트다 다운된 경우, 링크1 참조하여 다운로드/업로드. 그
외 에러는 링크2 참조)
• 데이터 구성: mnist.train(55,000개), mnist.test(10,000개), mnist.validation(5,000
개)
• 각 데이터는 0부터 9까지의 image와 label로 구성됨. ex) mnist.train.images,
mnist.train.lables
• 이미지는 28 x 28 pixel인데 이를 NumPy array로 변환된 상태로 제공됨
26
MNIST 데이터 가져오기
• one_hot=True: label을 one-hot vectors로 표현하겠다는 의미
• one-hot vector는 하나만 1이고 나머지는 0인 n개의 class(dimension)를 표현하는
binary vector
• ex. 3 -> [0,0,0,1,0,0,0,0,0,0]
• mnist.train.label은 float 형식의 [55000, 10] array임
27
가져온 MNIST 데이터 확인하기
• flatten 2D array: n x m array를 nm x 1
array로 flatten하게 만듦
• flatten 방식만 일관적이면 어떤 방법
을 써도 상관없음
28
모델 파라미터 정의
• image size: 이미지의 크기로 MNIST 이미지의 height, wideth의 pixel 크기에 해당함
• image shape: 이미지의 shape으로 통상적으로 (img_size_height, img_size_width)의 2D array로 표
현함
• img_size_flat: 이미지를 flattened 1D array(img_size_height * img_size_width)로 표현. MNIST의
경우 shape 값은 28*28=784
• num_classes: 분류할 class 갯수로 MNIST의 경우 0-9이므로 10임
• learning rate: learning을 얼마나 빨리할지에 대한 비율 정의. learning_rate 이 너무 낮으면 값이 잘
수렴하지 않고 오랜 시간이 필요하고, learning_rate 이 너무 크면 값이 발산하거나 이상한 곳에서 수
렴할 수 있음
• batch_size: 데이터 중 몇개의 sample을 쓸 건지 결정
• training_iteration: batch size 데이터로 forward + backward를 수행하는 횟수
• display_step: 모든 iteration을 보여주면 양이 많으니까 iteration 결과를 보여줄 간격을 정의함
https://qph.ec.quoracdn.net/main-qimg-f3972c89625c0451f0ea92a4c0ea0728 http://aikorea.org/cs231n/assets/nn3/learningrates.jpeg
29
Computational graph 정의
• Softmax Regression으로 이미지 분류를 수행하는 간단한 computational graph를 정
의함
• Softmax: 각각의 y(class로 분류될 확률)는 0~1 사이의 값을 가지면서 그 합이 1인
함수
30
Computational graph 정의 (2)
• tf.summary나 tf.name.scope과 같은 함수는 없어도 무관함. 다만 이러한 코드를 작성하
면 후에 tensorboard에서 변수의 변화 양상을 볼 수 있음.
• 하기의 cost_function, optimizer만 정의해도 괜찮음
31
Session 실행: training
나중에 tensorboard 실행시 이 directory 활용
전체 데이터수를 한번에 돌릴 데이터 수로 나눠 해당 값만큼 training을 수행함
32
Session 실행: validation
• label 결과(model, predicted y)는 one-hot vector이므로 결과 중 가장 큰 값의 label을
return하면 분류될 class가 됨. 이때 사용하는 함수가 tf.argmax()임
• tf.equl(true_c, y_c): true_c tensor(진짜 class label)와 y_c tensor(예측한 class label)가
같은지 element-wise하게 확인하여 결과를 bool 형식 tensor로 return함
• tf.reduce_mean(input_tensor): input_tensor 안에 모든 element 값에 대한 평균 산출
• tf.cast(prediction, “float”): prediction을 float type으로 변경하여 return함
33
Helper function 활용
helper function을 정의해서 활용하면 좋음
1. 간단하게 test 데이터에 대한 accuracy를 출력하는 helper function을 정의
잠깐, 데이터를 왜 3개로 나눌까요? 데이터마다 쓰임이 다릅니다~
Training
• 데이터에 잘 맞는 예측 모델을 생성하기 위해 필요
Validation
• Training 데이터로 만든 모델을 validation 데이터에 검증하여 더 정확한 모델
을 만듦. 가장 잘 맞는 예측 모델 선택함.
• NN 같은 경우는 parameter tuning을 위해 필요
Test
• 새로운 데이터에 대해서도 모델이 얼마나 유사한 결과를 낼 수 있는지
(robustness) 검증함. 단, 데이터양이 적을 경우 test는 생략함
34
Helper function 활용 (2)
2. (3 x 3) 형식으로 실제 이미지를 출력하고, 이미지 하단에 실제 label과 예측 label을 표
시하는 helper function 정의
35
Helper function 활용 (3)
2. (3 x 3) 형식으로 test 데이터셋의 이미지를 출력하고, 이미지 하단에 실제 label과 예측
label을 표시하는 helper function 정의
36
(일반적인) Tensorboard 실행 및 종료
• 실행: tensorboard --logdir=/log_path
• 종료: ctrl-z 를 누르면 종료됨
• 만약 종료되지 않을 경우, 하기와 같은 방법으로 process를 죽일 수 있음
Docker는 다르다는데…아직… 어떻게 해야하는지 못찾았어요 ㅠㅠ
37
03. Contrib & TF-Slim
38
Contrib
• TensorFlow에서는 분석을 쉽게 할 수 있도록 추상화된 수준의 40여개의 library를 제공함.
• 다만 공식 지원 영역이 아니기 때문에 공지 없이 해당 내용이 삭제되거나 변경될수 있어, 이를 기반으로 코
드를 짤 경우 유지 보수가 용이하진 않음.
• 그러나 black box 형식으로 간단한 테스트를 빠르게 구현할 때 매우 유용함.
• 또한, library들은 최대한 중복 없이 구성되도록 관리되고 있음.
• 예제로 가장 많이 쓰이는 "Quickstart" 코드의 상당수는 contrib의 learn 라이브러리를 활용하였으나 현재
버전(version 0.12.1)으로 업데이트되어 있지 않아 실행 시 상당수의 INFO, WARNING 로그들을 확인할 수
있음.
39
TF-Slim
• contrib 중 하나의 library로, 상위 수준의 개념(argument scoping, layer, variable)으로 모델을 짧고 쉽게 정
의할 수 있게 만듦
• 많이 사용되는 regularizer를 사용하여 모델을 단순하게 함. VGG, AlexNet와 같이 많이 쓰이는 모델을 개발
해놓음
40
Without TF-Slim vs. With TF-Slim
• conv1_1 layer 정의 방법 (without TF-Slim)
• conv1_1 layer 정의 방법 (with TF-Slim)
b.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/slim
41
Contrib를 활용한 구현의 장단점
1. 장점
• 구현 속도가 무진장 빠름. 그냥 모델에 대한 파라미터만 적당히 정해주면 알아서 결
과가 뿅 나옴
• 모델에 대한 지식이 많이 필요 없음. 나도 모르게 예제 파일을 따라하다 구글링 몇
번하면 뭔가를 만들 수 있음.
2. 단점
• TF 버전 업과 함께 bug가 우수수수….떨어짐… 버전 초기에는 구글링해도 잘 못 잡
음
• 막상 해보면 내 입맞에 딱 맞도록 모델 customize하기는 한계가 있음. 그리고 새로
뜨는 모델을 쓰려면 해당 모델이 추가될 때까지 기다려야 함
• 끝까지 모델에 대해 대충 알고 넘어감….그래서 잘 모르는데 누가 자세히 물어볼까
봐 두려움에 시달림 ㅠ 그러나 마약과도 같은 존재라 빠져들면 귀찮아서 그냥 여기
에 젖어들고 싶음.. 그런데 파일럿하고 자꾸 새로운 걸 해야해서 하다보면 결국 여
길 벗어나야함.
따라서, Contrib는 TF 입문용으로 활용하는 게 제일 좋음
42
끝
43
Computation Graph
특정 순서로 수행될 a series of math operations을 의미한다. 연산(computation)을 그
래프로 그린 것이라고 생각하면 가장 간단!
예로, 하기의 그래프는 2개의 input인 a, b를 받아 output으로 e를 내보냄. 그래프 내의 각
node는 input을 받아 computation을 수행하고 output을 다른 node에 전달하는 operation을
수행함.
(이건 뒤에 설명하겠음)
그렇담 이 Node(operation)들의 입력과 출력을 뭐라고 부를까?
[별첨]
44
Tensor
Tensor는 데이터(n-dimensional array나 list)를 의미하며 그림의 a,b,c,d,e의
input과 output이 이에 해당함. 또한, Tensor는 rank, shape, type과 같은 속성을
가짐.
- rank: tensor의 dimension의 수
- shape: 각 dimension의 크기를 의미
- data type(dtype): int8, int16, int32, int64, float32, float64, bool, string 등등
예제:
[[1, 2, 3], [4, 5, 6], [7, 8, 9], [2, 3, 4]] 의 rank, shape, dtype은?
rank: 2 / shape: [4, 3] / dtype: int32
퀴즈:
[[[1, 2], [3, 4]], [[5, 6], [7, 8]]] 의 rank, shape, dtype은?
rank: 3 / shape: [2, 2, 2] / dtype: int32
[별첨]
45
실수로 docker로 ctrl-c 로 종료하였을 때 복구 방법
[별첨]
docker ps -a 로 종료된 이미지 확인: CONTAINER_ID 복사
• docker start CONTAINER_ID 로 docker 재시작
(만약 떠 있는 docker process가 있어서 재시작이 안 되면, docker stop CONTAINER ID로 종료
시킴)
• docker exec -it CONTAINER_ID /bin/bash로 docker 실행 후 localhost:8888 접
속

Mais conteúdo relacionado

Mais procurados

인공지능, 기계학습 그리고 딥러닝
인공지능, 기계학습 그리고 딥러닝인공지능, 기계학습 그리고 딥러닝
인공지능, 기계학습 그리고 딥러닝Jinwon Lee
 
Image Deep Learning 실무적용
Image Deep Learning 실무적용Image Deep Learning 실무적용
Image Deep Learning 실무적용Youngjae Kim
 
Denoising auto encoders(d a)
Denoising auto encoders(d a)Denoising auto encoders(d a)
Denoising auto encoders(d a)Tae Young Lee
 
쫄지말자딥러닝2 - CNN RNN 포함버전
쫄지말자딥러닝2 - CNN RNN 포함버전쫄지말자딥러닝2 - CNN RNN 포함버전
쫄지말자딥러닝2 - CNN RNN 포함버전Modulabs
 
텐서플로우로 배우는 딥러닝
텐서플로우로 배우는 딥러닝텐서플로우로 배우는 딥러닝
텐서플로우로 배우는 딥러닝찬웅 주
 
딥러닝 기본 원리의 이해
딥러닝 기본 원리의 이해딥러닝 기본 원리의 이해
딥러닝 기본 원리의 이해Hee Won Park
 
밑바닥부터 시작하는딥러닝 8장
밑바닥부터 시작하는딥러닝 8장밑바닥부터 시작하는딥러닝 8장
밑바닥부터 시작하는딥러닝 8장Sunggon Song
 
Variational Autoencoder를 여러 가지 각도에서 이해하기 (Understanding Variational Autoencod...
Variational Autoencoder를 여러 가지 각도에서 이해하기 (Understanding Variational Autoencod...Variational Autoencoder를 여러 가지 각도에서 이해하기 (Understanding Variational Autoencod...
Variational Autoencoder를 여러 가지 각도에서 이해하기 (Understanding Variational Autoencod...Haezoom Inc.
 
인공신경망
인공신경망인공신경망
인공신경망종열 현
 
A Beginner's guide to understanding Autoencoder
A Beginner's guide to understanding AutoencoderA Beginner's guide to understanding Autoencoder
A Beginner's guide to understanding AutoencoderLee Seungeun
 
인공 신경망 구현에 관한 간단한 설명
인공 신경망 구현에 관한 간단한 설명인공 신경망 구현에 관한 간단한 설명
인공 신경망 구현에 관한 간단한 설명Woonghee Lee
 
PYCON KR 2017 - 구름이 하늘의 일이라면 (윤상웅)
PYCON KR 2017 - 구름이 하늘의 일이라면 (윤상웅)PYCON KR 2017 - 구름이 하늘의 일이라면 (윤상웅)
PYCON KR 2017 - 구름이 하늘의 일이라면 (윤상웅)Haezoom Inc.
 
코드와 실습으로 이해하는 인공지능
코드와 실습으로 이해하는 인공지능코드와 실습으로 이해하는 인공지능
코드와 실습으로 이해하는 인공지능도형 임
 
[홍대 머신러닝 스터디 - 핸즈온 머신러닝] 3장. 분류
[홍대 머신러닝 스터디 - 핸즈온 머신러닝] 3장. 분류[홍대 머신러닝 스터디 - 핸즈온 머신러닝] 3장. 분류
[홍대 머신러닝 스터디 - 핸즈온 머신러닝] 3장. 분류Haesun Park
 
keras 빨리 훑어보기(intro)
keras 빨리 훑어보기(intro)keras 빨리 훑어보기(intro)
keras 빨리 훑어보기(intro)beom kyun choi
 
[컴퓨터비전과 인공지능] 6. 역전파 2
[컴퓨터비전과 인공지능] 6. 역전파 2[컴퓨터비전과 인공지능] 6. 역전파 2
[컴퓨터비전과 인공지능] 6. 역전파 2jdo
 
Tensorflow
TensorflowTensorflow
Tensorflowchs71
 
개발자를 위한 공감세미나 tensor-flow
개발자를 위한 공감세미나 tensor-flow개발자를 위한 공감세미나 tensor-flow
개발자를 위한 공감세미나 tensor-flow양 한빛
 
[컴퓨터비전과 인공지능] 7. 합성곱 신경망 1
[컴퓨터비전과 인공지능] 7. 합성곱 신경망 1[컴퓨터비전과 인공지능] 7. 합성곱 신경망 1
[컴퓨터비전과 인공지능] 7. 합성곱 신경망 1jdo
 
딥러닝 자연어처리 - RNN에서 BERT까지
딥러닝 자연어처리 - RNN에서 BERT까지딥러닝 자연어처리 - RNN에서 BERT까지
딥러닝 자연어처리 - RNN에서 BERT까지deepseaswjh
 

Mais procurados (20)

인공지능, 기계학습 그리고 딥러닝
인공지능, 기계학습 그리고 딥러닝인공지능, 기계학습 그리고 딥러닝
인공지능, 기계학습 그리고 딥러닝
 
Image Deep Learning 실무적용
Image Deep Learning 실무적용Image Deep Learning 실무적용
Image Deep Learning 실무적용
 
Denoising auto encoders(d a)
Denoising auto encoders(d a)Denoising auto encoders(d a)
Denoising auto encoders(d a)
 
쫄지말자딥러닝2 - CNN RNN 포함버전
쫄지말자딥러닝2 - CNN RNN 포함버전쫄지말자딥러닝2 - CNN RNN 포함버전
쫄지말자딥러닝2 - CNN RNN 포함버전
 
텐서플로우로 배우는 딥러닝
텐서플로우로 배우는 딥러닝텐서플로우로 배우는 딥러닝
텐서플로우로 배우는 딥러닝
 
딥러닝 기본 원리의 이해
딥러닝 기본 원리의 이해딥러닝 기본 원리의 이해
딥러닝 기본 원리의 이해
 
밑바닥부터 시작하는딥러닝 8장
밑바닥부터 시작하는딥러닝 8장밑바닥부터 시작하는딥러닝 8장
밑바닥부터 시작하는딥러닝 8장
 
Variational Autoencoder를 여러 가지 각도에서 이해하기 (Understanding Variational Autoencod...
Variational Autoencoder를 여러 가지 각도에서 이해하기 (Understanding Variational Autoencod...Variational Autoencoder를 여러 가지 각도에서 이해하기 (Understanding Variational Autoencod...
Variational Autoencoder를 여러 가지 각도에서 이해하기 (Understanding Variational Autoencod...
 
인공신경망
인공신경망인공신경망
인공신경망
 
A Beginner's guide to understanding Autoencoder
A Beginner's guide to understanding AutoencoderA Beginner's guide to understanding Autoencoder
A Beginner's guide to understanding Autoencoder
 
인공 신경망 구현에 관한 간단한 설명
인공 신경망 구현에 관한 간단한 설명인공 신경망 구현에 관한 간단한 설명
인공 신경망 구현에 관한 간단한 설명
 
PYCON KR 2017 - 구름이 하늘의 일이라면 (윤상웅)
PYCON KR 2017 - 구름이 하늘의 일이라면 (윤상웅)PYCON KR 2017 - 구름이 하늘의 일이라면 (윤상웅)
PYCON KR 2017 - 구름이 하늘의 일이라면 (윤상웅)
 
코드와 실습으로 이해하는 인공지능
코드와 실습으로 이해하는 인공지능코드와 실습으로 이해하는 인공지능
코드와 실습으로 이해하는 인공지능
 
[홍대 머신러닝 스터디 - 핸즈온 머신러닝] 3장. 분류
[홍대 머신러닝 스터디 - 핸즈온 머신러닝] 3장. 분류[홍대 머신러닝 스터디 - 핸즈온 머신러닝] 3장. 분류
[홍대 머신러닝 스터디 - 핸즈온 머신러닝] 3장. 분류
 
keras 빨리 훑어보기(intro)
keras 빨리 훑어보기(intro)keras 빨리 훑어보기(intro)
keras 빨리 훑어보기(intro)
 
[컴퓨터비전과 인공지능] 6. 역전파 2
[컴퓨터비전과 인공지능] 6. 역전파 2[컴퓨터비전과 인공지능] 6. 역전파 2
[컴퓨터비전과 인공지능] 6. 역전파 2
 
Tensorflow
TensorflowTensorflow
Tensorflow
 
개발자를 위한 공감세미나 tensor-flow
개발자를 위한 공감세미나 tensor-flow개발자를 위한 공감세미나 tensor-flow
개발자를 위한 공감세미나 tensor-flow
 
[컴퓨터비전과 인공지능] 7. 합성곱 신경망 1
[컴퓨터비전과 인공지능] 7. 합성곱 신경망 1[컴퓨터비전과 인공지능] 7. 합성곱 신경망 1
[컴퓨터비전과 인공지능] 7. 합성곱 신경망 1
 
딥러닝 자연어처리 - RNN에서 BERT까지
딥러닝 자연어처리 - RNN에서 BERT까지딥러닝 자연어처리 - RNN에서 BERT까지
딥러닝 자연어처리 - RNN에서 BERT까지
 

Semelhante a 랩탑으로 tensorflow 도전하기 - tutorial

딥러닝을 위한 Tensor flow(skt academy)
딥러닝을 위한 Tensor flow(skt academy)딥러닝을 위한 Tensor flow(skt academy)
딥러닝을 위한 Tensor flow(skt academy)Tae Young Lee
 
Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심흥배 최
 
Effective c++ chapter7_8_9_dcshin
Effective c++ chapter7_8_9_dcshinEffective c++ chapter7_8_9_dcshin
Effective c++ chapter7_8_9_dcshinDong Chan Shin
 
JMI Techtalk: 강재욱 - Toward tf.keras from tf.estimator - From TensorFlow 2.0 p...
JMI Techtalk: 강재욱 - Toward tf.keras from tf.estimator - From TensorFlow 2.0 p...JMI Techtalk: 강재욱 - Toward tf.keras from tf.estimator - From TensorFlow 2.0 p...
JMI Techtalk: 강재욱 - Toward tf.keras from tf.estimator - From TensorFlow 2.0 p...Lablup Inc.
 
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?내훈 정
 
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)내훈 정
 
온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기Seungjae Lee
 
Debugging with visual studio. 비주얼 스튜디오를 활용한 디버깅
Debugging with visual studio. 비주얼 스튜디오를 활용한 디버깅Debugging with visual studio. 비주얼 스튜디오를 활용한 디버깅
Debugging with visual studio. 비주얼 스튜디오를 활용한 디버깅Kiyoung Moon
 
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)Dong Chan Shin
 
당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니Lusain Kim
 
자바로 Mnist 구현하고_스프링웹서버붙이기
자바로 Mnist 구현하고_스프링웹서버붙이기자바로 Mnist 구현하고_스프링웹서버붙이기
자바로 Mnist 구현하고_스프링웹서버붙이기라한사 아
 
이펙티브 C++ (7~9)
이펙티브 C++ (7~9)이펙티브 C++ (7~9)
이펙티브 C++ (7~9)익성 조
 
OpenJigWare(V02.00.04)
OpenJigWare(V02.00.04)OpenJigWare(V02.00.04)
OpenJigWare(V02.00.04)Jinwook On
 
Direct x 12 초기화
Direct x 12 초기화Direct x 12 초기화
Direct x 12 초기화QooJuice
 
2011 H3 컨퍼런스-파이썬으로 클라우드 하고 싶어요
2011 H3 컨퍼런스-파이썬으로 클라우드 하고 싶어요2011 H3 컨퍼런스-파이썬으로 클라우드 하고 싶어요
2011 H3 컨퍼런스-파이썬으로 클라우드 하고 싶어요Yongho Ha
 
H3 2011 파이썬으로 클라우드 하고 싶어요
H3 2011 파이썬으로 클라우드 하고 싶어요H3 2011 파이썬으로 클라우드 하고 싶어요
H3 2011 파이썬으로 클라우드 하고 싶어요KTH
 
H3 2011 파이썬으로 클라우드 하고 싶어요_분산기술Lab_하용호
H3 2011 파이썬으로 클라우드 하고 싶어요_분산기술Lab_하용호H3 2011 파이썬으로 클라우드 하고 싶어요_분산기술Lab_하용호
H3 2011 파이썬으로 클라우드 하고 싶어요_분산기술Lab_하용호KTH, 케이티하이텔
 

Semelhante a 랩탑으로 tensorflow 도전하기 - tutorial (20)

딥러닝을 위한 Tensor flow(skt academy)
딥러닝을 위한 Tensor flow(skt academy)딥러닝을 위한 Tensor flow(skt academy)
딥러닝을 위한 Tensor flow(skt academy)
 
Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심
 
Effective c++ chapter7_8_9_dcshin
Effective c++ chapter7_8_9_dcshinEffective c++ chapter7_8_9_dcshin
Effective c++ chapter7_8_9_dcshin
 
JMI Techtalk: 강재욱 - Toward tf.keras from tf.estimator - From TensorFlow 2.0 p...
JMI Techtalk: 강재욱 - Toward tf.keras from tf.estimator - From TensorFlow 2.0 p...JMI Techtalk: 강재욱 - Toward tf.keras from tf.estimator - From TensorFlow 2.0 p...
JMI Techtalk: 강재욱 - Toward tf.keras from tf.estimator - From TensorFlow 2.0 p...
 
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
 
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)
 
온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기
 
Debugging with visual studio. 비주얼 스튜디오를 활용한 디버깅
Debugging with visual studio. 비주얼 스튜디오를 활용한 디버깅Debugging with visual studio. 비주얼 스튜디오를 활용한 디버깅
Debugging with visual studio. 비주얼 스튜디오를 활용한 디버깅
 
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
 
당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니
 
자바로 Mnist 구현하고_스프링웹서버붙이기
자바로 Mnist 구현하고_스프링웹서버붙이기자바로 Mnist 구현하고_스프링웹서버붙이기
자바로 Mnist 구현하고_스프링웹서버붙이기
 
7 8 1
7 8 17 8 1
7 8 1
 
이펙티브 C++ (7~9)
이펙티브 C++ (7~9)이펙티브 C++ (7~9)
이펙티브 C++ (7~9)
 
OpenJigWare(V02.00.04)
OpenJigWare(V02.00.04)OpenJigWare(V02.00.04)
OpenJigWare(V02.00.04)
 
Direct x 12 초기화
Direct x 12 초기화Direct x 12 초기화
Direct x 12 초기화
 
2011 H3 컨퍼런스-파이썬으로 클라우드 하고 싶어요
2011 H3 컨퍼런스-파이썬으로 클라우드 하고 싶어요2011 H3 컨퍼런스-파이썬으로 클라우드 하고 싶어요
2011 H3 컨퍼런스-파이썬으로 클라우드 하고 싶어요
 
H3 2011 파이썬으로 클라우드 하고 싶어요
H3 2011 파이썬으로 클라우드 하고 싶어요H3 2011 파이썬으로 클라우드 하고 싶어요
H3 2011 파이썬으로 클라우드 하고 싶어요
 
H3 2011 파이썬으로 클라우드 하고 싶어요_분산기술Lab_하용호
H3 2011 파이썬으로 클라우드 하고 싶어요_분산기술Lab_하용호H3 2011 파이썬으로 클라우드 하고 싶어요_분산기술Lab_하용호
H3 2011 파이썬으로 클라우드 하고 싶어요_분산기술Lab_하용호
 
Open Jig Ware
Open Jig WareOpen Jig Ware
Open Jig Ware
 
c++11
c++11c++11
c++11
 

랩탑으로 tensorflow 도전하기 - tutorial

  • 2. 2 TensorFlow 실행 • 아무것도 안 뜨는 경우, docker run -it -p 8888:8888 gcr.io/tensorflow/tensorflow 실행 • token 값은 복사해서 메모장에 붙여놓기 • docker가 존재하는 경우, docker exec -it CONTAINER_ID / bin/bash 실행 docker ps 로 프로세스 존재 유무 확인 Docker 종료 시, Ctrl-P, Ctrl-Q 로 종료해야함. Ctrl-C 안됨!
  • 3. 3 Hands-on은 설명을 듣는 것보다는 손으로 직접 짜보는 게 훨씬 훨씬 중요합니다. 그래서 이번 시간에는 설명을 최소화하여 직접 손으로 해보고 Q&A를 진행하도록 하겠습니다. (여기 있는 코드는 이미지라 붙여넣기 어차피 안됩니당…꼭 직접 해보세용!!)
  • 4. 4 TensorFlow를 잘 활용하기 위해서는 Python에 대한 이해와 Python과 연관된 Jupyter, NumPy와 같은 툴에 대한 이해도 필요합 니다. (그러나 Python이나 NumPy는 양이 너무 많아서… 설명보단 코딩을 하며 서서히 익히는 걸로….) 물론 C++ API가 제공되고 있고, 추후 Go와 Java가 제공 예정이지만… 가장 많이 쓰는 건 역시 Python이므로!
  • 6. 6 Jupyter: interactive하게 python을 실행해볼 수 있는 좋은 web UI 제공 Jupyter에서 만든 notebook(jupyter의 파일 기본 단위)의 확장자 각종 파일 및 이미지를 올릴 수 있음 새로운 파일 및 폴더 생성 가 능. python 노트북과 터미널을 제일 많이 쓰게 됨 현재 사용 중인 노트북 상태 (구 iPython)
  • 7. 7 Running 되고 있는 notebook이 너무 많으면 속도를 위해 shutdown 시켜줄 필요가 있음 터미널은 ‘exit’ 없이 창만 닫을 경우 계속 running 상태임. shutdown 클릭을 통해 손쉽게 종료 가능
  • 8. 8 Markdown으로 코드 사이사이 문장이나 그래프를 사용할 수 있음 Code를 적고 실행하면 바로 결과가 나옴 자주 사용하는 기능들이니 한번씩 눌러서 기능을 확인해 보세요
  • 10. 10 Tensorflow 코드의 시작: 필요한 library를 import 하자! 가장 많이 쓰는 삼형제: tensorflow, numpy, matplotlib • NumPy: a package for scientific computing with Python로 N- dimensional array object에 특화됨 • Matplotlib: 2D plotting library로 Python script나 jupyter notebook에서 많이 쓰임 마지막 줄은 matplotlib을 Notebook에서 보기 위한 명령어
  • 11. 11 가장 먼저 computational graph 정의와 실행의 분리 이해! • a = a + 1인 그래프를 정의하여, 1,2,3 값을 출력하기lazy computing 잊지마세요. session.run()이 되어야 비로소 꽃이 될 수 있음을! a=0 a=a+1 a=a+1로 업데이트하는 그래프를 3번 반복하기 shift + Enter 결과 보기
  • 12. 12 가장 먼저 computational graph 정의와 실행의 분리 이해! • a = a + 1인 그래프를 정의하여, 1,2,3 값을 출력하기 놀라셨죠…? 이렇게 나와서…
  • 13. 13 Variable를 쓴다면 반드시 해야하는 초기화 (initialization) • 다른 operation이 수행되기 전에 명시적 초기화(explicit initialization)가 필수 적임 • 모든 variable들을 초기화시키는 명령어 활용 sess 선언 바로 뒤에 sess.run(tf.global_variables_initializer()) 추가
  • 14. 14 Variable를 쓴다면 반드시 해야하는 초기화 (initialization) • 다른 operation이 수행되기 전에 명시적 초기화(explicit initialization)가 필수 적임 • 모든 variable들을 초기화시키는 명령어 활용 잉? 어째서…?
  • 15. 15 Variable은 동시에 읽고 쓰기가 가능하다! 만약 동시적인 읽기/쓰기를 막기(lock 만들기) 위해서는 assign을 활용하 자 혹시 여기서 궁금하신 거 없나요? 예를 들면, sess.run(update)와 sess.run(a)의 차이가 무엇인지?
  • 16. 16 tf.Session.run()과 fetch tf.Session.run(fetches, feed_dict=None, options=None, run_metadata=None) • fetch는 말 그래도 ‘(어디를 가서) 가지고[불러] 오다’라는 뜻. • Session.run()은 fetch에 해당하는 operation을 수행하고 수행 후 tensor 값을 전달함 temp a 1 update a+1 a+1 이것만 run하면 수행될 op이 음슴… 이걸 run하면 a+1 op과 그 결과를 a에 assign하는 op이 수 행됨
  • 17. 17 print(a) vs. print(sess.run(a)) vs. print(a.eval()) • print(a)는 a라는 tensor에 대한 정보(rank, shape, dtype)를 제공함 • 따라서 값을 fetch하기 위해서는 sess.run(a)를 출력해야하고 이에 대한 축약 버 전이 a.eval()임
  • 18. 18 이제 이 그림을 tensorflow로 표현해봅시다
  • 19. 19 Computational graph 정의 • 데이터를 읽는 두 placeholder a,b를 정의하고 • a, b를 더하는 c를 정의하고 • b에서 1을 빼는 d를 정의하고 • c와 d를 곱하는 e를 정의함 여기서 잠깐, placeholder란? • 데이터를 읽는 방법에는 3가지가 있는데 그 중 제일 많이 쓰이는 feeding 시 필수적으로 정 의되는 tensor임 • Feeding은 그래프의 시작 뿐 아니라 중간 tensor에서도 데이터를 넣을 수 있다는 특징 때문에 reading from file 방법이나 preloaded data 방법과 차별화됨 • Placeholder는 데이터를 가지고 있는 게 아니라 나중에 feeding으로 받는 것을 전달하는 것이기 때문에 초기화가 필요 없음. 만약 feeding하지 않을 때, placeholder를 사용하면 무 조건 에러 발생! • Reader tensor로써 dtype은 필수 속성으로 정의해야함. shape과 name은 optional 속성임
  • 20. 20 Session 실행 만약 a_data나 b_data가 matrix이라면 output도 matrix가 나오겠죠? 매번 sess = tf.Session()을 쓰고, sess.close()를 쓰는 게 귀찮다면?
  • 21. 21 c, d 값도 e와 함께 출력하고 싶다면?
  • 22. 22 Jupyter 사용 시 권장하는 Interactive Session Session 대비 InteractiveSession의 특징 • 명령어 길이가 짧아서 쓰기 간 편함 • Variable이 session을 holding 하는 걸 막을 수 있음 (근데 솔직히 무슨 말인지 잘 모르겠음 …) • 테스트 하다보니 interactive하 게, 그러니까 중간에 새로 graph를 정의하고 실행해도 에러가 안남 (이게 위에 그 소리인가 싶긴 함…) • with tf.InteractiveSession as sess(): 는 지원 안함 feed_dict는 feed_dict=feed_dict 랑 같아요. 인자가 하나라 전 일케 축약으로 써봤어용. 원래 이렇게 사용할 수 있어용!
  • 23. 23 특정 device에서 특정 연산 수행하기 그리고 이미 눈치채셨겠지만… python에선 indentation(들여쓰기)이 매우 매우 중요합니다. 다른 언어에서 사용하는 {} 대신 :과 indentation으로 block을 구분한다능! (가끔 에러가 왜 생겼는지 보다보면 이따금 indentation으로 인한 에러일 경우도 있으니, 주의하세용!) GPU를 쓰신다면 “/cpu:0”대신 “/gpu:0”을 쓰실 수도 있겠죠? Cluster 모드에서 특정 job을 특정 device에서 수행하는 내용은 여기 참조
  • 25. 25 MNIST Data • MNIST는 computer vision 데이터셋으로 손으로 쓴 0~9까지의 숫자를 의미함 • Tensorflow는 Yann Lecun 웹사이트에 업로드된 MNIST 데이터를 쉽게 가져올 수 있는 환경을 제공함 (혹시 LeCunn 사이트다 다운된 경우, 링크1 참조하여 다운로드/업로드. 그 외 에러는 링크2 참조) • 데이터 구성: mnist.train(55,000개), mnist.test(10,000개), mnist.validation(5,000 개) • 각 데이터는 0부터 9까지의 image와 label로 구성됨. ex) mnist.train.images, mnist.train.lables • 이미지는 28 x 28 pixel인데 이를 NumPy array로 변환된 상태로 제공됨
  • 26. 26 MNIST 데이터 가져오기 • one_hot=True: label을 one-hot vectors로 표현하겠다는 의미 • one-hot vector는 하나만 1이고 나머지는 0인 n개의 class(dimension)를 표현하는 binary vector • ex. 3 -> [0,0,0,1,0,0,0,0,0,0] • mnist.train.label은 float 형식의 [55000, 10] array임
  • 27. 27 가져온 MNIST 데이터 확인하기 • flatten 2D array: n x m array를 nm x 1 array로 flatten하게 만듦 • flatten 방식만 일관적이면 어떤 방법 을 써도 상관없음
  • 28. 28 모델 파라미터 정의 • image size: 이미지의 크기로 MNIST 이미지의 height, wideth의 pixel 크기에 해당함 • image shape: 이미지의 shape으로 통상적으로 (img_size_height, img_size_width)의 2D array로 표 현함 • img_size_flat: 이미지를 flattened 1D array(img_size_height * img_size_width)로 표현. MNIST의 경우 shape 값은 28*28=784 • num_classes: 분류할 class 갯수로 MNIST의 경우 0-9이므로 10임 • learning rate: learning을 얼마나 빨리할지에 대한 비율 정의. learning_rate 이 너무 낮으면 값이 잘 수렴하지 않고 오랜 시간이 필요하고, learning_rate 이 너무 크면 값이 발산하거나 이상한 곳에서 수 렴할 수 있음 • batch_size: 데이터 중 몇개의 sample을 쓸 건지 결정 • training_iteration: batch size 데이터로 forward + backward를 수행하는 횟수 • display_step: 모든 iteration을 보여주면 양이 많으니까 iteration 결과를 보여줄 간격을 정의함 https://qph.ec.quoracdn.net/main-qimg-f3972c89625c0451f0ea92a4c0ea0728 http://aikorea.org/cs231n/assets/nn3/learningrates.jpeg
  • 29. 29 Computational graph 정의 • Softmax Regression으로 이미지 분류를 수행하는 간단한 computational graph를 정 의함 • Softmax: 각각의 y(class로 분류될 확률)는 0~1 사이의 값을 가지면서 그 합이 1인 함수
  • 30. 30 Computational graph 정의 (2) • tf.summary나 tf.name.scope과 같은 함수는 없어도 무관함. 다만 이러한 코드를 작성하 면 후에 tensorboard에서 변수의 변화 양상을 볼 수 있음. • 하기의 cost_function, optimizer만 정의해도 괜찮음
  • 31. 31 Session 실행: training 나중에 tensorboard 실행시 이 directory 활용 전체 데이터수를 한번에 돌릴 데이터 수로 나눠 해당 값만큼 training을 수행함
  • 32. 32 Session 실행: validation • label 결과(model, predicted y)는 one-hot vector이므로 결과 중 가장 큰 값의 label을 return하면 분류될 class가 됨. 이때 사용하는 함수가 tf.argmax()임 • tf.equl(true_c, y_c): true_c tensor(진짜 class label)와 y_c tensor(예측한 class label)가 같은지 element-wise하게 확인하여 결과를 bool 형식 tensor로 return함 • tf.reduce_mean(input_tensor): input_tensor 안에 모든 element 값에 대한 평균 산출 • tf.cast(prediction, “float”): prediction을 float type으로 변경하여 return함
  • 33. 33 Helper function 활용 helper function을 정의해서 활용하면 좋음 1. 간단하게 test 데이터에 대한 accuracy를 출력하는 helper function을 정의 잠깐, 데이터를 왜 3개로 나눌까요? 데이터마다 쓰임이 다릅니다~ Training • 데이터에 잘 맞는 예측 모델을 생성하기 위해 필요 Validation • Training 데이터로 만든 모델을 validation 데이터에 검증하여 더 정확한 모델 을 만듦. 가장 잘 맞는 예측 모델 선택함. • NN 같은 경우는 parameter tuning을 위해 필요 Test • 새로운 데이터에 대해서도 모델이 얼마나 유사한 결과를 낼 수 있는지 (robustness) 검증함. 단, 데이터양이 적을 경우 test는 생략함
  • 34. 34 Helper function 활용 (2) 2. (3 x 3) 형식으로 실제 이미지를 출력하고, 이미지 하단에 실제 label과 예측 label을 표 시하는 helper function 정의
  • 35. 35 Helper function 활용 (3) 2. (3 x 3) 형식으로 test 데이터셋의 이미지를 출력하고, 이미지 하단에 실제 label과 예측 label을 표시하는 helper function 정의
  • 36. 36 (일반적인) Tensorboard 실행 및 종료 • 실행: tensorboard --logdir=/log_path • 종료: ctrl-z 를 누르면 종료됨 • 만약 종료되지 않을 경우, 하기와 같은 방법으로 process를 죽일 수 있음 Docker는 다르다는데…아직… 어떻게 해야하는지 못찾았어요 ㅠㅠ
  • 37. 37 03. Contrib & TF-Slim
  • 38. 38 Contrib • TensorFlow에서는 분석을 쉽게 할 수 있도록 추상화된 수준의 40여개의 library를 제공함. • 다만 공식 지원 영역이 아니기 때문에 공지 없이 해당 내용이 삭제되거나 변경될수 있어, 이를 기반으로 코 드를 짤 경우 유지 보수가 용이하진 않음. • 그러나 black box 형식으로 간단한 테스트를 빠르게 구현할 때 매우 유용함. • 또한, library들은 최대한 중복 없이 구성되도록 관리되고 있음. • 예제로 가장 많이 쓰이는 "Quickstart" 코드의 상당수는 contrib의 learn 라이브러리를 활용하였으나 현재 버전(version 0.12.1)으로 업데이트되어 있지 않아 실행 시 상당수의 INFO, WARNING 로그들을 확인할 수 있음.
  • 39. 39 TF-Slim • contrib 중 하나의 library로, 상위 수준의 개념(argument scoping, layer, variable)으로 모델을 짧고 쉽게 정 의할 수 있게 만듦 • 많이 사용되는 regularizer를 사용하여 모델을 단순하게 함. VGG, AlexNet와 같이 많이 쓰이는 모델을 개발 해놓음
  • 40. 40 Without TF-Slim vs. With TF-Slim • conv1_1 layer 정의 방법 (without TF-Slim) • conv1_1 layer 정의 방법 (with TF-Slim) b.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/slim
  • 41. 41 Contrib를 활용한 구현의 장단점 1. 장점 • 구현 속도가 무진장 빠름. 그냥 모델에 대한 파라미터만 적당히 정해주면 알아서 결 과가 뿅 나옴 • 모델에 대한 지식이 많이 필요 없음. 나도 모르게 예제 파일을 따라하다 구글링 몇 번하면 뭔가를 만들 수 있음. 2. 단점 • TF 버전 업과 함께 bug가 우수수수….떨어짐… 버전 초기에는 구글링해도 잘 못 잡 음 • 막상 해보면 내 입맞에 딱 맞도록 모델 customize하기는 한계가 있음. 그리고 새로 뜨는 모델을 쓰려면 해당 모델이 추가될 때까지 기다려야 함 • 끝까지 모델에 대해 대충 알고 넘어감….그래서 잘 모르는데 누가 자세히 물어볼까 봐 두려움에 시달림 ㅠ 그러나 마약과도 같은 존재라 빠져들면 귀찮아서 그냥 여기 에 젖어들고 싶음.. 그런데 파일럿하고 자꾸 새로운 걸 해야해서 하다보면 결국 여 길 벗어나야함. 따라서, Contrib는 TF 입문용으로 활용하는 게 제일 좋음
  • 43. 43 Computation Graph 특정 순서로 수행될 a series of math operations을 의미한다. 연산(computation)을 그 래프로 그린 것이라고 생각하면 가장 간단! 예로, 하기의 그래프는 2개의 input인 a, b를 받아 output으로 e를 내보냄. 그래프 내의 각 node는 input을 받아 computation을 수행하고 output을 다른 node에 전달하는 operation을 수행함. (이건 뒤에 설명하겠음) 그렇담 이 Node(operation)들의 입력과 출력을 뭐라고 부를까? [별첨]
  • 44. 44 Tensor Tensor는 데이터(n-dimensional array나 list)를 의미하며 그림의 a,b,c,d,e의 input과 output이 이에 해당함. 또한, Tensor는 rank, shape, type과 같은 속성을 가짐. - rank: tensor의 dimension의 수 - shape: 각 dimension의 크기를 의미 - data type(dtype): int8, int16, int32, int64, float32, float64, bool, string 등등 예제: [[1, 2, 3], [4, 5, 6], [7, 8, 9], [2, 3, 4]] 의 rank, shape, dtype은? rank: 2 / shape: [4, 3] / dtype: int32 퀴즈: [[[1, 2], [3, 4]], [[5, 6], [7, 8]]] 의 rank, shape, dtype은? rank: 3 / shape: [2, 2, 2] / dtype: int32 [별첨]
  • 45. 45 실수로 docker로 ctrl-c 로 종료하였을 때 복구 방법 [별첨] docker ps -a 로 종료된 이미지 확인: CONTAINER_ID 복사 • docker start CONTAINER_ID 로 docker 재시작 (만약 떠 있는 docker process가 있어서 재시작이 안 되면, docker stop CONTAINER ID로 종료 시킴) • docker exec -it CONTAINER_ID /bin/bash로 docker 실행 후 localhost:8888 접 속