可以将检查点模型转换为冻结图(.ckpt文件到.pb文件) . 但是,是否有一种将pb文件再次转换为检查点文件的反向方法?
我想它需要将常量转换回变量 - 有没有办法将正确的常量识别为变量并将它们恢复为检查点模型?
目前支持将变量转换为常量:https://www.tensorflow.org/api_docs/python/tf/graph_util/convert_variables_to_constants
但不是相反 .
这里提出了类似的问题:Tensorflow: Convert constant tensor from pre-trained Vgg model to variable
但该解决方案依赖于使用ckpt模型来恢复权重变量 . 有没有办法从PB文件而不是检查点文件恢复权重变量?这对于重量修剪可能很有用 .
1 回答
如果您有构建网络的源代码,则可以相对简单地完成,因为冻结图方法没有改变Convolutions / Fully connected的名称,因此您基本上可以调查图形并将常量操作与其变量相匹配匹配并只使用常量值加载变量 .
如果你没有构建网络的代码,它仍然可以完成,但它并不是直接的 .
例如,您可以搜索图中的所有节点并查找类型为Constant的操作,然后在找到类型为Constant的所有操作后,您可以看到操作是否连接到Convolution / Fully connected,例如..(或者您可以只是转换它依赖于你的所有常量) .
在找出要转换为变量的常量后,可以将变量添加到保存常量值的图形中,然后使用Tensorflow graph editor重新连接const操作与变量之间的连接(使用reroute_ts方法) .
完成后你可以保存你的图形,当你再次加载它时你会得到你的变量(但要注意常量仍然会保留在你的图形中,但是它们可以通过graph-transform工具进行优化)