web-dev-qa-db-fra.com

Comment restaurer le modèle Tensorflow à partir d'un fichier .pb en python?

J'ai un fichier .pb tensorflow que je voudrais charger dans python DNN, restaurez le graphique et obtenez les prédictions. Je le fais pour tester si le fichier .pb créé peut prédictions similaires au modèle normal Saver.save ().

Mon problème fondamental est d'obtenir une valeur très différente de prédictions lorsque je les fais sur Android en utilisant le fichier .pb mentionné ci-dessus.

Mon code de création de fichier .pb:

frozen_graph = tf.graph_util.convert_variables_to_constants(
        session,
        session.graph_def,
        ['outputLayer/Softmax']
    )
with open('frozen_model.pb', 'wb') as f:
  f.write(frozen_graph.SerializeToString())

J'ai donc deux préoccupations majeures:

  1. Comment puis-je charger le fichier .pb mentionné ci-dessus dans python Modèle Tensorflow?)
  2. Pourquoi ai-je des valeurs de prédiction complètement différentes dans python et Android??)
13
vizsatiz

Le code suivant lira le modèle et imprimera les noms des noeuds dans le graphique.

import tensorflow as tf
from tensorflow.python.platform import gfile
GRAPH_PB_PATH = './frozen_model.pb'
with tf.Session() as sess:
   print("load graph")
   with gfile.FastGFile(GRAPH_PB_PATH,'rb') as f:
       graph_def = tf.GraphDef()
   graph_def.ParseFromString(f.read())
   sess.graph.as_default()
   tf.import_graph_def(graph_def, name='')
   graph_nodes=[n for n in graph_def.node]
   names = []
   for t in graph_nodes:
      names.append(t.name)
   print(names)

Vous bloquez correctement le graphique, c’est pourquoi vous obtenez des résultats différents. En principe, les poids ne sont pas stockés dans votre modèle. Vous pouvez utiliser le freeze_graph.py ( lien ) pour obtenir un graphe correctement stocké.

19
sahu