Assistez au symposium Women in ML le 7 décembre Inscrivez-vous maintenant

Conversion de modèle

Restez organisé à l'aide des collections Enregistrez et classez les contenus selon vos préférences.

TensorFlow.js est livré avec une variété de modèles pré-formés qui sont prêts à être utilisés dans le navigateur - ils peuvent être trouvés dans notre référentiel de modèles . Cependant, vous avez peut-être trouvé ou créé ailleurs un modèle TensorFlow que vous souhaitez utiliser dans votre application Web. TensorFlow.js fournit un convertisseur de modèle à cet effet. Le convertisseur TensorFlow.js comporte deux composants :

  1. Un utilitaire de ligne de commande qui convertit les modèles Keras et TensorFlow pour les utiliser dans TensorFlow.js.
  2. Une API pour charger et exécuter le modèle dans le navigateur avec TensorFlow.js.

Convertissez votre modèle

Le convertisseur TensorFlow.js fonctionne avec plusieurs formats de modèles différents :

SavedModel : il s'agit du format par défaut dans lequel les modèles TensorFlow sont enregistrés. Le format SavedModel est documenté ici .

Modèle Keras : Les modèles Keras sont généralement enregistrés sous forme de fichier HDF5. Vous trouverez plus d'informations sur l'enregistrement des modèles Keras ici .

Module TensorFlow Hub : Ce sont des modèles qui ont été packagés pour être distribués sur TensorFlow Hub, une plateforme de partage et de découverte de modèles. La bibliothèque de modèles se trouve ici .

Selon le type de modèle que vous essayez de convertir, vous devrez transmettre différents arguments au convertisseur. Par exemple, supposons que vous ayez enregistré un modèle Keras nommé model.h5 dans votre tmp/ . Pour convertir votre modèle à l'aide du convertisseur TensorFlow.js, vous pouvez exécuter la commande suivante :

$ tensorflowjs_converter --input_format=keras /tmp/model.h5 /tmp/tfjs_model

Cela convertira le modèle dans /tmp/model.h5 et générera un fichier model.json avec des fichiers de poids binaires dans votre tmp/tfjs_model/ .

Vous trouverez plus de détails sur les arguments de ligne de commande correspondant aux différents formats de modèle dans le fichier README du convertisseur TensorFlow.js.

Pendant le processus de conversion, nous parcourons le graphe du modèle et vérifions que chaque opération est prise en charge par TensorFlow.js. Si c'est le cas, nous écrivons le graphique dans un format que le navigateur peut consommer. Nous essayons d'optimiser le modèle pour être servi sur le Web en divisant les poids en fichiers de 4 Mo - de cette façon, ils peuvent être mis en cache par les navigateurs. Nous essayons également de simplifier le graphe du modèle lui-même en utilisant le projet open source Grappler . Les simplifications de graphe incluent le regroupement d'opérations adjacentes, l'élimination de sous-graphes communs, etc. Ces modifications n'ont aucun effet sur la sortie du modèle. Pour une optimisation supplémentaire, les utilisateurs peuvent transmettre un argument qui demande au convertisseur de quantifier le modèle à une certaine taille d'octets. La quantification est une technique permettant de réduire la taille du modèle en représentant des poids avec moins de bits. Les utilisateurs doivent veiller à ce que leur modèle conserve un degré de précision acceptable après quantification.

Si nous rencontrons une opération non prise en charge lors de la conversion, le processus échoue et nous imprimons le nom de l'opération pour l'utilisateur. N'hésitez pas à soumettre un problème sur notre GitHub pour nous en informer - nous essayons de mettre en œuvre de nouvelles opérations en réponse à la demande des utilisateurs.

Les meilleures pratiques

Bien que nous fassions tout notre possible pour optimiser votre modèle lors de la conversion, la meilleure façon de s'assurer que votre modèle fonctionne bien est souvent de le créer en gardant à l'esprit les environnements aux ressources limitées. Cela signifie éviter les architectures trop complexes et minimiser le nombre de paramètres (pondérations) lorsque cela est possible.

Exécutez votre modèle

Une fois la conversion réussie de votre modèle, vous obtiendrez un ensemble de fichiers de poids et un fichier de topologie de modèle. TensorFlow.js fournit des API de chargement de modèle que vous pouvez utiliser pour récupérer ces ressources de modèle et exécuter l'inférence dans le navigateur.

Voici à quoi ressemble l'API pour un module TensorFlow SavedModel ou TensorFlow Hub converti :

const model = await tf.loadGraphModel(‘path/to/model.json’);

Et voici à quoi cela ressemble pour un modèle Keras converti :

const model = await tf.loadLayersModel(‘path/to/model.json’);

L'API tf.loadGraphModel renvoie un tf.FrozenModel , ce qui signifie que les paramètres sont fixes et que vous ne pourrez pas affiner votre modèle avec de nouvelles données. L'API tf.loadLayersModel renvoie un tf.Model, qui peut être entraîné. Pour plus d'informations sur l'apprentissage d'un tf.Model, reportez-vous au guide des modèles d' apprentissage .

Après la conversion, c'est une bonne idée d'exécuter l'inférence plusieurs fois et de comparer la vitesse de votre modèle. Nous avons une page d'analyse comparative autonome qui peut être utilisée à cette fin : https://tensorflow.github.io/tfjs/e2e/benchmarks/local-benchmark/index.html Vous remarquerez peut-être que nous supprimons les mesures d'une première exécution de préchauffage - c'est parce que (en général) la première inférence de votre modèle sera plusieurs fois plus lente que les inférences suivantes en raison de la surcharge de création de textures et de compilation des shaders.