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()
3 Réponses :
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 )
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.
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