TensorFlow हब के साथ TF1 से TF2 पर माइग्रेट करना

यह पृष्ठ बताता है कि अपने TensorFlow कोड को TensorFlow 1 से TensorFlow 2 में स्थानांतरित करते समय TensorFlow हब का उपयोग कैसे जारी रखें। यह TensorFlow के सामान्य माइग्रेशन गाइड का पूरक है।

TF2 के लिए, TF हब ने tf.compat.v1.Graph जैसे tf.contrib.v1.layers बनाने के लिए लीगेसी hub.Module एपीआई से दूरी बना ली है। इसके बजाय, अब tf.keras.Model (आमतौर पर TF2 के नए उत्सुक निष्पादन वातावरण में) और निम्न-स्तरीय TensorFlow कोड के लिए इसकी अंतर्निहित hub.load() विधि के निर्माण के लिए अन्य Keras परतों के साथ उपयोग के लिए एक hub.KerasLayer है।

hub.Module एपीआई TF1 और TF2 के TF1 संगतता मोड में उपयोग के लिए tensorflow_hub लाइब्रेरी में उपलब्ध रहता है। यह केवल TF1 हब प्रारूप में मॉडल लोड कर सकता है।

hub.load() और hub.KerasLayer की नई API TensorFlow 1.15 (उत्सुक और ग्राफ़ मोड में) और TensorFlow 2 में काम करती है। यह नई API नई TF2 SavedModel संपत्तियों को लोड कर सकती है, और, मॉडल में निर्धारित प्रतिबंधों के साथ संगतता मार्गदर्शिका , TF1 हब प्रारूप में पुराने मॉडल।

सामान्य तौर पर, जहां भी संभव हो नए एपीआई का उपयोग करने की अनुशंसा की जाती है।

नई एपीआई का सारांश

hub.load() TensorFlow हब (या संगत सेवाओं) से SavedModel को लोड करने के लिए नया निम्न-स्तरीय फ़ंक्शन है। यह TF2 के tf.saved_model.load() लपेटता है; TensorFlow की सेव्डमॉडल गाइड बताती है कि आप परिणाम के साथ क्या कर सकते हैं।

m = hub.load(handle)
outputs = m(inputs)

hub.KerasLayer वर्ग hub.load() कॉल करता है और अन्य Keras परतों के साथ Keras में उपयोग के लिए परिणाम को अनुकूलित करता है। (यह अन्य तरीकों से उपयोग किए गए लोडेड सेव्डमॉडल के लिए एक सुविधाजनक रैपर भी हो सकता है।)

model = tf.keras.Sequential([
    hub.KerasLayer(handle),
    ...])

कई ट्यूटोरियल इन एपीआई को क्रियान्वित करते हुए दिखाते हैं। यहां कुछ उदाहरण दिए गए हैं:

अनुमानक प्रशिक्षण में नए एपीआई का उपयोग करना

यदि आप पैरामीटर सर्वर (या अन्यथा दूरस्थ उपकरणों पर रखे गए चर के साथ TF1 सत्र में) के साथ प्रशिक्षण के लिए एक अनुमानक में TF2 सेव्डमॉडल का उपयोग करते हैं, तो आपको tf.Session के कॉन्फिगप्रोटो में experimental.share_cluster_devices_in_session सेट करने की आवश्यकता है, अन्यथा आपको एक त्रुटि मिलेगी जैसे "असाइन किया गया डिवाइस '/जॉब:पीएस/रेप्लिका:0/टास्क:0/डिवाइस:सीपीयू:0' किसी भी डिवाइस से मेल नहीं खाता।"

आवश्यक विकल्प जैसे सेट किया जा सकता है

session_config = tf.compat.v1.ConfigProto()
session_config.experimental.share_cluster_devices_in_session = True
run_config = tf.estimator.RunConfig(..., session_config=session_config)
estimator = tf.estimator.Estimator(..., config=run_config)

TF2.2 से प्रारंभ करके, यह विकल्प अब प्रायोगिक नहीं है, और .experimental भाग को हटाया जा सकता है।

TF1 हब प्रारूप में लीगेसी मॉडल लोड हो रहा है

ऐसा हो सकता है कि आपके उपयोग-मामले के लिए एक नया TF2 सेव्डमॉडल अभी तक उपलब्ध नहीं है और आपको TF1 हब प्रारूप में एक विरासत मॉडल लोड करने की आवश्यकता है। tensorflow_hub रिलीज़ 0.7 से प्रारंभ करके, आप hub.KerasLayer के साथ TF1 हब प्रारूप में लीगेसी मॉडल का उपयोग कर सकते हैं जैसा कि नीचे दिखाया गया है:

m = hub.KerasLayer(handle)
tensor_out = m(tensor_in)

इसके अतिरिक्त KerasLayer TF1 हब प्रारूप और लीगेसी SaveModels में लीगेसी मॉडल के अधिक विशिष्ट उपयोगों के लिए tags , signature , output_key और signature_outputs_as_dict निर्दिष्ट करने की क्षमता को उजागर करता है।

TF1 हब प्रारूप संगतता पर अधिक जानकारी के लिए मॉडल संगतता मार्गदर्शिका देखें।

निचले स्तर के एपीआई का उपयोग करना

लीगेसी TF1 हब प्रारूप मॉडल को tf.saved_model.load के माध्यम से लोड किया जा सकता है। के बजाय

# DEPRECATED: TensorFlow 1
m = hub.Module(handle, tags={"foo", "bar"})
tensors_out_dict = m(dict(x1=..., x2=...), signature="sig", as_dict=True)

इसका उपयोग करने की अनुशंसा की जाती है:

# TensorFlow 2
m = hub.load(path, tags={"foo", "bar"})
tensors_out_dict = m.signatures["sig"](x1=..., x2=...)

इन उदाहरणों में m.signatures हस्ताक्षर नामों द्वारा कुंजीबद्ध TensorFlow ठोस कार्यों का एक निर्देश है। ऐसे फ़ंक्शन को कॉल करने से इसके सभी आउटपुट की गणना हो जाती है, भले ही अप्रयुक्त हो। (यह TF1 के ग्राफ़ मोड के आलसी मूल्यांकन से अलग है।)