تصف هذه الصفحة تفاصيل تصدير (حفظ) نموذج من برنامج TensorFlow إلى تنسيق SavedModel الخاص بـ TensorFlow 2 . هذا التنسيق هو الطريقة الموصى بها لمشاركة النماذج المدربة مسبقًا وقطع النماذج على TensorFlow Hub. يحل محل تنسيق TF1 Hub الأقدم ويأتي مع مجموعة جديدة من واجهات برمجة التطبيقات. يمكنك العثور على مزيد من المعلومات حول تصدير نماذج تنسيق TF1 Hub في تصدير تنسيق TF1 Hub . يمكنك العثور على تفاصيل حول كيفية ضغط SavedModel لمشاركتها على TensorFlow Hub هنا .
توفر بعض مجموعات أدوات بناء النماذج بالفعل أدوات للقيام بذلك (على سبيل المثال ، انظر أدناه للحصول على TensorFlow Model Garden ).
ملخص
SavedModel هو تنسيق تسلسلي قياسي لـ TensorFlow للنماذج المدربة أو القطع النموذجية. يقوم بتخزين أوزان النموذج المدربة جنبًا إلى جنب مع عمليات TensorFlow الدقيقة لأداء حسابه. يمكن استخدامه بشكل مستقل عن الكود الذي أنشأه. على وجه الخصوص ، يمكن إعادة استخدامه عبر واجهات برمجة تطبيقات مختلفة لبناء النماذج عالية المستوى مثل Keras ، لأن عمليات TensorFlow هي لغتهم الأساسية المشتركة.
إنقاذ من كيراس
بدءًا من TensorFlow 2 و tf.keras.Model.save()
و tf.keras.models.save_model()
افتراضيًا إلى تنسيق SavedModel (وليس HDF5). نماذج SavedModels الناتجة التي يمكن استخدامها مع hub.load()
و hub.KerasLayer
والمحولات المماثلة لواجهات برمجة التطبيقات عالية المستوى الأخرى عند توفرها.
لمشاركة نموذج 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 على GitHub الطريقة السابقة لـ BERT (انظر nlp / tools / export_tfhub_lib.py ، لاحظ الانقسام بين core_model
للتصدير pretrainer
لاستعادة نقطة التفتيش) والنهج الأخير لـ ResNet (انظر legacy / image_classification / tfhub_export. الحمر ).
التوفير من TensorFlow منخفض المستوى
يتطلب هذا معرفة جيدة بدليل SavedModel الخاص بـ 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 أو تنبؤات top-k.
إذا كان النموذج يستخدم التسرب أو تسوية الدُفعات أو تقنيات تدريب مشابهة تتضمن معلمات فائقة ، فقم بتعيينها على قيم منطقية عبر العديد من المشكلات المستهدفة المتوقعة وأحجام الدُفعات. (حتى كتابة هذه السطور ، لا يجعل الحفظ من Keras من السهل السماح للمستهلكين بتعديلها.)
يتم حفظ منظمي الوزن على الطبقات الفردية (مع معاملات قوة الانتظام الخاصة بهم) ، ولكن يتم فقدان تنظيم الوزن من داخل المُحسِّن (مثل tf.keras.optimizers.Ftrl.l1_regularization_strength=...)
). قم بإبلاغ المستهلكين بنموذج SavedModel الخاص بك وفقًا لذلك.
حديقة نموذجية TensorFlow
يحتوي TensorFlow Model Garden repo على الكثير من الأمثلة على إنشاء نماذج محفوظة TF2 قابلة لإعادة الاستخدام ليتم تحميلها على tfhub.dev .
طلبات المجتمع
ينشئ فريق TensorFlow Hub جزءًا صغيرًا فقط من الأصول المتوفرة على tfhub.dev. نعتمد بشكل أساسي على الباحثين في Google و DeepMind ومؤسسات البحث الأكاديمي والشركات والمتحمسين للتعلم الآلي لإنتاج النماذج. نتيجةً لذلك ، لا يمكننا ضمان قدرتنا على تلبية طلبات المجتمع لأصول محددة ، ولا يمكننا تقديم تقديرات زمنية لتوافر الأصول الجديدة.
يحتوي المعلم الرئيسي لطلبات نموذج المجتمع أدناه على طلبات من المجتمع لأصول محددة - إذا كنت أنت أو أي شخص تعرفه مهتمًا بإنتاج الأصل ومشاركته علىtfhub.dev، نرحب بالتقديم!