6

Ich verwende ein benutzerdefiniertes Bildset, um ein neurales Netzwerk mit Tensorflow-API zu trainieren. Nach erfolgreichem Training bekomme ich diese Checkpoint-Dateien, die Werte verschiedener Trainingsvar. Enthalten. Ich möchte jetzt ein Inferenzmodell aus diesen Checkpoint-Dateien erhalten, das habe ich gefunden script, das das tut, das ich dann verwenden kann, um Deepdream-Bilder zu erzeugen, wie in diesem Tutorial erklärt. Das Problem ist, wenn ich mein Modell laden mit:Verwendung von Tensorflow-Inferenzmodellen zur Erzeugung von Deepdream-ähnlichen Bildern

import tensorflow as tf 
model_fn = 'export' 

graph = tf.Graph() 
sess = tf.InteractiveSession(graph=graph) 
with tf.gfile.FastGFile(model_fn, 'rb') as f: 
    graph_def = tf.GraphDef() 
    graph_def.ParseFromString(f.read()) 
t_input = tf.placeholder(np.float32, name='input') 
imagenet_mean = 117.0 
t_preprocessed = tf.expand_dims(t_input-imagenet_mean, 0) 
tf.import_graph_def(graph_def, {'input':t_preprocessed}) 

ich diesen Fehler:

graph_def.ParseFromString(f.read())

self.MergeFromString(serialized)

raise message_mod.DecodeError('Unexpected end-group tag.') google.protobuf.message.DecodeError: Unexpected end-group tag.

Das Skript eine Protokollpufferdatei erwarten, ich bin nicht sicher, ob die script Ich verwende Inferenz-Modelle zu erzeugen, gibt mir Proto-Puffer-Dateien oder nicht.

Kann jemand bitte vorschlagen, was mache ich falsch, oder gibt es einen besseren Weg, dies zu erreichen. Ich möchte einfach Checkpoint-Dateien, die vom Tensor erzeugt wurden, in Proto-Puffer umwandeln.

Dank

Antwort

1

Der Link zum Skript lief Sie ist gebrochen, aber in jedem Fall die empfohlene Sache ist, nicht zu versuchen, eine Inferenz-Modell von einem Kontrollpunkt zu erzeugen, sondern Code am Ende Ihrer Ausbildung einzubetten Programm, das einen Export "SavedModel" ausgeben wird (das ist nicht die gleiche Sache wie ein Checkpoint).

Siehe [1] und insbesondere die Überschrift "Erstellen eines gespeicherten Modells". Beachten Sie, dass ein gespeichertes Modell mehrere Dateien enthält, von denen eine tatsächlich ein Protokollpuffer ist (der direkt auf Ihre Frage antwortet, die ich hoffe); die anderen sind variable Dateien und (optional) Asset-Dateien.

[1] https://www.tensorflow.org/programmers_guide/saved_model