2017-10-10 10 views
1

두 개의 숨겨진 레이어가있는 신경망을 만듭니다. 나는 동일한 세션에 남아있는 경우세션이 닫힐 때 모델 실행 - Tensorflow

saver.save(sess, "model.ckpt") 

하고이 코드를 실행 : 내가 세션을 시작하면 내가하여 세션을 저장

restorer=tf.train.Saver() 
with tf.Session() as sess: 
    restorer.restore(sess,"./prova") 
    new_graph = tf.train.import_meta_graph('prova.meta')  
    new_graph.restore(sess, 'prova.ckpt') 
    feed={ 
     pred1.inputs:test_data, 
     pred1.is_training:False 
    } 
    test_predict=sess.run(pred1.predicted,feed_dict=feed) 

내가 테스트를 위해 모델을 실행할 수 있습니다.

질문은 : 세션이 닫힐 때 모델을 시작하는 방법이 있습니까? 특히, 나는 기차 결과를 .ckpt에 저장하고, 다른 순간에 모델을 다시 시작할 수 있습니까?

+0

테스트 시간에 다른 세션을 시작 하시겠습니까? – Maxim

+0

현재 열차 또는 테스트 세트가있는 새 세션이 시작됩니다. 내가 원하는 것은 ckpt 파일에 salved 된 날짜로 새로운 세션을 시작할 수 있다면 이해할 수 있습니다. 가능한 경우 어떻게 할 수 있습니까? 감사합니다 – jjgasse

+0

새 세션에서 모델을 복원하는 스 니펫을 제공했습니다. 거기에는 훈련이 없습니다. 이 코드의 문제점은 무엇입니까? – Maxim

답변

0

tf.Session 외부에서 모델을 실행할 수 없습니다. 견적에서 the documentation :

세션 개체는 Operation 개체가 실행되는 환경을 캡슐화하고 Tensor 개체가 평가됩니다.

그러나 당신은 쉽게 개방 할 수 있고 세션 여러 번을 닫고, 기존 그래프를 사용하거나 이전에 저장 한 그래프를로드하고, 새로운 세션에 그것을 사용할 수 있습니다. 이 두 세션 사이

import tensorflow as tf 

v1 = tf.get_variable("v1", shape=[3], initializer = tf.zeros_initializer) 
v2 = tf.get_variable("v2", shape=[5], initializer = tf.zeros_initializer) 

inc_v1 = v1.assign(v1+1) 
dec_v2 = v2.assign(v2-1) 
init_op = tf.global_variables_initializer() 
saver = tf.train.Saver() 

with tf.Session() as sess: 
    sess.run(init_op) 
    inc_v1.op.run() 
    dec_v2.op.run() 
    save_path = saver.save(sess, "/tmp/model.ckpt") 
    print("Model saved in file: %s" % save_path) 

with tf.Session() as sess: 
    saver.restore(sess, "/tmp/model.ckpt") 
    print("Model restored.") 
    print("v1 : %s" % v1.eval()) 
    print("v2 : %s" % v2.eval()) 

당신이 v1v2을 평가할 수는 없지만 직후 새 세션을 시작 할 수 있습니다 여기에 약간 example from the doc을 수정합니다.