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

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

דף זה מסביר כיצד להמשיך להשתמש ב- TensorFlow Hub בזמן העברת קוד ה- TensorFlow שלך מ- TensorFlow 1 ל- TensorFlow 2. הוא משלים את מדריך ההעברה הכללי של TensorFlow.

עבור TF2, TF Hub התרחק hub.Module מדור קודם. API של hub.Module לבניית tf.compat.v1.Graph tf.contrib.v1.layers כמו שעושים tf.contrib.v1.layers . במקום זאת, יש כעת hub.KerasLayer לשימוש לצד שכבות אחרות של Keras לבניית tf.keras.Model (בדרך כלל בסביבת הביצוע החדשה להוטה של TF2 hub.load() ושיטת hub.load() הבסיסית שלה לקוד TensorFlow ברמה נמוכה.

ה- hub.Module API נשאר זמין בספריית tensorflow_hub לשימוש ב- TF1 ובמצב התאימות TF1 של TF2. הוא יכול לטעון רק דגמים בפורמט TF1 Hub .

ה- API החדש של hub.load() ו- hub.KerasLayer עובד עבור TensorFlow 1.15 (במצב להוט וגרף) וב- TensorFlow 2. API חדש זה יכול לטעון את נכסי TF2 SavedModel החדשים, ובמגבלות המוצגות במודל מדריך תאימות , דגמי המורשת בפורמט TF1 Hub.

באופן כללי, מומלץ להשתמש ב- API חדש במידת האפשר.

סיכום ה- API החדש

hub.load() היא הפונקציה החדשה ברמה נמוכה לטעינת SavedModel מ- TensorFlow Hub (או שירותים תואמים). הוא עוטף את ה- tf.saved_model.load() של TF2; המדריך SavedModel של TensorFlow מתאר מה אתה יכול לעשות עם התוצאה.

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

למידע נוסף על תאימות פורמט TF1 Hub עיין במדריך התאימות של הדגם .

שימוש בממשקי 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 הוא m.signatures של פונקציות בטון של TensorFlow שמקורן בשמות חתימות. קריאה לפונקציה כזו מחשבת את כל תפוקותיה, גם אם אינן בשימוש. (זה שונה מההערכה העצלה של מצב הגרף של TF1.)