TensorFlow, warum gibt es nach dem Speichern des Modells 3 Dateien?

113

Nachdem ich die Dokumente gelesen habe , habe ich ein Modell in gespeichert TensorFlow. Hier ist mein Demo-Code:

# 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)

aber danach fand ich 3 Dateien

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

Und ich kann das Modell nicht wiederherstellen, indem ich die model.ckptDatei wiederherstelle , da es keine solche Datei gibt. Hier ist mein Code

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

Warum gibt es 3 Dateien?

Ich gehe meinen Weg
quelle
2
Haben Sie herausgefunden, wie Sie das angehen können? Wie kann ich das Modell erneut laden (mit Keras)?
Rajkiran

Antworten:

116

Versuche dies:

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

Die TensorFlow-Speichermethode speichert drei Arten von Dateien, da die Diagrammstruktur getrennt von den Variablenwerten gespeichert wird . Das.meta Datei beschreibt die gespeicherte Diagrammstruktur. Sie müssen sie daher importieren, bevor Sie den Prüfpunkt wiederherstellen (andernfalls wissen Sie nicht, welchen Variablen die gespeicherten Prüfpunktwerte entsprechen).

Alternativ können Sie dies tun:

# 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")

Auch wenn keine Datei benannt ist model.ckpt, verweisen Sie beim Wiederherstellen auf den gespeicherten Prüfpunkt mit diesem Namen. Aus dem saver.pyQuellcode :

Benutzer müssen nur mit dem benutzerdefinierten Präfix interagieren ... anstelle eines physischen Pfadnamens.

TK Bartel
quelle
1
Also werden der .index und die .data nicht verwendet? Wann werden diese beiden Dateien dann verwendet?
Ajfbiw.s
26
@ ajfbiw.s .meta speichert die Diagrammstruktur, .data speichert die Werte jeder Variablen im Diagramm, .index identifiziert den Checkpiont. Also im obigen Beispiel: import_meta_graph verwendet die .meta und saver.restore verwendet die .data und .index
TK Bartel
Oh, ich verstehe. Vielen Dank.
Ajfbiw.s
1
Gibt es eine Chance, dass Sie das Modell mit einer anderen Version von TensorFlow gespeichert haben, als Sie zum Laden verwenden? ( github.com/tensorflow/tensorflow/issues/5639 )
TK Bartel
5
Weiß jemand was das 00000und 00001Zahlen bedeuten? in variables.data-?????-of-?????Datei
Ivan Talalaev
55
  • Metadatei : Beschreibt die gespeicherte Diagrammstruktur, einschließlich GraphDef, SaverDef usw. dann anwenden tf.train.import_meta_graph('/tmp/model.ckpt.meta'), wird wiederhergestellt Saverund Graph.

  • Indexdatei : Dies ist eine unveränderliche String-String-Tabelle (Tensorflow :: Table :: Table). Jeder Schlüssel ist ein Name eines Tensors und sein Wert ist ein serialisierter BundleEntryProto. Jeder BundleEntryProto beschreibt die Metadaten eines Tensors: Welche der "Daten" -Dateien enthält den Inhalt eines Tensors, den Versatz in diese Datei, die Prüfsumme, einige Hilfsdaten usw.

  • Datendatei : es ist TensorBundle Sammlung, speichern Sie die Werte aller Variablen.

Guangcong Liu
quelle
Ich habe die pb-Datei, die ich für die Bildklassifizierung habe. Kann ich es für die Echtzeit-Videoklassifizierung verwenden?
Können Sie mir bitte unter Verwendung von Keras 2 mitteilen, wie ich das Modell lade, wenn es als 3 Dateien gespeichert ist?
Rajkiran
5

Ich stelle trainierte Worteinbettungen von Word2Vec wieder her Tensorflow-Tutorial wieder her.

Falls Sie mehrere Prüfpunkte erstellt haben:

zB aussehen erstellte Dateien sehen so aus

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

model.ckpt-55695.index

model.ckpt-55695.meta

Versuche dies

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

beim Aufruf von 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")
Steven Wong
quelle
Was bedeutet "00000-of-00001" in "model.ckpt-55695.data-00000-of-00001"?
hafiz031
0

Wenn Sie beispielsweise ein CNN mit Ausfall trainiert haben, können Sie Folgendes tun:

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})
happy_sisyphus
quelle