我有一个训练后保存为 pb 文件的模型,我想使用 tensorflow mobile,使用 TFLITE 文件很重要。问题是我在谷歌搜索转换器后发现的大多数示例都是终端或 cmd 上的命令。您能否与我分享一个使用 python 代码转换为 tflite 文件的示例?
原文由 Nael Marwan 发布,翻译遵循 CC BY-SA 4.0 许可协议
我有一个训练后保存为 pb 文件的模型,我想使用 tensorflow mobile,使用 TFLITE 文件很重要。问题是我在谷歌搜索转换器后发现的大多数示例都是终端或 cmd 上的命令。您能否与我分享一个使用 python 代码转换为 tflite 文件的示例?
原文由 Nael Marwan 发布,翻译遵循 CC BY-SA 4.0 许可协议
可以直接在python中直接转成tflite。您必须 冻结图形 并使用 toco_convert 。它需要在调用 API 之前确定输入和输出的名称和形状,就像在命令行情况下一样。
从 文档 中复制,其中“冻结”(无变量)图被定义为代码的一部分:
import tensorflow as tf
img = tf.placeholder(name="img", dtype=tf.float32, shape=(1, 64, 64, 3))
val = img + tf.constant([1., 2., 3.]) + tf.constant([1., 4., 4.])
out = tf.identity(val, name="out")
with tf.Session() as sess:
tflite_model = tf.contrib.lite.toco_convert(sess.graph_def, [img], [out])
open("test.tflite", "wb").write(tflite_model)
在上面的示例中,没有冻结图步骤,因为没有变量。如果您有变量并在没有冻结图形的情况下运行 toco,即首先将这些变量转换为常量,那么 toco 会报错!
那么你不需要会话。你可以直接调用 toco API:
path_to_frozen_graphdef_pb = '...'
input_tensors = [...]
output_tensors = [...]
frozen_graph_def = tf.GraphDef()
with open(path_to_frozen_graphdef_pb, 'rb') as f:
frozen_graph_def.ParseFromString(f.read())
tflite_model = tf.contrib.lite.toco_convert(frozen_graph_def, input_tensors, output_tensors)
然后你必须加载会话并在调用 toco 之前先冻结图形:
path_to_graphdef_pb = '...'
g = tf.GraphDef()
with open(path_to_graphdef_pb, 'rb') as f:
g.ParseFromString(f.read())
output_node_names = ["..."]
input_tensors = [..]
output_tensors = [...]
with tf.Session(graph=g) as sess:
frozen_graph_def = tf.graph_util.convert_variables_to_constants(
sess, sess.graph_def, output_node_names)
# Note here we are passing frozen_graph_def obtained in the previous step to toco.
tflite_model = tf.contrib.lite.toco_convert(frozen_graph_def, input_tensors, output_tensors)
如果您没有定义图表,就会发生这种情况,例如。你从某个地方下载了图表或者使用了像 tf.estimators 这样的高级 API 来隐藏图表。在这种情况下,您需要在调用 toco 之前加载图形并四处查看以找出输入和输出。请参阅我对 这个 SO 问题 的回答。
原文由 Pannag Sanketi 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答5.2k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
2 回答879 阅读✓ 已解决
1 回答1.8k 阅读✓ 已解决
按照这个 TF 示例,您可以在运行 retrain.py 脚本之前传递“–Saved_model_dir”参数以将 saved_model.pb 和变量文件夹导出到某个目录(不存在的目录):
为了将您的模型转换为 tflite,您需要使用以下行:
注意:需要导入convert_saved_model:
请记住,您可以通过两种方式转换为 tflite:
但 最简单的方法是导出带有变量的 saved_model.pb,以防你想避免使用像 Bazel 这样的构建工具。