قيمة Optional في ONNX قد تخلو من عنصر، أو تحتوي عنصرا من النوع المحدد. يوثق عامل Optional إنشاء الحالتين. [1] لذلك لا نقرر وجود مدخل للنموذج من عدده أو من كلمة «فارغ» وحدها؛ نحتاج وصف الوعاء وما يحويه.
الخلاصة السريعة
لا؛ الصفر قيمة ممكنة، وغياب العنصر حالة أخرى. افحص وجود العنصر قبل استخراجه، وأعلن قاعدة البديل إذا احتاجها مسارك.
- ينشئ Optional وعاء اختياريا فارغا ذا نوع، أو وعاء يحتوي العنصر المقدم. [1] وصف النوع لا يثبت وجود قيمة داخله.
- بطاقاتنا ثلاث: وعاء بلا عنصر، ووعاء يحوي تنسور الصفر، ووعاء يحوي تنسورا بلا عناصر عددية؛ الاثنان الأخيران يحويان عنصرا رغم اختلاف محتواه.
- في العقد الحالي يعيد OptionalHasElement قيمة صحيحة للتنسور أو التسلسل، أو للاختياري المحتوي؛ وغير صحيحة للغائب أو الاختياري الفارغ. [2] استخراج اختياري فارغ خطأ وسلوكه غير معرف. [3]
- نعلن بديلنا 9 عند غياب العنصر، وإلا مجموع أعداده زائد 3، مع مجموع القائمة الخالية صفرا؛ فيكون جواب الصفر والخالية 3. هذه قاعدة مؤلفة، وليست بديلا تلقائيا في ONNX.
أي فراغ يصفه الوعاء؟
يفصل Optional بين اختياري خال من عنصر واختياري يحتوي العنصر المدخل، مع وصف نوع المحتوى. [1]
نقترح بطاقة مراجعة قبل تقديم بيانات للنموذج: نوع الوعاء، وهل يحوي عنصرا، ثم وصف هذا العنصر إن وجد. لا نحذف خانة الوجود لأن النوع يحمل اسم tensor. نوع يمكن أن يرد في العقد دون أن تكون له قيمة حاضرة في الحالة المقصودة.
ولا نستنتج كيف تستقبل واجهة خدمة معينة خانة محذوفة. ما نقرأه هنا عقد عوامل ONNX، لا ترخيص بحذف أي مدخل مطلوب في تطبيق أو طلب JSON. لم نقدم خادما أو توقيعا يقبل الحذف.
كيف نفصل ثلاث بطاقات تبدو فارغة؟
نؤلف أ: وعاء اختياري بلا عنصر. ونؤلف ب: وعاء اختياري يحوي تنسورا ذا عدد واحد هو صفر. ونؤلف ج: وعاء اختياري يحوي تنسورا له صفر من العناصر العددية. نعلن الأوصاف للتوضيح دون إنشاء تنسورات.
أ بلا عنصر محاط. ب وج لكل منهما عنصر محاط هو التنسور نفسه؛ عدد القيم داخل ذلك التنسور سؤال تال. في ب العدد صفر، وفي ج لا يوجد عدد لقراءته. لا يحول أي منهما وجود التنسور إلى غياب الوعاء الاختياري.
إذا كتب التقرير «فارغ»، نطلب تحديد المستوى. الخلط بين مستويين قد يجعل القارئ يقترح استخراج عنصر غير موجود أو يستبدل قيمة صفر صحيحة ببديل لم تقره المهمة.
ماذا يفحص عامل الوجود ومتى نستخرج؟
يقبل OptionalHasElement الحالي اختياري النوع أو تنسورا أو تسلسلا؛ الوجود صحيح للمحتوي أو للتنسور والتسلسل، وغير صحيح للاختياري الفارغ أو المدخل غير المقدم. [2]
أما OptionalGetElement فيخرج محتوى الاختياري؛ إذا كان الاختياري بلا عنصر فهذا خطأ والسلوك غير معرف. [3]
لذلك نفصل في خطة الورقة فحص الوجود من الاستخراج. لا نكتب ناتج صفر للخطأ كي نحصل على جدول مكتمل. ولم نستدع العاملين هنا؛ النتائج التي نتحدث عنها تفسير للعقد ووصف البطاقات، لا اختبار دعم إصدار تشغيل.
من يحدد البديل في مسارنا؟
نعلن وظيفة تعليمية مستقلة: إذا غاب العنصر أعد 9؛ وإذا حضر تنسور الأعداد فاجمع أعداده وأضف 3. نحدد مجموع التنسور بلا أعداد بأنه صفر في هذه الوظيفة. لم ننسب الوظيفة لعامل موثق.
تحصل أ على 9. تحصل ب على صفر زائد 3، وج على مجموع خال هو صفر زائد 3، فيكون جوابهما 3. تساوي جواب ب وج لا يجعل محتواهما واحدا، كما لا يجعل 9 قيمة افتراضية لكل نموذج.
يحفظ الرسم فرع الوجود ثم قاعدتنا الخاصة. قبل تطبيق فعلي نراجع توقيع المدخل والإصدار والمستهلك وما يريده من قيمة غائبة. شرح الحالات لا يثبت أن نموذجا يقبلها أو أن البديل يحسن تنبؤه.
المصادر ومتابعة القراءة
- ONNX: Optional (يفتح في نافذة جديدة)onnx.ai
- ONNX: OptionalHasElement (يفتح في نافذة جديدة)onnx.ai
- ONNX: OptionalGetElement (يفتح في نافذة جديدة)onnx.ai
أُعدّ هذا المقال بصياغة عربية أصلية بالاستناد إلى المصادر أعلاه، وهو مدخل تمهيدي إلى الموضوع. اقرأ منهجية المحتوى وحدوده.
