אתה יכול לקרוא עוד על פורמט זה בפורמט TF1 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)
. ייצוא מודול מסדר את ההגדרה שלו יחד עם המצב הנוכחי של המשתנים שלו session
לנתיב שעבר. זה יכול לשמש בעת ייצוא מודול בפעם הראשונה, כמו גם בעת ייצוא מודול מכוון עדין.
לצורך תאימות עם TensorFlow Estimators, hub.LatestModuleExporter
מייצאת מודולים מהמחסום העדכני ביותר, בדיוק כמו tf.estimator.LatestExporter
מייצאת את הדגם כולו מנקודת הבידוק העדכנית ביותר.
מפרסמי מודולים צריכים ליישם חתימה משותפת במידת האפשר, כך שצרכנים יוכלו בקלות להחליף מודולים ולמצוא את החתימה הטובה ביותר לבעיה שלהם.
דוגמא אמיתית
עיין ביצואן מודול הטבעת הטקסט שלנו לקבלת דוגמה מהעולם האמיתי כיצד ליצור מודול מפורמט נפוץ של הטבעת טקסט.
עצה לבעלי אתרים
כדי להקל על כוונון עדין לצרכנים, אנא שים לב לדברים הבאים:
כוונון עדין זקוק להסדרה. המודול שלך מיוצא עם אוסף
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 במודלים רחבים (כלומר ליניארי דליל) או רחבים ועמוקים, זה אמור להיות אפשרי להשתמש בהפסדי רגולציה בודדים במקום זאת.אם אתה משתמש בנשירה, נורמליזציה של אצווה או טכניקות אימון דומות, הגדר את ההיפרפרמטרים שלהן לערכים הגיוניים בשימושים צפויים רבים. ייתכן שיהיה צורך להתאים את שיעור הנשירה לנטייה של בעיית היעד להתאמת יתר. בנורמליזציה של אצווה, המומנטום (המכונה מקדם דעיכה) צריך להיות קטן מספיק כדי לאפשר כוונון עדין עם מערכי נתונים קטנים ו/או אצווה גדולה. לצרכנים מתקדמים, שקול להוסיף חתימה שחושפת שליטה על הפרמטרים ההיפר קריטיים.