मान लीजिए कि मैं एक कस्टम ऑप्टिमाइज़र क्लास लिखना चाहता हूं जो tf.kerasएपीआई (TensorFlow संस्करण> = 2.0 का उपयोग करके) के अनुरूप है । मैं यह करने के लिए प्रलेखित तरीके के बारे में उलझन में हूं कि कार्यान्वयन में क्या किया गया है।
tf.keras.optimizers.Optimizer राज्यों के लिए दस्तावेज ,
### Write a customized optimizer.
If you intend to create your own optimization algorithm, simply inherit from
this class and override the following methods:
- resource_apply_dense (update variable given gradient tensor is dense)
- resource_apply_sparse (update variable given gradient tensor is sparse)
- create_slots (if your optimizer algorithm requires additional variables)
हालाँकि, वर्तमान tf.keras.optimizers.Optimizerकार्यान्वयन एक resource_apply_denseविधि को परिभाषित नहीं करता है , लेकिन यह एक निजी दिखने वाली विधि ठूंठ को परिभाषित करता है । इसी तरह, कोई विधि या विधि नहीं हैं , लेकिन एक विधि स्टब और एक विधि कॉल हैं ।_resource_apply_denseresource_apply_sparsecreate_slots_resource_apply_sparse_create_slots
आधिकारिक में tf.keras.optimizers.Optimizerउपवर्गों (का उपयोग कर tf.keras.optimizers.Adamएक उदाहरण के रूप में), देखते हैं _resource_apply_dense, _resource_apply_sparseऔर _create_slotsविधियों, और वहाँ प्रमुख अंडरस्कोर के बिना ऐसी कोई तरीके हैं।
वहाँ थोड़ा-कम-सरकारी में इसी तरह के अग्रणी अंडरस्कोर तरीके हैं tf.keras.optimizers.Optimizerउपवर्गों (जैसे, tfa.optimizers.MovingAverage: TensorFlow ऐड-ऑन से _resource_apply_dense, _resource_apply_sparse, _create_slots)।
मेरे लिए एक और उलझन की बात यह है कि कुछ TensorFlow Addons ऑप्टिमाइज़र भीapply_gradients विधि (जैसे tfa.optimizers.MovingAverage) को ओवरराइड करते हैं , जबकि tf.keras.optimizersऑप्टिमाइज़र ऐसा नहीं करते हैं।
इसके अलावा, मैंने देखा कि apply_gradientsविधि tf.keras.optimizers.Optimizerविधि कॉल करती है_create_slots , लेकिन बेस tf.keras.optimizers.Optimizerक्लास में _create_slotsविधि नहीं है । तो, ऐसा लगता है कि एक _create_slotsविधि को एक ऑप्टिमाइज़र उपवर्ग में परिभाषित किया जाना चाहिए यदि वह उपवर्ग ओवरराइड नहीं करता है apply_gradients।
प्रशन
उपवर्ग का सही तरीका क्या है tf.keras.optimizers.Optimizer ? विशेष रूप से,
- क्या
tf.keras.optimizers.Optimizerशीर्ष पर सूचीबद्ध दस्तावेज़ीकरण का तात्पर्य उन विधियों के प्रमुख-अंडरस्कोर संस्करणों को ओवरराइड करने से है, जिनका वे उल्लेख करते हैं (उदाहरण के लिए;_resource_apply_denseइसके बजायresource_apply_dense)? यदि हां, तो क्या TensorFlow के भविष्य के संस्करणों में अपना व्यवहार बदलने वाले इन निजी-दिखने वाले तरीकों के बारे में कोई API गारंटी नहीं है? इन विधियों के हस्ताक्षर क्या हैं? - विधियों के
apply_gradientsअतिरिक्त कोई ओवरराइड कब करेगा_apply_resource_[dense|sparse]?
_resource_apply_denseया _resource_apply_sparseकार्यान्वित ऑप्टिमाइज़र में उनके उपयोग को देख सकते हैं। हालांकि यह नहीं हो सकता है, मुझे लगता है, स्थिरता की गारंटी के साथ सार्वजनिक एपीआई, मैं कहूंगा कि उनका उपयोग करना बहुत सुरक्षित है। उन्हें बस इस पहलू में बेहतर मार्गदर्शन देना चाहिए।
get_config) जोड़े जाने की योजना है , लेकिन फिर वे अभी तक सार्वजनिक दस्तावेज में नहीं दिखना चाहिए ।