由于您已经在检查点中保存了经过训练的图,因此 从理论上讲
,最简单的解决方案是通过导出推理图
optimize_for_inference。
该工具既适用于已经冻结的图,也适用于您仍然定义了变量的图(根据您的情况)。假设您选择冻结图方式,第一步是通过以下方式将图的变量转换为常量:
python freeze_graph.py --input_graph=temp/path/graph.pbtxt --input_checkpoint=temp/path/your_model_name.ckpt --output_graph=frozen_model.pb --output_node_names=name_of_the_output_tensor_you_want_to_use
这将生成一个名为的新二进制文件
frozen_model.pb,该文件的
Variable*** 作已替换为
Constops,并带有从检查点文件加载的值。
然后,您需要使用以下命令生成推理图:
python optimize_for_inference.py --input=frozen_model.pb --output=inference.pb --frozen_graph=True --input_names=IteratorGetNext--output_names=name_of_the_output_tensor_you_want_to_use
这将用
IteratorGetNext浮动占位符替换节点。您可能想要选择另一个节点,在这种情况下,只需更改名称即可。您还可以通过该
--placeholder_type_enum选项更改生成的占位符的类型。在这种情况下,您需要提供一个与
DataTypeenum中所需的数据类型匹配的整数值。
注意:
我之所以说“理论上”,是因为实际上我从测试中检查了生成的初始图,我似乎发现其中仍然存在一些奇怪的 *** 作,这些 *** 作实际上并不是推理所必需的。您可能需要通过nvidia的Graph
Surgeon或TF的图形转换工具进一步处理图形
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)