我对tensorflow很新,我正在尝试将我的.pb(proto buffer)文件转换为lite版本。但我面临一些问题。 导入时间,系统,警告,glob,随机,cv2,base64,json,csv,os
import numpy as np
import tensorflow as tf
from collections import OrderedDict
def load_graph(frozen_graph_filename):
with tf.gfile.GFile(frozen_graph_filename, "rb") as f:
graph_def = tf.GraphDef()
graph_def.ParseFromString(f.read())
with tf.Graph().as_default() as graph:
tf.import_graph_def(
graph_def,
input_map=None,
return_elements=None,
name="prefix",
op_dict=None,
producer_op_list=None
)
return graph
此函数为我加载图形,现在我想将此图形转换为tflite,我使用了以下脚本。
CD_graph = load_graph("CD_Check_k.pb")
CD_input = CD_graph.get_tensor_by_name('prefix/input_node:0')
CD_output = CD_graph.get_tensor_by_name('prefix/output_node:0')
x_single = tf.placeholder(tf.float32, [1, 256 , 256, 3],
name="input_node")
with tf.Session() as sess:
tflite_model = tf.contrib.lite.toco_convert(CD_graph, input_tensors=[x_single ], output_tensors=[CD_output])
with open('./mnist.tflite', "wb") as f:
f.write(tflite_model)
错误消息:
'Graph' object has no attribute 'SerializeToString'
答案 0 :(得分:1)
您可以使用TocoConverter.from_frozen_graph()
API简化代码,因此您不再需要读取冻结的图形。 documentation的示例复制如下。
以下示例显示了将GraphDef存储在文件中时如何将TensorFlow GraphDef转换为TensorFlow Lite FlatBuffer。 .pb
和.pbtxt
文件都被接受。
该示例使用Mobilenet_1.0_224。该功能仅支持通过freeze_graph.py
冻结的GraphDef。
import tensorflow as tf
graph_def_file = "/path/to/Downloads/mobilenet_v1_1.0_224/frozen_graph.pb"
input_arrays = ["input"]
output_arrays = ["MobilenetV1/Predictions/Softmax"]
converter = tf.contrib.lite.TocoConverter.from_frozen_graph(
graph_def_file, input_arrays, output_arrays)
tflite_model = converter.convert()
open("converted_model.tflite", "wb").write(tflite_model)