D'après ce que j'ai compris jusqu'à présent, il existe plusieurs façons différentes de transférer un graphe TensorFlow dans un fichier et de le charger ensuite dans un autre programme, mais je n'ai pas été en mesure de trouver des exemples/des informations claires sur leur fonctionnement. Voici ce que je sais déjà :
- Sauvegarder les variables du modèle dans un fichier de point de contrôle (.ckpt) en utilisant l'option
tf.train.Saver()
et les restaurer plus tard ( source ) - Sauvegarder un modèle dans un fichier .pb et le charger à nouveau en utilisant
tf.train.write_graph()
ytf.import_graph_def()
( source ) - Charger un modèle à partir d'un fichier .pb, le réentraîner, et le transférer dans un nouveau fichier .pb en utilisant Bazel ( source )
- Geler le graphique pour sauvegarder le graphique et les poids ensemble ( source )
- Utilice
as_graph_def()
pour sauvegarder le modèle, et pour les poids/variables, les convertir en constantes ( source )
Cependant, je n'ai pas été en mesure d'éclaircir plusieurs questions concernant ces différentes méthodes :
- En ce qui concerne les fichiers de contrôle, sauvegardent-ils uniquement les poids formés d'un modèle ? Les fichiers de contrôle peuvent-ils être chargés dans un nouveau programme et être utilisés pour exécuter le modèle, ou servent-ils simplement à sauvegarder les poids d'un modèle à un certain moment/étape ?
- Concernant
tf.train.write_graph()
les poids/variables sont-ils également sauvegardés ? - En ce qui concerne Bazel, peut-il seulement sauvegarder dans/charger à partir de fichiers .pb pour le recyclage ? Existe-t-il une commande Bazel simple permettant de transférer un graphique dans un fichier .pb ?
- En ce qui concerne la congélation, peut-on charger un graphique congelé à l'aide de la fonction
tf.import_graph_def()
? - La démo Android de TensorFlow charge le modèle Inception de Google à partir d'un fichier .pb. Si je voulais substituer mon propre fichier .pb, comment m'y prendrais-je ? Devrais-je modifier le code/méthodes natives ?
- En général, quelle est la différence exacte entre toutes ces méthodes ? Ou, plus largement, quelle est la différence entre
as_graph_def()
/.ckpt/.pb ?
En bref, ce que je cherche, c'est une méthode pour sauvegarder à la fois un graphique (comme dans, les différentes opérations et autres) et ses poids/variables dans un fichier, qui peut ensuite être utilisé pour charger le graphique et les poids dans un autre programme, pour l'utiliser (pas nécessairement pour continuer/se recycler).
La documentation sur ce sujet n'est pas très claire, aussi toute réponse/information serait-elle grandement appréciée.
2 votes
L'API la plus récente et la plus complète est le métagraphe, qui vous permet de sauvegarder les trois éléments à la fois : 1) le graphique, 2) les valeurs des paramètres et 3) les collections : tensorflow.org/versions/r0.10/how_tos/meta_graph/index.html