2017-08-24 2 views
2

En tensorflow la formation à partir de zéro produit après 6 fichiers:tensorflow: Comment convertir .meta, .data et fichiers de modèle .Index dans un seul fichier graph.pb

  1. events.out.tfevents. 1503494436.06L7-BRM738
  2. model.ckpt-22480.meta
  3. checkpoint
  4. model.ckpt-22480.data-00000-de-00001
  5. model.ckpt-22480.index
  6. graph.pbtxt

Je voudrais les convertir (ou seulement ceux nécessaires) dans un seul fichier graph.pb pour être en mesure de transférer à mon application Android.

J'ai essayé le script freeze_graph.py mais il nécessite déjà en entrée le fichier input.pb que je n'ai pas. (Je n'ai que ces 6 fichiers mentionnés précédemment). Comment procéder pour obtenir celui-ci freezed_graph.pb fichier? J'ai vu plusieurs fils mais aucun ne travaillait pour moi.

+1

Voir ici: https://stackoverflow.com/questions/45433231/freezing-a-cnn-tensorflow-model-into-a-pb-file/45437684#45437684 –

+0

Comment avez-vous obtenu 'graph.pbtxt'? Si c'est le graphe de votre modèle, vous pouvez le geler avec 'freeze.py'. '.pbtxt'. – velikodniy

+0

Le graphique.pbtxt que j'ai trouvé dans les journaux d'entraînement après avoir terminé l'entraînement. Il a cependant été sauvegardé avant la fin de l'entraînement. Vérifiez-le dans l'état précédemment enregistré du graphique. Pour la formation à partir de zéro, j'ai utilisé le script: train_image_classifier.py. Pour la formation, j'ai utilisé mes propres images (.jpg) que j'ai dû convertir en fichiers .tfrecord avant d'utiliser le script. Build_image_data.py – Rafal

Répondre

1

Vous pouvez utiliser ce script simple pour cela. Mais vous devez spécifier les noms des noeuds de sortie.

import tensorflow as tf 

meta_path = 'model.ckpt-22480.meta' # Your .meta file 
output_node_names = ['output:0'] # Output nodes 

with tf.Session() as sess: 

    # Restore the graph 
    saver = tf.train.import_meta_graph(meta_path) 

    # Load weights 
    saver.restore(sess,tf.train.latest_checkpoint('.')) 

    # Freeze the graph 
    frozen_graph_def = tf.graph_util.convert_variables_to_constants(
     sess, 
     sess.graph_def, 
     output_node_names) 

    # Save the frozen graph 
    with open('output_graph.pb', 'wb') as f: 
     f.write(frozen_graph_def.SerializeToString()) 
+1

Existe-t-il un moyen simple d'obtenir les noms des nœuds de sortie? – rambossa

+0

J'essaie de faire la même chose. Est-il possible de trouver les noms des nœuds de sortie? – blueether

+0

Vous pouvez utiliser l'utilitaire [summarize_graph] (https://github.com/tensorflow/tensorflow/tree/master/tensorflow/tools/graph_transforms#inspecting-graphs). – velikodniy

2

Comme cela peut être utile pour d'autres, je réponds aussi ici après la réponse sur github ;-). Je pense que vous pouvez essayer quelque chose comme ça (avec le script freeze_graph dans tensorflow/python/outils):

python freeze_graph.py --input_graph=/path/to/graph.pbtxt --input_checkpoint=/path/to/model.ckpt-22480 --input_binary=false --output_graph=/path/to/frozen_graph.pb --output_node_names="the nodes that you want to output e.g. InceptionV3/Predictions/Reshape_1 for Inception V3 "

Le drapeau important est ici --input_binary = false que le fichier est graph.pbtxt dans le texte format. Je pense que cela correspond au graph.pb requis qui est l'équivalent en format binaire. En ce qui concerne output_node_names, c'est vraiment déroutant pour moi car j'ai encore quelques problèmes sur cette partie mais vous pouvez utiliser le script summarize_graph dans tensorflow qui peut prendre le pb ou le pbtxt en entrée.

Cordialement,

Steph