Tensorflow - ошибка преобразования модели h5 в tflite

Я сделал учебный перевод с использованием предварительно обученной модели InceptionV3 и сохранил файл модели h5. После этого я могу делать прогнозы. Теперь я хочу преобразовать модель h5 в файл tflite, используя метод TFLiteConverter.convert(), например так:

converter = lite.TFLiteConverter.from_keras_model_file('keras.model.h5')
tflite_model = converter.convert()

но я получаю эту ошибку:

File "from_saved_model.py", line 28, in <module>
    tflite_model = converter.convert()
  File "C:\Anaconda3\lib\site-packages\tensorflow\contrib\lite\python\lite.py", line 409, in convert
    "invalid shape '{1}'.".format(_tensor_name(tensor), shape))
ValueError: None is only supported in the 1st dimension. Tensor 'input_1' has invalid shape '[None, None, None, 3]'

Я использую Anaconda Python 3.6.8 в Windows 10 64 бит. Заранее спасибо за вашу помощь!

1 ответ

Только размер партии (индекс 0) может быть None при преобразовании модели из TensorFlow в TensorFlow Lite. Вы должны быть в состоянии использовать input_shapes аргумент при звонке from_keras_model_file чтобы получить форму входного массива, чтобы быть действительным. Для модели InceptionV3 input_shapes аргумент часто {'Mul' : [1,299,299,3]},

Документация для TFLiteConverter.from_keras_model_file доступно здесь. Принятые параметры следующие (скопировано из документации):

from_keras_model_file(
    cls,
    model_file,
    input_arrays=None,
    input_shapes=None,
    output_arrays=None
)
  1. загрузить keras.model.h5
  2. установите input_shape, просто избегайте [None, None, None, 3]
  3. сохранить его как новую модель.
  4. Преобразуйте его, используя код, который вы отправили в вопросе.

Batch_size - это единственное измерение, которое можно задать как none.

Первое измерение в input_shape - это batch_size, второе и третье измерения указывают размер ввода изображения, а последнее измерение указывает количество каналов (RGB).

Чтобы избежать полученной ошибки, заранее укажите размеры.

Этого можно достичь с помощью toco (инструмента, который напрямую преобразует полученную модель keras в.tflite, не конвертируя ее сначала в модель.pb, а затем в модель.tflite). Используя аргумент input_shape в toco, вы можете указать размеры input_shape вашей модели keras.

Установите toco для python, а затем выполните следующую команду,

toco --output_file = output_model.tflite --keras_model_file = keras.model.h5 --input_arrays input_1 --input_shape 1,299,299,3

Здесь размер batch_size может отличаться в зависимости от вашей модели. Что касается размеров ввода, то 299x299 - это размер ввода по умолчанию для моделей InceptionV3.

Другие вопросы по тегам