मान लीजिए कि मैं एक कस्टम ऑप्टिमाइज़र क्लास लिखना चाहता हूं जो 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_dense
resource_apply_sparse
create_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
) जोड़े जाने की योजना है , लेकिन फिर वे अभी तक सार्वजनिक दस्तावेज में नहीं दिखना चाहिए ।