ייצוא SavedModel

קל לארגן דפים בעזרת אוספים אפשר לשמור ולסווג תוכן על סמך ההעדפות שלך.

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

כמה ערכות כלים לבניית דגמים כבר מספקות כלים לעשות זאת (למשל, ראה להלן עבור TensorFlow Model Garden ).

סקירה כללית

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

חוסך מקרס

החל מ-TensorFlow 2, tf.keras.Model.save() ו- tf.keras.models.save_model() כברירת מחדל לפורמט SavedModel (לא HDF5). SavedModels המתקבלים שניתן להשתמש בהם עם hub.load() , hub.KerasLayer ומתאמים דומים עבור ממשקי API ברמה גבוהה אחרים כאשר הם הופכים לזמינים.

כדי לשתף דגם שלם של Keras, פשוט שמור אותו עם include_optimizer=False .

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

piece_to_share = tf.keras.Model(...)
full_model = tf.keras.Sequential([piece_to_share, ...])
full_model.fit(...)
piece_to_share.save(...)

...או גזרו את היצירה לחלוקה לאחר מעשה (אם היא תואמת את השכבות של הדגם המלא שלכם):

full_model = tf.keras.Model(...)
sharing_input = full_model.get_layer(...).get_output_at(0)
sharing_output = full_model.get_layer(...).get_output_at(0)
piece_to_share = tf.keras.Model(sharing_input, sharing_output)
piece_to_share.save(..., include_optimizer=False)

TensorFlow Models ב- GitHub משתמש בגישה הקודמת עבור BERT (ראה nlp/tools/export_tfhub_lib.py , שים לב לפיצול בין core_model לייצוא וה- pretrainer לשחזור המחסום) והגישה השנייה עבור ResNet (ראה legacy/image_classification/tfhub_export. py ).

חיסכון מ-TensorFlow ברמה נמוכה

זה מצריך היכרות טובה עם SavedModel Guide של TensorFlow.

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

class MyMulModel(tf.train.Checkpoint):
  def __init__(self, v_init):
    super().__init__()
    self.v = tf.Variable(v_init)
    self.variables = [self.v]
    self.trainable_variables = [self.v]
    self.regularization_losses = [
        tf.function(input_signature=[])(lambda: 0.001 * self.v**2),
    ]

  @tf.function(input_signature=[tf.TensorSpec(shape=None, dtype=tf.float32)])
  def __call__(self, inputs):
    return tf.multiply(inputs, self.v)

tf.saved_model.save(MyMulModel(2.0), "/tmp/my_mul")

layer = hub.KerasLayer("/tmp/my_mul")
print(layer([10., 20.]))  # [20., 40.]
layer.trainable = True
print(layer.trainable_weights)  # [2.]
print(layer.losses)  # 0.004

עצה ליוצרי SavedModel

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

שמירה מדגם Keras אמורה לגרום לכל המכניקה של כוונון עדין לעבוד (חיסכון בירידה בהסדרת משקל, הכרזה על משתנים הניתנים לאימון, מעקב אחר __call__ גם training=True וגם training=False וכו')

בחר ממשק מודל שמשחק היטב עם זרימת שיפוע, למשל, לוגיטי פלט במקום הסתברויות softmax או תחזיות מובילות.

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

מסדרי משקל בשכבות בודדות נשמרים (עם מקדמי חוזק הסידור שלהם), אך הסדרת המשקל מתוך המייעל (כמו tf.keras.optimizers.Ftrl.l1_regularization_strength=...) אובדת. ייעץ לצרכנים של SavedModel שלך בהתאם.

TensorFlow Model Garden

המאגר של TensorFlow Model Garden מכיל דוגמאות רבות ליצירת מודלים שמורים TF2 לשימוש חוזר שיועלו ב- tfhub.dev .

בקשות קהילה

צוות TensorFlow Hub מייצר רק חלק קטן מהנכסים הזמינים ב- tfhub.dev. אנו מסתמכים בעיקר על חוקרים בגוגל וב-DeepMind, מוסדות מחקר ארגוניים ואקדמיים וחובבי ML כדי לייצר מודלים. כתוצאה מכך, איננו יכולים להבטיח שנוכל למלא בקשות קהילה עבור נכסים ספציפיים, ואיננו יכולים לספק הערכות זמן לזמינות נכסים חדשים.

אבן דרך בקשות מודל הקהילה שלהלן מכילה בקשות מהקהילה לנכסים ספציפיים -- אם אתה או מישהו שאתה מכיר מעוניין לייצר את הנכס ולשתף אותו ב-tfhub.dev, אנו מברכים על ההגשה!