머신러닝

1-1 라즈베리 파이 구글 인공지능 머신러닝 지원 TensorFlow 모듈 설치 및 시험

coding art 2017. 12. 5. 12:58
728x90

                                                 





TensorFlow 설치와 관련하여 32비트이니 64비트이니 하는 얘기가 있다. 직접 TensorFlow 싸이트에서 확인해 보면 리눅스와 MaxOS 정도까지만 언급되어 있으며 라즈베리 파이에 설치가 가능한지 여부에 대한 단서는 없다.

반면에 우리가 즐겨 사용하는 라즈베리베리 파이는 32비트 리눅스 버전이지만 아래의 사례에서처럼 이미 TensorFlow를 설치한 사례가 있으므로 지침대로 TensorFlow 모듈을 설치하도록 한다.



라즈베리 파이에 인공지능 머신 러닝 파이선 코드를 실행시키기 위해서는 아래의 싸이트를 참조하여 Terminal 모드에서 update를 필두로 설치 작업을 진행한다.
http://www.instructables.com/id/Google-Tensorflow-on-Rapsberry-Pi/



파이선 2.7 버전과 3.3 버전이 있으며 아래는 파이선 2.7 버전의 사례이다. 버전 3.3 설치를 위해서는 상기의 인터넷 주소를 참조하여 유사한 작업을 진행하도록 하자. TensorFlow 모듈이 제법 큰지 설치 시간이 반시간 정도 소요됨을 참조하자.



실행 명령 자체가 다소 길기 때문에 라즈베리 파이에서 인터넷 주소를 열어서 다소 긴 명령들을 카피하여 실행시키는 것이 입력 실수를 줄이기에 좋을 듯하다.

상기의 인터넷 주소를 검색하려면 www.yahoo.com 에서 검색어 Tensorflow install instructables를 사용하면 쉽게 찾을 수 있다.


이 인터넷 주소의 내용에는 python2.7 python3.4 각각에 대한 TensorFlow 설치가 안내되어 있으나 가급적 실패를 방지하기 위해서 python2.7 버전을 설치하자. python3.4 에 설치과정에서 어떤 에러가 발생할 수도 있으며 사실 TensorFlow 와 관련된 본 블로그 내용 전체는 python2.7 버전 하에서 실행한 결과임을 지적해 둔다

  

TensorFlow 모듈 설치가 완료되었으면 Python 2 (IDLE)에서 아래의 test 프로그램을 실행한다.


첫째, import 에서 TensorFlow 모듈을 불러들여 일종의 클라스 명령인 tf를 선언한다. import 란 모듈이나 라이브러리를 밖에서 IDLE 안으로 불러들이는 명령이다.
둘째, 출력해야 할 내용을 대상으로 building graph 단계에서 node를 설정한다. 셋째, TensorFlow 의 실행 연산에 해당하는 session을 실행한다. 넷째, session 실행 결과를 출력한다. 이 4단계가 tensorflow 코드의 기본 구조에 해당함에 유의하자.

TensorFlow 모듈 설치가 성공적이면 아래와 같은 메시지가 출력된다.



또 다른 간단한 예제로 이미 설치된 TensorFlow 의 버전을 셸에서 아래의 코드로 화인해 보자.



ai_01.py를 실행 시키면 shell 에 아래와 같은 결과를 출력하며 최종 문자 인식율은 91.29% 임을 알 수 있다.


붉은 색 경고문은 tf.initialize.all.variable() 라는 명령어 대신 tf.global_variables_initializer 라는 신규 명령어로 교체하라는 의미이다.


이 문자 인식 예제가 인공지능 머신 러닝 분야의 핵심 예제임에 틀림이 없으나 이 예제를 이해하기 위해서ᅟ어느 정도 머신 러닝 분야의 기초적인 실습과정이 필요한 듯하다.

TensorFlow 사용법과 직결된 이어지는 예제들의 실습이 필수적이다. 가장 간단한 linear regression 예제로부터 , multi variables regression 예제를 통해 cost 함수의 개념, 경사 하강법 사용법, learning_rate 즉 α값 설정 문제와 관련된 경험을 쌓기 바란다.


mnist_demo_01.py

# -*- coding: utf-8 -*-


# MNIST 데이터를 다운로드 한다.

from tensorflow.examples.tutorials.mnist import input_data

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


# TensorFlow 라이브러리를 추가한다.

import tensorflow as tf


# 변수들을 설정한다.

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

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

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

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


# cross-entropy 모델을 설정한다.

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

cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1]))

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


# 경사하강법으로 모델을 학습한다.

#init = tg.global_variables_initializer()

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}))