텐서플로우 기반 딥러닝 훈련 모델 파일 저장, 로딩 및 재활용

 
텐서플로우를 사용해 딥러닝 훈련 모델 파일 저장 및 복구를 통한 재활용 방법을 간단히 기술한다. 딥러닝은 학습할 때 많은 시간이 소요된다. 학습된 모델을 저장해, 필요할 때 로딩하여 재활용하면, 이런 학습 시간을 생략할 수 있다.

1. softmax 기반 MNIST 모델 학습 및 저장하기
학습 모델을 파일로 저장하고 재활용하기 위해, 필기체 이미지 MNIST 데이터를 다음과 같이 softmax 활성 함수를 이용한 신경망을 만든 후 학습한다. softmax 기반 신경망에 대한 자세한 내용은 여기를 참고한다.
softmax 기반 학습 모델
 
MNIST 데이터셋 예

학습된 모델은 tf.saver를 이용해 minist_softmax.ckpt 파일로 저장한다. 참고로 텐서플로우 사용방법은 여기를 참고한다.
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data

mnist = input_data.read_data_sets("MNIST_data_2/", one_hot=True)
print("Download Done!")

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

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

y = tf.nn.softmax(tf.matmul(x, W) + b)
y_ = tf.placeholder(tf.float32, [None, 10])

# loss func
cross_entropy = -tf.reduce_sum(y_ * tf.log(y))
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)

# init
init = tf.initialize_all_variables()

sess = tf.Session()
sess.run(init)

# train 
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.arg_max(y, 1), tf.arg_max(y_, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))

print("Accuarcy on Test-dataset: ", sess.run(accuracy, feed_dict={x:        mnist.test.images, y_: mnist.test.labels}))

# save model 
saver = tf.train.Saver()
save_path = saver.save(sess, "./minist_softmax.ckpt")

import os
print (os.getcwd())
print("Model saved in file: ", save_path)
저장된 파일은 사용자 작업 폴더에 다음과 같이 저장되어 있다.

확장자가 .meta 파일은 학습 모델 그래프의 메타정보를 저장한 파일이다. 해당 파일을 열어보면, 다음과 같이 그래프 메타 정보가 저장되어 있는 것을 확인할 수 있다.

checkpoint파일은 단순하게 체크포인트 경로 등을 저장해 놓은 파일이다. 실제 그래프 데이터는 .chpt.data-00000-of-00001 에 저장되어 있다.
 
2. MNIST 훈련 모델 기반 필기체 숫자 이미지 예측 소스코드
앞에서 훈련된 softmax 기반 MNIST 모델 파일(minist_softmax.ckpt)을 saver로 읽어, 필기체 숫자 이미지 예측 프로그램을 개발한다. 다음 순서로 진행한다.
 
1. 만약 PIL 라이브러리를 설치 하지 않았다면, 콘솔에서 pip install pillow 명령으로 설치한다. 참고로 PIL은 Python Imaging Library이다.
2. 작업폴더안에 MNIST_test_image.jpg 정사각형 숫자 이미지를 준비한다. 이 예에서는 다음과 같이 3이라고 쓴 필기체 이미지를 이용하였다.
3. 아래 코드를 실행한다. 
from PIL import Image
from numpy import *
import tensorflow as tf
import sys

im=Image.open("./MNIST_test_image.jpg")
img = array(im.resize((28, 28), Image.ANTIALIAS).convert("L"))
data = img.reshape([1, 784])

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)

saver = tf.train.Saver()
init_op = tf.global_variables_initializer()

with tf.Session() as sess:
    sess.run(init_op)
    save_path = "./minist_softmax.ckpt"
    saver.restore(sess, save_path)
    predictions = sess.run(y, feed_dict={x: data})
    print(predictions[0]);
훈련된 모델을 복구해 처리하면, 다음과 같이 출력된다. 이미지 x가 주어졌을 때, y 벡터 요소 중 제일 큰 값을 가지고 있는 것이 예측된 라벨이다. 벡터요소는 0에서 9까지 10개 원소를 가진다. 아래 경우, 네번째 원소의 값이 1이므로, 3이라고 쓴 필기체 이미지가 정확히 라벨 3로 인식된 것을 확인할 수 있다.

또 다른 테스트를 위해 다음 이미지를 준비해 본다. 
그리고, 앞의 코드를 실행하면 다음과 같이 8번 라벨로 잘 예측되는 것을 확인할 수 있다.
 
3. 학습 모델 그래프 메타 파일 사용
앞의 예제에서는 학습 모델을 저장한 체크포인트 파일을 restore()하기 전에, 학습 모델에 사용된 그래프를 다시 코딩해 사용하였다. 체크포인트 파일이 저장될 때 함께 저장되는 meta 파일을 이용하면, 학습 모델에 사용된 그래프 정의도 import할 수 있다. 사용하는 방법은 다음과 같다.
new_saver = tf.train.import_meta_graph("./minist_softmax.ckpt.meta")new_saver.restore(sess, "./minist_softmax.ckpt")

4. 마무리
훈련된 학습 모델을 파일로 보관하고 있으면, 다시 학습하느라 오랜 훈련 시간을 보낼 필요 없이, 저장된 파일을 restore()해서 사용하면 된다.

다음은 훈련 모델 재활용과 관련된 또 다른 레퍼런스이다. 비슷한 방식으로 작업되어 있다. 다음은 이를 이용해 아이폰 앱, C++ 플랫폼 기반 서비스를 개발하는 예이다. 좀 더 자세한 내용은 텐서플로우 각 플랫폼 별 SDK example 을 참고한다.

 

[출처] http://daddynkidsmakers.blogspot.com/2017/06/blog-post_27.html

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
공지 오라클 기본 샘플 데이터베이스 졸리운_곰 2014.01.02 86737
공지 [SQL컨셉] 서적 "SQL컨셉"의 샘플 데이타 베이스 SAMPLE DATABASE of ORACLE 가을의 곰을... 2013.02.10 79062
공지 [G_SQL] Sample Database 가을의 곰을... 2012.05.20 95824
18 TensorFlow Lite 101 - MoblieNet 맛보기 file 졸리운_곰 2018.05.30 1092
17 Apache MXNet에서 사전 트레이닝된 모델을 사용해 보세요. 졸리운_곰 2018.05.30 992
16 MXNet을 활용한 이미지 분류 앱 개발하기 file 졸리운_곰 2018.05.30 1426
15 세상에 있는 (거의) 모든 머신러닝 문제 공략법 file 졸리운_곰 2018.05.30 1120
14 sklearn 내부의 pickle lib 를 통해 모델을 저장하고 다시 로드하여 재사용할 수 있다. 졸리운_곰 2018.05.30 1640
» 텐서플로우 기반 딥러닝 훈련 모델 파일 저장, 로딩 및 재활용 file 졸리운_곰 2018.05.30 1771
12 TensorFlow 모델을 저장하고 불러오기 (save and restore) 졸리운_곰 2018.05.30 1638
11 텐서플로우(TensorFlow)를 이용해서 글자 생성(Text Generation) 해보기 – Recurrent Neural Networks(RNNs) 예제 – Char-RNN file 졸리운_곰 2018.05.13 1124
10 외장형 그래픽카드로 우분투에서 텐서플로우 사용 How to setup an eGPU on Ubuntu for TensorFlow file 졸리운_곰 2018.05.09 1427
9 Keras and NLTK 케라스를 이용한 NLTK 자연어처리 졸리운_곰 2018.05.08 1605
8 Windows7에서 "처음 심층 학습 프로그램」을 사경 보면 (1-2) 제 1 장 후반 file 졸리운_곰 2018.05.08 1142
7 CSLAIER CSLAIER에 의한 LSTM file 졸리운_곰 2018.05.08 1664
6 Tensorboard 사용하기 1 file 졸리운_곰 2018.05.08 1416
5 텐서보드 사용법 file 졸리운_곰 2018.05.08 1412
4 Ubuntu 18.04 Settings for TensorFlow 설치 file 졸리운_곰 2018.05.08 1183
3 딥러닝용 서버 설치기 file 졸리운_곰 2018.05.07 1396
2 Installing Tensorflow GPU on Ubuntu 18.04 LTS file 졸리운_곰 2018.05.06 1216
1 TensorFlow Lite 101 - MoblieNet 맛보기 file 졸리운_곰 2018.04.07 1275
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED