2016-10-01 26 views
5

मैं अपने टेन्सफोर्लो मॉडल को प्रशिक्षित करना चाहता हूं, एक स्नैपशॉट फ्रीज करना चाहता हूं, और उसके बाद इसे नए इनपुट डेटा के साथ फीड-फॉरवर्ड मोड (आगे प्रशिक्षण नहीं) में चलाएं। प्रश्न:टेन्सफोर्लो मेटाग्राफ फंडामेंटल

  1. tf.train.export_meta_graph और tf.train.import_meta_graph इस के लिए सही उपकरण हैं?
  2. क्या मुझे collection_list में, स्नैपशॉट में शामिल सभी चर के नाम शामिल करने की आवश्यकता है? (मेरे लिए सबसे सरल सबकुछ शामिल करना होगा।)
  3. टेन्सफोर्लो डॉक्स कहते हैं: "यदि collection_list निर्दिष्ट नहीं है, तो मॉडल में सभी संग्रह निर्यात किए जाएंगे।" क्या इसका मतलब यह है कि यदि मैं collection_list में कोई चर निर्दिष्ट नहीं करता हूं तो मॉडल में सभी चर निर्यात किए जाते हैं क्योंकि वे डिफ़ॉल्ट संग्रह में हैं?
  4. Tensorflow डॉक्स का कहना है: "एक अजगर वस्तु के लिए आदेश में करने के लिए और MetaGraphDef से श्रृंखलाबद्ध किया जाना है, अजगर वर्ग to_proto() और from_proto() पद्धतियों को लागू करना चाहिए, और register_proto_function का उपयोग कर प्रणाली के साथ उन्हें रजिस्टर।" क्या इसका मतलब है कि to_proto() और from_proto() केवल उन वर्गों में जोड़ा जाना चाहिए जिन्हें मैंने परिभाषित किया है और निर्यात करना चाहते हैं? अगर मैं केवल मानक पायथन डेटा प्रकार (int, float, list, dict) का उपयोग कर रहा हूं तो क्या यह अप्रासंगिक है?

अग्रिम धन्यवाद।

उत्तर

2

थोड़ा देर हो चुकी है लेकिन मैं अभी भी जवाब देने का प्रयास करूंगा।

  1. इस के लिए tf.train.export_meta_graph और tf.train.import_meta_graph सही उपकरण हैं?

मैं ऐसा कहूंगा। ध्यान दें कि tf.train.export_meta_graph आपको तत्काल रूप से बुलाया जाता है जब आप tf.train.Saver के माध्यम से मॉडल सहेजते हैं। सार है:

# create the model 
... 
saver = tf.train.Saver() 
with tf.Session() as sess: 
    ... 
    # save graph and variables 
    # if you are using global_step, the saver will automatically keep the n=5 latest checkpoints 
    saver.save(sess, save_path, global_step) 

फिर बहाल करने के लिए:

save_path = ... 
latest_checkpoint = tf.train.latest_checkpoint(save_path) 
saver = tf.train.import_meta_graph(latest_checkpoint + '.meta') 
with tf.Session() as sess: 
    saver.restore(sess, latest_checkpoint) 

ध्यान दें कि बजाय tf.train.import_meta_graph बुलाने की भी है कि आप पहली जगह में मॉडल बनाने के लिए इस्तेमाल किया कोड के मूल टुकड़ा कह सकते हैं। हालांकि, मुझे लगता है कि import_meta_graph का उपयोग करने के लिए यह अधिक सुरुचिपूर्ण है क्योंकि इस तरह से आप अपने मॉडल को भी पुनर्स्थापित कर सकते हैं भले ही आपके पास बनाए गए कोड तक पहुंच न हो।


  1. मैं collection_list में शामिल करने की आवश्यकता, सभी चर कि मैं स्नैपशॉट में शामिल करना चाहते हैं के नाम है? (मेरे लिए सबसे आसान सब कुछ शामिल करने के लिए किया जाएगा।)

नहीं। हालांकि सवाल थोड़ा भ्रामक है: collection_listexport_meta_graph में चरों की सूची मतलब नहीं है, लेकिन संग्रह में से (की यानी सूची स्ट्रिंग कुंजी)।

संग्रह काफी आसान हैं, उदा।सभी trainable चर स्वचालित रूप से फोन करके संग्रह tf.GraphKeys.TRAINABLE_VARIABLES जो आप प्राप्त कर सकते हैं में शामिल हैं:

tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES) 

या

tf.trainable_variables() # defaults to the default graph 

बहाली के बाद आप अपने trainable चर के अलावा अन्य मध्यस्थ परिणाम के लिए उपयोग की जरूरत है, मैं इसे खोजने काफी इस तरह, एक कस्टम संग्रह में उन डाल करने के लिए सुविधाजनक:

... 
input_ = tf.placeholder(tf.float32, shape=[64, 64]) 
.... 
tf.add_to_collection('my_custom_collection', input_) 

इस संग्रह में संगृहीत किया जाता है (जब तक आप विशेष रूप से collection_list तर्क में export_meta_graph पर इस संग्रह के नाम को छोड़कर नहीं निर्दिष्ट करते हैं)। तो आप बस के रूप में इस बहाली के बाद input_ प्लेसहोल्डर प्राप्त कर सकते हैं:

... 
with tf.Session() as sess: 
    saver.restore(sess, latest_checkpoint) 
    input_ = tf.get_collection_ref('my_custom_collection')[0] 

  1. Tensorflow डॉक्स का कहना है: "यदि कोई collection_list निर्दिष्ट किया जाता है, में सभी संग्रह मॉडल निर्यात किया जाएगा। "क्या इसका मतलब यह है कि यदि मैं collection_list में कोई चर निर्दिष्ट नहीं करता हूं तो मॉडल में सभी चर निर्यात किए जाते हैं क्योंकि वे डिफ़ॉल्ट संग्रह में हैं?

हां। फिर सूक्ष्म विस्तार पर ध्यान दें कि collection_list संग्रहों की एक सूची है जो चर नहीं है। वास्तव में, यदि आप केवल कुछ चर सहेजे जाने के लिए चाहते हैं, तो आप tf.train.Saver ऑब्जेक्ट बनाते समय उनको निर्दिष्ट कर सकते हैं। tf.train.Saver.__init__ के प्रलेखन से:

"""Creates a `Saver`. 

    The constructor adds ops to save and restore variables. 

    `var_list` specifies the variables that will be saved and restored. It can 
    be passed as a `dict` or a list: 

    * A `dict` of names to variables: The keys are the names that will be 
     used to save or restore the variables in the checkpoint files. 
    * A list of variables: The variables will be keyed with their op name in 
     the checkpoint files. 

  1. Tensorflow डॉक्स का कहना है: "एक अजगर वस्तु के लिए आदेश में करने के लिए और MetaGraphDef से श्रृंखलाबद्ध किया जाना है, अजगर वर्ग to_proto() और from_proto() तरीकों को लागू करना चाहिए, और उन्हें प्रणाली साथ रजिस्टर register_proto_function का उपयोग कर। "मतलब यह है कि कि to_proto() और from_proto() adde किया जाना चाहिए डी केवल कक्षाओं के लिए जो मैंने परिभाषित किया है और निर्यात करना चाहते हैं? अगर मैं केवल मानक पायथन डेटा प्रकार (int, फ्लोट, सूची, dict) का उपयोग कर रहा हूं तो क्या यह अप्रासंगिक है?

मैं इस सुविधा का इस्तेमाल किया कभी नहीं किया है, लेकिन मैं कहूंगा कि अपने व्याख्या सही है।

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