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?
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 Variable
s ont les mêmes noms que les Variable
s 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 Variable
s sélectionnés à l'aide de init_from_checkpoint
utilitaires dans contrib.)
SavedModel
est beaucoup plus complet: il contient un ensemble de Graph
s ( 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.