我微调了im2txt模型并使用im2txt github中的过程获取了ckpt.data,ckpt.index和ckpt.meta文件以及graph.pbtxt文件。 该模型似乎运行良好,因为它产生几乎正确的标题。
现在我想冻结这个模型在android上使用它。
我在https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/tools/freeze_graph.py中使用了freeze_graph.py脚本。
python freeze_graph.py --input_graph=/path/to/graph.pbtxt --input_binary=false --input_checkpoint=/path/to/model.ckpt --output_graph=/path/to/output_graph.pb --output_node_names="softmax,lstm/initial_state,lstm/state"
我有以下错误:AssertionError: softmax is not in graph
。
https://github.com/tensorflow/models/issues/816中的讨论是关于同样的问题,但它对我没有多大帮助。 的确,当我查看微调后生成的graph.pbtxt时,我找不到softmax,lstm / initial_state和lstm / state。 但是在im2txt的show_and_tell_model.py文件中,张量的名称似乎是“softmax”,“lstm / initial_state”和“lstm / state”。所以,我不知道发生了什么。
我希望我对目前为止所尝试的内容足够清楚。提前感谢您的帮助。
此致 斯蒂芬
答案 0 :(得分:2)
确定,
我想我终于得到了解决方案。如果它对其他人有用,那么它是:
训练结束后,您将获得ckpt.data,ckpt.index和ckpt.meta文件以及graph.pbtxt文件。
然后必须以“推理”模式加载此模型(请参阅im2txt中的InferenceWrapper)。它使用正确的名称'softmax','lstm / initial_state'和'lstm / state'构建一个图形。您保存此图形(使用相同的ckpt格式),然后您可以应用freeze_graph脚本来获取冻结模型。
此致 斯蒂芬
答案 1 :(得分:2)
找到并验证答案:在inference_wrapper.base.py中,只需在saver.save(sess, "model/ckpt4")
saver.restore(sess, checkpoint_path)
之后添加def _restore_fn(sess):
之类的内容即可。然后重建和run_inference,你将得到一个可以被冻结,转换和可选地重新映射的模型,供iOS和Android应用程序加载。
有关冻结,转换和转换为memmapped的详细命令,请参阅我在Error using Model after using optimize_for_inference.py on frozen graph的回答。