3
votes

Tensorflow - Erreur de conversion du modèle H5 en Tflite

J'ai effectué un transfert d'apprentissage à l'aide d'un modèle InceptionV3 pré-entraîné et j'ai enregistré le fichier du modèle h5. Après cela, je suis capable de faire des prédictions. Maintenant, je veux convertir le modèle h5 en fichier tflite, en utilisant la méthode TFLiteConverter.convert (), comme ceci:

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]'

mais j'obtiens cette erreur:

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


2 commentaires

avant d'enregistrer votre modèle de keras, pouvez-vous vous assurer que les in_tensors ont la bonne forme ( [None, x, y, 3] )?


As-tu résolu ton problème? Je suis confronté exactement au même problème


3 Réponses :


2
votes

Seule la taille du lot (index 0) peut être Aucune lors de la conversion du modèle de TensorFlow vers TensorFlow Lite. Vous devriez pouvoir utiliser l'argument input_shapes lors de l'appel de from_keras_model_file pour que la forme du tableau d'entrée soit valide. Pour un modèle InceptionV3, l'argument input_shapes est souvent {'Mul': [1,299,299,3]} .

La documentation de TFLiteConverter.from_keras_model_file code> est disponible ici . Les paramètres acceptés sont les suivants (copiés de la documentation):

from_keras_model_file(
    cls,
    model_file,
    input_arrays=None,
    input_shapes=None,
    output_arrays=None
)


0 commentaires

0
votes
  1. charger le keras.model.h5
  2. définissez la forme d'entrée, évitez simplement [None, None, None, 3]
  3. enregistrez-le en tant que nouveau modèle.
  4. Convertissez-le simplement en utilisant le code que vous publiez dans la question.

0 commentaires

0
votes

Le batch_size est la seule dimension qui peut être donnée comme aucune.

La première dimension de input_shape est le batch_size, les deuxième et troisième dimensions indiquent la taille d'entrée de l'image tandis que la dernière indique le nombre de canaux (RVB).

Pour éviter l'erreur que vous obtenez, spécifiez les dimensions au préalable.

Ceci peut être réalisé en utilisant toco (un outil qui convertit directement le modèle Keras acquis en .tflite sans le convertir d'abord en modèle .pb puis en modèle .tflite). En utilisant l'argument input_shape dans toco, vous pouvez spécifier les dimensions de input_shape de votre modèle keras.

Installez toco pour python, puis exécutez la commande suivante,

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

Ici, la dimension batch_size peut différer selon votre modèle. En ce qui concerne les dimensions de la taille d'entrée, 299x299 est la taille d'entrée par défaut pour les modèles InceptionV3.


0 commentaires