Tensorflow를 통해 특정 학습을 진행 했을 때, 학습 결과를 저장하고 사용하게 된다.
(매번 학습 시킨다음에 결과를 볼 수 없기 때문에)
이렇게 저장된 모델은 다시 Re-Training없이, 학습된 모델을 불러와서 결과를 확인 할 수 있다.
모델을 저장하기 위해서는 tf.train.saver를 이용한다.
saver = tf.train.Saver()
save_path = saver.save(sess, 'data/output_model.ckpt')
print('model path ', save_path)
위 코드와 같이 지금까지 학습된 Session를 특정 바이너리 파일로 저장을 한다.
saver를 이용하여 모델을 저장할 경우 2종류의 파일로 구분된다.
1) Meta graph - 'data/output_model.ckpt.meda'
meta파일은 Tensorflow graph에 대한 정보를 저장한다. 모든 Variable, Operation 등을 저장한다.
2) Checkpoint - 'data/output_model.ckpt.index', 'data/output_model.ckpt-00000-of-00001'
checkpoint file들은 학습을 통해 구해진 weight parameter들을 저장한다.
cf) Saver를 이용하여 학습된 모델을 저장할 시, save함수의 Parameter에 따라 Interation 횟수에 따라 저장도 가능하다.
참고 : https://www.tensorflow.org/api_docs/python/tf/train/Saver#save
그럼 간단한 예제를 이용하여 학습된 모델을 저장하고, 저장된 모델을 다시 불러와 결과를 출력해 보도록 하자.
[Train.py]
import tensorflow as tf
tf.set_random_seed(777)
W = tf.Variable(tf.random_normal([1]))
b = tf.Variable(tf.random_normal([1]))
X = tf.placeholder(tf.float32, shape=[None], name="input")
Y = tf.placeholder(tf.float32, shape=[None], name="output")
hypothesis = X * W + b
hypothesis = tf.identity(hypothesis, "hypothesis")
cost = tf.reduce_mean(tf.square(hypothesis - Y))
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01)
train = optimizer.minimize(cost)
sess = tf.Session()
sess.run(tf.global_variables_initializer())
trainX = [1, 2, 3]
trainY = [5, 10, 15]
for step in range(1001):
cost_val, W_val, b_val, _ = sess.run([cost, W, b, train], feed_dict={X: trainX, Y: trainY})
if step % 20 == 0:
print(step, cost_val, W_val, b_val)
saver = tf.train.Saver()
save_path = saver.save(sess, 'data/output_model.ckpt')
위 코드는 W값이 5, b값이 0에 가깝게 학습이 진행된다.
[Test.py]
import tensorflow as tf
tf.set_random_seed(777)
sess = tf.InteractiveSession()
new_saver = tf.train.import_meta_graph('data/output_model.ckpt.meta')
new_saver.restore(sess, 'data/output_mode.ckpt')
tf.get_default_graph()
x = sess.graph.get_tensor_by_name("input:0")
y = sess.graph.get_tensor_by_name("output:0")
hypothesis = sess.graph.get_tensor_by_name("hypothesis:0")
result = sess.run(hypothesis, feed_dict={x:[1, 2, 3]})
print(result)
위에서 학습한 토대로 출력과를 확인하면
[ 5.017189 10.003689 14.990189]
위와 같은 결과를 얻을 수 있다.
'A.I > Tensorflow' 카테고리의 다른 글
Tensorflow Lite(1) - Tensorflow Lite? (3) | 2018.11.13 |
---|