Tensor+Flow 시작하기 (1)

TensorFlow는 구글에서 만든 오픈소스 프로젝트로 출시된지 얼마 안되었지만, 많은 이용자들이 즐겨 사용하는 서비스이다. TensorFlow는 Data Array(Node)인 Tensor(계산 그룹)과 Flow(Tensor 간의 Communication)으로 이루어져 있다.

출처 : aymericdamien Github

  1. TensorFlow Install (Linux, pip v 8.1이상)
$ pip install tensorflow
$ pip install tensorflow-gpu     #GPU 사용하는게 장점

윈도우의 경우 Docker 사용

$ docker run -it -p 8888:8888 gcr.io/tensorflow/tensorflow

여러가지 OS 버전에 따른 설치는 링크 참조

간단한 테스트

import tensorflow as tf
hello = tf.constant('Hello Tensorflow')
sess = tf.Session()
print sess.run(hello)           #print hello 하면 Tensor값 나옴
import tensorflow as tf
a = tf.constant(2)
b = tf.constant(3)
with tf.Session() as sess:
      print "a=2 b=3 a+b=?"
      print "a+b= %i" % sess.run(a+b)
import tensorflow as tf              #PlaceHolder node자리잡기
a = tf.placeholder(tf.int16)
b = tf.placeholder(tf.int16)
add = tf.add(a,b)
mul = tf.mul(a,b)
with tf.Session as sess:
      print "a+b = %i" %sess.run(add, feed_dict={a: 2, b: 3})
      print "a*b = %i" %sess.run(mul, feed_dict={a: 2, b: 3})

2. Linear Regression (Goal : Cost의 최소화)

linear Regression cost function.PNG

import tensorflow as tf
x_data = [1,2,3]
y_data = [1,2,3]
w = tf.Variable(tf.random_uniform([1], -1.0, 1.0))
b = tf.Variable(tf.random_uniform([1], -1.0, 1.0))
hypothesis = w * x_data + b
cost = tf.reduce_mean(tf.square[hypothesis - y_data])
#Minimize
a = tf.Variable(0,1) #learning rate, alpha
optimizer = tf.train.GradientDescentOptimizer(a)
train = optimizer.minimize(cost)
#Minimize end / init before start (초기화)
init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)

for step in xrange(2001):
      sess.run(train)      #Minimize 실행
      if step % 20 == 0:   #20번 마다 결과값 출력 
       print step, sess.run(cost), sess.run(w), sess.run(b)
import tensorflow as tf       #Placeholder 사용해서 예측하기
x_data = [1.,2.,3.]
y_data = [1.,2.,3.]
w = tf.Variable(tf.random_uniform([1], -1.0, 1.0))
b = tf.Variable(tf.random_uniform([1], -1.0, 1.0))

X = tf.placeholder(tf.float32)
Y = tf.placeholder(tf.float32)
hypothesis = w * X + b
cost = tf.reduce_mean(tf.square[hypothesis - Y])

#Minimize
a = tf.Variable(0,1)        #learning rate, alpha
optimizer = tf.train.GradientDescentOptimizer(a)
train = optimizer.minimize(cost)

#Minimize end / init before start (초기화)
init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)

for step in xrange(2001):
      sess.run(train, feed_dict={X:x_data, Y:y_data})  #Minimize 실행
      if step % 20 == 0:   #20번 마다 결과값 출력 
       print step, sess.run(cost, feed_dict{X:x_data, Y:y_data}), sess.run(w), sess.run(b)
print sess.run(hypothesis, feed_dict={X:5})
print sess.run(hypothesis, feed_dict={X:2.5})

X variable 이 2개 이상일 때

import tensorflow as tf
x1_data = [1,2,3]
x2_data = [2,3,4]
y_data = [1,2,3]
w1 = tf.Variable(tf.random_uniform([1], -1.0, 1.0))
w2 = tf.Variable(tf.random_uniform([1], -1.0, 1.0))
b = tf.Variable(tf.random_uniform([1], -1.0, 1.0))
hypothesis = w1 * x1_data + w2 * x2_data + b
cost = tf.reduce_mean(tf.square[hypothesis - y_data])

#Minimize
a = tf.Variable(0,1) #learning rate, alpha
optimizer = tf.train.GradientDescentOptimizer(a)
train = optimizer.minimize(cost)

#Minimize end / init before start (초기화)
init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)

for step in xrange(2001):
      sess.run(train)      #Minimize 실행
      if step % 20 == 0:   #20번 마다 결과값 출력 
       print step, sess.run(cost), sess.run(w1), sess.run(w2), sess.run(b)
import tensorflow as tf
x_data = [[1,2,3], [2,3,4]]
y_data = [1,2,3]
w = tf.Variable(tf.random_uniform([1,2], -1.0, 1.0))
b = tf.Variable(tf.random_uniform([1], -1.0, 1.0))

hypothesis = tf.matmul(w, x_data) + b         #hypothesis 수정
cost = tf.reduce_mean(tf.square[hypothesis - y_data])

#Minimize
a = tf.Variable(0,1) #learning rate, alpha
optimizer = tf.train.GradientDescentOptimizer(a)
train = optimizer.minimize(cost)

#Minimize end / init before start (초기화)
init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)

for step in xrange(2001):
      sess.run(train)      #Minimize 실행
      if step % 20 == 0:   #20번 마다 결과값 출력 
       print step, sess.run(cost), sess.run(w), sess.run(b)

 

3. Binary Classification (둘 중 하나)
Spam(1) or Ham(0)
Show(1) or Hide(0)

import tensorflow as tf
import numpy as np
xy = np.loadtext('train.txt', unpack=True, dtype='float32')
x_data = xy[0:-1]
y_data = xy[-1];

X = tf.placeholder(tf.float32)
Y = tf.placeholder(tf.float32)
w = tf.Variable(tf.random_uniform([1,len(x_data)], -1.0, 1.0))

h = tf.matmul(w, X)         #hypothesis 수정
hypothesis = tf.div(1., 1.+tf.exp(-h))

cost = -tf.reduce_mean(Y*tf.log(hypothesis) + (1-Y)*tf.log(1-hypothesis))

#Minimize
a = tf.Variable(0,1) #learning rate, alpha
optimizer = tf.train.GradientDescentOptimizer(a)
train = optimizer.minimize(cost)

#Minimize end / init before start (초기화)
init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)

for step in xrange(2001):
      sess.run(train, feed_dict{X:x_data, Y:y_data})      #Minimize 실행
      if step % 20 == 0:   #20번 마다 결과값 출력 
       print step, sess.run(cost, feed_dict={X:x_data, Y:y_data}), sess.run(w)

print '--------------------------'
print sess.run(hypothesis, feed_dict={X:[[1], [2], [2]]})>0.5
print sess.run(hypothesis, feed_dict={X:[[1], [5], [5]]})>0.5
print sess.run(hypothesis, feed_dict={X:[[1, 1], [2, 5], [2, 5]]})>0.5

 

참고:

txt 파일 읽어들이는 numpy

import numpy as np
xy = np.loadtext('train.txt', unpack=True, dtype='float32')
x_data = xy[0:-1]    #처음부터 끝까지
y_data = xy[-1];     #끝 줄만

과거의 Explicit Programming : 스팸 필터 :: 너무 많은 규칙 필요
ML : Supervised Learning/Unsupervised Learning
Supervised Learning : Regression(회귀법) / Binary classification / Multi-label classification

Advertisements

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중