דף זה מסביר כיצד להמשיך להשתמש TensorFlow Hub בעת העברת קוד TensorFlow שלך TensorFlow 1 ל TensorFlow 2. זה משלים הכללי של TensorFlow מדריך הגירה .
עבור TF2, TF Hub החליף מן המורשת hub.Module
API לבניית tf.compat.v1.Graph
כמו tf.contrib.v1.layers
לעשות. במקום זאת, יש כיום hub.KerasLayer
לשימוש לצד שכבות אחרות Keras לבניית tf.keras.Model
(בדרך כלל חדש של TF2 סביבת ביצוע להוט ) ו הבסיסית שלה hub.load()
שיטה קוד TensorFlow ברמה נמוכה.
hub.Module
API נשאר זמין tensorflow_hub
הספרייה לשימוש TF1 ו במצב תאימות TF1 של TF2. זה יכול לטעון מודלים רק בפורמט Hub TF1 .
ה- API החדש של hub.load()
ו hub.KerasLayer
עבודות עבור TensorFlow 1.15 (במצב להוט גרף) וב TensorFlow 2. API החדש יכול לטעון את החדש TF2 SavedModel הנכסים, וכן, עם ההגבלות שהותוו המודל מדריך תאימות , הדגמים המורשים בפורמט Hub TF1.
באופן כללי, מומלץ להשתמש ב-API חדש בכל מקום אפשרי.
סיכום ה-API החדש
hub.load()
הוא הפונקציה ברמה הנמוכה החדשה לטעון SavedModel מרכזת TensorFlow (או שירותים תואמים). היא עוטפת של TF2 tf.saved_model.load()
; של TensorFlow מדריך SavedModel מתאר מה אתה יכול לעשות עם התוצאה.
m = hub.load(handle)
outputs = m(inputs)
hub.KerasLayer
שיחות בכיתה hub.load()
ומתאים את התוצאה לשימוש Keras לצד שכבות Keras אחרים. (ייתכן שהיא אפילו עטיפה נוחה עבור SavedModels טעונים המשמשים בדרכים אחרות.)
model = tf.keras.Sequential([
hub.KerasLayer(handle),
...])
מדריכים רבים מציגים ממשקי API אלה בפעולה. ראה במיוחד
שימוש ב-API החדש בהדרכה של Estimator
אם אתה משתמש TF2 SavedModel במסגרת הערכה לאימונים עם שרתי פרמטר (או אחר בתוך מושב TF1 עם משתנה דגש על התקנים מרוחקים), עליך להגדיר experimental.share_cluster_devices_in_session
בבית של ConfigProto tf.Session, אחרת אתה תקבל שגיאה כמו "התקן שהוקצה '/job:ps/replica:0/task:0/device:CPU: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 Hub
זה יכול לקרות ש-TF2 SavedModel חדש עדיין לא זמין עבור השימוש שלך ואתה צריך לטעון דגם מדור קודם בפורמט TF1 Hub. החל tensorflow_hub
שחרור 0.7, אתה יכול להשתמש במודל מורשה יחד בפורמט TF1 Hub עם hub.KerasLayer
כמוצג להלן:
m = hub.KerasLayer(handle)
tensor_out = m(tensor_in)
בנוסף KerasLayer
חושפת היכולת לציין tags
, signature
, output_key
ו signature_outputs_as_dict
עבור שימושים ספציפיים יותר של דגמים מורשים בפורמט TF1 Hub ומורשת SavedModels.
לקבלת מידע נוסף על תאימות לפורמט Hub TF1 לראות את מדריך תאימות המודל .
שימוש בממשקי API ברמה נמוכה יותר
מודלי פורמט הישן TF1 Hub ניתן לטעון באמצעות 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
הוא dict של TensorFlow פונקציות בטון מתוח בשמות החתימה. קריאה לפונקציה כזו מחשבת את כל התפוקות שלה, גם אם לא נעשה בה שימוש. (זה שונה מההערכה העצלה של מצב הגרף של TF1.)