J'essaie de créer un fichier pb à partir de mon modèle Keras (backend tensorflow) afin de pouvoir le construire sur iOS. J'utilise freeze.py et je dois transmettre les nœuds de sortie. Comment puis-je obtenir les noms des noeuds de sortie de mon modèle Keras?
https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/tools/freeze_graph.py
Vous pouvez utiliser Keras model.summary () pour obtenir le nom de la dernière couche.
Si model.outputs n'est pas vide, vous pouvez obtenir les noms de nœud via:
[node.op.name for node in model.outputs]
vous obtenez la session via
session = keras.backend.get_session()
et vous convertissez toutes les variables de formation en consts via
min_graph = convert_variables_to_constants(session, session.graph_def, [node.op.name for node in model.outputs])
après cela, vous pouvez écrire un fichier protobuf via
tensorflow.train.write_graph(min_graph, "/logdir/", "file.pb", as_text=True)
Si les nœuds de sortie ne sont pas spécifiés explicitement lors de la construction d'un modèle dans Keras, vous pouvez les imprimer comme suit:
[print(n.name) for n in tf.get_default_graph().as_graph_def().node]
Il vous suffit ensuite de trouver le bon, qui s'apparente souvent au nom de la fonction d'activation. Vous pouvez simplement utiliser le nom de chaîne que vous avez trouvé comme valeur pour output_node_names
dans freeze_graph
une fonction.
Vous pouvez également utiliser l'utilitaire tensorflow: summarize_graph
pour trouver possible output_nodes
. De la documentation officielle :
La plupart des transformations prises en charge par l'outil nécessitent de connaître les couches d'entrée et de sortie du modèle. La meilleure source pour ceux-ci est le processus de formation de modèle, où, pour un classificateur, les entrées sont les noeuds qui reçoivent les données du jeu de formation, et le résultat correspond aux prévisions. En cas de doute, l'outil resumeize_graph peut inspecter le modèle et fournir des suppositions sur les nœuds d'entrée et de sortie probables, ainsi que sur d'autres informations utiles pour le débogage.
Il a simplement besoin du fichier de graphe enregistré pb
comme entrée. Consultez la documentation pour un exemple.
Le output_node_names
devrait contenir les noms des nœuds de graphe que vous souhaitez utiliser pour l'inférence (par exemple, softmax). Il est utilisé pour extraire le sous-graphe qui sera nécessaire pour l'inférence. Il peut être utile de regarder freeze_graph_test .