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

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

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 86823
공지 [SQL컨셉] 서적 "SQL컨셉"의 샘플 데이타 베이스 SAMPLE DATABASE of ORACLE 가을의 곰을... 2013.02.10 79118
공지 [G_SQL] Sample Database 가을의 곰을... 2012.05.20 95875
15 [표준SQL] 퀴즈로 배우는 SQL : 전기 요금 계산 file 졸리운_곰 2024.08.10 1583
14 [표준SQL] 퀴즈로 배우는 SQL : 파이프 연결하기 file 졸리운_곰 2024.08.10 1322
13 [표준SQL] 퀴즈로 배우는 SQL : 공통점이 가장 많은 친구 찾기 file 졸리운_곰 2024.08.10 2123
12 [표준 SQL] 퀴즈로 배우는 SQL : 일별 누적 접속자 통계 구하기 file 졸리운_곰 2024.08.10 1694
11 [표준 SQL] 퀴즈로 배우는 SQL : 구분자로 나누어 행,열 바꾸기 file 졸리운_곰 2024.08.10 1887
10 [표준 SQL] 퀴즈로 배우는 SQL : 신입사원 부서 배치에 따른 급여 랭킹 시뮬레이션 file 졸리운_곰 2024.08.10 1340
9 [표준 SQL] 퀴즈로 배우는 SQL : 시작일, 종료일 사이의 휴일을 제외한 일수 구하기 file 졸리운_곰 2024.08.10 1487
8 [표준 SQL] 권순용의 DB 이야기 : 함수 기반 인덱스의 개념과 생성 이해 file 졸리운_곰 2024.08.10 1377
7 [표준 SQL] 퀴즈로 배우는 SQL : 계층 쿼리를 이용해 조직도 만들기 file 졸리운_곰 2024.08.10 2078
6 [표준 SQL] SQL을 잘한다는 기준은 무엇일까 file 졸리운_곰 2024.08.10 1342
5 [SQL] CRUD 기본 사용법 file 졸리운_곰 2023.01.23 1394
4 [기본 SQL] SELECT, INSERT, UPDATE, DELETE file 졸리운_곰 2022.04.26 1209
3 Mysql Join 해부(Left, Right, Outer, Inner Join) file 졸리운_곰 2019.01.30 1580
2 Join의 모든것.(LEFT OUTER, RIGHT OUTER, INNER, FULL OUTER, CROSS) 졸리운_곰 2019.01.30 1520
1 SELECT 문법 file 졸리운_곰 2017.11.22 2317
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED