Google I/O הוא עטיפה! התעדכן בהפעלות של TensorFlow. צפה בהפעלות

מעבר מ TF1 ל- TF2 באמצעות TensorFlow Hub

דף זה מסביר כיצד להמשיך להשתמש 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.)