我一直在浏览使用cifar10数据集的Tensorflow CNN tutorial。现在,我一直在尝试修改给定的cifar10代码(这有点过时)来输出一个protobuf文件,我将能够在一个小的c ++图像识别程序中使用 - 类似于{的格式{3}}教程。总体目标是我将能够从我自己的数据集中创建和保存图表。
但是,我没有成功。我的大部分尝试都是基于tensorflow freeze_graph.py,这是我能够找到的唯一保存图形的方法。但是,我没有成功实现这一点,并遇到了无数的错误,例如:
tensorflow.python.framework.errors_impl.DataLossError: Unable to open table file
/tmp/cifar10_train/checkpoint: Data loss: not an sstable (bad magic number): perhaps
your file is in a different file format and you need to use a different restore
operator?
(当使用cifar10_train.py生成的graph.pbtxt作为输入图调用freeze_graph.py时,我不确定它是否有效作为输入)
还有:
File "....../freeze_graph.py", line 112, in freeze_graph
saver_def.ParseFromString(f.read())
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/lib/io/file_io.py", line 112, in read
return pywrap_tensorflow.ReadFromStream(self._read_buf, length, status)
File "/usr/lib/python2.7/contextlib.py", line 24, in __exit__
self.gen.next()
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/errors_impl.py", line 469, in raise_exception_on_not_ok_status
pywrap_tensorflow.TF_GetCode(status))
tensorflow.python.framework.errors_impl.FailedPreconditionError: dataset/train
(当试图保存我自己的检查点并输入图形作为freeze_graph.py的输入时)。
知道我可能做错了吗?
我是在正确的轨道上,还是有更简单的方法来做到这一点?
更新:
我在编写protobuf文件时已经取得了一些成功(阅读:它没有崩溃/给出错误):
output_node_names = 'ExponentialMovingAverage'
output_graph = './out_graph.pb'
graph = sess.graph
input_graph_def = graph.as_graph_def()
output_graph_def = graph_util.convert_variables_to_constants(
sess,
input_graph_def,
output_node_names.split(",")
)
with tf.gfile.GFile(output_graph, "wb") as f:
f.write(output_graph_def.SerializeToString())
print("%d ops in the final graph." % len(output_graph_def.node))
然而,在我的识别代码中使用时,生成的pb文件不会产生任何张量。这应该产生有效的protobuf文件吗?