python - Tensorflow:如何将冻结的模型转换为保存的模型
问题描述
我正在尝试从这里转换这个 Frozen 模型(扩展名 .pb):
https://www.dropbox.com/s/bb7n78hq5owyjr0/tf_model_pb.zip?dl=0
到已保存的模型。
可能吗?你能分享将这个 pb 文件转换为保存模型的确切代码吗?
解决方案
首先回答,这样做是可能的,但很麻烦,因为在将 ckpt 冻结为 pb 模型期间,SavedModel 所需的所有变量都会转换为常量或其他类型。在 tf 中,将 'Constant' 恢复为 'Variable' 有点复杂,例如:
# node is a constant
node = tf.Constant([1, 2])
output_node = tf.NodeDef()
output_node.op = "Variable"
output_node.name = node.name
dtype = node.attr["dtype"].type
data = node.attr["value"].tensor
output_node.attr["dtype"].type = dtype
output_node.attr["value"].CopyFrom(tf.AttrValue(tensor=data))
有关将常量节点转换为其他类型的详细信息,请参阅此答案。
因此,从 ckpt 文件中冻结 SavedModel是最简单、最直接的方法。
推荐阅读
- bounds - 设置 NSTextAttachment 边界在 iOS 15 上不起作用
- r - 通过识别函数的瓶颈来改进速度函数
- flutter - TextField 和 BLoC - 值未更新或键盘已关闭
- python - comparing more than two lists
- java - 我的远程 RMI 呼叫缺少什么?
- flutter - 内部列表视图达到顶部时如何最小化 DraggableScrollableSheet?
- c++ - 在 c 中调用 c++ 函数会导致致命错误
- java - 如何测试存储库类,其中包含另一个已单独测试的存储库类?
- c# - 如何为 IXmlSerializable WriteXml 省略或配置包装器元素
- java - 如何在Java的链表中迭代地添加新节点?