2017-10-17 4 views
3

Ich versuche derzeit, ein Word2vec-Modell für meine Firma zu trainieren. Dazu habe ich den Code https://github.com/tensorflow/models, speziell https://github.com/tensorflow/models/blob/master/tutorials/embedding/word2vec.py verwendet.Tensorflow Model wird nicht korrekt geladen

Ich habe den deutschen Wikipedia-Dump heruntergeladen und die Textinformationen daraus extrahiert. Die Aufgabe besteht darin, ein Modell mit diesen Daten zu trainieren.

Ich arbeite an einer virtuellen Maschine, die Ubuntu 16.04 und Zugriff auf eine Tesla M60 hat. Für das Wochenende trainierte ich das Modell und speicherte die Checkpoints in einem separaten Ordner. Am Ende des Wochenendes konnte das Modell antworten 36% der Evaluierungsfragen, die ich ihm gab (deutsche Fragen ähnlich dem Beispiel "questions-word.txt"). Nach dem Training möchte ich das Modell laden und die Auswertungsaufgabe erneut ausführen. Dazu änderte ich den Code in folgenden Zeilen (außer Pfadänderungen): I

hinzugefügt
with tf.Graph().as_default(), tf.Session() as session: 
     saver = tf.train.import_meta_graph(opts.save_path + "/model.ckpt-288720426.meta") 
     saver.restore(session, tf.train.latest_checkpoint('./results')) 
     print("Model restored.") 
     with tf.device("/cpu:0"): 
      model = Word2Vec(opts, session) 
      model.read_analogies() # Read analogy questions 
     for _ in xrange(opts.epochs_to_train): 
      #model.train() # Process one epoch 
      model.eval() # Eval analogies. 

Ich habe die beiden Linien zum Laden des Modells (saver = ...) und die Trainingsleitung kommentiert werden. Blick auf die Meta-und neuesten Checkpoint-Dateien und Tensorboard zeigt ein geschultes Modell, aber wenn ich den Code ausführen, führt die Auswertung in 0,1% richtige Antworten, die mir scheint, wie das Modell mit einem untrainierten Modell neu startet. Ich erwartete das Ergebnis wieder 36%.

Kann mir jemand den Fehler erklären, den ich im Code gemacht habe, oder vielleicht sogar in meinem Denken?

Antwort

1

Sie rufen wahrscheinlich tf.global_variables_initializer().run() in build_graph, nachdem Sie das Modell wiederhergestellt haben. Sie laden also im Grunde die Gewichte und überschreiben sie dann mit den Initialisierungswerten und Ihr Netzwerk beginnt von vorne.

ich implementiert, um die Checkpoints mit Kommandozeilen-Optionen für ein kleines Projekt Wiederherstellung mit Latin arbeiten und Sie können hier auf den Code einen Blick: https://github.com/CarstenIsert/LatinLearner/blob/master/word2vec.py

+0

Vielen Dank für Ihre Hilfe. Das Ersetzen der vorgeschlagenen Zeile durch die im Link angegebenen Zeilen hat das Problem gelöst! –

0

Haben Sie Vorverarbeitungsschritten auf Ihre Daten während des Trainings nutzen? Oder verwenden Sie Rohdaten als Eingabe für Ihr Netzwerk? Es ist wahrscheinlich, dass Ihr Modell korrekt geladen ist, aber Ihre Testdaten werden nicht auf die gleiche Weise wie Trainingsschritte vorverarbeitet.

Dann ist es besser, ein leeres Modell vor dem Aufruf von Restore-Ops zu erstellen. Wenn Sie vor der Wiederherstellung ein leeres Modell erstellen, lädt Tensorflow automatisch Gewichtungen in Ihr Modell.

Verwandte Themen