Tensorflow 如何冻结IM2Text模型?

Tensorflow 如何冻结IM2Text模型?,tensorflow,Tensorflow,我微调了IM2Text模型,并使用IM2Text github中的过程获得了ckpt.data、ckpt.index和ckpt.meta文件以及一个graph.pbtxt文件。 该模型似乎运行良好,因为它产生了几乎正确的标题 现在我想冻结这个模型,在android上使用它 我在中使用了freeze_graph.py脚本 我有以下错误:AssertionError:softmax不在图形中 中的讨论是关于同样的问题,但对我帮助不大。 实际上,当我查看微调后生成的graph.pbtxt时,我找不到s

我微调了IM2Text模型,并使用IM2Text github中的过程获得了ckpt.data、ckpt.index和ckpt.meta文件以及一个graph.pbtxt文件。 该模型似乎运行良好,因为它产生了几乎正确的标题

现在我想冻结这个模型,在android上使用它

我在中使用了freeze_graph.py脚本

我有以下错误:
AssertionError:softmax不在图形中

中的讨论是关于同样的问题,但对我帮助不大。 实际上,当我查看微调后生成的graph.pbtxt时,我找不到softmax、lstm/initial_state和lstm/state。 但在im2text的show_和tell_model.py文件中,张量的名称似乎是“softmax”、“lstm/initial_state”和“lstm/state”。所以,我不知道发生了什么

我希望到目前为止,我对自己的尝试已经足够清楚了。提前感谢您的帮助

问候,, 斯蒂芬

好的

我想我终于找到了解决办法。如果它对其他人有用,则如下所示:

培训后,您将获得ckpt.data、ckpt.index和ckpt.meta文件以及一个graph.pbtxt文件

然后必须以“推断”模式加载此模型(请参阅IM2Text中的推断包装器)。它构建了一个具有正确名称“softmax”、“lstm/initial_state”和“lstm/state”的图形。保存此图(使用相同的ckpt格式),然后可以应用冻结图脚本来获得冻结的模型

问候,, 斯蒂芬

好的

我想我终于找到了解决办法。如果它对其他人有用,则如下所示:

培训后,您将获得ckpt.data、ckpt.index和ckpt.meta文件以及一个graph.pbtxt文件

然后必须以“推断”模式加载此模型(请参阅IM2Text中的推断包装器)。它构建了一个具有正确名称“softmax”、“lstm/initial_state”和“lstm/state”的图形。保存此图(使用相同的ckpt格式),然后可以应用冻结图脚本来获得冻结的模型

问候,,
Stephane

找到并验证了答案:在expression\u wrapper.base.py中,只需在
saver.reserve(sess,“model/ckpt4”)
之后添加类似于
saver.restore(sess,checkpoint\u path)
in
def\u restore\u fn(sess):
。然后重新构建并运行_推断,您将得到一个可以冻结、转换和可选的memmapped的模型,供iOS和Android应用程序加载


有关冻结、转换和转换为memmapped的详细命令,请参见我的答案。

找到并验证了答案:在推断中,只需在
def\u restore\u fn(sess)中的
saver.save(sess,“model/ckpt4”)
之后添加
saver.restore(sess,checkpoint\u path)
。然后重新构建并运行_推断,您将得到一个可以冻结、转换和可选的memmapped的模型,供iOS和Android应用程序加载


有关冻结、转换和转换为memmapped的详细命令,请参见我的回答。

我在推理步骤和推理包装器.py的构建模型以及推理包装器.py的还原fn中添加了saver=tf.train.saver()saver.save(sess,/tmp/im2text.ckpt)。然后我在python-tensorflow/python/tools/freeze_-graph.py--input_-graph=graph.pbtxt--input_-checkpoint=/tmp/im2text.ckpt--output_-graph=/tmp/im2text_-freeze_-graph.pb--output_-node_-names=“softmax,lstm/initial_-state,lstm/state”中使用生成的检查点文件,但总是得到错误断言错误:softmax不在图中。你能公布你用来解决问题的确切地点、文件和代码吗?谢谢我在推理步骤中添加了saver=tf.train.saver()saver.save(sess,“/tmp/im2text.ckpt”),并构建了推理包装器.py的模型,以及推理包装器基.py的恢复。然后我在python-tensorflow/python/tools/freeze_-graph.py--input_-graph=graph.pbtxt--input_-checkpoint=/tmp/im2text.ckpt--output_-graph=/tmp/im2text_-freeze_-graph.pb--output_-node_-names=“softmax,lstm/initial_-state,lstm/state”中使用生成的检查点文件,但总是得到错误断言错误:softmax不在图中。你能公布你用来解决问题的确切地点、文件和代码吗?谢谢嗨,对不起,我的回答不够清楚。很高兴你找到了冻结模型的方法。我仍然无法在Android上使用我的模型。我使用了您答案中的命令,在使用TensorFlowEnferenceInterface加载模型时出现以下错误:“不是有效的TensorFlow图形序列化:对于输入形状:[1,1299299,3],[2],“ResizeBilinear”(op:“ResizeBilinear”),形状必须为第4级,但为“ResizeBiliner”(ResizeBiliner)的第5级。您知道哪里出了问题吗?尊敬的Stephane,您是否使用了通过以下方式生成的转换文件:bazel bin/tensorflow/tools/graph\u transforms/transform\u graph \--in\u graph=/tmp/ckpt4\u freezed.pb \--out\u graph=/tmp/ckpt4\u freezed\u transformed.pb \--inputs=“convert\u image/Cast,input\u feed,lstm/state\u feed”\--outputs=“softmax,lstm/initial\u state,lstm/state”\--transforms='strip\u unused\u nodes(type=float,shape=“1299299,3”)fold\u常量(ignore\u errors=true)fold\u batch\u norms fold\u old\u batch\u norms'是的,我使用了这个。也许是我在转换之前使用的冻结模型有问题?在Java代码中,我尝试将“input_feed”和“convert_image/Cast”作为输入节点,但它们都不起作用。是否有tensorflow的特定版本可供使用(例如>1.4)?仍在努力让它发挥作用。无论如何,感谢您抽出时间回答并尽力帮助!嗨,对不起,我的回答不够清楚。很高兴你找到了冻结模型的方法。我仍然无法在Android上使用我的模型。我使用了您答案中的命令,在使用TensorFlowEnferenceInterface加载模型时出现以下错误:“不是有效的TensorFlow图形序列化:对于输入形状:[1,1299299,3],[2],“ResizeBilinear”(op:“ResizeBilinear”),形状必须为第4级,但为“ResizeBiliner”(ResizeBiliner)的第5级。您知道哪里出了问题吗?你好Stephane你用过变压器吗
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"