2018 में अपने लॉन्च के समय, TensorFlow Hub ने TensorFlow 1 प्रोग्राम में आयात के लिए एक ही प्रकार की संपत्ति: TF1 हब प्रारूप की पेशकश की।
यह पृष्ठ बताता है कि TF1 में TF1 हब प्रारूप का उपयोग कैसे करें (या TF2 का TF1 संगतता मोड) hub.Module
वर्ग और संबद्ध API के साथ। (विशिष्ट उपयोग tf.compat.layers
या tf.layers
के साथ TF1 हब प्रारूप में एक या एक से अधिक मॉडल को जोड़कर संभवतः एक TF1 Estimator
के अंदर एक tf.Graph
बनाने के लिए है)।
TensorFlow 2 (TF1 संगतता मोड के बाहर) के उपयोगकर्ताओं को hub.load()
या hub.KerasLayer
के साथ नए एपीआई का उपयोग करना चाहिए। नया एपीआई नए TF2 सहेजे गए मॉडल संपत्ति प्रकार को लोड करता है, लेकिन TF1 हब प्रारूप को TF2 में लोड करने के लिए सीमित समर्थन भी है।
TF1 हब प्रारूप में एक मॉडल का उपयोग करना
TF1 हब प्रारूप में एक मॉडल को इंस्टेंट करना
TF1 हब प्रारूप में एक मॉडल एक हब बनाकर एक TensorFlow प्रोग्राम में आयात किया जाता है। इसके URL या फ़ाइल सिस्टम पथ के साथ एक स्ट्रिंग से hub.Module
ऑब्जेक्ट, जैसे:
m = hub.Module("path/to/a/module_dir")
नोट: अन्य मान्य हैंडल प्रकारों के बारे में अधिक जानकारी यहाँ देखें।
यह मॉड्यूल के चर को वर्तमान TensorFlow ग्राफ़ में जोड़ता है। उनके इनिशियलाइज़र को चलाने से डिस्क से उनके पूर्व-प्रशिक्षित मान पढ़ेंगे। इसी तरह, टेबल और अन्य राज्य को ग्राफ में जोड़ा जाता है।
कैशिंग मॉड्यूल
किसी URL से मॉड्यूल बनाते समय, मॉड्यूल सामग्री डाउनलोड की जाती है और स्थानीय सिस्टम अस्थायी निर्देशिका में कैश की जाती है। वह स्थान जहां मॉड्यूल कैश किए गए हैं, TFHUB_CACHE_DIR
पर्यावरण चर का उपयोग करके ओवरराइड किया जा सकता है। विवरण के लिए, कैशिंग देखें।
एक मॉड्यूल लागू करना
एक बार इंस्टेंट होने के बाद, एक मॉड्यूल m
टेंसर इनपुट से टेंसर आउटपुट तक पायथन फ़ंक्शन की तरह शून्य या अधिक बार कहा जा सकता है:
y = m(x)
इस तरह की प्रत्येक कॉल x
से y
गणना करने के लिए वर्तमान TensorFlow ग्राफ़ में संचालन जोड़ती है। यदि इसमें प्रशिक्षित भार वाले चर शामिल हैं, तो इन्हें सभी अनुप्रयोगों के बीच साझा किया जाता है।
मॉड्यूल एक से अधिक तरीकों से लागू होने की अनुमति देने के लिए कई नामित हस्ताक्षरों को परिभाषित कर सकते हैं (पायथन ऑब्जेक्ट्स के तरीकों के समान)। एक मॉड्यूल के दस्तावेज़ को उपलब्ध हस्ताक्षरों का वर्णन करना चाहिए। उपरोक्त कॉल "default"
नामक हस्ताक्षर लागू करता है। किसी भी हस्ताक्षर को उसके नाम को वैकल्पिक signature=
तर्क में पास करके चुना जा सकता है।
यदि हस्ताक्षर में एकाधिक इनपुट हैं, तो उन्हें हस्ताक्षर द्वारा परिभाषित कुंजी के साथ एक तानाशाही के रूप में पारित किया जाना चाहिए। इसी तरह, यदि एक हस्ताक्षर में कई आउटपुट हैं, तो इन्हें हस्ताक्षर द्वारा परिभाषित कुंजी के तहत as_dict=True
पास करके एक तानाशाही के रूप में पुनर्प्राप्त किया जा सकता है (कुंजी "default"
एकल आउटपुट के लिए है अगर as_dict=False
लौटाया जाता है)। तो मॉड्यूल को लागू करने का सबसे सामान्य रूप ऐसा दिखता है:
outputs = m(dict(apples=x1, oranges=x2), signature="fruit_to_pet", as_dict=True)
y1 = outputs["cats"]
y2 = outputs["dogs"]
एक कॉलर को हस्ताक्षर द्वारा परिभाषित सभी इनपुट की आपूर्ति करनी चाहिए, लेकिन मॉड्यूल के सभी आउटपुट का उपयोग करने की कोई आवश्यकता नहीं है। TensorFlow मॉड्यूल के केवल उन हिस्सों को चलाएगा जो tf.Session.run()
में एक लक्ष्य की निर्भरता के रूप में समाप्त होते हैं। दरअसल, मॉड्यूल प्रकाशक मुख्य आउटपुट के साथ-साथ उन्नत उपयोगों (जैसे मध्यवर्ती परतों की सक्रियता) के लिए विभिन्न आउटपुट प्रदान करना चुन सकते हैं। मॉड्यूल उपभोक्ताओं को अतिरिक्त आउटपुट को इनायत से संभालना चाहिए।
वैकल्पिक मॉड्यूल की कोशिश कर रहा है
जब भी एक ही कार्य के लिए कई मॉड्यूल होते हैं, तो TensorFlow Hub उन्हें संगत सिग्नेचर (इंटरफेस) से लैस करने के लिए प्रोत्साहित करता है, जैसे कि अलग-अलग को आज़माना उतना ही आसान है जितना कि मॉड्यूल हैंडल को स्ट्रिंग-वैल्यू हाइपरपैरामीटर के रूप में बदलना।
इसके लिए, हम लोकप्रिय कार्यों के लिए अनुशंसित सामान्य हस्ताक्षरों का संग्रह बनाए रखते हैं।
एक नया मॉड्यूल बनाना
संगतता नोट
TF1 हब प्रारूप TensorFlow 1 की ओर तैयार है। यह TensorFlow 2 में TF हब द्वारा केवल आंशिक रूप से समर्थित है। कृपया इसके बजाय नए TF2 सहेजे गएमॉडल प्रारूप में प्रकाशित करने पर विचार करें।
TF1 हब प्रारूप सिंटैक्टिक स्तर (समान फ़ाइल नाम और प्रोटोकॉल संदेश) पर TensorFlow 1 के सहेजे गए मॉडल प्रारूप के समान है, लेकिन मॉड्यूल पुन: उपयोग, संरचना और पुन: प्रशिक्षण के लिए अनुमति देने के लिए शब्दार्थ से भिन्न है (उदाहरण के लिए, संसाधन इनिशियलाइज़र का अलग भंडारण, अलग टैगिंग मेटाग्राफ के लिए कन्वेंशन)। डिस्क पर उन्हें अलग बताने का सबसे आसान तरीका tfhub_module.pb
फ़ाइल की उपस्थिति या अनुपस्थिति है।
सामान्य पहूंच
एक नए मॉड्यूल को परिभाषित करने के लिए, एक प्रकाशक hub.create_module_spec()
फ़ंक्शन module_fn
के साथ कॉल करता है। यह फ़ंक्शन कॉलर द्वारा प्रदान किए जाने वाले इनपुट के लिए tf.placeholder()
का उपयोग करके मॉड्यूल की आंतरिक संरचना का प्रतिनिधित्व करने वाला एक ग्राफ़ बनाता है। फिर यह एक या अधिक बार hub.add_signature(name, inputs, outputs)
कॉल करके हस्ताक्षर को परिभाषित करता है।
उदाहरण के लिए:
def module_fn():
inputs = tf.placeholder(dtype=tf.float32, shape=[None, 50])
layer1 = tf.layers.dense(inputs, 200)
layer2 = tf.layers.dense(layer1, 100)
outputs = dict(default=layer2, hidden_activations=layer1)
# Add default signature.
hub.add_signature(inputs=inputs, outputs=outputs)
...
spec = hub.create_module_spec(module_fn)
किसी विशेष TensorFlow ग्राफ़ के भीतर मॉड्यूल ऑब्जेक्ट को इंस्टेंट करने के लिए, पथ के बजाय hub.create_module_spec()
के परिणाम का उपयोग किया जा सकता है। ऐसे मामले में, कोई चेकपॉइंट नहीं है, और मॉड्यूल इंस्टेंस इसके बजाय वेरिएबल इनिशियलाइज़र का उपयोग करेगा।
किसी भी मॉड्यूल उदाहरण को उसके export(path, session)
विधि के माध्यम से डिस्क में क्रमबद्ध किया जा सकता है। एक मॉड्यूल का निर्यात session
में पारित पथ में अपने चर की वर्तमान स्थिति के साथ इसकी परिभाषा को क्रमबद्ध करता है। इसका उपयोग पहली बार किसी मॉड्यूल को निर्यात करते समय किया जा सकता है, साथ ही ठीक ट्यून किए गए मॉड्यूल को निर्यात करते समय भी किया जा सकता है।
TensorFlow Estimators के साथ संगतता के लिए, hub.LatestModuleExporter
नवीनतम चेकपॉइंट से मॉड्यूल निर्यात करता है, ठीक उसी तरह जैसे tf.estimator.LatestExporter
नवीनतम चेकपॉइंट से पूरे मॉडल का निर्यात करता है।
मॉड्यूल प्रकाशकों को जब संभव हो तो एक सामान्य हस्ताक्षर लागू करना चाहिए, ताकि उपभोक्ता आसानी से मॉड्यूल का आदान-प्रदान कर सकें और अपनी समस्या के लिए सबसे अच्छा खोज सकें।
वास्तविक उदाहरण
एक सामान्य टेक्स्ट एम्बेडिंग प्रारूप से मॉड्यूल बनाने के तरीके के वास्तविक उदाहरण के लिए हमारे टेक्स्ट एम्बेडिंग मॉड्यूल निर्यातक पर एक नज़र डालें।
फ़ाइन ट्यूनिंग
किसी आयातित मॉड्यूल के वेरिएबल्स को उसके आस-पास के मॉडल के साथ मिलकर प्रशिक्षित करना फाइन-ट्यूनिंग कहलाता है। फाइन-ट्यूनिंग के परिणामस्वरूप बेहतर गुणवत्ता हो सकती है, लेकिन नई जटिलताएँ जुड़ जाती हैं। हम उपभोक्ताओं को सलाह देते हैं कि वे सरल गुणवत्ता वाले बदलावों की खोज करने के बाद ही फाइन-ट्यूनिंग पर ध्यान दें, और केवल तभी जब मॉड्यूल प्रकाशक इसकी अनुशंसा करता है।
उपभोक्ताओं के लिए
फ़ाइन-ट्यूनिंग को सक्षम करने के लिए, मॉड्यूल को hub.Module(..., trainable=True)
के साथ इंस्टैंट करें ताकि इसके वेरिएबल्स को ट्रेन करने योग्य बनाया जा सके और TensorFlow के REGULARIZATION_LOSSES
इम्पोर्ट किया जा सके। यदि मॉड्यूल में कई ग्राफ़ वेरिएंट हैं, तो प्रशिक्षण के लिए उपयुक्त एक को चुनना सुनिश्चित करें। आमतौर पर, वह {"train"}
टैग वाला होता है।
एक प्रशिक्षण शासन चुनें जो पूर्व-प्रशिक्षित भार को बर्बाद नहीं करता है, उदाहरण के लिए, खरोंच से प्रशिक्षण की तुलना में कम सीखने की दर।
प्रकाशकों के लिए
उपभोक्ताओं के लिए फाइन-ट्यूनिंग को आसान बनाने के लिए, कृपया निम्नलिखित बातों का ध्यान रखें:
फाइन-ट्यूनिंग को नियमितीकरण की आवश्यकता है। आपके मॉड्यूल को
REGULARIZATION_LOSSES
संग्रह के साथ निर्यात किया जाता है, जो आपकीtf.layers.dense(..., kernel_regularizer=...)
आदि की पसंद को उपभोक्ता कोtf.losses.get_regularization_losses()
से प्राप्त होने वाली चीज़ों में डालता है। L1/L2 नियमितीकरण नुकसान को परिभाषित करने के इस तरीके को प्राथमिकता दें।प्रकाशक मॉडल में,
tf.train.FtrlOptimizer
,tf.train.ProximalGradientDescentOptimizer
और अन्य समीपस्थ ऑप्टिमाइज़र केl1_
औरl2_regularization_strength
पैरामीटर के माध्यम से L1/L2 नियमितीकरण को परिभाषित करने से बचें. इन्हें मॉड्यूल के साथ निर्यात नहीं किया जाता है, और विश्व स्तर पर नियमितीकरण की ताकत निर्धारित करना उपभोक्ता के लिए उपयुक्त नहीं हो सकता है। व्यापक (यानी विरल रैखिक) या विस्तृत और गहरे मॉडल में L1 नियमितीकरण को छोड़कर, इसके बजाय व्यक्तिगत नियमितीकरण नुकसान का उपयोग करना संभव होना चाहिए।यदि आप ड्रॉपआउट, बैच सामान्यीकरण, या इसी तरह की प्रशिक्षण तकनीकों का उपयोग करते हैं, तो उनके हाइपरपरमेटर्स को उन मानों पर सेट करें जो कई अपेक्षित उपयोगों में समझ में आते हैं। ड्रॉपआउट दर को लक्ष्य समस्या की ओवरफिटिंग की प्रवृत्ति के अनुसार समायोजित करना पड़ सकता है। बैच सामान्यीकरण में, छोटे डेटासेट और/या बड़े बैचों के साथ ठीक-ट्यूनिंग को सक्षम करने के लिए संवेग (उर्फ क्षय गुणांक) काफी छोटा होना चाहिए। उन्नत उपभोक्ताओं के लिए, एक हस्ताक्षर जोड़ने पर विचार करें जो महत्वपूर्ण हाइपरपैरामीटर पर नियंत्रण को उजागर करता है।
2018 में अपने लॉन्च के समय, TensorFlow Hub ने TensorFlow 1 प्रोग्राम में आयात के लिए एक ही प्रकार की संपत्ति: TF1 हब प्रारूप की पेशकश की।
यह पृष्ठ बताता है कि TF1 में TF1 हब प्रारूप का उपयोग कैसे करें (या TF2 का TF1 संगतता मोड) hub.Module
वर्ग और संबद्ध API के साथ। (विशिष्ट उपयोग tf.compat.layers
या tf.layers
के साथ TF1 हब प्रारूप में एक या एक से अधिक मॉडल को जोड़कर संभवतः एक TF1 Estimator
के अंदर एक tf.Graph
बनाने के लिए है)।
TensorFlow 2 (TF1 संगतता मोड के बाहर) के उपयोगकर्ताओं को hub.load()
या hub.KerasLayer
के साथ नए एपीआई का उपयोग करना चाहिए। नया एपीआई नए TF2 सहेजे गए मॉडल संपत्ति प्रकार को लोड करता है, लेकिन TF1 हब प्रारूप को TF2 में लोड करने के लिए सीमित समर्थन भी है।
TF1 हब प्रारूप में एक मॉडल का उपयोग करना
TF1 हब प्रारूप में एक मॉडल को इंस्टेंट करना
TF1 हब प्रारूप में एक मॉडल एक हब बनाकर एक TensorFlow प्रोग्राम में आयात किया जाता है। इसके URL या फ़ाइल सिस्टम पथ के साथ एक स्ट्रिंग से hub.Module
ऑब्जेक्ट, जैसे:
m = hub.Module("path/to/a/module_dir")
नोट: अन्य मान्य हैंडल प्रकारों के बारे में अधिक जानकारी यहाँ देखें।
यह मॉड्यूल के चर को वर्तमान TensorFlow ग्राफ़ में जोड़ता है। उनके इनिशियलाइज़र को चलाने से डिस्क से उनके पूर्व-प्रशिक्षित मान पढ़ेंगे। इसी तरह, टेबल और अन्य राज्य को ग्राफ में जोड़ा जाता है।
कैशिंग मॉड्यूल
किसी URL से मॉड्यूल बनाते समय, मॉड्यूल सामग्री डाउनलोड की जाती है और स्थानीय सिस्टम अस्थायी निर्देशिका में कैश की जाती है। वह स्थान जहां मॉड्यूल कैश किए गए हैं, TFHUB_CACHE_DIR
पर्यावरण चर का उपयोग करके ओवरराइड किया जा सकता है। विवरण के लिए, कैशिंग देखें।
एक मॉड्यूल लागू करना
एक बार इंस्टेंट होने के बाद, एक मॉड्यूल m
टेंसर इनपुट से टेंसर आउटपुट तक पायथन फ़ंक्शन की तरह शून्य या अधिक बार कहा जा सकता है:
y = m(x)
इस तरह की प्रत्येक कॉल x
से y
गणना करने के लिए वर्तमान TensorFlow ग्राफ़ में संचालन जोड़ती है। यदि इसमें प्रशिक्षित भार वाले चर शामिल हैं, तो इन्हें सभी अनुप्रयोगों के बीच साझा किया जाता है।
मॉड्यूल एक से अधिक तरीकों से लागू होने की अनुमति देने के लिए कई नामित हस्ताक्षरों को परिभाषित कर सकते हैं (पायथन ऑब्जेक्ट्स के तरीकों के समान)। एक मॉड्यूल के दस्तावेज़ को उपलब्ध हस्ताक्षरों का वर्णन करना चाहिए। उपरोक्त कॉल "default"
नामक हस्ताक्षर लागू करता है। किसी भी हस्ताक्षर को उसके नाम को वैकल्पिक signature=
तर्क में पास करके चुना जा सकता है।
यदि हस्ताक्षर में एकाधिक इनपुट हैं, तो उन्हें हस्ताक्षर द्वारा परिभाषित कुंजी के साथ एक तानाशाही के रूप में पारित किया जाना चाहिए। इसी तरह, यदि एक हस्ताक्षर में कई आउटपुट हैं, तो इन्हें हस्ताक्षर द्वारा परिभाषित कुंजी के तहत as_dict=True
पास करके एक तानाशाही के रूप में पुनर्प्राप्त किया जा सकता है (कुंजी "default"
एकल आउटपुट के लिए है अगर as_dict=False
लौटाया जाता है)। तो मॉड्यूल को लागू करने का सबसे सामान्य रूप ऐसा दिखता है:
outputs = m(dict(apples=x1, oranges=x2), signature="fruit_to_pet", as_dict=True)
y1 = outputs["cats"]
y2 = outputs["dogs"]
एक कॉलर को हस्ताक्षर द्वारा परिभाषित सभी इनपुट की आपूर्ति करनी चाहिए, लेकिन मॉड्यूल के सभी आउटपुट का उपयोग करने की कोई आवश्यकता नहीं है। TensorFlow मॉड्यूल के केवल उन हिस्सों को चलाएगा जो tf.Session.run()
में एक लक्ष्य की निर्भरता के रूप में समाप्त होते हैं। दरअसल, मॉड्यूल प्रकाशक मुख्य आउटपुट के साथ-साथ उन्नत उपयोगों (जैसे मध्यवर्ती परतों की सक्रियता) के लिए विभिन्न आउटपुट प्रदान करना चुन सकते हैं। मॉड्यूल उपभोक्ताओं को अतिरिक्त आउटपुट को इनायत से संभालना चाहिए।
वैकल्पिक मॉड्यूल की कोशिश कर रहा है
जब भी एक ही कार्य के लिए कई मॉड्यूल होते हैं, तो TensorFlow Hub उन्हें संगत सिग्नेचर (इंटरफेस) से लैस करने के लिए प्रोत्साहित करता है, जैसे कि अलग-अलग को आज़माना उतना ही आसान है जितना कि मॉड्यूल हैंडल को स्ट्रिंग-वैल्यू हाइपरपैरामीटर के रूप में बदलना।
इसके लिए, हम लोकप्रिय कार्यों के लिए अनुशंसित सामान्य हस्ताक्षरों का संग्रह बनाए रखते हैं।
एक नया मॉड्यूल बनाना
संगतता नोट
TF1 हब प्रारूप TensorFlow 1 की ओर तैयार है। यह TensorFlow 2 में TF हब द्वारा केवल आंशिक रूप से समर्थित है। कृपया इसके बजाय नए TF2 सहेजे गएमॉडल प्रारूप में प्रकाशित करने पर विचार करें।
TF1 हब प्रारूप सिंटैक्टिक स्तर (समान फ़ाइल नाम और प्रोटोकॉल संदेश) पर TensorFlow 1 के सहेजे गए मॉडल प्रारूप के समान है, लेकिन मॉड्यूल पुन: उपयोग, संरचना और पुन: प्रशिक्षण के लिए अनुमति देने के लिए शब्दार्थ से भिन्न है (उदाहरण के लिए, संसाधन इनिशियलाइज़र का अलग भंडारण, अलग टैगिंग मेटाग्राफ के लिए कन्वेंशन)। डिस्क पर उन्हें अलग बताने का सबसे आसान तरीका tfhub_module.pb
फ़ाइल की उपस्थिति या अनुपस्थिति है।
सामान्य पहूंच
एक नए मॉड्यूल को परिभाषित करने के लिए, एक प्रकाशक hub.create_module_spec()
फ़ंक्शन module_fn
के साथ कॉल करता है। यह फ़ंक्शन कॉलर द्वारा प्रदान किए जाने वाले इनपुट के लिए tf.placeholder()
का उपयोग करके मॉड्यूल की आंतरिक संरचना का प्रतिनिधित्व करने वाला एक ग्राफ़ बनाता है। फिर यह एक या अधिक बार hub.add_signature(name, inputs, outputs)
कॉल करके हस्ताक्षर को परिभाषित करता है।
उदाहरण के लिए:
def module_fn():
inputs = tf.placeholder(dtype=tf.float32, shape=[None, 50])
layer1 = tf.layers.dense(inputs, 200)
layer2 = tf.layers.dense(layer1, 100)
outputs = dict(default=layer2, hidden_activations=layer1)
# Add default signature.
hub.add_signature(inputs=inputs, outputs=outputs)
...
spec = hub.create_module_spec(module_fn)
किसी विशेष TensorFlow ग्राफ़ के भीतर मॉड्यूल ऑब्जेक्ट को इंस्टेंट करने के लिए, पथ के बजाय hub.create_module_spec()
के परिणाम का उपयोग किया जा सकता है। ऐसे मामले में, कोई चेकपॉइंट नहीं है, और मॉड्यूल इंस्टेंस इसके बजाय वेरिएबल इनिशियलाइज़र का उपयोग करेगा।
किसी भी मॉड्यूल उदाहरण को उसके export(path, session)
विधि के माध्यम से डिस्क में क्रमबद्ध किया जा सकता है। एक मॉड्यूल का निर्यात session
में पारित पथ में अपने चर की वर्तमान स्थिति के साथ इसकी परिभाषा को क्रमबद्ध करता है। इसका उपयोग पहली बार किसी मॉड्यूल को निर्यात करते समय किया जा सकता है, साथ ही ठीक ट्यून किए गए मॉड्यूल को निर्यात करते समय भी किया जा सकता है।
TensorFlow Estimators के साथ संगतता के लिए, hub.LatestModuleExporter
नवीनतम चेकपॉइंट से मॉड्यूल निर्यात करता है, ठीक उसी तरह जैसे tf.estimator.LatestExporter
नवीनतम चेकपॉइंट से पूरे मॉडल का निर्यात करता है।
मॉड्यूल प्रकाशकों को जब संभव हो तो एक सामान्य हस्ताक्षर लागू करना चाहिए, ताकि उपभोक्ता आसानी से मॉड्यूल का आदान-प्रदान कर सकें और अपनी समस्या के लिए सबसे अच्छा खोज सकें।
वास्तविक उदाहरण
एक सामान्य टेक्स्ट एम्बेडिंग प्रारूप से मॉड्यूल बनाने के तरीके के वास्तविक उदाहरण के लिए हमारे टेक्स्ट एम्बेडिंग मॉड्यूल निर्यातक पर एक नज़र डालें।
फ़ाइन ट्यूनिंग
किसी आयातित मॉड्यूल के वेरिएबल्स को उसके आस-पास के मॉडल के साथ मिलकर प्रशिक्षित करना फाइन-ट्यूनिंग कहलाता है। फाइन-ट्यूनिंग के परिणामस्वरूप बेहतर गुणवत्ता हो सकती है, लेकिन नई जटिलताएँ जुड़ जाती हैं। हम उपभोक्ताओं को सलाह देते हैं कि वे सरल गुणवत्ता वाले बदलावों की खोज करने के बाद ही फाइन-ट्यूनिंग पर ध्यान दें, और केवल तभी जब मॉड्यूल प्रकाशक इसकी अनुशंसा करता है।
उपभोक्ताओं के लिए
फ़ाइन-ट्यूनिंग को सक्षम करने के लिए, मॉड्यूल को hub.Module(..., trainable=True)
के साथ इंस्टैंट करें ताकि इसके वेरिएबल्स को ट्रेन करने योग्य बनाया जा सके और TensorFlow के REGULARIZATION_LOSSES
इम्पोर्ट किया जा सके। यदि मॉड्यूल में कई ग्राफ़ वेरिएंट हैं, तो प्रशिक्षण के लिए उपयुक्त एक को चुनना सुनिश्चित करें। आमतौर पर, वह {"train"}
टैग वाला होता है।
एक प्रशिक्षण शासन चुनें जो पूर्व-प्रशिक्षित भार को बर्बाद नहीं करता है, उदाहरण के लिए, खरोंच से प्रशिक्षण की तुलना में कम सीखने की दर।
प्रकाशकों के लिए
उपभोक्ताओं के लिए फाइन-ट्यूनिंग को आसान बनाने के लिए, कृपया निम्नलिखित बातों का ध्यान रखें:
फाइन-ट्यूनिंग को नियमितीकरण की आवश्यकता है। आपके मॉड्यूल को
REGULARIZATION_LOSSES
संग्रह के साथ निर्यात किया जाता है, जो आपकीtf.layers.dense(..., kernel_regularizer=...)
आदि की पसंद को उपभोक्ता कोtf.losses.get_regularization_losses()
से प्राप्त होने वाली चीज़ों में डालता है। L1/L2 नियमितीकरण नुकसान को परिभाषित करने के इस तरीके को प्राथमिकता दें।प्रकाशक मॉडल में,
tf.train.FtrlOptimizer
,tf.train.ProximalGradientDescentOptimizer
और अन्य समीपस्थ ऑप्टिमाइज़र केl1_
औरl2_regularization_strength
पैरामीटर के माध्यम से L1/L2 नियमितीकरण को परिभाषित करने से बचें. इन्हें मॉड्यूल के साथ निर्यात नहीं किया जाता है, और विश्व स्तर पर नियमितीकरण की ताकत निर्धारित करना उपभोक्ता के लिए उपयुक्त नहीं हो सकता है। व्यापक (यानी विरल रैखिक) या विस्तृत और गहरे मॉडल में L1 नियमितीकरण को छोड़कर, इसके बजाय व्यक्तिगत नियमितीकरण नुकसान का उपयोग करना संभव होना चाहिए।यदि आप ड्रॉपआउट, बैच सामान्यीकरण, या इसी तरह की प्रशिक्षण तकनीकों का उपयोग करते हैं, तो उनके हाइपरपरमेटर्स को उन मानों पर सेट करें जो कई अपेक्षित उपयोगों में समझ में आते हैं। ड्रॉपआउट दर को लक्ष्य समस्या की ओवरफिटिंग की प्रवृत्ति के अनुसार समायोजित करना पड़ सकता है। बैच सामान्यीकरण में, छोटे डेटासेट और/या बड़े बैचों के साथ ठीक-ट्यूनिंग को सक्षम करने के लिए संवेग (उर्फ क्षय गुणांक) काफी छोटा होना चाहिए। उन्नत उपभोक्ताओं के लिए, एक हस्ताक्षर जोड़ने पर विचार करें जो महत्वपूर्ण हाइपरपैरामीटर पर नियंत्रण को उजागर करता है।