इस पेज का अनुवाद Cloud Translation API से किया गया है.
Switch to English

TF1 हब प्रारूप

2018 में अपनी शुरुआत में, TensorFlow Hub ने TensorFlow 1 कार्यक्रमों में आयात के लिए TF1 हब प्रारूप: एकल प्रकार की संपत्ति की पेशकश की।

यह पृष्ठ बताता है कि TF1 हब प्रारूप का उपयोग TF1 (या TF2 का TF1 संगतता मोड) hub.Module वर्ग और संबद्ध एपीआई के साथ कैसे करें। (विशिष्ट उपयोग tf.compat.layers या tf.layers साथ TF1 हब प्रारूप में एक या अधिक मॉडल को मिलाकर, संभवतः एक TF1 Estimator अंदर tf.Graph का निर्माण tf.layers )।

TensorFlow 2 (TF1 संगतता मोड के बाहर) के उपयोगकर्ताओं को hub.load hub.load() या hub.KerasLayer साथ नए API का उपयोग करना होगा। नया API नए TF2 SavedModel परिसंपत्ति प्रकार को लोड करता है , लेकिन TF1 हब प्रारूप को TF2 में लोड करने के लिए सीमित समर्थन भी है।

TF1 हब प्रारूप में एक मॉडल का उपयोग करना

TF1 हब प्रारूप में एक मॉडल को इंस्टेंट करना

TF1 हब प्रारूप में एक मॉडल एक बनाने के द्वारा एक TensorFlow कार्यक्रम में आयात किया जाता hub.Module इसके URL या जैसे फाइल सिस्टम पथ, के साथ एक स्ट्रिंग से वस्तु:

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 द्वारा पास करके एक 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() जो tf.Session.run() में किसी लक्ष्य की निर्भरता के रूप में समाप्त होते हैं। वास्तव में, मॉड्यूल प्रकाशक मुख्य आउटपुट के साथ उन्नत उपयोग (जैसे मध्यवर्ती परतों की सक्रियता) के लिए विभिन्न आउटपुट प्रदान करना चुन सकते हैं। मॉड्यूल उपभोक्ताओं को अतिरिक्त आउटपुट को इनायत से संभालना चाहिए।

वैकल्पिक मॉड्यूल की कोशिश कर रहा है

जब भी एक ही कार्य के लिए कई मॉड्यूल होते हैं, तो TensorFlow हब उन्हें संगत हस्ताक्षरों (इंटरफेस) से लैस करने के लिए प्रोत्साहित करता है, जैसे कि अलग-अलग कोशिश करना उतना ही आसान है जितना कि एक स्ट्रिंग-वैल्यू हाइपरपरमीटर के रूप में मॉड्यूल हैंडल को अलग करना।

इसके लिए, हम लोकप्रिय कार्यों के लिए अनुशंसित सामान्य हस्ताक्षरों के संग्रह को बनाए रखते हैं।

एक नया मॉड्यूल बनाना

संगतता नोट

TF1 हब प्रारूप को TensorFlow 1 की ओर बढ़ाया गया है। यह केवल TensorFlow में TF हब द्वारा आंशिक रूप से समर्थित है। कृपया इसके बजाय नए TF2 SavedModel प्रारूप में प्रकाशन पर विचार करें।

TF1 हब प्रारूप एक सिंटैक्टिक स्तर (समान फ़ाइल नाम और प्रोटोकॉल संदेश) पर TensorFlow 1 के SavedModel प्रारूप के समान है, लेकिन मॉड्यूल पुन: उपयोग, संरचना और पुन: प्रशिक्षण के लिए अनुमति देने के लिए शब्दार्थ रूप से भिन्न है (उदाहरण के लिए, संसाधन आरंभीकरण के विभिन्न भंडारण, विभिन्न टैगिंग पैराग्राफ के लिए कन्वेंशन)। उन्हें डिस्क पर अलग से बताने का सबसे आसान तरीका tfhub_module.pb फ़ाइल की उपस्थिति या अनुपस्थिति है।

सामान्य पहूंच

एक नए मॉड्यूल को परिभाषित करने के लिए, एक प्रकाशक एक function module_fn साथ hub.create_module_spec() कॉल करता है। यह फ़ंक्शन कॉलर द्वारा आपूर्ति किए जाने वाले इनपुट के लिए tf.placeholder() का उपयोग करके मॉड्यूल की आंतरिक संरचना का प्रतिनिधित्व करने वाला एक ग्राफ़ 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)

hub.create_module_spec() का उपयोग एक पथ के बजाय, किसी विशेष TensorFlow ग्राफ के भीतर एक मॉड्यूल ऑब्जेक्ट को तुरंत करने के लिए किया जा सकता है। ऐसे मामले में, कोई चौकी नहीं है, और मॉड्यूल उदाहरण इसके बजाय चर शुरुआती का उपयोग करेगा।

किसी भी मॉड्यूल उदाहरण को इसके export(path, session) विधि के माध्यम से डिस्क में क्रमबद्ध किया जा सकता है। मॉड्यूल निर्यात करना session में अपने चर की वर्तमान स्थिति के साथ अपनी परिभाषा को क्रमबद्ध तरीके से पारित मार्ग में जोड़ता है। इसका उपयोग पहली बार किसी मॉड्यूल को निर्यात करने के साथ-साथ ठीक ट्यून किए गए मॉड्यूल को निर्यात करते समय किया जा सकता है।

TensorFlow Estimators के साथ अनुकूलता के लिए, नवीनतम चेकपॉइंट से hub.LatestModuleExporter निर्यात मॉड्यूल, जैसे tf.estimator.LatestExporter नवीनतम चेकपॉइंट से संपूर्ण मॉडल निर्यात करता है।

मॉड्यूल प्रकाशकों को संभव होने पर एक सामान्य हस्ताक्षर को लागू करना चाहिए, ताकि उपभोक्ता आसानी से मॉड्यूल का आदान-प्रदान कर सकें और अपनी समस्या के लिए सबसे अच्छा खोज सकें।

वास्तविक उदाहरण

एक आम पाठ एम्बेडिंग प्रारूप से एक मॉड्यूल बनाने के तरीके के वास्तविक-विश्व उदाहरण के लिए हमारे टेक्स्ट एम्बेडिंग मॉड्यूल निर्यातक पर एक नज़र डालें।

फ़ाइन ट्यूनिंग

एक आयातित मॉड्यूल के चर को एक साथ जोड़कर उसके चारों ओर के मॉडल को प्रशिक्षित करना ठीक-ट्यूनिंग कहलाता है । ठीक-ट्यूनिंग बेहतर गुणवत्ता में परिणाम कर सकते हैं, लेकिन नई जटिलताओं को जोड़ता है। हम उपभोक्ताओं को सलाह देते हैं कि वे सिंपल क्वालिटी ट्विक्स की खोज के बाद ही फाइन ट्यूनिंग पर ध्यान दें, और केवल तब जब मॉड्यूल पब्लिशर इसकी सिफारिश करें।

उपभोक्ताओं के लिए

ठीक करने को सक्षम करने के साथ मॉड्यूल का दृष्टांत hub.Module(..., trainable=True) आयात TensorFlow के अपने चर trainable बनाने के लिए और करने के लिए REGULARIZATION_LOSSES । यदि मॉड्यूल में कई ग्राफ वेरिएंट हैं, तो प्रशिक्षण के लिए उपयुक्त एक को चुनना सुनिश्चित करें। आमतौर पर, यह टैग {"train"}

एक प्रशिक्षण शासन चुनें जो पूर्व-प्रशिक्षित भार को बर्बाद नहीं करता है, उदाहरण के लिए, खरोंच से प्रशिक्षण की तुलना में कम सीखने की दर।

प्रकाशकों के लिए

उपभोक्ताओं के लिए ठीक ट्यूनिंग को आसान बनाने के लिए, कृपया निम्नलिखित बातों का ध्यान रखें:

  • फाइन-ट्यूनिंग को नियमित करने की आवश्यकता है। आपके मॉड्यूल को REGULARIZATION_LOSSES संग्रह के साथ निर्यात किया जाता है, जो कि आपकी पसंद tf.layers.dense(..., kernel_regularizer=...) आदि को tf.losses.get_regularization_losses() कि उपभोक्ता को tf.losses.get_regularization_losses() से क्या मिलता है। एल 1 / एल 2 नियमितीकरण के नुकसान को परिभाषित करने के इस तरीके को प्राथमिकता दें।

  • प्रकाशक मॉडल में, tf.train.FtrlOptimizer , tf.train.ProximalGradientDescentOptimizer , और अन्य समीपवर्ती ऑप्टिमाइज़र के l1_ और l2_regularization_strength मापदंडों के माध्यम से L1 / L2 नियमितीकरण को परिभाषित करने से बचें। मॉड्यूल के साथ इनका निर्यात नहीं किया जाता है, और नियमित रूप से नियमितीकरण ताकत स्थापित करना उपभोक्ता के लिए उचित नहीं हो सकता है। व्यापक (यानी विरल रैखिक) या विस्तृत और गहरे मॉडल में एल 1 नियमितीकरण को छोड़कर, इसके बजाय व्यक्तिगत नियमितीकरण नुकसान का उपयोग करना संभव होना चाहिए।

  • यदि आप ड्रॉपआउट, बैच सामान्यीकरण, या समान प्रशिक्षण तकनीकों का उपयोग करते हैं, तो अपने हाइपरपैरामीटर को उन मानों पर सेट करें जो कई अपेक्षित उपयोगों में समझ में आते हैं। छोड़ने की दर को लक्षित समस्या की प्रवृत्ति से अधिक करने के लिए समायोजित किया जा सकता है। बैच के सामान्यीकरण में, छोटे डेटासेट और / या बड़े बैचों के साथ ठीक-ट्यूनिंग को सक्षम करने के लिए गति (उर्फ क्षय गुणांक) पर्याप्त होना चाहिए। उन्नत उपभोक्ताओं के लिए, एक हस्ताक्षर जोड़ने पर विचार करें जो समीचीन हाइपरपरमेटर्स पर नियंत्रण को उजागर करता है।