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