Python 将Tensorflow cifar10图形保存到protobuf文件

Python 将Tensorflow cifar10图形保存到protobuf文件,python,tensorflow,Python,Tensorflow,我已经看过了,它使用了cifar10数据集。现在,我一直试图修改给定的CIFAR10代码(这有点过时),输出一个原始BUBF文件,我将能够在一个小型的C++图像识别程序中使用——类似于教程的格式。总体目标是我能够从自己的数据集中创建和保存一个图形 然而,我没有成功。我的大多数尝试都是基于tensorflow freeze_graph.py,这是我找到保存图形的唯一方法。但是,我没有成功地实现这一点,并且遇到了无数错误,例如: tensorflow.python.framework.errors_

我已经看过了,它使用了cifar10数据集。现在,我一直试图修改给定的CIFAR10代码(这有点过时),输出一个原始BUBF文件,我将能够在一个小型的C++图像识别程序中使用——类似于教程的格式。总体目标是我能够从自己的数据集中创建和保存一个图形

然而,我没有成功。我的大多数尝试都是基于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文件时,我在以下方面取得了一些成功(阅读:它不会崩溃/给出错误):


然而,当在我的识别代码中使用时,生成的pb文件不会生成任何张量。如果这是生成一个有效的原BUBF文件?

我认为SaveDead加载程序已经准备好了C++,这是新的。way@YaroslavBulatov好的,我会把它作为另一种选择。不管怎样,我都想让它工作——如果只是为了我自己的平静。你能展示一下你是如何生成输入文件来冻结_graph.py的吗?你提出了什么论点?对于最后一次更新:看起来您正在正确地将图形序列化为一个proto,但是您如何尝试使用graphdef proto呢?请提供更多详细信息@如果你看一下Tensorflow CNN教程(使用cifar10),那基本上就是我目前正在使用的代码。检查点等由本代码中受监控的培训课程生成。我正在以与Tensorflow图像识别教程(使用Inception-v3)相同的方式加载图形。我认为可能输入/输出层在proto中没有正确定义,但我不完全确定它们应该是什么,或者如何确保它们是正确的。
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))