텐서플로우 훈련된 모델을 옮길수 있나요

회원님이 요청이 처리되지 않았습니다.

요청을 처리하는 중 문제가 발생하였습니다. 가능한 한 빨리 문제를 해결하도록 하겠습니다.

  • 홈으로 돌아가기

  • 한국어
  • 中文(简体)
  • English (US)
  • 日本語
  • Français (France)
  • Bahasa Indonesia
  • Polski
  • Español
  • Português (Brasil)
  • Deutsch
  • Italiano

  • 가입하기
  • 로그인
  • Messenger
  • Facebook Lite
  • Watch
  • 장소
  • 게임
  • Marketplace
  • Meta Pay
  • Oculus
  • Portal
  • Instagram
  • Bulletin
  • 기부 캠페인
  • 서비스
  • 투표 정보 센터
  • 그룹
  • 정보
  • 광고 만들기
  • 페이지 만들기
  • 개발자
  • 채용 정보
  • 개인정보처리방침
  • 개인정보 보호 센터
  • 쿠키
  • AdChoices
  • 이용 약관
  • 고객 센터
  • 연락처 업로드 및 비사용자
  • 설정
  • 활동 로그

Meta © 2022

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

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로 인식된 것을 확인할 수 있다.

또 다른 테스트를 위해 다음 이미지를 준비해 본다.