본문 바로가기

Enginius/Python&TensorFlow

TensorFlow 맛보기

나는 python을 할 줄 모르므로 

https://www.tensorflow.org/versions/r0.7/tutorials/mnist/beginners/index.html

를 따라해보기로 했다. 기계학습 초보자 소리는 안들을 수 있을 것 같긴하지만 모 기초를 탄탄하게 하는건 언제나 좋다. 역시나 MNIST가 나온다! 


MNIST 데이터는 르쿤 옹의 홈페이지에서 받을 수 있다. 

http://yann.lecun.com/exdb/mnist/

트랙픽이 엄청날것으로 예상되는 홈페이지다. 광고하나 걸면 때돈 벌듯. 


일단 파이썬을 실행해야 한다. 

python

을 키고, MNIST를 받는다. 이는 

from tensorflow.examples.tutorials.mnist import input_data

mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)

를 치면된다. 

그러면 아래와 같이 나온다. 

Successfully downloaded train-images-idx3-ubyte.gz 9912422 bytes.

Extracting MNIST_data/train-images-idx3-ubyte.gz

Successfully downloaded train-labels-idx1-ubyte.gz 28881 bytes.

Extracting MNIST_data/train-labels-idx1-ubyte.gz

Successfully downloaded t10k-images-idx3-ubyte.gz 1648877 bytes.

Extracting MNIST_data/t10k-images-idx3-ubyte.gz

Successfully downloaded t10k-labels-idx1-ubyte.gz 4542 bytes.

Extracting MNIST_data/t10k-labels-idx1-ubyte.gz


몬가 GUI가 없으니까 좀 허전하다. 난 역시 맷랩의 노예인가 보다. 
일단 이러면 mnist란 변수에 데이터가 다 담겨있다. 

우리는 아직 텐서플로우를 쓰지도 않았다. 
import tensorflow as tf
를 치자. 

x = tf.placeholder(tf.float32, [None, 784])

W = tf.Variable(tf.zeros([784, 10]))

b = tf.Variable(tf.zeros([10]))

와 같이 변수를 할당하자. 여기서 None은 길이를 지정해주지 않는 것이다. 

y = tf.nn.softmax(tf.matmul(x, W) + b)

와 같이 연산을 할 수도 있다. 물론 아직 W가 학습되지 않았으므로 아무런 의미가 없는 연산이다. 

학습은 간단하다. 


y_ = tf.placeholder(tf.float32, [None, 10])

cross_entropy = -tf.reduce_sum(y_*tf.log(y))

train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)

init = tf.initialize_all_variables()

와 같이 하면 학습이 된다. 


실제 수행을 하려면 다음과 같이 하면 된다. 

sess = tf.Session()

sess.run(init)

for i in range(1000):

  batch_xs, batch_ys = mnist.train.next_batch(100)

  sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})


자 이제 학습이 되었다. 결과를 확인해보자. 

correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))

accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))

print(sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels}))




일단 console에서 계속 작업을 하니 매우 귀찮다. 

이제 에디터를 써보자. 형주가 추천을 해준 Spyder를 사용하기로 했다. 

https://github.com/spyder-ide/spyder

에 들어가니


pip install spyder

를 치니 몬가 설치가 되긴 하는데, 에러가 한 줄 났다. 불안하다. 

PyQt5 를 설치하라고 한다. 

근데 Anaconda를 설치하면 다 있다고 한다. 

https://www.continuum.io/downloads#_unixc

에 가자. 

python -V

를 치니 파이썬 버젼이 나온다. 

Python 2.7.6

이다. 

다운을 받는다. 3분이 남았다고 한다. 다운이 다 되었다. 
다운로드 폴더에 들어가서 
bash Anaconda2-2.5.0-Linux-x86_64.sh
를 친다. 엔터를 막 치고 

yes

를 치니까 설치가 된다. (왠지 설치되는 내용 중에 spyder가 있는 것 같은데..) 그리고선 

sudp apt-get install spyder

를 치니까 막 설치가 된다. 파일 목록에 들어가서 spyder 아이콘을 더블 클릭하니까 열렸다! 유레카. 



다시 돌아오자 .