레이블이 Tensorflow인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Tensorflow인 게시물을 표시합니다. 모든 게시물 표시

2018년 1월 30일 화요일

Tensorflow 학습 결과 Save & Restore

간단한 linear regression 모델을 저장하고 불러와서 예측 값을 반환하는 예제 코드


# 모델 저장 & 불러오기를 위한 경로 지정
base_path = './tf-models'
date_str = '2018130'
load_path = base_path + '/' + date_str
save_path = load_path + '/my_model'

# 예제 데이터 feature 3개x1_data = [73., 93., 89., 96., 73.]
x2_data = [80., 88., 91., 98., 66.]
x3_data = [75., 93., 90., 100., 70.]
y_data = [152., 185., 180., 196., 142.]

# 학습 & 모델 저장
def learning(self):

    x1 = tf.placeholder(tf.float32)
    x2 = tf.placeholder(tf.float32)
    x3 = tf.placeholder(tf.float32)
    Y = tf.placeholder(tf.float32)

    w1 = tf.Variable(tf.random_normal([1]), name='weight1')
    w2 = tf.Variable(tf.random_normal([1]), name='weight2')
    w3 = tf.Variable(tf.random_normal([1]), name='weight3')
    b = tf.Variable(tf.random_normal([1]), name='bias')

    saver = tf.train.Saver()

    hypothesis = x1 * w1 + x2 * w2 + x3 * w3 + b

    cost = tf.reduce_mean(tf.square(hypothesis - Y))
    optimizer = tf.train.GradientDescentOptimizer(learning_rate=1e-5)
    train = optimizer.minimize(cost)

    sess = tf.Session()
    sess.run(tf.global_variables_initializer())
    for step in range(2001):
        cost_val, hy_val, _ = sess.run([cost, hypothesis, train],
                                       feed_dict={x1: self.x1_data, x2: self.x2_data, x3: self.x3_data, Y: self.y_data})

    saver.save(sess, self.save_path)

# 모델 불러오기 & 예측
def prediction(self, _x1, _x2, _x3):
    with tf.Session() as sess:
        saver = tf.train.import_meta_graph(self.save_path + '.meta')
        saver.restore(sess, tf.train.latest_checkpoint(self.load_path))

        graph = tf.get_default_graph()

        x1 = tf.placeholder(tf.float32)
        x2 = tf.placeholder(tf.float32)
        x3 = tf.placeholder(tf.float32)

        w1 = graph.get_tensor_by_name("weight1:0")
        w2 = graph.get_tensor_by_name("weight2:0")
        w3 = graph.get_tensor_by_name("weight3:0")
        b = graph.get_tensor_by_name("bias:0")

        hypothesis = x1 * w1 + x2 * w2 + x3 * w3 + b

        score = sess.run(hypothesis, feed_dict={x1:float(_x1), x2:float(_x2), x3:float(_x3)})

    return score

2018년 1월 14일 일요일

TensorFlow 설치

참고 사이트
https://www.tensorflow.org/install/install_linux
https://tensorflowkorea.gitbooks.io/tensorflow-kr/content/g3doc/get_started/os_setup.html

AWS 프리티어 이용해서 우분투 EC2 인스턴스에서 테스트 중

Python : 2.7
TensorFlow : 1.4.1

python이랑 python pip 설치
sudo apt-get install python-pip python-dev
pip 이용해서 tensorflow 설치
자신의 환경에 맞는 tensorflow 버전을 선택해야 한다.

https://www.tensorflow.org/install/install_linux#the_url_of_the_tensorflow_python_package

여기에서 python 버전과 CPU만 사용할 것인지? GPU까지 사용할 것인지 선택해서 주소를 복사한다.
나는 python 2.7에 CPU만 사용할 거니깐.
https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.4.1-cp27-none-linux_x86_64.whlㅅ

현재(2018-01-14) 기준으로 1.4.1 버전이 최신 버전? 또는 stable 버전인 듯
문서에서는 변수 만들어서 URL 할당하고 하라는데 난 걍 ㄱㄱ

sudo pip install --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.4.1-cp27-none-linux_x86_64.whl

이렇게 하면 우선 설치는 끝?

정상적으로 설치되었고, 설치한 버전이 맞는지 확인하기 위해서
python을 치고 python 명령창으로 들어간다.

import tensorflow as tf
tf.__version__

위의 명령어를 쳤을 때 아까 설치한 버전이 나오면 정상적으로 설치 완료.


간단한 예제 프로그램 돌리기

Hello, TensorFlow!를 찍어 주는 프로그램

위에서 tensorflow를 import했다고 가정하고,
hello = tf.constant("Hello, TensorFlow!");
sess = tf.Session();
print(sess.run(hello))

이렇게 하면 Hello, TensorFlow!라 화면에 찍힌다.

이때 tf.Session()에서 에러가 나는 경우가 있는데(아마도 CPU 이용해서 하는 경우 다 나는 것 같다.), 이건 현재 CPU에 최적화되어서 compile되지 않아서 성능이 제대로 안나올 수 있다는 경고 정도이다. (I tensorflow/core/platform/cpu_feature_guard.cc:137] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA)
이걸 없애고 싶으면, 소스 받아서 직접 컴파일해서 써야 되는데 귀찮...