누구나 TensorFlow!
J.	Kang	Ph.D.
누구나 TensorFlow
- Module 2 : Hello Machine Learning and Tensorflow
Jaewook	Kang, Ph.D.
jwkang@soundl.ly
Soundlly Inc.
Sep.	2017
1
© 2017
Jaewook	Kang
All	Rights	Reserved
누구나 TensorFlow!
J.	Kang	Ph.D.
§ GIST	EEC	Ph.D.	(2015)
§ 신호처리 과학자, 삽질러
§ 좋아하는 것:
§ 통계적 신호처리 / 무선통신 신호처리
§ 임베디드 오디오 DSP	C/C++라이브러리 구현
§ 머신러닝 기반 오디오 신호처리 알고리즘
§ 배워서 남주기
2
§ 대표논문:
Jaewook	Kang,	et	al.,	"Bayesian	Hypothesis	Test	using	Nonparametric	Belief	Propagation	for	
Noisy	Sparse	Recovery,"	 IEEE	Trans.	on	Signal	process.,	Feb.	2015
Jaewook	Kang et	al.,	"Fast	Signal	Separation	of	2D	Sparse	Mixture	via	Approximate	Message-
Passing,"	IEEE	Signal	Processing	Letters,	Nov.	2015
Jaewook	Kang	(강재욱)
소 개
누구나 TensorFlow!
J.	Kang	Ph.D.
강의 일정
3
일 정 목표
시
간
세부 내 용
Module	
1	
Python 준비하기 4
- python	/	anaconda	/pyCharm	설치확인
- LAB0: python	개발환경 설치
- python,	 numpy		/	pandas 기본
- LAB1:	python 예제 실습
머신러닝 가족에게 설명하기 4
- 머신러닝이란?
- 왜 머신러닝인가?
- 최근에 머신러닝이 각광받는 이유
- 머신러닝의 종류
- 머신러닝의 trade-off
Module
2
꼭 알아야할 수리 개념 2
- 확률이론 기본
- 조건부 확률 / 베이지안 룰
- 선형대수 기본
TensorFlow 준비하기 3
- 왜 TensorFlow인가?	 +	TensorFlow 설치
- LAB2:	Helloworld in	TensorFlow
- TensorFlow 기본 요소
- LAB3: TensorFlow 기본예제 line-fitting
- ML	training	in	Tensorflow
선형 예측 모델 만들기
Linear Regression
3
- Linear Basis	function	model
- Maximum	likelihood	and	least	square
- LAB4:	TensorFlow curve-fitting
누구나 TensorFlow!
J.	Kang	Ph.D.
GitHub	link
vGitHub	link	(all	public)
– https://github.com/jwkanggist/EveryBodyTensorFlow
4
누구나 TensorFlow!
J.	Kang	Ph.D.
1. 꼭 알아야 할 수리개념
-확률이론 기본
- 조건부 확률 / 베이지안 룰
- 평균 /분산 /공분산 /상관도
- 선형대수 기본
여러분이 확률개념이 전혀 없다고 가정합니다.
5
누구나 TensorFlow!
J.	Kang	Ph.D.
확률이론 기본
v확률이 몬가요?
– 매우 많은 정의….
• 통계적확률
• 공리적 확률
• 기하학적 확률…….. ㅜㅜㅜ
6
누구나 TensorFlow!
J.	Kang	Ph.D.
확률이론 기본
v확률이 몬가요?
– 매우 많은 정의가 존재….
• 통계적확률
• 공리적 확률
• 기하학적 확률…….. ㅜㅜㅜ
v쉽게갑시다!
– 일정한 조건? 아래 에서 어떤 사건이 일어난 가능성의 정도를
수치화 한것
– 0보다 크고 1보다 작다.
– 확률 0은 사건이 절대 일어나지 않음을 의미
– 확률 1은 사건이 무족건 일어남을 의미
7
누구나 TensorFlow!
J.	Kang	Ph.D.
확률이론 기본
v확률이 몬가요?
– 매우 많은 정의가 존재….
• 통계적확률
• 공리적 확률
• 기하학적 확률…….. ㅜㅜㅜ
v다 안다구요 ? 그럼 다음으로 ㄱ ㄱ
8
누구나 TensorFlow!
J.	Kang	Ph.D.
확률이론 기본
v확률변수
– 랜덤 시도 결과 (outcomes)	를 수치적 값으로 맵핑한 것
• 따라서 확률변수는 outcomes	의 함수이다
• 일어날 수 있는 모든 outcomes의 집합을 sample	
space라고 한다.
– 주사위 던지기 example
• Outcomes:	주사위를 던져서 나온 결과
9
Out
comes
RV
X1
1 2 3 4 5 6
RV
X2
1.5 3.2 2.1 54.3 6.14 9.23
누구나 TensorFlow!
J.	Kang	Ph.D.
확률이론 기본
v확률 분포: p(X=x)
– 확률변수 X가 특정값을 가질 확률을 나타내는 함수
– 확률분포는 확률변수의 함수이다.
10
Out
comes
RV
X
1 2 3 4 5 6
확률
P(X=x)
1/6 1/6 1/6 1/6 1/6 1/6
X
p(X=1),	…,																		p(X=6)
누구나 TensorFlow!
J.	Kang	Ph.D.
확률이론 기본
v확률 분포: p(X=x)
– 확률변수 X가 특정값을 가질 확률을 나타내는 함수
– 확률분포는 확률변수의 함수이다.
– X이 연속확률변수이면 대응하는 확률 분포
• Probability	density	function	(PDF)
– X이 이산확률변수이면 대응하는 확률 분포
• Probability	mass	function	(PMF)
11
X
PMF:	Binomial	random	variablePDF:	Normal	random	variable
X
누구나 TensorFlow!
J.	Kang	Ph.D.
확률이론 기본
v정규 분포 (Normal	distribution)
– 우주 만물을 설명하기 위한 핵심 개념 중 하나
– 확률분포를 배우면 가장 먼저 배우는 대표
– 연속 확률 변수 대표주자
– 중심극한 정리 때문에 매우 중요
– PDF 수학표현
• Scalar	form
• Vector	form
12
p(X | µ,σ ) = N(X | µ,σ ) =
1
2πσ 2
exp −
(x − µ)2
2σ 2
⎧
⎨
⎩
⎫
⎬
⎭
p(X | µ,σ ) =
누구나 TensorFlow!
J.	Kang	Ph.D.
확률이론 기본
v이항 분포 (Binomial	distribution)
– 반복적인 독립시행을 모델링할 때 사용
– 주사위 던지기 example
– 이산 확률 변수
– p	à0	or	1,	Nà inf이면 정교 분포가 된다.
– PDF 수학표현
• Scalar	form
13
p(X = k | N, p) =
N
k
⎛
⎝⎜
⎞
⎠⎟ pk
(1− p)N−k
누구나 TensorFlow!
J.	Kang	Ph.D.
확률이론 기본
v기대값 또는 평균 (Mean)
– 확률 변수 값을 확률로 가중치를 줘서 합한것
– 수식:
v분산 (Variance)
– 확률 변수 값의 분포가 얼마나 넓게 분포하는지 나타냄
– 수식:
14
µX := E[X] = x p(X = x)
−∞
∞
∫ dx
µX := E[X] = k p(X = k)
∀k
∑
σ X
2
:= Var[X] = (x − µX )2
p(X = x)
−∞
∞
∫ dx
σ X
2
:= Var[X] = (k − µX )2
p(X = k)
∀k
∑
누구나 TensorFlow!
J.	Kang	Ph.D.
확률이론 기본
v공분산 (Covariance)
– 두 확률 변수 사이의 상관성을 보여주는 값
• 공분산 값이 (+) 이면 양의 상관성을 가진다.
• 공분산 값이 (-) 이면 음의 상관성을 가진다.
– 수식:	
15
Cov(X,Y ) = E[XY ]− E[X]E[Y ]
누구나 TensorFlow!
J.	Kang	Ph.D.
확률이론 기본
v그래서 이게다 무슨 의미 인가?
16
누구나 TensorFlow!
J.	Kang	Ph.D.
확률이론 기본
v그래서 이게다 무슨 의미 인가?
– 정규 분포로 예를 들어 보자
17
µX ! 0
µy ! 0
σ X
2
>>σY
2
Cov(X,Y ) > 0
누구나 TensorFlow!
J.	Kang	Ph.D.
확률이론 기본
v난 평균을 그렇케 안구하는데…
v공대생이면 알아야 한다.
18
누구나 TensorFlow!
J.	Kang	Ph.D.
확률이론 기본
v난 평균을 그렇케 안구하는데…
v공대생이면 알아야 한다.
– 전제1: 우리는 확률변수 X를 N번 시행하였다. 따라서
• Sample	set	=	{x1,x2,…,xN}을 가지고 있다.
– 전제2: 근데 우리는 X의 확률 분포 p(X=x)	를 모른다.
그래서 대~충 균등 확률 분포를 가정한다( )
19
E[X] = x p(X = x)
−∞
∞
∫ dx ≈ xi p(X = xi )
∀xi
∑
E[X] ≈ xi p(X = xi )
∀xi
∑ ≈
1
N
xi
i=1
N
∑
∀xi , p(X = xi ) =
1
N
누구나 TensorFlow!
J.	Kang	Ph.D.
Bayes	Rule
v “사전정보”과 “관찰정보”를 확률적으로 결합하기 위한
규칙
v 훈련데이터 (X,T)로 부터 모델 W를 구하고 싶은 경우
– Prior:	데이터를 보기전에 알고있는 W에 대한 확률정보
– Likelihood:	데이터를 관찰 하여 알게 된 확률정보
– Posterior:	prior와 likelihood를 결합한 W에 대한 확률정보
20
posterior prior likelihood
p(W | X,T ) =
p(W )p(X,T |W )
p(X,T )
누구나 TensorFlow!
J.	Kang	Ph.D.
Bayes	Rule
v “사전정보”과 “관찰정보”를 확률적으로 결합하기 위한
규칙
v 예제) 사진으로 남자여자 구분하는 문제
– Likelihood:
• 수많은 남자/여자의 사진 데이터
• 머리가 긴 남자 사진 데이터
• 수염이 있는 여자 사진 데이터
– Prior:
• 여자는 머리가 길고 남자는 머리가 짧을 확률이 높다.
• 수염이 있으면 남자일 확률이 높다.
• 화장을 하면 여자일 확률이 높다
• 남자가 여자보다 인구가 많다.
– Posterior:
• 위 두가지를 종합해서 남자여자를 구분하기 위한 확률정보
21
누구나 TensorFlow!
J.	Kang	Ph.D.
선형대수 기본연산
vVector	addition
vVector	inner	product
vMatrix-vector	multiplication
vMatrix-Matrix	multiplication
vMatrix	(vector)	transpose
vMatrix	inversion
vEigenvalue	/	eigenvector
vMatrix	singularity	
22
누구나 TensorFlow!
J.	Kang	Ph.D.
2. Tensorflow 준비하기
- 왜 TensorFlow인가?	 +	TensorFlow 설치
- LAB2:	Helloworld in	TensorFlow
- TensorFlow의 기본요소
- LAB3:	TensorFlow 기본예제 line-fitting
- ML	training	in	TensorFlow
- LAB4:	TensorFlow 기본예제 Curve-fitting	
이제야 준비 끝! 텐플 소개 시작….
23
누구나 TensorFlow!
J.	Kang	Ph.D.
vReference	:	Machine	learning	fundamental
24
Hands-On	Machine	Learning
With	Scikit-Learn	&	
TensorFlow
2017	Aurelien Geron,	Google
O’Reilly
본 강의는 해당 교재를 참고했음을
사전에 알립니다.
누구나 TensorFlow!
J.	Kang	Ph.D.
vReference:	Machine	Learning	Crash	Course	
(MLCC)
25
https://cloud.google.com/blog/big-
data/
본 강의는 구글에서 제공한 자료의
일부를 참고했음을 사전에 알립니다.
누구나 TensorFlow!
J.	Kang	Ph.D.
TensorFlow 요약
vA	open	source	software	library	for	ML
– https://www.tensorflow.org/
– ML 모델 프로토타이핑 용도
– 연산 환경
• 분산 훈련 환경 지원
• CPU/GPU/TPU + 모바일 환경 지원
– 코어 구현: C++,	fast!
– Front	end:		python,	C++
– 현재 버전 r1.3 (2017 July)
26
누구나 TensorFlow!
J.	Kang	Ph.D.
TensorFlow 요약
vA	open	source	software	library	for	ML
– https://www.tensorflow.org/
– ML 모델 프로토타이밍 용도
– 연산 환경
• 분산 훈련 환경 지원
• CPU/GPU/TPU + 모바일 환경 지원
– 코어 구현: C++,	fast!
– Front	end:		python,	C++
27
누구나 TensorFlow!
J.	Kang	Ph.D.
TensorFlow 요약
vA	open	source	software	library	for	ML
– 2015 년 12월 이후 21,122	커밋수 (상당이 외부)
– 1000 명 이상의 기여자
28
누구나 TensorFlow!
J.	Kang	Ph.D.
Why	TensorFlow ?
v장/단점 (다른 ML프레임워크와의 비교)
– 장점
• 간편한 front-end	interface
• 호환성 == 폭 넓은 OS지원
• 빠른 러닝 속도 (Torch		보다는 느림)	
• 구글 문서화 (Google!!)
• 넓은 사용자 커뮤니티: 많은 third-party	라이브러리 및
오픈소스 예제
• 강력한 시각화 기능
– 단점
• 잦은 문법 변경 (현재 릴리즈 문법이 다음릴리즈에 변경 ㅋㅋ)
• Define-by-Run 모델: 훈련 실행중에 변경 불가
• 세세한 모델링 / 훈련 설정이 초보자에게 어려움
29
누구나 TensorFlow!
J.	Kang	Ph.D.
Tensorflow 설치 (OSX,	ubuntu)
vEasy: pip를 이용한 설치
30
Ubuntu 16.04:	shell	commands
$	pyenv virtualenv 2.7.12	tensorflow #가상환경 설정
$	pyenv shell	tensorflow
(tensorflow) $	pip install numpy scipy matplotlib scikit-learn	pandas
(tensorflow)	$	pip	install	–upgrade	tensorflow==1.3.0
Collecting	tensorflow==1.3.0
…..
(tnesorflow)	$	pip	list
.....
tensorflow (1.3.0)
.....
누구나 TensorFlow!
J.	Kang	Ph.D.
Tensorflow 설치 (win10)
vEasy: anaconda3	prompt	+	pip를 이용한 설치
– Win10에서는…. Python	3.5	이상만 tensorflow와
호환된다고 함ㅠ
– Anaconda	4.4	with	python	3.6설치
• https://www.anaconda.com/download/#windows
31
누구나 TensorFlow!
J.	Kang	Ph.D.
Tensorflow 설치 (win10)
vEasy: anaconda	prompt	+	pip	+conda를
이용한 설치
– 관리자 권한으로 anaconda	prompt	실행
32
Anaconda	prompt	in	win10
Ø $	python	–m	pip	install	--upgrade	pip
Ø $	pip	install	tensorflow
누구나 TensorFlow!
J.	Kang	Ph.D.
Tensorflow 설치
vPyCharm project	interpreter	설정
– 다른경로: anaconda3envstensorflowpython.exe
33
누구나 TensorFlow!
J.	Kang	Ph.D.
Tensorflow 설치
vPyCharm project	interpreter	설정
– Tensorflow package 확인!
34
누구나 TensorFlow!
J.	Kang	Ph.D.
Tensorflow 설치
vAdv: github에서 직접 소스 다운해서 설치
– 자신의 러닝머신에 커스터 마이즈해서 빌드
• CPU	/	GPU	support
• Python	버전
• CUDA 버전
– 러닝 속도 최적화
– 링크 참고
• http://startupphd.blogspot.kr/2017/06/git-source-tensorflow-r12-
with-gpu.html
35
누구나 TensorFlow!
J.	Kang	Ph.D.
LAB2:	helloWorld in	Tensorflow
vPip를 통해서 tensorflow를 설치하고 helloWorld를
찍어보자!
– 일단 무작정 따라해 보자
36
누구나 TensorFlow!
J.	Kang	Ph.D.
LAB2:	helloWorld in	Tensorflow
vPip를 통해서 tensorflow를 설치하고 helloWorld를
찍어보자!
37
lab2_runHelloTensorflow.py
(tensorflow)	$	vim	helloworld.py
import	tensorflow as	tf
hello	 =	tf.constant('Hello,	TensorFlow!')
sess =	tf.Session()
print	('[Lab2]	%s'	%	sess.run(hello))
#	Hello,	TensorFlow!
a	=	tf.constant(10)
b	=	tf.constant(32)
print	'[Lab2]	a	+	b	=	%s'	%	sess.run(a+b)
#	42
누구나 TensorFlow!
J.	Kang	Ph.D.
TensorFlow 기본요소
v계산그래프 (Computational	graph)
– 정의: 연산노드와 텐서노드(Variable/Constant)로 구성된
그래프로 학습 모델을 묘사한다.
38
그림출처: https://medium.com/@camrongodbout/tensorflow-
in-a-nutshell-part-one-basics-3f4403709c9d
누구나 TensorFlow!
J.	Kang	Ph.D.
TensorFlow 기본요소
v계산그래프 (Computational	graph)
– 텐플 (TensorFlow) 스크립트는 두부분으로 구성된다.
• Part	I)	계산 그래프 정의 하기
• Part	II)	계산 그래프 평가 하기
39
누구나 TensorFlow!
J.	Kang	Ph.D.
TensorFlow 기본요소
vPART	I)	계산그래프 정의하기
40
ex_runTFconstant.py
#-*- coding:	utf-8	-*-
import	tensorflow as	tf
import	numpy as	np
g	=	tf.Graph()
with	g.as_default():
x	=	tf.constant(6,name="x_const")# 상수노드 1
y	=	tf.constant(14,name="y_const") # 상수 노드2
sum	=	tf.add(x,y,name="sum_xy")# 연산 노드
누구나 TensorFlow!
J.	Kang	Ph.D.
TensorFlow 기본요소
vPART	I)	계산그래프 정의하기
– tf.constant()는 상수 Tensor입니다.
41
+
x	=	6 y =	14
x	=	tf.constant(6,name="x_const") y	=	tf.constant(14,name=”y_const")
sum	=	tf.add(x,y,name="sum_xy")
누구나 TensorFlow!
J.	Kang	Ph.D.
TensorFlow 기본요소
vPART	II)	계산그래프 평가하기
– 계산그래프를 평가하기 위해서는 tf.Session()을 열어야
한다.
– 방법1: tf.Session().run()	메소드
• sess =	tf.Session()
• sess.run(x)
• sess.run(y)
• sess.run(sum)
42
누구나 TensorFlow!
J.	Kang	Ph.D.
TensorFlow 기본요소
vPART	II)	계산그래프 평가하기
– 계산그래프를 평가하기 위해서는 tf.Session()을 열어야
한다.
– 방법2:	with	키워드 이용하기
• Indent	안 블럭에서는 매번 run()을 호출하지 않아도 된다.
• 블럭이 끝나면 자동으로 session이 종료된다.
– sum.eval()
• tf.constant()는 그래프 평가 중에 값이 변경될 수 없다.
43
누구나 TensorFlow!
J.	Kang	Ph.D.
TensorFlow 기본요소
vPART	II)	계산그래프 평가하기
44
ex_runTFconstant.py
#-*- coding:	utf-8	-*-
import	tensorflow as	tf
import	numpy as	np
g	=	tf.Graph()
with	g.as_default():
x	=	tf.constant(6,name="x_const")
y	=	tf.constant(14,name="y_const")
sum	=	tf.add(x,y,name="sum_xy")
# 세션 블럭 시작
with	tf.Session()	as	sess:
print	('sum.eval()=%d'%sum.eval())
print	('sess.run(sum)=%d'%sess.run(sum))
누구나 TensorFlow!
J.	Kang	Ph.D.
TensorFlow 기본요소
vPART	II)	계산그래프 평가하기
– tf.constant()는 그래프 평가중 값이 변경될 수 없다.
45
+
x	=	6 y =	14
x	=	tf.constant(6,name="x_const") y	=	tf.constant(14,name=”y_const")
sum	=	tf.add(x,y,name="sum_xy")
6 14
20
누구나 TensorFlow!
J.	Kang	Ph.D.
Revisit	LAB2
v계산그래프 정의/평가 파트를 구분해보자
46
lab2_runHelloTensorflow.py
(tensorflow)	$	vim	helloworld.py
import	tensorflow as	tf
hello	 =	tf.constant('Hello,	TensorFlow!')	# graph	construction
sess =	tf.Session()
print	'[Lab2]	%s'	%	sess.run(hello)	#	graph	evaluation
#	Hello,	TensorFlow!
a	=	tf.constant(10)
b	=	tf.constant(32)
print	'[Lab2]	a	+	b	=	%s'	%	sess.run(a+b)
#	42
누구나 TensorFlow!
J.	Kang	Ph.D.
LAB2.5 matrix	multiplication	
vMatrix	multiplication Tensorflow로 해보기
– 1	by	2	vector	생성 [[2.,3.]]
– 2 by	1	vector	생성 [[1.],[2.]]
– tf.matmul(mtx1,mtx2)
– 세션 생성
– 세션 실행
– 결과 출력
– 세션 종료
47
누구나 TensorFlow!
J.	Kang	Ph.D.
LAB2.5 Matrix	Multiplication	
vMatrix	multiplication Tensorflow로 해보기
48
lab25_runTFmatmul.py
(tensorflow)	$	vim	lab25_runTFmatmul.py
import	tensorflow as	tf
mtx1 =	tf.constant([[2.,	3.]])	#	1	by	2	vector	생성
mtx2	=	tf.constant([[1.],[2.]])	#	2	by	1	vector	생성
product	=	tf.matmul(mtx1,mtx2)
sess =	tf.Session()
eval_result =	sess.run(product)
print	(‘#	[TF	result]	eval_result =	%s’		%	eval_result)
sess.close()
누구나 TensorFlow!
J.	Kang	Ph.D.
TensorFlow 기본요소
vtf.Variable()
– tf.constant()와 는 다르게 그래프 평가 중 값이 변경될 수 있다.
– 그래프 평가중 중간 결과값 저장에 사용
– 값을 할당하기 위해서는 tf.assign()을 사용한다.
49
누구나 TensorFlow!
J.	Kang	Ph.D.
TensorFlow 기본요소
vtf.Variable()
50
ex_runTFvariable.py
import	tensorflow as	tf
g	=	tf.Graph()
with	g.as_default():
state	=	tf.Variable(0,	name="cnt")
one	=	tf.constant(1)	#		상수 노드
add_one =	tf.add(state,	one)	#	연산 노드
cnt_update =	tf.assign(state,	add_one)	#	state에 연산결과를 대입
#	변수는 그래프가 올라간 뒤 ‘init’	연산 실행으로 초기화
init_op =	tf.global_variables_initializer()
#	계산 그래프를 올리고 연산을 실행합니다.
with	tf.Session()	as	sess:
sess.run(init_op)	#변수를 사용하기 위해서 ‘init’	연산을 실행
print(sess.run(state))	#	‘state’의 초기값 출력
#	‘state’를 갱신하는 연산 실행 후 ‘state’를 출력
for	_	in	range(3):
sess.run(cnt_update)
print(sess.run(state))
누구나 TensorFlow!
J.	Kang	Ph.D.
TensorFlow 기본요소
vtf.Variable()
51
+
one	=	1 State
state	=	
tf.Variable(0,name=”cnt”
add_one =	tf.add(state,one)
1 0,1,2,…
x	=	tf.constant(1)
cnt_update =	tf.assign(state,	add_one)	
1,2,3,…
누구나 TensorFlow!
J.	Kang	Ph.D.
TensorFlow 기본요소
vtf.placeholder()와 data	feeding
– 계산 그래프 평가 실행중 입력 데이터에 값을 feeding할
수 있다.
– 평가 실행중 같은 그래프 연산을 다른 입력값을 가지고
반복 수행할 수 있다.
– Online-learning을 가능하게 한다.
52
누구나 TensorFlow!
J.	Kang	Ph.D.
Types	of	ML	Systems
vOnline	Learning
– 기억? 나죠?
53
Study	the
Problem	
Train	online
ML	algorithm
Analyze
errors
Evaluate
Release!
Lots	of	Data
Chop	into
pieces
누구나 TensorFlow!
J.	Kang	Ph.D.
TensorFlow 기본요소
vtf.placeholder()와 data	feeding
54
ex_runTFfeed.py
import	tensorflow as	tf
in1	=	tf.placeholder(tf.float32)
in2	=	tf.placeholder(tf.float32)
out	=	tf.multiply(in1,	in2)
with	tf.Session()	as	sess:
#	계산 그래프를 세션에 올리고 그 입력으로 아래를 그래프 내에서 할당
print(sess.run([out],	feed_dict={in1:[6.],	in2:[14.]}))
누구나 TensorFlow!
J.	Kang	Ph.D.
TensorFlow API	reference
v모르는 API가 나오면 스스로 찾아보자!
– https://www.tensorflow.org/api_docs/python/
55
누구나 TensorFlow!
J.	Kang	Ph.D.
2. Tensorflow 준비하기
- 왜 TensorFlow인가?	 +	TensorFlow 설치
- LAB2:	Helloworld in	TensorFlow
- TensorFlow의 기본요소
- LAB3:	TensorFlow 기본예제, Line-fitting	-
- ML	training	in	TensorFlow
- LAB4:	TensorFlow 기본예제 Curve-fitting	
이제한번 해보자!
56
누구나 TensorFlow!
J.	Kang	Ph.D.
머신러닝 훈련 단계
v step	I:	해결해야 할 문제 파악하기
v step	II:	데이터 수집 + 정제하기 +	관찰하기
v step	III:	훈련 모델 정하기
– Linear	model	?,	Neural	network?	
– Types	of	Activation	functions	?
– Number	of	layers?
v step	IV:	cost	function	정하기
– 어떤 cost를 가지고 모델 파라미터를 훈련할 것인가?
– MSE,	MAE,	cross-entropy,…
57
누구나 TensorFlow!
J.	Kang	Ph.D.
머신러닝 훈련 단계
v step	V:	모델 파라미터 찾기위한 optimizer 정하기
– 어떤 solver로 최적화 문제를 풀것인가?
– Gradient	descent?,	Conjugate	gradient?
v step	VI:	훈련 설정 정하기
– 데이터 feeding	설정
• Total_size :	전체 training	set 크기
• Batch_size:	단일 batch	processing에 들어갈 데이터 사이즈
• Batch	횟수 : total_batch_num =	int(total_size /	batch_size)
– 최적화 Solver 설정
• total_steps: 최적화 문제 해결을 위한 step수
• local_steps: 1회 solving에서 진행할 step수
• Learning_rate:	최적화 속도
58
누구나 TensorFlow!
J.	Kang	Ph.D.
최적화 solver 설정
vGradient	descent	경우
– Batch	learning	case
59
total_steps:	9
Learning_rate
누구나 TensorFlow!
J.	Kang	Ph.D.
LAB3:	TensorFlow, Line-fitting
v일단 무작정 따라해보자 !
– Ex	line-fitting	example
• Local_step을 minimize(cost)함수로 대체
• GitHub	link
• 입력 X,	출력 Y
60
Y
X
누구나 TensorFlow!
J.	Kang	Ph.D.
LAB3:	TensorFlow, Line-fitting
v일단 무작정 따라해보자 !
– Ex	line-fitting	example
• Local_step을 minimize(cost)함수로 대체
• GitHub	link
• 입력 X,	출력 Y
• https://github.com/jwkanggist/EveryBodyTensorFlow
• lab3_runTFLineFitting.py
61
누구나 TensorFlow!
J.	Kang	Ph.D.
ML	training	in	Tensorflow
v 텐플에서 모델을 훈련을 위한 스크립트의 기본구성은
다음과 같다.
– Step	1)	데이터셋 준비하기
– Step	2) Model	training config 설정하기
– Step	3)	계산 그래프 정의하기
– Step	4) 성능 측정 모델 정의하기
– Step	5) 모델 훈련시키기
– Step	6) 시각화 하기
62
누구나 TensorFlow!
J.	Kang	Ph.D.
ML	training	in	Tensorflow
vStep	I)	데이터 셋 (X,Y) 준비하기
vML 좋은 데이터 셋을 준비하는 것이 80% 이다!!
vX:	feature,	Y:	label
– 1)	Outlier	&	Irregular	데이터 제거
• 빈칸, NaN
– 2)	Normalization	of	data	set	X
• 데이터 크기(abs)가 [0,1]	범위 안에 들어오록 스케일링
• norm_X =	abs(	X	)		/		max_value_abs *	sign(X)
– 3)	Standardization	of	data	set	X
• 데이터의 분포가 zero-mean,	unit-variance를 가지게 스케일링
• 여러 종류 데이터를 비교: ex)	카카오 주식 / 네이버 주식
• stand_X =	(	X	– mean(X)	)	/	std(X)
63
누구나 TensorFlow!
J.	Kang	Ph.D. 64
lab3_runTFLineFitting.py
#	experiment data	generation	
total_size =	5000
training_size =	4000
validation_size =	1000
xsize =	20
x_data =	np.zeros([xsize,	total_size])
a_true =	2
b_true =	0.5
for	i in	range(total_size):
x_data[:,i]	=		np.linspace(0,10,xsize)
noise_var =	1.0
noise							=	np.sqrt(noise_var)	*	np.random.randn(xsize,total_size)
y_clean =	a_true *	x_data +	b_true
y_data =	y_clean +	noise
#	data	segmentation
x_training_data =	x_data[:,0:training_size]
y_training_data =	y_data[:,0:training_size]
x_validation_data =	x_data[:,training_size:-1]
y_validation_data =	y_data[:,training_size:-1]
누구나 TensorFlow!
J.	Kang	Ph.D.
ML	training	in	Tensorflow
vStep	II) Model	training config 설정하기
– 1)	training_epochs >	0	:	최적화 반복 학습 횟수
• training_epochs =	int (total_steps /	local_steps)
– 2)	learning_rate in	(0,1] :	model이 데이터로 부터
학습하는 속도를 결정한다.
• learning_rate↑		à 학습속도 ↑, 발산가능성↑
– 3) 데이터 batch 횟수:
• Training	data가 batch_size 단위로 나누어 져서 총 total_batch =	
int(total_size /	batch_size)회 학습이 수행됨
• 데이터 feeding	loop가 도는 동안 cost는 누적 계산된다.
65
누구나 TensorFlow!
J.	Kang	Ph.D. 66
lab3_runTFLineFitting.py
#	configure	training	parameters	=====================================
total_steps =	200
local_steps =	10
learning_rate =	0.000001
training_epochs =	int(total_steps /	local_steps)
batch_size =	100
display_step =	1
total_batch =	int(training_size/batch_size)	#
누구나 TensorFlow!
J.	Kang	Ph.D.
ML	training	in	Tensorflow
vStep	III) 계산 그래프 정의하기
vEx)	Linear	model:	pred_Y =	a*x	+	b,	MSE	cost	func.
– 1)	 training	data	(X,	Y)	를 feeding	하기위한 tf.placehoder Tensor	선언
– 2)	 model	parameter	(a,	b)값 저장을 위한 tf.Variable Tensor	 선언
– 3)	학습모델의 입출력 관계 설정
• linear	model:	y_pred =	a	*	x	+	b
– 4)	MSE	cost	 function	설정
• cost	=	tf.reduce_mean(tf.reduce_sum(	tf.square(y	- pred_y)	,	
reduction_indices=1),	name="mse")
– 5)	optimizer	설정 (GradientDescent)
• optimizer	=	
tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)
67
누구나 TensorFlow!
J.	Kang	Ph.D. 68
lab3_runTFLineFitting.py
#	computational	TF	graph	construction	================================
x =	tf.placeholder(tf.float32,	[xsize,None])
y	=	tf.placeholder(tf.float32,	[xsize,None])
#	Set	model	weights	which	is	calculated	in	the	TF	graph
a	=	tf.Variable(0.)	#	initialization	by	1
b	=	tf.Variable(0.)
print	('TF	graph	nodes	are	defined')
#	Construct	model
pred_y =		a	*	x	+	b
#	Minimize	error	using	MSE	function
cost	=	tf.reduce_mean(tf.reduce_sum(	tf.square(y	- pred_y)	,	reduction_indices=1),	
name="mse")
#	Gradient	Descent
optimizer	=	tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)
print	('Functions	in	TF	graph	are	ready')
누구나 TensorFlow!
J.	Kang	Ph.D.
ML	training	in	Tensorflow
vStep	IV) 성능 측정 모델 정의하기
– 학습결과에 대한 성능을 측정하기 위한 model을 정의
– 학습모델에 의한 예측값과 실제 데이터의 label값이
어느정도로 일치하는 측정한다.
• 1)	Classification:	Miss-classification	rate를 사용
– training	set과 validation	set의 성능을 나누어서 측정
– Bayesian	theory	 에 근거함
• 2)	Regression:	Mean	squared	error	사용
69
누구나 TensorFlow!
J.	Kang	Ph.D. 70
lab3_runTFLineFitting.py
##	Performance	evaluation	model	========================_y===========
#	y															:	data	output
#	pred_y:	prediction	output	by	model,		a	x	+	b
correct_prediction =	cost
#	Calculate	error	rate	using	data	--------------
accuracy =	tf.reduce_mean(tf.cast(correct_prediction,	tf.float32))
error_rate_training =	np.zeros(training_epochs)
error_rate_validation =	np.zeros(training_epochs)
누구나 TensorFlow!
J.	Kang	Ph.D.
ML	training	in	Tensorflow
v Step	V) 모델 훈련시키기
– 1)	정의한 계산그래프를 tf.Session()에 올려서 계산
– 2)	tf.Session()	안에서 variable사용을 위해서…
• init =	tf.global_variables_initializer()	정의
• tf.Session()	안에서 가장 먼저 실행한다.	(sess.run(init) #	this	for	variable	use)
– 3)	tf.Sesson()안에서 두개의 for	loop	로 구성된다.
• Iteration	Loop:								최적화 반복 학습을 위한 loop
• Data	feeding	Loop:	데이터 feeding	를 위한 loop	
– 4) placeholder	(x,y)에 training	data가 feeding
• 여기서 전체 데이터가 training_epoch 번으로 나뉘어서 feeding된다.
• 데이터 feeding	loop가 도는 동안 cost는 누적 계산된다.
71
누구나 TensorFlow!
J.	Kang	Ph.D. 72
lab3_runTFLineFitting.py
#	Launch	the	graph	(execution)	========================================
#	Initializing	the	variables
init =	tf.global_variables_initializer()
##	-------------------- Learning	iteration	start	--------------------
with	tf.Session()	as	sess:
sess.run(init)	#	this	for	variable	use
#	Training	cycle
for	epoch	in	range(training_epochs):	#	iteration	loop
avg_cost =	0.
total_batch =	int(training_size/batch_size)	#
#	Loop	over	all	batches
for	i in	range(total_batch):	#	data	feeding	loop
[	Data	feeding	loop	inside	…]
print("--------------------------------------------")
print("Optimization	Finished!")
누구나 TensorFlow!
J.	Kang	Ph.D. 73
lab3_runTFLineFitting.py
for	i in	range(total_batch):	#	data	feeding	loop
data_start_index =	i *	batch_size
data_end_index =	(i +	1)	*	batch_size
#	feed	traing data	--------------------------
batch_xs =	x_training_data[:,data_start_index:data_end_index]
batch_ys =	y_training_data[:,data_start_index:data_end_index]
#----------------------------------------------
#	Run	optimization	op	(backprop)	and	cost	op	(to	get	loss	value)
#	feedign training	data
_,	local_batch_cost =	sess.run([optimizer,	cost],	feed_dict={x:	batch_xs,	y:	batch_ys})
#	Compute	average	loss
avg_cost +=	local_batch_cost /	total_batch
#	print	("At	%d-th batch	in	%d-epoch,	avg_cost =	%f"	%	(i,epoch,avg_cost)	)
#	Display	logs	per	epoch	step
if	(epoch+1)	%	display_step ==	0:
print("Epoch:",	'%04d'	%	(epoch+1),	"cost=",	"{:.9f}".format(avg_cost/batch_size))
batch_xs =	x_training_data
batch_ys =	y_training_data
error_rate_training[epoch]			=	accuracy.eval({x:	batch_xs,	y:	batch_ys},session=sess)/training_size
error_rate_validation[epoch]	=	accuracy.eval({x:	x_validation_data,	
y:y_validation_data},session=sess)/validation_size
print("Training	set	MSE:",	error_rate_training[epoch])
print("Validation	set	MSE:",	error_rate_validation[epoch])
누구나 TensorFlow!
J.	Kang	Ph.D.
ML	training	in	Tensorflow
vStep	VI) 시각화 하기
74
누구나 TensorFlow!
J.	Kang	Ph.D. 75
lab3_runTFLineFitting.py
pred_a =	sess.run(a)
pred_b =	sess.run(b)
##-------------------------------------------
#	#	training	Result	display
print("Validation	set	Err	rate:",	accuracy.eval({x:	x_validation_data,	y:	
y_validation_data},session=sess)/validation_size)
hfig1	=	plt.figure(1,figsize=(10,10))
epoch_index =	np.array([elem for	elem in	range(training_epochs)])
plt.plot(epoch_index,error_rate_training,label='Training	data',color='r',marker='o')
plt.plot(epoch_index,error_rate_validation,label='Validation	data',color='b',marker='x')
plt.legend()
plt.title('MSE	of	prediction:')
plt.xlabel('Iteration	epoch')
plt.ylabel('MSE')
hfig2	=	plt.figure(2,figsize=(10,10))
pred_y =	pred_a *	x_data[:,0]	+	pred_b
plt.plot(x_validation_data[:,0],y_validation_data[:,0],label='noisy	data',color='b',marker='*')
plt.plot(x_validation_data[:,0],	pred_y,label='prediction',color='r')
plt.legend()
누구나 TensorFlow!
J.	Kang	Ph.D.
ML	training	in	Tensorflow
vStep	VI) 시각화 하기
– Tensorboard를 이용해 보자!	(TBU)
76
누구나 TensorFlow!
J.	Kang	Ph.D.
- 3. 선형 예측 모델 만들기
Linear Regression
- Linear	Basis	function	model
- Maximum	likelihood	and	least	square
- LAB4:	TensorFlow curve-fitting	
이론 간단히 후딱 넘어갑시다!
77
누구나 TensorFlow!
J.	Kang	Ph.D.
Linear	Basis	function	model
v Linear	basis	function	model	
– 과학계에서 오랜역사동안 주구장창 우려먹은 모델
– 러닝 모델의 입출력 관계를 선형 모델을 가지고 묘사
– Y의 한 element를 구체화 하면 아래와 같이 선형조합으로 나타낼
수 있다.
– 여기서 를 ”fixed	basis	function”이라고 한다.
78
φ(⋅)
Yj = Wj1φ1(X)+⋅⋅⋅+WjNφN (X)+ B
= Wjiφi (X)
i=1
N
∑ + B
Y = Y(X,W ) = Wφ(X)+ B
누구나 TensorFlow!
J.	Kang	Ph.D.
Measurement	Model
v측정에는 항상 오류가 동반된다!
vE(error)의 모델링에 따라 cost	함수을 다르게 준다
– E	is Gaussian	noise à Sum	of	Square	(MSE)
– E is Laplacian	noise	à Sum	of	Absolute	(MAE)
– E	is	from	probabilistic	uncertainty	of	‘t’
• à Sum	of	cross-entropy
79
t = Y(X,W )+ E
cost = (Yj − tj )2
j
N
∑
cost = Yj − tj
j
N
∑
cost = − tj log yj + (1− tj )log(1− yj ){ }j
N
∑
누구나 TensorFlow!
J.	Kang	Ph.D.
Linear	Basis	function	model
vFixed-basis	function의 종류
80
Basis Equation Figure Feature
Polynomial
Global	function
Small	changes à whole area
Gaussian Normalization is	not	important
Sigmoid
Fourier 𝜙" 𝑥 = 𝑒&'()"* A	specific	frequency
Infinite	spatial extent
Wavelet 𝜙" 𝑥 is	not	explicit
Both space	and	frequency	are	
localized
누구나 TensorFlow!
J.	Kang	Ph.D.
Line-Fitting	Problem	Revisit
v Line-Fitting 문제를 Linear	Basis	function	model로
해석하기
– Y는 스칼라 값으로 한다: Y=Y_j,	N=1
– E는 Additive	White	Gaussian	Noise	라고 가정
81
t = Y(X,a,b)+ E = aX + b + E
X1 = X,φ(X) = X
W1 = a,B = b
Y
X
누구나 TensorFlow!
J.	Kang	Ph.D.
Bayesian	Framework	in	Line-fitting
v Prior:	데이터를 보기전에 알고있는 확률 정보
– ML문제에서는 모델 파라미터 a,b에 대한 확률 분포
– 주로 특정 분포로 모델링하는 것으로 가정하는 경우가 많음
– Gaussian,	Laplace,	….
v Likelihood: 주어진 데이터의 확률 정보
– ML문제에서는 측정데이터 {t}에 대한 확률 분포
– 주로 측정데이터의 히스토그램 분포를 보고 모델링
– 모델에서는 E의 확률분포를 따라감
– 왜?
v Posterior:
– 사전 정보와 데이터의 정보를 결합한 확률 분포
– 데이터의 개수가 많아지면 Posterior는 Likelihood에 근접하게 됨
82
t = Y(X,W )+ E
Posterior ∝ Prior × Likelihood
누구나 TensorFlow!
J.	Kang	Ph.D.
Maximum	likelihood	Estimation
v N개 training	data	set을 가정
–
v Likelihood	확률분포
– 각 data	pair (x_i, t_i)	는 서로 독립임을 가정)
– 모든 측정 데이터 ‘{t}’에 대한 joint likelihood	확률분포
v Maximum	likelihood	(ML)	estimation
– Line-fitting	문제 처럼 추정해야할 모델 파라미터가 a,b인 경우
83
p(t |Y, X,a,b) = p(ti | yi ,xi ,a,b)
i=1
N
∏
(a!,b!) = argmax
a,b
p(t | X,Y,a,b)
(X,T ) = {(x1,t1),...,(xN ,tN )} T = Y(X,W )+ E
누구나 TensorFlow!
J.	Kang	Ph.D.
Least	Square	Estimation	(LSE)
vLinear	model	+	AWGN	model =>	LSE
– AWGN(백색 가산 잡음): 주파수 특성이 모든 스팩트럼에 대해서 일정한
잡음
v Likelihood	function
v ML estimation	for	W
84
p(t | X,Y,W ) =
1
2πσ 2
exp −
(tj − wjφ(X))2
2σ 2
⎛
⎝⎜
⎞
⎠⎟
j=1
N
∏
p(E) = p(Ej )
j=1
N
∏ , where p(Ej ) =
1
2πσ 2
exp −
Ej
2
2σ 2
⎛
⎝⎜
⎞
⎠⎟
W! = argmax
W
p(t | X,Y,W )
where p(t | X,Y,W ) =
1
2πσ 2
exp −
(tj − wjφ(X))2
2σ 2
⎛
⎝⎜
⎞
⎠⎟
j=1
N
∏
누구나 TensorFlow!
J.	Kang	Ph.D.
Least	Square	Estimation	(LSE)
vLinear	model	+	AWGN	model =>	LSE
– AWGN(백색 가산 잡음): 주파수 특성이 모든 스팩트럼에 대해서 일정한
잡음
v Likelihood	function
v ML estimation	for	W
85
p(t | X,Y,W ) =
1
2πσ 2
exp −
(tj − wjφ(X))2
2σ 2
⎛
⎝⎜
⎞
⎠⎟
j=1
N
∏
p(E) = p(Ej )
j=1
N
∏ , where p(Ej ) =
1
2πσ 2
exp −
Ej
2
2σ 2
⎛
⎝⎜
⎞
⎠⎟
W! = φ(X)T
φ(X)( )
−1
φ(X)T
T
누구나 TensorFlow!
J.	Kang	Ph.D.
LAB4:	TensorFlow, Curve-fitting
v삼각함수를 fitting 해보자
– 입력 X	in	[0,1]	인 timeindex
– 출력 Y	in[-1,1] 인 sinusoid
86
Prediction	by	learned	modelTraining	data	(X,Y)
- :	True
- :	Prediction
누구나 TensorFlow!
J.	Kang	Ph.D.
LAB4:	TensorFlow, Curve-fitting
v삼각함수를 fitting 해보자
– Possible	solution:
https://github.com/jwkanggist/EveryBodyTensorFlow
– lab4_runTFCurveFitting.py
87
Prediction	by	learned	modelTraining	data	(X,Y)
- :	True
- :	Prediction

[Tf2017] day2 jwkang_pub