将权重添加到TensorFlow导出的.pb文件中

时间:2016-11-03 18:45:58

标签: android python neural-network tensorflow

我的项目使用Python在TensorFlow上训练MLP,然后以这种方式导出图形和权重:

tf.train.write_graph(sess.graph_def, "./", "inp.txt", True) 
saver.save(sess, 'variables/model.ckpt', global_step=1)

现在,尽管使用这两个文件将其导回到Python是可以的,但似乎不可能将它用于Android或C ++,因为它无法输入检查点.ckpt。

目前,我正在使用谷歌提供的脚本freeze_graph.py将两个文件合并为一个:

bazel-bin/tensorflow/python/tools/freeze_graph --input_graph=inp.txt --input_checkpoint=variables/model.ckpt-1 --output_graph=newoutput.pb --output_node_names=output

我的问题是,有没有办法使用另一个函数而不是tf.train.write_graph来导出它并包含权重?

3 个答案:

答案 0 :(得分:1)

此刻,我很遗憾地告诉你没有办法。

正如之前在Github上所讨论的那样(have a look),TensorFlow团队目前没有解决这个问题。

暂时不能说什么。

pltrdy

答案 1 :(得分:1)

不幸的是,目前无法做到这一点。

直接做到这一点真是太好了。我的意思是,用一个单一的方式做一些事情会很好,而不是必须生成两个文件,然后运行另一个脚本来转换它们。

对于在笔记本电脑上使用混合显卡的人来说,这是特别糟糕的。

无论如何,正如TensorFlow小组所说:

  

我们没有计划直接支持输出.pb文件。如果你   担心有太多的检查点文件占用空间,你可以   将max_to_keep限制为1。

答案 2 :(得分:0)

目前,freezegraph是解决此问题的唯一方法。

对我而言,它不能很好地工作,因为我必须每天在许多计算机上安装它,因为人们不断搞乱,冻结图迫使我从源代码安装它。

他们必须创造另一种方式来做到这一点。一种内置的方式。特别是如果他们想要我们用于Android。