Cette page a été traduite par l'API Cloud Translation.
Switch to English

Conversion de modèle

TensorFlow.js est livré avec une variété de modèles pré-entraîné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éé un modèle TensorFlow ailleurs que vous souhaitez utiliser dans votre application Web. TensorFlow.js fournit un convertisseur de modèle à cet effet. Le convertisseur TensorFlow.js comprend deux composants:

  1. Un utilitaire de ligne de commande qui convertit les modèles Keras et TensorFlow pour une utilisation 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 : il s'agit de modèles qui ont été packagés pour la distribution sur TensorFlow Hub, une plate-forme de partage et de découverte de modèles. La bibliothèque de modèles peut être trouvée ici .

Selon le type de modèle que vous essayez de convertir, vous devrez transmettre différents arguments au convertisseur. Par exemple, disons que vous avez 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 affichera 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 graphique du modèle et vérifions que chaque opération est prise en charge par TensorFlow.js. Si tel est le cas, nous écrivons le graphique dans un format que le navigateur peut utiliser. Nous essayons d'optimiser le modèle pour être servi sur le Web en partageant les poids dans des 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 graphes incluent le pliage des opérations adjacentes, l'élimination des 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'octet. 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 la 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 mettions tout en œuvre pour optimiser votre modèle lors de la conversion, le meilleur moyen de garantir le bon fonctionnement de votre modèle est souvent de le créer en tenant compte des environnements aux ressources limitées. Cela signifie éviter les architectures trop complexes et minimiser le nombre de paramètres (poids) lorsque cela est possible.

Exécutez votre modèle

Une fois la conversion de votre modèle réussie, vous vous retrouverez avec 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 actifs de modèle et exécuter des inférences 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 la manière de former un tf.Model, reportez-vous au guide des modèles de train .

Après la conversion, il est judicieux d'exécuter plusieurs fois l'inférence et de comparer la vitesse de votre modèle. Nous avons une page de benchmarking 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 rejetons les mesures d'une première course 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 de shaders.