web-dev-qa-db-fra.com

Comment obtenez-vous le nom des noeuds de sortie de tensorflow dans un modèle de Keras?

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

26
agsolid

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)
18
BerndSchmitt

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.

12
Oleg F.

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.

4
Monster

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 .

2
Saurabh Saxena