Chris Choi

Machine Learning with TensorFlow

with one comment

Development Environment

Mac에서 TensorFlow 1.0.1, Python 3.7.0과 Anaconda를 사용했다. Anaconda는 Spyder 등의 Tool을 제공한다.

 

 

TensorFlow의 Version은 다음과 같이 확인할 수 있다.

—————————————————————————————————————————-

import tensorflow as tf

 

print (“TensorFlow Version: “, tf.__version__)

—————————————————————————————————————————-

TensorFlow Version:  1.0.1

—————————————————————————————————————————-

 

Python Basics

Python Version 2.X에서 Version 3.X의 함수들을 사용하기 위해서는 다음과 같이 선언한다.

—————————————————————————————————————————-

from __future__ import

—————————————————————————————————————————-

 

TensorFlow Basics

TensorFlow의 기본 문법은 다음과 같다.

—————————————————————————————————————————-

import tensorflow as tf  #1)

 

hello = tf.constant (“Hello, TensorFlow!”)  #2)

 

sess = tf.Session ()  #3)

print (sess.run (hello))  #4)

sess.close ()  #5)

—————————————————————————————————————————-

 

1) TensorFlow Library를 Import 한다.

2) 수행할 Node를 정의한다.

3) Session을 생성한다.

4) Node를 수행한다.

5) Session을 닫는다.

 

‘Hello, TensorFlow!’라는 문자열을 화면에 출력하는 ‘hello’는 하나의 Node이다. Node는 TensorFlow가 수행하는 동작이라고 보면 된다. Node와 Node 사이를 움직이는 데이터는 ‘Edge’ 혹은 ‘Tensor’라고 부른다.

‘with’를 사용하면 ‘with’를 나갈 때 알아서 Session을 닫아주므로 명시적으로 ‘close ()’를 선언하지 않아도 된다.

—————————————————————————————————————————-

# sess = tf.Session ()

# print (sess.run (hello))

# sess.close ()

with tf.Session () as sess:

print (sess.run(hello))

—————————————————————————————————————————-

 

연산을 수행할 수 있다.

—————————————————————————————————————————-

import tensorflow as tf

 

node1 = tf.constant (3.0, tf.float32)  #’constant’로 상수를 선언한다

node2 = tf.constant (4.0)  # 위 라인처럼 명시적으로 ‘float32’를 선언하지 않아도 된다.

node3 = tf.add (node1, node2)  # node3 = node1 + node2

 

sess = tf.Session ()

print (“node3: “, sess.run(node3))

sess.close ()

—————————————————————————————————————————-

 

Node 실행 전에 상수를 할당하는 대신, Node 실행 시 값을 입력할 수 있다. ‘placeholder’로 입력할 값을 미정인 상태로 두고, Node 실행 시 ‘feed_dict’를 Input으로 설정한다.

—————————————————————————————————————————-

import tensorflow as tf

 

a = tf.placeholder (tf.float32)  #a = tf.placeholder (tf.float32, shape=(None)

b = tf.placeholder (tf.float32)

adder_node = a + b  # tf.add (a, b)

sess = tf.Session ()

print (sess.run (adder_node, feed_dict = {a: 3, b: 4.5}))

print (sess.run (adder_node, feed_dict = {a: [1, 3], b: [2, 4]}))

sess.close ()

—————————————————————————————————————————-

 

Linear Regression

‘Linear Regression’은 Input x와 Output y의 값이 주어지는 경우, 두 조합을 학습 Training 해 다른 x 값에 대한 y 값을 예측 Inference 하는 것이다. 결과 값인 y가 Training data set 내의 ‘Label’로 주어진다는 점에서 Supervised Learning의 일종이다.

학습을 통해 가설 Hypothesis 을 세운다. W와 b의 값에 따라 다양한 선이 가능하다.

—————————————————————————————————————————-

H(x) = Wx + b

—————————————————————————————————————————-

 

가설 상의 값과 실제 값의 차이가 가장 작은 가설을 선택하게 된다. 이를 위해 ‘Cost Function’ 혹은 ‘Loss Function’을 구현한다. Cost Function은 W와 b의 값을 약간씩 바꿔 가면서 가설 상의 값과 실제 값의 차이를 제곱 하고, 그 값을 합한 후 평균을 계산한다.

—————————————————————————————————————————-

Cost (W, b) =

—————————————————————————————————————————-

 

차이를 제곱 하는 이유는 양수와 음수가 서로 상쇄하지 않도록 하기 위함이다. 제곱하면 값이 커지는 효과가 있으나, 차이가 소수일 경우 제곱 값이 오히려 작아지기도 한다.

Cost를 최소화 하기 위해 ‘GradientDescentOptimizer’를 사용한다. 경사를 따라 내려가면서 Cost를 최소화 하는 W를 계산한다.

 

Binary Classification

‘Binary Classification’은 ‘Logistic Regression’이라 불리기도 한다. ‘스팸 메일이 맞나요, 아닌가요?’, ‘Fraud가 맞나요, 아닌가요?’ 처럼 Yes/No를 판단하는 것이다.

 

Multinominal Classification

 

CNN

CNN Convolutional Neural Network 은 Image processing에 주로 사용된다. CNN은 Feature를 추출하는 Convolutional Layer와 분류를 수행하는 Neural Network로 구성된다. Convolutional Layer는 ‘Filter’ (‘Neuron’ 혹은 ‘Kernel’이라 부르기도 한다) 와 Activation Function으로 구성되는데, Filter는 행렬로서 특징이 데이터에 존재하는지 여부를 확인하는 역할을 한다. 연산이 가능하도록 Filter의 Depth는 Input의 Depth와 동일해야 한다. Input과 Filter는 Multiply 연산을 한다. 특징이 존재하지 않으면 결과는 0에 수렴하며, 특징이 뚜렷할수록 결과 값이 커진다. 여러 가지 특징을 확인하기 위해 복수 개의 Filter가 사용된다. Filter의 개수만큼 Activation Map (중간 Image) 가 생성된다.

Filter는 ‘Stride’ 값을 갖는데, Filter가 움직이는 간격의 크기다. Stride의 값이 크면 데이터 유실 가능성이 높아진다.

Filter 처리 시 데이터의 유실이 없도록 입력값 주위에 ‘0’을 두를 수 있는데, 이것이 ‘Padding’이다. 이를 통해 Overfitting을 방지할 수 있다.

—————————————————————————————————————————-

conv2d = tf.nn.conv2d (… padding = “SAME”)  #Padding 적용

conv2d = tf.nn.conv2d (… padding = “VALID”)  #Padding 미적용

—————————————————————————————————————————-

 

Activation Function은 ‘sigmoid’ 대신 ‘ReLu’를 사용한다.

Convolutional Layer를 거치면 ‘Feature Map’ (혹은 ‘Activation Map’) 이 생성된다.

‘Pooling’ (‘Subsampling’) 을 통해 크기가 작아진다. 주로 Max Pooling을 사용하며, 성능이 좋고 큰 값이 특성을 잘 설명해 준다. 평균값을 사용할 수도 있다.

Neural Network의 Softmax를 통해 Classification이 수행된다.

 

CIFAR-10

‘CIFAR-10’은 10개의 Category로 분류된 32X32의 이미지 6만 개를 학습하고 예측하는 것이다. 5만 개의 이미지는 Training에, 나머지 만 개의 이미지는 Evaluation에 사용된다.

 

ImageNet

AlexNet, GoogLeNet

 

TensorBoard

TensorBoard는 TensorFlow가 제공하는 Visualization tool이다.

 

References

Advertisements

Written by Chris Choi

July 21, 2018 at 12:54 pm

One Response

Subscribe to comments with RSS.

  1. […] TensorFlow 수업 참석 […]


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: