דף זה תורגם על ידי Cloud Translation API.
Switch to English

מעבר מ- 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),
    ...])
 

הדרכות רבות מראות APIs הללו בפעולה. ראה בפרט

שימוש ב- API החדש באימון הערכה

אם אתה משתמש TF2 SavedModel במסגרת הערכה לאימונים עם שרתי פרמטר (או אחר בתוך מושב TF1 עם משתנה דגש על התקנים מרוחקים), עליך להגדיר experimental.share_cluster_devices_in_session בבית של ConfigProto tf.Session, אחרת אתה תקבל שגיאה כמו "מכשיר מוקצה '/ עבודה: PS / העתק: 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 חתיכת ניתן ירד.

מודלי מורשה טוען בפורמט Hub TF1

זה יכול לקרות כי TF2 SavedModel החדש עדיין אינו זמין עבור המקרה שלך אתה צריך לטעון מודל מורשת בפורמט Hub TF1. החל 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.)