यह पृष्ठ बताता है कि अपने 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 के ग्राफ़ मोड के आलसी मूल्यांकन से अलग है।)