לשמור את התאריך! קלט / פלט של Google חוזר 18-20 במאי הירשם עכשיו
דף זה תורגם על ידי Cloud Translation API.
Switch to English

פורמט רכזת TF1

עם השקתו בשנת 2018 הציעה TensorFlow Hub סוג יחיד של נכס: פורמט TF1 Hub לייבוא ​​לתוכניות TensorFlow 1.

דף זה מסביר כיצד להשתמש בפורמט TF1 Hub ב- TF1 (או במצב תאימות TF1 של TF2) עם המחלקה hub.Module ו- API המשויך. (השימוש האופייני הוא לבנות tf.Graph , אולי בתוך Estimator TF1, על ידי שילוב של מודל אחד או יותר בפורמט TF1 Hub עם tf.compat.layers או tf.layers ).

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

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

התקנת מודל בפורמט TF1 Hub

דגם בפורמט TF1 Hub מיובא לתוכנית TensorFlow על ידי יצירת אובייקט hub.Module ממחרוזת עם כתובת ה- URL או נתיב מערכת הקבצים שלה, כגון:

m = hub.Module("path/to/a/module_dir")

זה מוסיף את המשתנים של המודול לגרף TensorFlow הנוכחי. הפעלת אתחול התיקונים שלהם תקרא את הדיסקים שהוכשרו מראש. כמו כן, טבלאות ומצב אחר מתווספים לגרף.

מודולי מטמון

בעת יצירת מודול מכתובת אתר, תוכן המודול יורד ושמור במטמון בספרייה הזמנית של המערכת המקומית. ניתן לבטל את המיקום שבו מודולים נשמרים באמצעות משתנה הסביבה TFHUB_CACHE_DIR . לפרטים, ראה מטמון .

החלת מודול

ברגע שהופעל, מודול m יכול להיקרא פעמים אפס או יותר כמו פונקציית פייתון מכניסות טנסור ליציאות טנסור:

y = m(x)

כל קריאה כזו מוסיפה פעולות לגרף TensorFlow הנוכחי לחישוב y מ- x . אם מדובר במשתנים עם משקולות מאומנות, הם משותפים בין כל היישומים.

מודולים יכולים להגדיר מספר חתימות בעלות שם על מנת לאפשר יישום ביותר מדרך אחת (בדומה לאופן שבו יש לאובייקטים של פייתון שיטות ). בתיעוד של מודול יש לתאר את החתימות הזמינות. השיחה שלמעלה מחילה את החתימה בשם "default" . ניתן לבחור כל חתימה על ידי העברת שמה לארגומנט האופציה signature= .

אם לחתימה יש מספר קלטים, יש להעבירם ככתיב, כאשר המפתחות מוגדרים על ידי החתימה. כמו כן, אם לחתימה יש מספר פלטים, ניתן לאחזר אותן as_dict=True ידי העברת as_dict=True , מתחת למפתחות שהוגדרו על ידי החתימה (המפתח "default" הוא עבור הפלט היחיד המוחזר אם as_dict=False ). כך שהצורה הכללית ביותר של יישום מודול נראית כך:

outputs = m(dict(apples=x1, oranges=x2), signature="fruit_to_pet", as_dict=True)
y1 = outputs["cats"]
y2 = outputs["dogs"]

על המתקשר לספק את כל הקלטים המוגדרים על ידי חתימה, אך אין חובה להשתמש בכל יציאות המודול. TensorFlow יפעיל רק את החלקים במודול שבסופו של דבר כתלות של יעד ב- tf.Session.run() . ואכן, מפרסמי המודולים עשויים לבחור לספק פלטים שונים לשימושים מתקדמים (כמו הפעלת שכבות ביניים) יחד עם הפלטים העיקריים. צרכני המודולים צריכים להתמודד עם תפוקות נוספות בחן.

מנסים מודולים חלופיים

בכל פעם שיש מספר מודולים לאותה משימה, TensorFlow Hub ממליץ לצייד אותם בחתימות (ממשקים) תואמים, כך שניסיון שונים זה קל כמו לשנות את ידית המודול כמו היפרפרמטר בעל מחרוזת.

לשם כך אנו מקיימים אוסף של חתימות נפוצות מומלצות למשימות פופולריות.

יצירת מודול חדש

הערת תאימות

פורמט TF1 Hub מיועד ל TensorFlow 1. הוא נתמך רק חלקית על ידי TF Hub ב- TensorFlow 2. אנא שקול לפרסם במקום זאת בפורמט TF2 SavedModel החדש.

פורמט TF1 Hub דומה לפורמט SavedModel של TensorFlow 1 ברמה התחבירית (אותם שמות קבצים והודעות פרוטוקול) אך שונה מבחינה סמנטית כדי לאפשר שימוש חוזר, הרכבה והדרכה מחודשת (למשל, אחסון שונה של אתחולי משאבים, תיוג שונה מוסכמות לפסקאות). הדרך הקלה ביותר להבדיל ביניהם בדיסק היא קיומו או העדרו של הקובץ tfhub_module.pb .

גישה כללית

כדי להגדיר מודול חדש, מפרסם מתקשר ל hub.create_module_spec() עם פונקציה module_fn . פונקציה זו בונה גרף המייצג את המבנה הפנימי של המודול, תוך שימוש ב- tf.placeholder() לקבלת תשומות שיסופקו על ידי המתקשר. ואז הוא מגדיר חתימות על ידי קריאה ל hub.add_signature(name, inputs, outputs) אחת או יותר.

לדוגמה:

def module_fn():
  inputs = tf.placeholder(dtype=tf.float32, shape=[None, 50])
  layer1 = tf.layers.dense(inputs, 200)
  layer2 = tf.layers.dense(layer1, 100)
  outputs = dict(default=layer2, hidden_activations=layer1)
  # Add default signature.
  hub.add_signature(inputs=inputs, outputs=outputs)

...
spec = hub.create_module_spec(module_fn)

ניתן להשתמש בתוצאה של hub.create_module_spec() , במקום נתיב, לאינסטנטציה של אובייקט מודול בתוך גרף TensorFlow מסוים. במקרה כזה, אין נקודת ביקורת, ובמקום מופע המודול ישתמש במתחילים המשתנים.

ניתן לסדר כל מופע של מודול לדיסק באמצעות שיטת export(path, session) שלו export(path, session) . ייצוא מודול מסדר את הגדרתו יחד עם המצב הנוכחי של המשתנים שלו session לנתיב שעבר. ניתן להשתמש בזה בעת ייצוא מודול בפעם הראשונה, כמו גם בעת ייצוא מודול מכוון עדין.

לצורך תאימות עם TensorFlow Estimators, hub.LatestModuleExporter מייצאת מודולים מהמחסום האחרון, בדיוק כמו tf.estimator.LatestExporter מייצאת את כל הדגם מהמחסום האחרון.

מפרסמי המודולים צריכים ליישם חתימה משותפת במידת האפשר, כך שהצרכנים יוכלו להחליף בקלות מודולים ולמצוא את הטוב ביותר לבעייתם.

דוגמא אמיתית

התבונן ביצואן מודול הטמעת הטקסט שלנו לדוגמא בעולם האמיתי כיצד ליצור מודול מפורמט הטמעה משותף לטקסט.

כוונון עדין

אימון המשתנים של מודול מיובא יחד עם אלו של המודל סביבו נקרא כיוונון עדין . כיוונון עדין יכול לגרום לאיכות טובה יותר, אך מוסיף סיבוכים חדשים. אנו ממליצים לצרכנים לבדוק כיוונון עדין רק לאחר בחינת שינויים פשוטים יותר באיכות, ורק אם מפרסם המודולים ממליץ על כך.

לצרכנים

כדי לאפשר כיוונון עדין, הפעל את המודול באמצעות hub.Module(..., trainable=True) כדי להפוך את המשתנים שלו לאימוניים וייבא את REGULARIZATION_LOSSES של REGULARIZATION_LOSSES . אם למודול יש מספר גרסאות גרף, הקפד לבחור את המתאים לאימון. בדרך כלל, זה עם התגים {"train"} .

בחרו במשטר אימונים שלא הורס את המשקולות שהוכשרו מראש, למשל, שיעור למידה נמוך יותר מאשר אימונים מאפס.

למו"לים

כדי להקל על כוונון עדין עבור הצרכנים, אנא שימו לב לדברים הבאים:

  • כוונון עדין זקוק להסדרה. המודול שלך מיוצא עם אוסף REGULARIZATION_LOSSES , וזה מה שמכניס את בחירתך tf.layers.dense(..., kernel_regularizer=...) וכו 'למה שהצרכן מקבל מ tf.losses.get_regularization_losses() . העדיף דרך זו להגדרת הפסדי רגולציה של L1 / L2.

  • במודל המו"ל, להימנע המגדיר להסדרת L1 / L2 באמצעות l1_ ו l2_regularization_strength פרמטרים של tf.train.FtrlOptimizer , tf.train.ProximalGradientDescentOptimizer , ו אופטימיזציה הפרוקסימלי אחרים. אלה אינם מיוצאים לצד המודול, והגדרת עוצמות הסדרה ברחבי העולם עשויה שלא להתאים לצרכן. למעט רגולציה L1 במודלים רחבים (כלומר ליניאריים דלילים) או רחבים ועמוקים, במקום זאת ניתן יהיה להשתמש בהפסדי רגולציה פרטניים.

  • אם אתה משתמש בנשירה, נורמליזציה של אצווה או טכניקות אימון דומות, הגדר את הפרפרמטרים שלהם לערכים הגיוניים לשימושים רבים שצפויים. יתכן שיהיה צורך להתאים את שיעור הנשירה לנטיית בעיית היעד להתאמת יתר. בנורמליזציה של אצוות, המומנטום (גם מקדם ריקבון) צריך להיות קטן מספיק כדי לאפשר כוונון עדין עם מערכי נתונים קטנים ו / או קבוצות גדולות. עבור צרכנים מתקדמים, שקול להוסיף חתימה החושפת שליטה על היפרפרמטרים קריטיים.