136 votes

TensorFlow, pourquoi y a-t-il 3 fichiers après avoir enregistré le modèle ?

Ayant lu le docs J'ai enregistré un modèle dans TensorFlow Voici mon code de démonstration :

# Create some variables.
v1 = tf.Variable(..., name="v1")
v2 = tf.Variable(..., name="v2")
...
# Add an op to initialize the variables.
init_op = tf.global_variables_initializer()

# Add ops to save and restore all the variables.
saver = tf.train.Saver()

# Later, launch the model, initialize the variables, do some work, save the
# variables to disk.
with tf.Session() as sess:
  sess.run(init_op)
  # Do some work with the model.
  ..
  # Save the variables to disk.
  save_path = saver.save(sess, "/tmp/model.ckpt")
  print("Model saved in file: %s" % save_path)

mais après cela, j'ai découvert qu'il y a 3 fichiers

model.ckpt.data-00000-of-00001
model.ckpt.index
model.ckpt.meta

Et je ne peux pas restaurer le modèle en rétablissant l'option model.ckpt car il n'existe pas de tel fichier. Voici mon code

with tf.Session() as sess:
  # Restore variables from disk.
  saver.restore(sess, "/tmp/model.ckpt")

Alors, pourquoi y a-t-il 3 fichiers ?

2 votes

Avez-vous trouvé un moyen de résoudre ce problème ? Comment puis-je recharger le modèle (en utilisant Keras) ?

126voto

T.K. Bartel Points 965

Essayez ça :

with tf.Session() as sess:
    saver = tf.train.import_meta_graph('/tmp/model.ckpt.meta')
    saver.restore(sess, "/tmp/model.ckpt")

La méthode d'enregistrement de TensorFlow enregistre trois types de fichiers, car elle stocke les éléments suivants structure graphique séparément de la valeurs variables . Le site .meta décrit la structure du graphique sauvegardé, vous devez donc l'importer avant de restaurer le point de contrôle (sinon il ne sait pas à quelles variables correspondent les valeurs du point de contrôle sauvegardé).

Sinon, vous pouvez faire ceci :

# Recreate the EXACT SAME variables
v1 = tf.Variable(..., name="v1")
v2 = tf.Variable(..., name="v2")

...

# Now load the checkpoint variable values
with tf.Session() as sess:
    saver = tf.train.Saver()
    saver.restore(sess, "/tmp/model.ckpt")

Même s'il n'y a pas de fichier nommé model.ckpt si vous faites toujours référence au point de contrôle sauvegardé par ce nom lorsque vous le restaurez. De la saver.py code source :

Les utilisateurs doivent seulement interagir avec le préfixe spécifié par l'utilisateur... au lieu de de tout nom de chemin physique.

1 votes

Donc le .index et le .data ne sont pas utilisés ? Quand ces deux fichiers sont-ils utilisés, alors ?

31 votes

@ajfbiw.s .meta stocke la structure du graphe, .data stocke les valeurs de chaque variable du graphe, .index identifie le point de contrôle. Ainsi, dans l'exemple ci-dessus : import_meta_graph utilise le .meta, et saver.restore utilise le .data et le .index.

0 votes

Oh, je vois. Merci.

63voto

Guangcong Liu Points 370
  • fichier méta : décrit la structure du graphe sauvegardé, comprend GraphDef, SaverDef, et ainsi de suite ; puis applique tf.train.import_meta_graph('/tmp/model.ckpt.meta') , rétablira Saver y Graph .

  • fichier index Il s'agit d'un tableau immuable de type chaîne de caractères (tensorflow::table::Table). Chaque clé est un nom de tenseur et sa valeur est un BundleEntryProto sérialisé. Chaque BundleEntryProto décrit les métadonnées d'un tenseur : lequel des fichiers "data" contient le contenu d'un tenseur, le décalage dans ce fichier, la somme de contrôle, certaines données auxiliaires, etc.

  • fichier de données : c'est une collection de TensorBundle, enregistrez les valeurs de toutes les variables.

0 votes

J'ai obtenu le fichier pb pour la classification des images. Puis-je l'utiliser pour la classification des vidéos en temps réel ?

0 votes

Pouvez-vous me dire, en utilisant Keras 2, comment charger le modèle s'il est sauvegardé en 3 fichiers ?

6voto

Steven Wong Points 71

Je restaure les mots formés à partir de Word2Vec Tutoriel tensorflow.

Dans le cas où vous avez créé plusieurs points de contrôle :

Par exemple, les fichiers créés ressemblent à ceci

model.ckpt-55695.data-00000-of-00001

modèle.ckpt-55695.index

modèle.ckpt-55695.meta

essayez ceci

def restore_session(self, session):
   saver = tf.train.import_meta_graph('./tmp/model.ckpt-55695.meta')
   saver.restore(session, './tmp/model.ckpt-55695')

lors de l'appel de restore_session() :

def test_word2vec():
   opts = Options()    
   with tf.Graph().as_default(), tf.Session() as session:
       with tf.device("/cpu:0"):            
           model = Word2Vec(opts, session)
           model.restore_session(session)
           model.get_embedding("assistance")

1 votes

Que signifie "00000-of-00001" dans "model.ckpt-55695.data-00000-of-00001" ?

0voto

Sashank Aryal Points 306

Si vous formiez un CNN avec un décrochage, par exemple, vous pourriez faire ceci :

def predict(image, model_name):
    """
    image -> single image, (width, height, channels)
    model_name -> model file that was saved without any extensions
    """
    with tf.Session() as sess:
        saver = tf.train.import_meta_graph('./' + model_name + '.meta')
        saver.restore(sess, './' + model_name)
        # Substitute 'logits' with your model
        prediction = tf.argmax(logits, 1)
        # 'x' is what you defined it to be. In my case it is a batch of RGB images, that's why I add the extra dimension
        return prediction.eval(feed_dict={x: image[np.newaxis,:,:,:], keep_prob_dnn: 1.0})

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X