परिचय
TensorFlow हब अन्य परिसंपत्तियों के साथ TensorFlow 2 के लिए सहेजे गए मॉडल को होस्ट करता है। उन्हें obj = hub.load(url)
[ अधिक जानें ] के साथ एक पायथन प्रोग्राम में वापस लोड किया जा सकता है। लौटाया गया obj
tf.saved_model.load()
का परिणाम है (TensorFlow's SavedModel गाइड देखें)। इस वस्तु में मनमाना गुण हो सकते हैं जो tf.functions, tf.Variables (उनके पूर्व-प्रशिक्षित मूल्यों से आरंभिक), अन्य संसाधन और, पुनरावर्ती, ऐसी अधिक वस्तुएं हैं।
यह पृष्ठ TensorFlow Python प्रोग्राम में पुन: उपयोग करने के लिए लोड किए गए obj
द्वारा लागू किए जाने वाले इंटरफ़ेस का वर्णन करता है। इस इंटरफ़ेस के अनुरूप सहेजे गए मॉडल को पुन: प्रयोज्य सहेजे गए मॉडल कहा जाता है।
पुन: उपयोग करने का अर्थ है obj
के चारों ओर एक बड़ा मॉडल बनाना, जिसमें इसे ठीक करने की क्षमता भी शामिल है। फाइन-ट्यूनिंग का मतलब आसपास के मॉडल के हिस्से के रूप में लोड किए गए obj
में वजन का और प्रशिक्षण है। हानि फ़ंक्शन और ऑप्टिमाइज़र आसपास के मॉडल द्वारा निर्धारित किए जाते हैं; obj
केवल आउटपुट सक्रियण ("फॉरवर्ड पास") के इनपुट के मानचित्रण को परिभाषित करता है, संभवतः ड्रॉपआउट या बैच सामान्यीकरण जैसी तकनीकों सहित।
TensorFlow हब टीम सभी सहेजे गए मॉडल में पुन: प्रयोज्य सहेजे गए मॉडल इंटरफ़ेस को लागू करने की अनुशंसा करती है जो उपरोक्त अर्थ में पुन: उपयोग करने के लिए होती हैं। tensorflow_hub
लाइब्रेरी से कई उपयोगिताओं, विशेष रूप से hub.KerasLayer को इसे लागू करने के लिए hub.KerasLayer
की आवश्यकता होती है।
सिग्नेचरडिफ्स से संबंध
tf.फ़ंक्शंस और अन्य TF2 सुविधाओं के संदर्भ में यह इंटरफ़ेस, SavedModel के हस्ताक्षरों से अलग है, जो TF1 के बाद से उपलब्ध हैं और TF2 में अनुमान के लिए उपयोग किए जाते हैं (जैसे कि TF सर्विंग या TF लाइट में सेव्डमॉडल्स को तैनात करना)। अनुमान के लिए हस्ताक्षर ठीक-ट्यूनिंग का समर्थन करने के लिए पर्याप्त अभिव्यंजक नहीं हैं, और tf.function
पुन: उपयोग किए गए मॉडल के लिए अधिक प्राकृतिक और अभिव्यंजक पायथन एपीआई प्रदान करता है।
मॉडल-बिल्डिंग लाइब्रेरी से संबंध
एक पुन: प्रयोज्य सहेजा गया मॉडल केवल TensorFlow 2 आदिम का उपयोग करता है, जो किसी विशेष मॉडल-बिल्डिंग लाइब्रेरी जैसे कि केरस या सॉनेट से स्वतंत्र है। यह मूल मॉडल-बिल्डिंग कोड पर निर्भरता से मुक्त मॉडल-बिल्डिंग लाइब्रेरी में पुन: उपयोग की सुविधा प्रदान करता है।
पुन: प्रयोज्य सहेजे गए मॉडल को किसी भी मॉडल-बिल्डिंग लाइब्रेरी में लोड करने या उन्हें बचाने के लिए अनुकूलन की कुछ मात्रा की आवश्यकता होगी। Keras के लिए, हब. KerasLayer लोडिंग प्रदान करता है, और Keras की अंतर्निहित बचत SavedModel प्रारूप में इस इंटरफ़ेस का सुपरसेट प्रदान करने के लक्ष्य के साथ TF2 के लिए फिर से डिज़ाइन की गई है (मई 2019 से RFC देखें)।
कार्य-विशिष्ट "सामान्य सहेजे गए मॉडल एपीआई" से संबंध
इस पृष्ठ पर इंटरफ़ेस परिभाषा किसी भी संख्या और प्रकार के इनपुट और आउटपुट की अनुमति देती है। TF हब के लिए सामान्य सहेजे गए मॉडल API इस सामान्य इंटरफ़ेस को विशिष्ट कार्यों के लिए उपयोग सम्मेलनों के साथ परिष्कृत करते हैं ताकि मॉडल को आसानी से विनिमेय बनाया जा सके।
इंटरफ़ेस परिभाषा
गुण
एक पुन: प्रयोज्य सहेजा गया मॉडल एक TensorFlow 2 सहेजा गया मॉडल है जैसे कि obj = tf.saved_model.load(...)
एक ऑब्जेक्ट देता है जिसमें निम्न विशेषताएँ होती हैं
__call__
। आवश्यक। मॉडल की गणना ("फॉरवर्ड पास") को लागू करने वाला एक tf.फंक्शन नीचे दिए गए विनिर्देश के अधीन है।variables
: tf.Variable वस्तुओं की एक सूची,__call__
के किसी भी संभावित आह्वान द्वारा उपयोग किए जाने वाले सभी चरों को सूचीबद्ध करते हुए, जिसमें प्रशिक्षित और गैर-प्रशिक्षित दोनों शामिल हैं।खाली होने पर यह सूची छोड़ी जा सकती है।
trainable_variables
: tf.Variable वस्तुओं की एक सूची जैसेv.trainable
सभी तत्वों के लिए सही है। ये वेरिएबल्सvariables
का एक सबसेट होना चाहिए। ऑब्जेक्ट को फ़ाइन-ट्यूनिंग करते समय प्रशिक्षित किए जाने वाले ये वेरिएबल्स हैं। सहेजे गए मॉडेल निर्माता यहां कुछ वेरिएबल्स को छोड़ना चुन सकते हैं जो मूल रूप से यह इंगित करने के लिए प्रशिक्षित थे कि इन्हें ठीक-ट्यूनिंग के दौरान संशोधित नहीं किया जाना चाहिए।यह सूची खाली होने पर छोड़ी जा सकती है, विशेष रूप से, यदि सहेजा गया मॉडल ठीक-ट्यूनिंग का समर्थन नहीं करता है।
regularization_losses
: tf. कार्यों की एक सूची, प्रत्येक शून्य इनपुट लेता है और एक स्केलर फ्लोट टेन्सर लौटाता है। फाइन-ट्यूनिंग के लिए, सहेजे गए मॉडल उपयोगकर्ता को सलाह दी जाती है कि इन्हें नुकसान में अतिरिक्त नियमितीकरण शर्तों के रूप में शामिल करें (आगे स्केल किए बिना सबसे सरल मामले में)। आमतौर पर, इनका उपयोग वजन नियमित करने वालों का प्रतिनिधित्व करने के लिए किया जाता है। (इनपुट्स की कमी के कारण, ये tf.फ़ंक्शंस गतिविधि नियमितकर्ता व्यक्त नहीं कर सकते हैं।)यह सूची खाली होने पर छोड़ी जा सकती है, विशेष रूप से, यदि सहेजा गया मॉडल ठीक-ट्यूनिंग का समर्थन नहीं करता है या वजन नियमितीकरण निर्धारित नहीं करना चाहता है।
__call__
फ़ंक्शन
एक पुनर्स्थापित सहेजे गए मॉडल obj
में एक obj.__call__
विशेषता है जो एक पुनर्स्थापित टीएफ.फंक्शन है और obj
को निम्नानुसार कॉल करने की अनुमति देता है।
सार (छद्म कोड):
outputs = obj(inputs, trainable=..., **kwargs)
बहस
तर्क इस प्रकार हैं।
सहेजे गए मॉडल के इनपुट सक्रियण के बैच के साथ एक स्थितीय, आवश्यक तर्क है। इसका प्रकार एक है
- एकल इनपुट के लिए एकल टेन्सर,
- अनाम निविष्टियों के क्रमित अनुक्रम के लिए टेंसरों की एक सूची,
- इनपुट नामों के एक विशेष सेट द्वारा की गई टेंसरों की एक तानाशाही।
(भविष्य में इस इंटरफ़ेस के संशोधन अधिक सामान्य नेस्ट की अनुमति दे सकते हैं।) सेव्डमॉडल क्रिएटर इनमें से किसी एक को चुनता है और टेंसर आकार और dtypes। जहां उपयोगी हो, आकार के कुछ आयाम अपरिभाषित होने चाहिए (विशेष रूप से बैच आकार)।
एक वैकल्पिक खोजशब्द तर्क
training
हो सकता है जो एक पायथन बूलियन,True
याFalse
को स्वीकार करता है। डिफ़ॉल्टFalse
है। यदि मॉडल फाइन-ट्यूनिंग का समर्थन करता है, और यदि इसकी गणना दोनों के बीच भिन्न होती है (उदाहरण के लिए, ड्रॉपआउट और बैच सामान्यीकरण में), तो इस तर्क के साथ भेद लागू किया जाता है। अन्यथा, यह तर्क अनुपस्थित हो सकता है।यह आवश्यक नहीं है कि
__call__
टेंसर-मूल्यवानtraining
तर्क को स्वीकार करे। यह कॉल करने वाले पर निर्भर करता है कि यदि आवश्यक हो तो उनके बीच प्रेषण के लिएtf.cond()
का उपयोग करें।सहेजा गया मॉडल निर्माता विशेष नामों के अधिक वैकल्पिक
kwargs
को स्वीकार करना चुन सकता है।टेंसर-मूल्यवान तर्कों के लिए, सहेजे गए मॉडल निर्माता उनके अनुमेय dtypes और आकृतियों को परिभाषित करते हैं।
tf.function
एक tf.TensorSpec इनपुट के साथ ट्रेस किए गए तर्क पर एक पायथन डिफ़ॉल्ट मान स्वीकार करता है। इस तरह के तर्कों का उपयोग__call__
(जैसे, ड्रॉपआउट दर) में शामिल न्यूमेरिक हाइपरपैरामीटर के अनुकूलन की अनुमति देने के लिए किया जा सकता है।पायथन-मूल्यवान तर्कों के लिए, सहेजे गए मॉडल निर्माता उनके अनुमेय मूल्यों को परिभाषित करते हैं। ट्रेस किए गए फ़ंक्शन में असतत विकल्प बनाने के लिए इस तरह के तर्कों को झंडे के रूप में इस्तेमाल किया जा सकता है (लेकिन निशानों के संयोजी विस्फोट को ध्यान में रखें)।
बहाल किए गए __call__
फ़ंक्शन को तर्कों के सभी अनुमेय संयोजनों के लिए निशान प्रदान करना चाहिए। True
और False
के बीच फ़्लिपिंग training
से तर्कों की स्वीकार्यता नहीं बदलनी चाहिए।
परिणाम
outputs
को कॉल करने से obj
हो सकते हैं
- एकल आउटपुट के लिए एकल टेन्सर,
- अनाम आउटपुट के क्रमित अनुक्रम के लिए टेन्सर की एक सूची,
- आउटपुट नामों के एक विशेष सेट द्वारा की गई टेन्सर की एक तानाशाही।
(भविष्य में इस इंटरफ़ेस के संशोधन अधिक सामान्य नेस्ट की अनुमति दे सकते हैं।) पायथन-मूल्यवान kwargs के आधार पर रिटर्न प्रकार भिन्न हो सकता है। यह अतिरिक्त आउटपुट उत्पन्न करने वाले झंडों के लिए अनुमति देता है। SavedModel क्रिएटर आउटपुट dtypes और शेप और इनपुट पर उनकी निर्भरता को परिभाषित करता है।
नामांकित कॉल करने योग्य
एक पुन: प्रयोज्य सहेजा गया मॉडल उपरोक्त वर्णित तरीके से कई मॉडल टुकड़े प्रदान कर सकता है, उन्हें नामांकित उप-वस्तुओं में डालकर, उदाहरण के लिए, obj.foo
, obj.bar
और इसी तरह। प्रत्येक सबऑब्जेक्ट एक __call__
विधि प्रदान करता है और उस मॉडल के टुकड़े के लिए विशिष्ट चर आदि के बारे में सहायक विशेषताएँ प्रदान करता है। उपरोक्त उदाहरण के लिए, वहाँ होगा obj.foo.__call__
, obj.foo.variables
और इसी तरह।
ध्यान दें कि यह इंटरफ़ेस सीधे tf.foo
के रूप में एक नंगे tf.function को जोड़ने के दृष्टिकोण को शामिल नहीं करता है।
पुन: प्रयोज्य सहेजे गए मॉडलों के उपयोगकर्ताओं से केवल एक स्तर के नेस्टिंग को संभालने की उम्मीद की जाती है ( obj.bar
लेकिन obj.bar.baz
नहीं)। (भविष्य में इस इंटरफ़ेस के संशोधन से गहरी नेस्टिंग की अनुमति मिल सकती है, और यह आवश्यकता समाप्त हो सकती है कि शीर्ष-स्तरीय ऑब्जेक्ट स्वयं कॉल करने योग्य हो।)
अंतिम शब्द
इन-प्रोसेस एपीआई से संबंध
यह दस्तावेज़ एक पायथन वर्ग के एक इंटरफ़ेस का वर्णन करता है जिसमें tf.function और tf.Variable जैसे प्रिमिटिव होते हैं जो tf.saved_model.save()
और tf.saved_model.load()
के माध्यम से क्रमांकन के माध्यम से एक राउंड-ट्रिप से बचे रहते हैं। हालाँकि, इंटरफ़ेस पहले से ही मूल ऑब्जेक्ट पर मौजूद था जिसे tf.saved_model.save()
पास किया गया था। उस इंटरफ़ेस के लिए अनुकूलन एक TensorFlow प्रोग्राम के भीतर मॉडल-बिल्डिंग APIs में मॉडल टुकड़ों के आदान-प्रदान को सक्षम बनाता है।