web-dev-qa-db-fra.com

Les utilisateurs de TensorFlow devraient-ils préférer SavedModel à Checkpoint ou GraphDef?

De SavedModel Docs ,

SavedModel, le format de sérialisation universel pour les modèles TensorFlow.

et

SavedModel encapsule un économiseur TensorFlow. Le Saver est principalement utilisé pour générer les points de contrôle variables.

D'après ma compréhension, SavedModel est indispensable si quelqu'un veut utiliser TensorFlow Serving. Cependant, je peux déployer le modèle Tensorflow sur le serveur de service sans SavedModel: geler le graphique et l'exporter en tant que GraphDef, et charger le graphique dans la session à l'aide de ReadBinaryProto et créer en C++ ou Import en Go.

Quel est le but de SavedModel? Les utilisateurs devraient-ils préférer SavedModel à Checkpoint ou GraphDef pour agréger davantage de données liées au modèle?

30
Byoungchan Lee

Un point de contrôle contient la valeur de (certaines des) variables dans un modèle TensorFlow. Il est créé par un Saver , qui reçoit soit des Variable spécifiques à enregistrer, soit par défaut enregistre toutes les variables (non locales).

Pour utiliser un point de contrôle, vous devez disposer d'un TensorFlow compatible Graph, dont les Variables ont les mêmes noms que les Variables du point de contrôle. (Si vous n'avez pas de Graph compatible, vous pouvez toujours charger les valeurs stockées dans un point de contrôle dans les Variables sélectionnés à l'aide de init_from_checkpoint utilitaires dans contrib.)

SavedModel est beaucoup plus complet: il contient un ensemble de Graphs ( MetaGraph s, en fait, sauvegarde des collections et autres), ainsi qu’un point de contrôle censé être compatible avec ces Graph et tous les fichiers de ressources nécessaires pour exécuter le modèle (par exemple, les fichiers de vocabulaire). Pour chaque MetaGraph qu'il contient, il stocke également un ensemble de signatures. Les signatures définissent (nommés) les tenseurs d'entrée et de sortie.

Cela signifie que, étant donné uniquement un SavedModel, vous pouvez écrire des outils (tels que tensorflow/serving, ou le nouveau saved_model utilitaire de ligne de commande qui apparaîtra dans tools/ brièvement) qui interprètent ou exécutent les graphiques à l'intérieur. Tout ce que vous avez à fournir, ce sont les données.

En cas de doute, je me tromperais toujours du côté de l'écriture d'un SavedModel, pas seulement d'un point de contrôle. Non seulement cela vous permet d'utiliser tensorflow/service (et d'autres utilitaires soignés qui augmenteront en nombre), mais il vous garantit que vous disposez de toutes les informations nécessaires pour exécuter le modèle. Rien n'est plus frustrant qu'un point de contrôle que vous ne pouvez plus utiliser car vous avez modifié votre modèle et maintenant il est incompatible avec les fichiers de point de contrôle et tout ce que vous voulez faire est d'exécuter des prédictions à travers lui pour comparaison.

44
wicke