Tensorflow Différentes manières d'exporter et d'exécuter un graphique en C ++
Pour l'importation de votre réseau formé pour le C++, vous devez exporter votre réseau pour être en mesure de le faire. Après la recherche d'un lot et de trouver presque aucune information à ce sujet, il a été précisé que nous devrions utiliser freeze_graph() pour être en mesure de le faire.
Grâce à la nouvelle version 0.7 de Tensorflow, ils ont ajouté la documentation.
Après la recherche dans la documentation, j'ai trouvé qu'il existe quelques méthodes similaires, pouvez-vous dire quelle est la différence entre freeze_graph()
et:
tf.train.export_meta_graph
comme elle a les mêmes paramètres, mais il semble qu'il peut également être utilisé pour l'importation de modèles de C++ (je suppose que la différence est que pour l'utilisation du fichier de sortie par cette méthode, vous ne pouvez utiliser import_graph_def()
ou c'est autre chose?)
Également une question sur la façon d'utiliser write_graph()
:
Dans la documentation de la graph_def
est donnée par sess.graph_def
mais dans les exemples de freeze_graph()
il est sess.graph.as_graph_def()
. Quelle est la différence entre ces deux?
Cette question est liée à ce problème.
Merci!
source d'informationauteur Hamed MP
Vous devez vous connecter pour publier un commentaire.
Voici ma solution en utilisant la V2 de points de contrôle introduites dans TF 0.12.
Il n'y a pas besoin de convertir l'ensemble des variables constantes ou geler le graphique.
Juste pour plus de clarté, une V2 de point de contrôle ressemble à ça dans mon répertoire,
models
:Partie Python (économie)
Si vous créez le
Saver
avectf.trainable_variables()
vous pouvez vous épargner les maux de tête et de l'espace de stockage. Mais peut-être que certains des modèles plus compliqués besoin de toutes les données à enregistrer, puis supprimer cet argument pourSaver
assurez-vous que vous êtes en train de créer leSaver
après votre graphe est créé. Il est également très sage de donner toutes les variables/couches des noms propres, sinon vous pouvez exécuter dans différents problèmes.Partie Python (inférence)
C++ partie (inférence)
Noter que
checkpointPath
n'est pas un chemin d'accès à tous les fichiers existants, juste de leur préfixe commun. Si par erreur vous mettez là le chemin de la.index
fichier, TF ne vais pas vous dire que c'était faux, mais il va mourir lors de l'inférence en raison de variables non initialisées.Pour prédire (et tous les autres opérations), vous pouvez faire quelque chose comme ceci:
Tout d'abord en python, vous devriez nom vos variables ou de l'exploitation pour l'utilisation future
Après la formation, les calculs de donc.. quand vous avez votre les variables assignées aller à travers eux tous et enregistrer en tant que constantes à votre graphique. (presque la même chose peut être fait avec ce gel de l'outil, mais j'ai l'habitude de le faire par moi-même, cochez la case "nom=nWeights" dans la py et de la rpc ci-dessous)
Allez maintenant c++ et de la charge de notre graphique et charger des variables à partir enregistré constantes:
Maintenant, vous avez toutes vos neurones poids net ou d'autres variables chargé.
De la même manière, vous pouvez effectuer d'autres opérations (rappelez-vous au sujet des noms?); faire l'entrée et la sortie des tenseurs de bonne taille, le remplir d'entrée du tenseur de données et l'exécution de la session comme suit: