2016-09-13 8 views
10

मौजूद नहीं है। मैं वर्तमान में एंड्रॉइड पर टेंसरफ्लो सी ++ एपीआई के साथ इसका उपयोग करने के लिए प्रोटीबफ फ़ाइल के रूप में एक प्रशिक्षित टेंसरफ्लो मॉडल को निर्यात करने की कोशिश कर रहा हूं। इसलिए, मैं freeze_graph.py स्क्रिप्ट का उपयोग कर रहा हूं।TensorFlow freeze_graph.py: नाम 'सेव/कॉन्स: 0' नाम एक टेंसर को संदर्भित करता है जो

मैं अपने मॉडल tf.train.write_graph का उपयोग कर निर्यात किया:

tf.train.write_graph(graph_def, FLAGS.save_path, out_name, as_text=True)

और मैं एक चौकी tf.train.Saver के साथ सहेजा उपयोग कर रहा हूँ।

मैं स्क्रिप्ट के शीर्ष पर वर्णित freeze_graph.py का आह्वान करता हूं। संकलन के बाद, मैं

bazel-bin/tensorflow/python/tools/freeze_graph \ 
--input_graph=<path_to_protobuf_file> \ 
--input_checkpoint=<model_name>.ckpt-10000 \ 
--output_graph=<output_protobuf_file_path> \ 
--output_node_names=dropout/mul_1 

चलाते हैं तो यह मुझे देता है निम्न त्रुटि संदेश:

TypeError: Cannot interpret feed_dict key as Tensor: The name 'save/Const:0' refers to a Tensor which does not exist. The operation, 'save/Const', does not exist in the graph. 

त्रुटि राज्यों के रूप में मैं अपने निर्यात मॉडल में एक टेन्सर save/Const:0 जरूरत नहीं है। हालांकि, freeze_graph.py का कोड कहता है कि कोई इस टेंसर नाम को ध्वज filename_tensor_name द्वारा निर्दिष्ट कर सकता है। दुर्भाग्यवश मुझे इस मॉडल के लिए क्या सही होना चाहिए और इसे मेरे मॉडल के लिए सही तरीके से सेट करने के बारे में कोई जानकारी नहीं मिल रही है।

किसी ने मेरी या तो कैसे मेरे निर्यात Protobuf मॉडल में एक save/Const:0 टेन्सर निर्माण करने के लिए बता सकते हैं या कैसे सही ढंग से झंडा filename_tensor_name स्थापित करने के लिए?

उत्तर

6

--filename_tensor_name झंडा बनाया है जब आप अपने मॉडल के लिए एक tf.train.Saver का निर्माण एक प्लेसहोल्डर टेन्सर का नाम निर्दिष्ट करने के लिए प्रयोग किया जाता है। *

अपने मूल कार्यक्रम में, आप saver.saver_def.filename_tensor_name का मूल्य प्रिंट आउट मूल्य प्राप्त कर सकते हैं कि आपको इस झंडे के लिए पास करना चाहिए। --restore_op_name ध्वज के लिए मूल्य प्राप्त करने के लिए आप saver.saver_def.restore_op_name के मान को प्रिंट करना भी चाह सकते हैं (क्योंकि मुझे संदेह है कि डिफ़ॉल्ट आपके ग्राफ़ के लिए सही नहीं होगा)।

वैकल्पिक रूप से, tf.train.SaverDef protocol buffer में इन झंडे के लिए प्रासंगिक जानकारी को पुनर्निर्माण करने के लिए आवश्यक सभी जानकारी शामिल है। यदि आप चाहें, तो आप फ़ाइल में saver.saver_def लिख सकते हैं, और उस फ़ाइल का नाम --input_saver ध्वज freeze_graph.py पर भेज सकते हैं।


  * एक tf.train.Saver के लिए डिफ़ॉल्ट नाम गुंजाइश "save/" है और प्लेसहोल्डर जो बताते हैं "save/Const:0" क्यों झंडा चूक, "Const:0" को actually a tf.constant() जिसका नाम चूक है।

2

मैंने देखा मुझे लगता है कि त्रुटि हो गई जब मैं कोड इस तरह की व्यवस्था की थी:

sess = tf.Session() 
tf.train.write_graph(sess.graph_def, '', '/tmp/train.pbtxt') 
init = tf.initialize_all_variables() 
saver = tf.train.Saver() 
sess.run(init) 

के बाद मैं इस तरह कोड लेआउट बदल यह काम किया:

# Add ops to save and restore all the variables. 
saver = tf.train.Saver()  
init = tf.initialize_all_variables() 
sess = tf.Session() 
tf.train.write_graph(sess.graph_def, '', '/tmp/train.pbtxt') 
sess.run(init) 

मैं सच में यकीन है कि क्यों नहीं कर रहा हूँ क्या वह। @mrry क्या आप इसे थोड़ा और समझा सकते हैं?

+0

+1 एक ही समस्या थी, जैसा आपने लिखा था वैसा ही लाइनों के क्रम में बदल दिया, मेरे लिए भी समस्या हल की। कुछ स्पष्टीकरण भी पसंद करेंगे :) – kazarey

0

यह नवीनतम freeze_graph में समस्याग्रस्त नहीं होना चाहिए।py के रूप में मैं इन हटाया देख सकते हैं:

del restore_op_name, filename_tensor_name # Unused by updated loading code. source:freeze_graph.py

पहले संस्करण में, यह restore_op उपयोग कर रहा था मॉडल बहाल करने के लिए

sess.run([restore_op_name], {filename_tensor_name: input_checkpoint})

तो पिछले संस्करण के लिए, यदि आप लिख रहे हैं सेवर सेशन को तुरंत चालू करने से पहले .pb फ़ाइल में आलेख, यह समस्याग्रस्त हो जाएगा। उदा .:

tf.train.write_graph(sess.graph_def, "./logs", "test2.pb", False) 
saver = tf.train.Saver() 
saver.save(sess, "./logs/hello_ck.ckpt", meta_graph_suffix='meta', write_meta_graph=True) 

इसका कारण यह है ग्राफ किसी भी बचाने की ज़रूरत नहीं होगी/मॉडल की बहाली के लिए सेशन को बहाल है। अगर मैंने कुछ गलत व्याख्या की यह हल करने के लिए .ckpt फ़ाइल को सहेजने

saver = tf.train.Saver() 
saver.save(sess, "./logs/hello_ck.ckpt", meta_graph_suffix='meta', write_meta_graph=True) 
tf.train.write_graph(sess.graph_def, "./logs", "test2.pb", False) 

@mrry के बाद ग्राफ लिखते हैं, मार्गदर्शन करें। मैंने हाल ही में tensorflow कोड में गोताखोरी शुरू कर दिया।

संबंधित मुद्दे