Các mô hình python được xuất khẩu chính xác như thế nào để sử dụng trong C++?Xuất đồ thị Tensorflow từ Python để sử dụng trong C++
Tôi đang cố gắng để làm một cái gì đó tương tự như hướng dẫn này: https://www.tensorflow.org/versions/r0.8/tutorials/image_recognition/index.html
Tôi đang cố gắng để nhập khẩu mô hình TF của riêng tôi trong C++ API thay cho sự ra đời một. Tôi đã điều chỉnh kích thước đầu vào và đường dẫn, nhưng các lỗi lạ vẫn tiếp tục xuất hiện. Tôi đã dành cả ngày đọc tràn ngăn xếp và các diễn đàn khác nhưng vô ích.
Tôi đã thử hai phương pháp để xuất đồ thị.
Phương pháp 1: đoạn văn.
...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)
Phương pháp 1 mang lại các lỗi sau khi cố gắng chạy chương trình:
[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'
Tôi cũng đã thử phương pháp khác xuất khẩu đồ thị:
Cách 2: write_graph:
tf.train.write_graph(sess.graph_def,
'/home/sander/tensorflow/tensorflow/examples/cat_face/data/',
'cat_graph.pb', as_text=False)
Phiên bản này thực sự có vẻ như tải thứ gì đó, nhưng tôi gặp lỗi về các biến không được khởi tạo:
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)]]
Có "Phương pháp 3: Sử dụng freeze_graph". Điều đó tránh phải sử dụng các Biến và chạy các lệnh khôi phục - https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/tools/freeze_graph.py –
Ah, tôi đã thấy điều đó. Nhưng tôi đấu tranh để tìm hiểu làm thế nào để điền vào các đối số của nó, giống như tôi không biết những gì để điền vào cho mỗi đối số trong export_meta_graph. Bạn có biết một số mã ví dụ cho điều này không? – Sander
Có một ví dụ ở đây: https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/tools/freeze_graph_test.py –