Вы можете конвертировать в tflite напрямую в python.Вы должны заморозить график и использовать 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 будет жаловаться!
Если вы заморозили graphdef и знаете входные и выходные данные
Тогда вы не сможетене нужна сессияВы можете напрямую вызвать 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)
Если у вас есть не замороженный graphdef и вы знаете входы и выходы
Затем вы должны загрузить сессию и сначала заморозить график перед вызовом 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)
Если вы не знаете входы / выходы графика
Это может произойти, если вы не определили график, напр.Вы откуда-то скачали график или использовали API высокого уровня, например tf.estimators, которые скрывают график от вас.В этом случае вам нужно загрузить график и покопаться, чтобы выяснить входы и выходы перед вызовом toco.Смотрите мой ответ на этот ТАК вопрос .