2

我想從檢查點文件中加載以前訓練過的張量訓練模型,現在這些檢查點文件在它們中有可變參數,因此要加載圖形,我必須先從中加載graph_def ** ckpt.meta文件:錯誤:張量的圖形與會話的圖形不一樣

graph = tf.Graph() 
sess = tf.InteractiveSession(graph=graph) 
saver = tf.train.import_meta_graph('/data/model_cache/model.ckpt-39.meta') 
    ckpt = tf.train.get_checkpoint_state(FLAGS.checkpoint_dir) 
    if ckpt and ckpt.model_checkpoint_path: 
     if os.path.isabs(ckpt.model_checkpoint_path): 
      saver.restore(sess, ckpt.model_checkpoint_path) 

後,我已經加載的模型我有一個使用這個模型的推理來實現deep-dream算法中的方法。問題是,當我打電話EVAL用默認的會議上,我得到以下錯誤:

File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 555, in eval 
return _eval_using_default_session(self, feed_dict, self.graph, session)File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework /ops.py", line 3495, in _eval_using_default_session 
raise ValueError("Cannot use the given session to evaluate tensor: " 
ValueError: Cannot use the given session to evaluate tensor: the tensor's graph is different from the session's graph. 

我已經證實,tf.get_default_graph()和sess.graph都指向相同的內存地址。必須有一些非常基本的東西我缺少。

我是tensorflow的新手,所以在這方面的任何幫助將非常感激。由於

+0

嘗試使用普通'Session'而不是'InteractiveSession' – fabrizioM

+0

從錯誤消息中,我猜你正在調用'tensor.eval()'或'op.run()'對象它與'sess.graph'有不同的圖形 - 您可以打印出'tensor.graph'或'op.graph'(視情況而定)。很難確切地說出可能會出現這種情況,不知道如何構建該對象以及調用它的上下文。你能分享更多的代碼嗎? – mrry

回答

0

這很可能是要導入的元圖,即/data/model_cache/model.ckpt-39.meta是不同形式的檢查站tf.train.get_checkpoint_state(FLAGS.checkpoint_dir)使用的一個。

通常的做法是有get_checkpoint_state()通話(或tf.train.latest_checkpoint(FLAGS.checkpoint_dir)),並使用它在import_meta_graph()調用輸出,然後,用相同的關卡名稱(和返回保護)恢復變量中的會話。這當然可以在每個檢查點保存元圖的情況下完成。