موضوعي
يوفر هذا المستند أمثلة للاستخدام المقصود لـ SignatureDefs في SavedModel الذي يتناسب مع واجهات برمجة تطبيقات TensorFlow Serving.
ملخص
A SignatureDef يحدد التوقيع على حساب معتمدة في الرسم البياني TensorFlow. تهدف SignatureDefs لتقديم الدعم العام لتحديد مدخلات ومخرجات وظيفة ويمكن تحديد عند بناء SavedModel .
خلفية
TF-مصدر و SessionBundle استخدام التوقيعات التي تتشابه في مفهوم ولكن المستخدمين المطلوبة للتمييز بين التوقيعات اسمه والافتراضية من أجل دفعهم لاسترجاعها بشكل صحيح على حمولة. بالنسبة لأولئك الذين كانوا في السابق TF-مصدر / SessionBundle، Signatures
سيتم استبدالها في TF-مصدر من SignatureDefs
في SavedModel.
هيكل التوقيع
يتطلب SignatureDef مواصفات:
-
inputs
كخريطة من سلسلة لTensorInfo. -
outputs
كخريطة من سلسلة لTensorInfo. -
method_name
(والذي يتوافق مع اسم أسلوب معتمد في تحميل أداة / النظام).
علما بأن TensorInfo نفسه يتطلب مواصفات الاسم، dtype وشكل الموتر. بينما تكون معلومات الموتر موجودة بالفعل في الرسم البياني ، فمن المفيد تحديد TensorInfo بشكل صريح كجزء من SignatureDef حيث يمكن للأدوات بعد ذلك إجراء التحقق من صحة التوقيع ، وما إلى ذلك دون الحاجة إلى قراءة تعريف الرسم البياني.
الثوابت والمرافق ذات الصلة
لسهولة إعادة الاستخدام والمشاركة عبر الأدوات والأنظمة ، يتم تعريف الثوابت الشائعة الاستخدام المتعلقة بـ SignatureDefs التي سيتم دعمها في خدمة TensorFlow على أنها ثوابت. على وجه التحديد:
وبالإضافة إلى ذلك، يوفر SavedModel على UTIL للمساعدة في بناء توقيع-صفر.
هياكل العينة
توفر خدمة TensorFlow واجهات برمجة تطبيقات عالية المستوى لأداء الاستدلال. لتمكين واجهات برمجة التطبيقات هذه ، يجب أن تتضمن النماذج واحدًا أو أكثر من ملفات SignatureDefs التي تحدد عقد TensorFlow الدقيقة لاستخدامها في الإدخال والإخراج. انظر أدناه للحصول على أمثلة حول SignatureDefs المحددة التي تدعمها خدمة TensorFlow لكل واجهة برمجة تطبيقات.
لاحظ أن خدمة TensorFlow تعتمد على مفاتيح كل TensorInfo (في مدخلات ومخرجات SignatureDef) ، بالإضافة إلى اسم الأسلوب الخاص بـ SignatureDef. المحتويات الفعلية لـ TensorInfo خاصة بالرسم البياني الخاص بك.
توقيع التصنيف
التصنيف يدعم SignatureDefs الاستدعاءات المنظمة لواجهة برمجة تطبيقات تصنيف TensorFlow Serving. هذه تنص على أن يجب أن يكون هناك inputs
التنسور، وأن هناك نوعان من اختياري التنسورات الإخراج: classes
و scores
، واحدة منها على الأقل يجب أن تكون موجودة.
signature_def: {
key : "my_classification_signature"
value: {
inputs: {
key : "inputs"
value: {
name: "tf_example:0"
dtype: DT_STRING
tensor_shape: ...
}
}
outputs: {
key : "classes"
value: {
name: "index_to_string:0"
dtype: DT_STRING
tensor_shape: ...
}
}
outputs: {
key : "scores"
value: {
name: "TopKV2:0"
dtype: DT_FLOAT
tensor_shape: ...
}
}
method_name: "tensorflow/serving/classify"
}
}
توقع التوقيع
يدعم Predict SignatureDefs استدعاءات TensorFlow Serving's Predict API. تسمح لك هذه التواقيع بدعم العديد من Tensors الإدخال والإخراج بشكل مرن. لالمثال أدناه، توقيع my_prediction_signature
لديها واحد المدخلات المنطقي التنسور images
التي تم تعيينها إلى التنسور الفعلية في الرسم البياني الخاص بك x:0
.
تتيح Predict SignatureDefs إمكانية النقل عبر الطرز. وهذا يعني أنه يمكنك مبادلة في SavedModels مختلفة، وربما مع أسماء التنسور الأساسي مختلفة (على سبيل المثال بدلا من x:0
ربما لديك نموذج بديل جديد مع التنسور z:0
)، في حين أن العملاء يمكن ان يبقى على الانترنت بشكل مستمر الاستعلام عن القديم والجديد إصدارات من هذا النموذج دون تغييرات من جانب العميل.
تسمح لك Predict SignatureDefs أيضًا بإضافة Tensors إضافية اختيارية إلى المخرجات ، والتي يمكنك الاستعلام عنها بشكل صريح. وتقول دعونا أنه بالإضافة إلى مفتاح الانتاج أدناه من scores
، أردت أيضا لجلب طبقة تجميع من أجل التصحيح أو لأغراض أخرى. في هذه الحالة، فما عليك سوى إضافة التنسور إضافية مع مفتاح مثل pool
والقيمة المناسبة.
signature_def: {
key : "my_prediction_signature"
value: {
inputs: {
key : "images"
value: {
name: "x:0"
dtype: ...
tensor_shape: ...
}
}
outputs: {
key : "scores"
value: {
name: "y:0"
dtype: ...
tensor_shape: ...
}
}
method_name: "tensorflow/serving/predict"
}
}
توقيع الانحدار
Regression SignatureDefs يدعم الاستدعاءات المهيكلة لواجهة برمجة تطبيقات الانحدار الخاصة بخدمة TensorFlow. وهي تبين أنه يجب أن يكون هناك واحد بالضبط inputs
التنسور واحد outputs
التنسور.
signature_def: {
key : "my_regression_signature"
value: {
inputs: {
key : "inputs"
value: {
name: "x_input_examples_tensor_0"
dtype: ...
tensor_shape: ...
}
}
outputs: {
key : "outputs"
value: {
name: "y_outputs_0"
dtype: DT_FLOAT
tensor_shape: ...
}
}
method_name: "tensorflow/serving/regress"
}
}