TensorFlow Lite: toco_convert для входного тензора произвольного размера - PullRequest
0 голосов
/ 25 апреля 2018

Глядя на преобразование моей модели TensorFlow в формат Flatbuf (.tflite).

Однако моя модель позволяет вводить произвольный размер, то есть вы можете классифицировать один элемент или N элементов одновременно.Когда я пытаюсь выполнить преобразование, он выдает ошибку, поскольку одно из моих устройств ввода / вывода имеет тип NoneType.

Подумайте о чем-то вроде учебника TensorFlow MNIST , где в вычисленииграфик, наш ввод x имеет форму [None, 784].

Из руководства разработчика tflite вы можете преобразовать свою модель в FlatBuf следующим образом:

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("converteds_model.tflite", "wb").write(tflite_model)

Однако это не работает для меня.MWE может быть:

import tensorflow as tf

img = tf.placeholder(name="inputs", dtype=tf.float32, shape=(None, 784))
out = tf.identity(inputs, name="out")


with tf.Session() as sess:
  tflite_model = tf.contrib.lite.toco_convert(sess.graph_def, [img], [out])
  open("converteds_model.tflite", "wb").write(tflite_model)

Ошибка: TypeError: __int__ returned non-int (type NoneType)

Глядя на tf.contrib.lite.toco_convert документы, у нас есть "input_tensors: Списоквходные тензоры. Тип и форма вычисляются с использованием foo.get_shape () и foo.dtype. ".Так что вот где, скорее всего, наш провал.Но я не уверен, есть ли аргумент, который я должен использовать, или что-то, что позволило бы мне экспортировать такую ​​модель

1 Ответ

0 голосов
/ 24 августа 2018

Эта проблема уже решена в новейшем коде конвертера.Вы можете передать входной тензор, где 1-е измерение равно None (1-е измерение обычно является пакетным), и преобразователь будет обрабатывать его правильно.

Кстати, прежде чем вызывать переводчика, вы можете позвонить interpreter.resize_input_tensor, чтобы изменить размер пакета.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...