使用Tensorflow中的冻结图后的近空冻结图

使用Tensorflow中的冻结图后的近空冻结图,tensorflow,protocol-buffers,Tensorflow,Protocol Buffers,我目前正在尝试从GraphDef中删除训练操作,以便在Android上运行它。但是,要做到这一点,我需要首先使用Tensorflow的freeze\u graph.py脚本冻结图形 但是,在尝试运行bash脚本时,我遇到了一个错误:UnicodeDecodeError:“utf8”编解码器无法解码位置331:无效起始字节中的字节0x96: #!/bin/bash bazel-bin/tensorflow/python/tools/freeze_graph \ --input_graph=/Use

我目前正在尝试从GraphDef中删除训练操作,以便在Android上运行它。但是,要做到这一点,我需要首先使用Tensorflow的
freeze\u graph.py
脚本冻结图形

但是,在尝试运行bash脚本时,我遇到了一个错误:UnicodeDecodeError:“utf8”编解码器无法解码位置331:无效起始字节中的字节0x96:

#!/bin/bash
bazel-bin/tensorflow/python/tools/freeze_graph \
--input_graph=/Users/leslie/Downloads/trained_model.pb \
--input_checkpoint=/Users/leslie/Downloads/Y6_1478303913_Leslie \
--output_graph=/tmp/frozen_graph.pb --output_node_names=Y_GroundTruth
这可能是我创建图表和检查点时的问题吗?我通过
tf.train.write\u图(sess.graph\u def,location,'trained\u model.pb',as\u text=False)创建了输入图
,检查点通过
saver.save(sess,chkpointpath)
创建。StackOverflow的回答说python脚本具有非ascii字符,我应该简单地将它们从python脚本中删除,但我认为这不是一个好主意

完全回溯:

Traceback (most recent call last):
  File "/Users/leslie/tensorflow-master/bazel-bin/tensorflow/python/tools/freeze_graph.runfiles/org_tensorflow/tensorflow /python/tools/freeze_graph.py", line 135, in <module>
tf.app.run()
  File "/Users/leslie/tensorflow-master/bazel-bin/tensorflow/python/tools/freeze_graph.runfiles/org_tensorflow/tensorflow/python/platform/app.py", line 43, in run
sys.exit(main(sys.argv[:1] + flags_passthrough))
  File "/Users/leslie/tensorflow-master/bazel-bin/tensorflow/python/tools/freeze_graph.runfiles/org_tensorflow/tensorflow/python/tools/freeze_graph.py", line 132, in main
FLAGS.output_graph, FLAGS.clear_devices, FLAGS.initializer_nodes)
  File "/Users/leslie/tensorflow-master/bazel-bin/tensorflow/python/tools/freeze_graph.runfiles/org_tensorflow/tensorflow/python/tools/freeze_graph.py", line 98, in freeze_graph
text_format.Merge(f.read().decode("utf-8"), input_graph_def)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/encodings/utf_8.py", line 16, in decode
return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0x96 in position 331: invalid start byte
完整的“冻结图.pb”内容

PB文件生成代码片段:

#Start all code before training code
    # Tensor placeholders and variables
    ...
    # Network weights and biases
    ...
    # Network layer definitions
    ...
    # Definition of cost function 
    ...
    # Create optimizer
    ...
    # Session operations
    ...
#END all code before training code

saver = tf.train.Saver()
with tf.Session() as sess:
    saver.restore(sess, model_save_path)
    sess.run(tf.initialize_all_variables())
    tf.train.write_graph(sess.graph_def, outputlocation, 'trained_model.pb', as_text=False)

非utf8内容从何而来?我假设它来自我的
input\u图
,因为当我将.PB文件生成为文本而不是二进制文件时,我没有收到错误。但是,当我试图用text.PB文件运行
freeze_graph
时,它只包含3行。这似乎与一个应该是字符串(例如变量名)的字段有关,但却包含二进制数据。你做过类似的事情吗?只是想说protobuf文件是如何生成的(protobuf文件中的变量没有正确启动)。修复不正确的变量声明修复了我的问题。
6

Y_GroundTruth��Placeholder*�
�dtype��0�*�
�shape��:
#Start all code before training code
    # Tensor placeholders and variables
    ...
    # Network weights and biases
    ...
    # Network layer definitions
    ...
    # Definition of cost function 
    ...
    # Create optimizer
    ...
    # Session operations
    ...
#END all code before training code

saver = tf.train.Saver()
with tf.Session() as sess:
    saver.restore(sess, model_save_path)
    sess.run(tf.initialize_all_variables())
    tf.train.write_graph(sess.graph_def, outputlocation, 'trained_model.pb', as_text=False)