Genau wie sollten Python-Modelle für die Verwendung in C++ exportiert werden?Export Tensorflow Graphen aus Python für die Verwendung in C++
Ich versuche, etwas ähnliches zu diesem Tutorial zu tun: https://www.tensorflow.org/versions/r0.8/tutorials/image_recognition/index.html
Ich versuche, mein eigenes TF-Modell in dem C++ API anstelle der Gründung eines zu importieren. Ich habe die Eingabegröße und die Pfade angepasst, aber seltsame Fehler tauchen immer wieder auf. Ich verbrachte den ganzen Tag damit, Stapelüberläufe und andere Foren zu lesen, aber ohne Erfolg.
Ich habe zwei Methoden zum Exportieren des Diagramms ausprobiert.
Methode 1: Metagraph.
...loading inputs, setting up the model, etc....
sess = tf.InteractiveSession()
sess.run(tf.initialize_all_variables())
for i in range(num_steps):
x_batch, y_batch = batch(50)
if i%10 == 0:
train_accuracy = accuracy.eval(feed_dict={
x:x_batch, y_: y_batch, keep_prob: 1.0})
print("step %d, training accuracy %g"%(i, train_accuracy))
train_step.run(feed_dict={x: x_batch, y_: y_batch, keep_prob: 0.5})
print("test accuracy %g"%accuracy.eval(feed_dict={
x: features_test, y_: labels_test, keep_prob: 1.0}))
saver = tf.train.Saver(tf.all_variables())
checkpoint =
'/home/sander/tensorflow/tensorflow/examples/cat_face/data/model.ckpt'
saver.save(sess, checkpoint)
tf.train.export_meta_graph(filename=
'/home/sander/tensorflow/tensorflow/examples/cat_face/data/cat_graph.pb',
meta_info_def=None,
graph_def=sess.graph_def,
saver_def=saver.restore(sess, checkpoint),
collection_list=None, as_text=False)
Methode 1 ergibt sich folgende Fehler, wenn versucht wird, das Programm auszuführen:
[libprotobuf ERROR
google/protobuf/src/google/protobuf/wire_format_lite.cc:532] String field
'tensorflow.NodeDef.op' contains invalid UTF-8 data when parsing a protocol
buffer. Use the 'bytes' type if you intend to send raw bytes.
E tensorflow/examples/cat_face/main.cc:281] Not found: Failed to load
compute graph at 'tensorflow/examples/cat_face/data/cat_graph.pb'
Ich habe auch ein anderes Verfahren zum Exportieren der Graph:
Methode 2: write_graph:
tf.train.write_graph(sess.graph_def,
'/home/sander/tensorflow/tensorflow/examples/cat_face/data/',
'cat_graph.pb', as_text=False)
Diese Version scheint tatsächlich etwas zu laden, aber ich bekomme einen Fehler über Variablen nicht sein initialisiert: durch die Verwendung Schoners
saver = tf.train.Saver(tf.global_variables())
saver.save(sess, "C:\\output\\mymodel.ckpt")
Dann
Running model failed: Failed precondition: Attempting to use uninitialized
value weight1
[[Node: weight1/read = Identity[T=DT_FLOAT, _class=["loc:@weight1"],
_device="/job:localhost/replica:0/task:0/cpu:0"](weight1)]]
Es gibt "Methode 3: Verwendung freeze_graph". Das vermeidet die Verwendung von Variablen und Ausführen von Wiederherstellungs-Ops - https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/tools/freeze_graph.py –
Ah, das habe ich gesehen. Aber ich habe Mühe herauszufinden, wie man seine Argumente ausfüllt, genau wie ich nicht weiß, was ich für jedes Argument in export_meta_graph ausfüllen soll. Kennen Sie einen Beispielcode dafür? – Sander
Es gibt ein Beispiel hier: https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/tools/freeze_graph_test.py –