2017-07-16 75 views
0

從我的理解,tensorflow的freeze_graph.py應該支持新的關卡格式,我應該只可以使用類似欲以FailedPreconditionError freeze_graph.py結果:

freeze_graph.py --input_saver ./checkpoints/model-49-295 --output_graph ./graph.pb --output_node_names "predictions:0" 

只是要清晰,

ls ./checkpoints 
checkpoint 
model-49-295.data-00000-of-00001 
model-49-295.index 
model-49-295.meta 

然而,當我這樣做,我得到了以下錯誤:

Traceback (most recent call last): 
    File "~/.local/lib/python3.5/site-packages/tensorflow/python/tools/freeze_graph.py", line 255, in <module> 
    app.run(main=main, argv=[sys.argv[0]] + unparsed) 
    File "~/.local/lib/python3.5/site-packages/tensorflow/python/platform/app.py", line 48, in run 
    _sys.exit(main(_sys.argv[:1] + flags_passthrough)) 
    File "~/.local/lib/python3.5/site-packages/tensorflow/python/tools/freeze_graph.py", line 187, in main 
    FLAGS.variable_names_blacklist) 
    File "~/.local/lib/python3.5/site-packages/tensorflow/python/tools/freeze_graph.py", line 165, in freeze_graph 
    input_graph_def = _parse_input_graph_proto(input_graph, input_binary) 
    File "~/.local/lib/python3.5/site-packages/tensorflow/python/tools/freeze_graph.py", line 134, in _parse_input_graph_proto 
    text_format.Merge(f.read(), input_graph_def) 
    File "~/.local/lib/python3.5/site-packages/tensorflow/python/lib/io/file_io.py", line 125, in read 
    pywrap_tensorflow.ReadFromStream(self._read_buf, length, status)) 
    File "/usr/lib/python3.5/contextlib.py", line 66, in __exit__ 
    next(self.gen) 
    File "~/.local/lib/python3.5/site-packages/tensorflow/python/framework/errors_impl.py", line 466, in raise_exception_on_not_ok_status 
    pywrap_tensorflow.TF_GetCode(status)) 
tensorflow.python.framework.errors_impl.FailedPreconditionError: . 

我真的被這個迷惑,因爲.似乎並不像一個非常有用的錯誤代碼,所有的引用到FailedPreconditionError我可以找到有類似FailedPreconditionError: Attempting to use uninitialized value ...

任何人有任何線索,這是怎麼回事呢?

+0

我不確定,但我想你錯過了_space_ ** - input_saver./checkpoints/model-49-295 ** – james

+0

糟糕,不知道這是怎麼回事。我運行的實際命令有空間(我現在剛剛確定,同樣的錯誤)。 我更新了這個帖子來解決這個問題 – user2640224

回答

0

從freeze_graph.py看代碼我不確定它是否支持新格式,或者至少我無法弄清楚它會如何,即使我已經看到了一些聲稱它確實如此。反正,我現在的解決方法是寫一個簡單的腳本,它基本上是同樣的事情,但實際上正確地加載關卡:

import tensorflow as tf 
from tensorflow.python.framework import graph_util 
from google.protobuf import text_format 

with tf.Session() as sess: 
    saver = tf.train.import_meta_graph('./checkpoints/model-49-295.meta', clear_devices=True) 
    saver.restore(sess, './checkpoints/model-49-295') 

    graph_def = sess.graph.as_graph_def() 

    output_graph_def = graph_util.convert_variables_to_constants(sess, graph_def, ['predictions']) 

    with tf.gfile.GFile('./graph.pb', "wb") as f: 
     f.write(output_graph_def.SerializeToString()) 
0

從調用棧,它看起來像GraphDef .pb文件的解析是失敗。錯誤信息不是很有用或信息豐富,但不幸的是!

我的猜測是你需要傳入--input_binary=true作爲參數,因爲默認情況下它假設輸入圖形存儲爲文本原型。

+0

就是這樣 - 沒有graphdef文件,我使用tf.train.Saver保存圖的輸出,它是一個metagraph(.meta)文件和相關的重量(.data和.index)。我懷疑freeze_graph.py只是不支持凍結metagraph,因爲我沒有看到任何代碼在freeze_graph.py加載metagraph。這看起來有些疏忽,因爲它使得使用freeze_graph.py來凍結保存者產生的圖形變得煩人。 – user2640224