Interpreter

مترجم الطبقة النهائية العامة

فئة برنامج التشغيل لتحفيز استنتاج النموذج باستخدام TensorFlow Lite.

ملاحظة: إذا لم تكن بحاجة إلى الوصول إلى أي من ميزات واجهة برمجة التطبيقات "التجريبية" أدناه، ففضل استخدام InterpreterApi وInterpreterFactory بدلاً من استخدام Interpreter مباشرة.

يقوم Interpreter بتغليف نموذج TensorFlow Lite الذي تم تدريبه مسبقًا، حيث يتم تنفيذ العمليات لاستدلال النموذج.

على سبيل المثال، إذا كان النموذج يأخذ مدخلاً واحدًا فقط ويعيد مخرجًا واحدًا فقط:

try (Interpreter interpreter = new Interpreter(file_of_a_tensorflowlite_model)) {
   interpreter.run(input, output);
 }
 

إذا كان النموذج يأخذ مدخلات أو مخرجات متعددة:

Object[] inputs = {input0, input1, ...};
 Map<Integer, Object> map_of_indices_to_outputs = new HashMap<>();
 FloatBuffer ith_output = FloatBuffer.allocateDirect(3 * 2 * 4);  // Float tensor, shape 3x2x4.
 ith_output.order(ByteOrder.nativeOrder());
 map_of_indices_to_outputs.put(i, ith_output);
 try (Interpreter interpreter = new Interpreter(file_of_a_tensorflowlite_model)) {
   interpreter.runForMultipleInputsOutputs(inputs, map_of_indices_to_outputs);
 }
 

إذا كان النموذج يأخذ أو ينتج موترات السلسلة:

String[] input = {"foo", "bar"};  // Input tensor shape is [2].
 String[][] output = new String[3][2];  // Output tensor shape is [3, 2].
 try (Interpreter interpreter = new Interpreter(file_of_a_tensorflowlite_model)) {
   interpreter.runForMultipleInputsOutputs(input, output);
 }
 

لاحظ أن هناك فرق بين الشكل [] والشكل[1]. لمخرجات موتر السلسلة العددية:

String[] input = {"foo"};  // Input tensor shape is [1].
 ByteBuffer outputBuffer = ByteBuffer.allocate(OUTPUT_BYTES_SIZE);  // Output tensor shape is [].
 try (Interpreter interpreter = new Interpreter(file_of_a_tensorflowlite_model)) {
   interpreter.runForMultipleInputsOutputs(input, outputBuffer);
 }
 byte[] outputBytes = new byte[outputBuffer.remaining()];
 outputBuffer.get(outputBytes);
 // Below, the `charset` can be StandardCharsets.UTF_8.
 String output = new String(outputBytes, charset);
 

يتم تحديد ترتيب المدخلات والمخرجات عند تحويل نموذج TensorFlow إلى نموذج TensorFlowLite باستخدام Toco، كما هو الحال مع الأشكال الافتراضية للمدخلات.

عندما يتم توفير المدخلات كمصفوفات (متعددة الأبعاد)، سيتم تغيير حجم موتر (مصفوفات) الإدخال المقابلة ضمنيًا وفقًا لشكل تلك المصفوفة. عندما يتم توفير المدخلات كأنواع Buffer ، لا يتم إجراء أي تغيير ضمني للحجم؛ يجب على المتصل التأكد من أن حجم بايت Buffer يتطابق مع حجم الموتر المقابل، أو أنه يقوم أولاً بتغيير حجم الموتر عبر resizeInput(int, int[]) . يمكن الحصول على معلومات شكل ونوع Tensor عبر فئة Tensor ، المتوفرة عبر getInputTensor(int) و getOutputTensor(int) .

تحذير: مثيلات Interpreter غير آمنة لمؤشر الترابط. يمتلك Interpreter الموارد التي يجب تحريرها بشكل صريح عن طريق استدعاء close()

تم إنشاء مكتبة TFLite وفقًا لـ NDK API 19. وقد تعمل مع مستويات Android API الأقل من 19، ولكنها غير مضمونة.

فئات متداخلة

فصل Interpreter.Options فئة خيارات للتحكم في سلوك مترجم وقت التشغيل.

المقاولون العامون

مترجم ( ملف نموذج الملف)
تهيئة Interpreter .
مترجم ( ملف modelFile، خيارات Interpreter.Options )
تهيئة Interpreter وتحديد الخيارات لتخصيص سلوك المترجم الفوري.
مترجم ( ByteBuffer byteBuffer)
تهيئة Interpreter باستخدام ByteBuffer لملف نموذجي.
مترجم ( ByteBuffer byteBuffer، خيارات Interpreter.Options )
تهيئة Interpreter باستخدام ByteBuffer لملف نموذجي ومجموعة من Interpreter.Options المخصصة.

الأساليب العامة

فارغ
تخصيص Tensors ()
يقوم بتحديث التخصيصات بشكل صريح لجميع الموترات، إذا لزم الأمر.
فارغ
يغلق ()
قم بتحرير الموارد المرتبطة بمثيل InterpreterApi .
كثافة العمليات
getInputIndex (اسم سلسلة )
يحصل على فهرس الإدخال بالنظر إلى اسم العملية للإدخال.
الموتر
getInputTensor (int inputIndex)
يحصل على Tensor المرتبط بفهرس الإدخال المقدم.
كثافة العمليات
getInputTensorCount ()
الحصول على عدد موترات الإدخال.
الموتر
getInputTensorFromSignature (اسم إدخال السلسلة ، مفتاح توقيع السلسلة )
يحصل على Tensor المرتبط باسم الإدخال المقدم واسم طريقة التوقيع.
طويل
getLastNativeInferenceDurationNano Seconds ()
إرجاع توقيت الاستدلال الأصلي.
كثافة العمليات
getOutputIndex (اسم سلسلة )
يحصل على فهرس الإخراج بالنظر إلى اسم المرجع للإخراج.
الموتر
getOutputTensor (intputIndex)
يحصل على Tensor المرتبط بفهرس الإخراج المقدم.
كثافة العمليات
getOutputTensorCount ()
الحصول على عدد Tensors الإخراج.
الموتر
getOutputTensorFromSignature (اسم مخرجات السلسلة ، مفتاح توقيع السلسلة )
يحصل على Tensor المرتبط باسم الإخراج المقدم بطريقة توقيع محددة.
خيط[]
getSignatureInputs (مفتاح توقيع السلسلة )
الحصول على قائمة مدخلات SignatureDefs لطريقة signatureKey .
خيط[]
الحصول على مفاتيح التوقيع ()
الحصول على قائمة بأسماء الطرق المصدرة SignatureDef المتوفرة في النموذج.
خيط[]
getSignatureOutputs (مفتاح التوقيع السلسلة )
الحصول على قائمة مخرجات SignatureDefs لأسلوب signatureKey .
فارغ
إعادة تعيين المتغيرات ()
متقدم: إعادة تعيين جميع الموترات المتغيرة إلى القيمة الافتراضية.
فارغ
تغيير حجم الإدخال (int idx، int[] dims، boolean الصارمة)
يقوم بتغيير حجم إدخال idx-th للنموذج الأصلي إلى القيم المعتمة.
فارغ
تغيير حجم الإدخال (int idx، int[] dims)
يقوم بتغيير حجم إدخال idx-th للنموذج الأصلي إلى القيم المعتمة.
فارغ
تشغيل (إدخال الكائن ، إخراج الكائن )
يتم تشغيل استنتاج النموذج إذا كان النموذج يأخذ مدخلاً واحدًا فقط، ويوفر مخرجًا واحدًا فقط.
فارغ
runForMultipleInputsOutputs (مدخلات الكائن [] ، خريطة < عدد صحيح ، كائن > النواتج)
يتم تشغيل استنتاج النموذج إذا كان النموذج يأخذ مدخلات متعددة، أو يقوم بإرجاع مخرجات متعددة.
فارغ
runSignature ( خريطة < سلسلة ، كائن > المدخلات، خريطة < سلسلة ، كائن > النواتج)
مثل runSignature(Map, Map, String) ولكنه لا يتطلب تمرير مفتاح التوقيع، بافتراض أن النموذج يحتوي على SignatureDef واحد.
فارغ
runSignature ( خريطة < سلسلة ، كائن > المدخلات، خريطة < سلسلة ، كائن > النواتج، سلسلة توقيع المفتاح)
تشغيل استدلال النموذج بناءً على SignatureDef المقدم من خلال signatureKey .
فارغ
setCancelled (تم الإلغاء المنطقي)
متقدم: يقاطع الاستدلال في منتصف استدعاء run(Object, Object) .

الطرق الموروثة

المقاولون العامون

المترجم العام ( ملف نموذج الملف)

تهيئة Interpreter .

حدود
modelFile ملف لنموذج TF Lite المدرب مسبقًا.
رميات
غير الشرعيين استثناء حجة إذا لم يقم modelFile بتشفير نموذج TensorFlow Lite صالح.

مترجم عام ( ملف modelFile، خيارات Interpreter.Options )

تهيئة Interpreter وتحديد الخيارات لتخصيص سلوك المترجم الفوري.

حدود
modelFile ملف لنموذج TF Lite المدرب مسبقًا
خيارات مجموعة من الخيارات لتخصيص سلوك المترجم
رميات
غير الشرعيين استثناء حجة إذا لم يقم modelFile بتشفير نموذج TensorFlow Lite صالح.

مترجم عام ( ByteBuffer byteBuffer)

تهيئة Interpreter باستخدام ByteBuffer لملف نموذجي.

لا ينبغي تعديل ByteBuffer بعد إنشاء Interpreter . يمكن أن يكون ByteBuffer إما MappedByteBuffer الذي يقوم بتعيين ملف نموذج من الذاكرة، أو ByteBuffer المباشر لـ أصليOrder() الذي يحتوي على محتوى البايتات للنموذج.

حدود
byteBuffer
رميات
غير الشرعيين استثناء حجة إذا لم يكن byteBuffer MappedByteBuffer ولا ByteBuffer مباشرًا لـ originalOrder.

مترجم عام ( ByteBuffer byteBuffer، خيارات Interpreter.Options )

تهيئة Interpreter باستخدام ByteBuffer لملف نموذجي ومجموعة من Interpreter.Options المخصصة.

لا ينبغي تعديل ByteBuffer بعد إنشاء Interpreter . يمكن أن يكون ByteBuffer إما MappedByteBuffer الذي يقوم بتعيين ملف نموذج من الذاكرة، أو ByteBuffer المباشر لـ أصليOrder() الذي يحتوي على محتوى البايتات للنموذج.

حدود
byteBuffer
خيارات
رميات
غير الشرعيين استثناء حجة إذا لم يكن byteBuffer MappedByteBuffer ولا ByteBuffer مباشرًا لـ originalOrder.

الأساليب العامة

تخصيص الفراغ العام Tensors ()

يقوم بتحديث التخصيصات بشكل صريح لجميع الموترات، إذا لزم الأمر.

سيؤدي هذا إلى نشر الأشكال وتخصيصات الذاكرة للموترات التابعة باستخدام شكل (أشكال) موتر الإدخال كما هو محدد.

ملحوظة: هذه المكالمة *اختيارية تمامًا*. سيحدث تخصيص الموتر تلقائيًا أثناء التنفيذ إذا تم تغيير حجم أي موترات إدخال. يعد هذا الاستدعاء مفيدًا للغاية في تحديد الأشكال لأي موترات مخرجات قبل تنفيذ الرسم البياني، على سبيل المثال،

 interpreter.resizeInput(0, new int[]{1, 4, 4, 3}));
 interpreter.allocateTensors();
 FloatBuffer input = FloatBuffer.allocate(interpreter.getInputTensor(0).numElements());
 // Populate inputs...
 FloatBuffer output = FloatBuffer.allocate(interpreter.getOutputTensor(0).numElements());
 interpreter.run(input, output)
 // Process outputs...

ملاحظة: تحتوي بعض الرسوم البيانية على مخرجات ذات شكل ديناميكي، وفي هذه الحالة قد لا يتم نشر شكل المخرجات بشكل كامل حتى يتم تنفيذ الاستدلال.

إغلاق الفراغ العام ()

قم بتحرير الموارد المرتبطة بمثيل InterpreterApi .

int public getInputIndex ( String opName)

يحصل على فهرس الإدخال بالنظر إلى اسم العملية للإدخال.

حدود
اسم العملية

الموتر العام getInputTensor (int inputIndex)

يحصل على Tensor المرتبط بفهرس الإدخال المقدم.

حدود
inputIndex

int public getInputTensorCount ()

الحصول على عدد موترات الإدخال.

الموتر العام getInputTensorFromSignature (اسم إدخال السلسلة ، مفتاح توقيع السلسلة )

يحصل على Tensor المرتبط باسم الإدخال المقدم واسم طريقة التوقيع.

تحذير: هذه واجهة برمجة تطبيقات تجريبية وقابلة للتغيير.

حدود
اسم الإدخال أدخل الاسم في التوقيع
مفتاح التوقيع يمكن أن يكون مفتاح التوقيع الذي يحدد SignatureDef خاليًا إذا كان النموذج يحتوي على توقيع واحد.
رميات
غير الشرعيين استثناء حجة إذا كان inputName أو signatureKey فارغًا أو فارغًا، أو تم توفير اسم غير صالح.

public Long getLastNativeInferenceDurationNanothans ()

إرجاع توقيت الاستدلال الأصلي.

int public getOutputIndex ( String opName)

يحصل على فهرس الإخراج بالنظر إلى اسم المرجع للإخراج.

حدود
اسم العملية

الموتر العام getOutputTensor (intputIndex)

يحصل على Tensor المرتبط بفهرس الإخراج المقدم.

ملاحظة: قد لا تتم تعبئة تفاصيل موتر الإخراج (على سبيل المثال، الشكل) بالكامل إلا بعد تنفيذ الاستدلال. إذا كنت بحاجة إلى تفاصيل محدثة *قبل* تشغيل الاستدلال (على سبيل المثال، بعد تغيير حجم موتر الإدخال، مما قد يؤدي إلى إبطال أشكال موتر الإخراج)، فاستخدم allocateTensors() لتشغيل التخصيص ونشر الشكل بشكل صريح. لاحظ أنه بالنسبة للرسوم البيانية ذات أشكال المخرجات التي تعتمد على *قيم* الإدخال، فقد لا يتم تحديد شكل المخرجات بشكل كامل حتى يتم تشغيل الاستدلال.

حدود
inputIndex

int public getOutputTensorCount ()

الحصول على عدد Tensors الإخراج.

الموتر العام getOutputTensorFromSignature (اسم إخراج السلسلة ، مفتاح توقيع السلسلة )

يحصل على Tensor المرتبط باسم الإخراج المقدم بطريقة توقيع محددة.

ملاحظة: قد لا تتم تعبئة تفاصيل موتر الإخراج (على سبيل المثال، الشكل) بالكامل إلا بعد تنفيذ الاستدلال. إذا كنت بحاجة إلى تفاصيل محدثة *قبل* تشغيل الاستدلال (على سبيل المثال، بعد تغيير حجم موتر الإدخال، مما قد يؤدي إلى إبطال أشكال موتر الإخراج)، فاستخدم allocateTensors() لتشغيل التخصيص ونشر الشكل بشكل صريح. لاحظ أنه بالنسبة للرسوم البيانية ذات أشكال المخرجات التي تعتمد على *قيم* الإدخال، فقد لا يتم تحديد شكل المخرجات بشكل كامل حتى يتم تشغيل الاستدلال.

تحذير: هذه واجهة برمجة تطبيقات تجريبية وقابلة للتغيير.

حدود
اسم الإخراج اسم الإخراج في التوقيع.
مفتاح التوقيع يمكن أن يكون مفتاح التوقيع الذي يحدد SignatureDef خاليًا إذا كان النموذج يحتوي على توقيع واحد.
رميات
غير الشرعيين استثناء حجة إذا كان outputName أو signatureKey فارغًا أو فارغًا، أو تم توفير اسم غير صالح.

سلسلة عامة [] getSignatureInputs (مفتاح توقيع السلسلة )

الحصول على قائمة مدخلات SignatureDefs لطريقة signatureKey .

تحذير: هذه واجهة برمجة تطبيقات تجريبية وقابلة للتغيير.

حدود
مفتاح التوقيع

السلسلة العامة [] getSignatureKeys ()

الحصول على قائمة بأسماء الطرق المصدرة SignatureDef المتوفرة في النموذج.

تحذير: هذه واجهة برمجة تطبيقات تجريبية وقابلة للتغيير.

سلسلة عامة [] getSignatureOutputs (مفتاح توقيع السلسلة )

الحصول على قائمة مخرجات SignatureDefs لأسلوب signatureKey .

تحذير: هذه واجهة برمجة تطبيقات تجريبية وقابلة للتغيير.

حدود
مفتاح التوقيع

إعادة تعيين الفراغ العام VariableTensors ()

متقدم: إعادة تعيين جميع الموترات المتغيرة إلى القيمة الافتراضية.

إذا لم يكن للموتر المتغير مخزن مؤقت مرتبط به، فسيتم إعادة تعيينه إلى الصفر.

تحذير: هذه واجهة برمجة تطبيقات تجريبية وقابلة للتغيير.

تغيير حجم الفراغ العام (int idx، int[] dims، boolean الصارمة)

يقوم بتغيير حجم إدخال idx-th للنموذج الأصلي إلى القيم المعتمة.

عندما تكون القيمة `strict` صحيحة، يمكن تغيير حجم الأبعاد غير المعروفة فقط. تتم الإشارة إلى الأبعاد غير المعروفة بالرمز `-1` في المصفوفة التي يتم إرجاعها بواسطة Tensor.shapeSignature()`.

حدود
معرف
يخفت
حازم

تغيير حجم الفراغ العام (int idx، int[] dims)

يقوم بتغيير حجم إدخال idx-th للنموذج الأصلي إلى القيم المعتمة.

حدود
معرف
يخفت

تشغيل الفراغ العام (إدخال الكائن ، إخراج الكائن )

يتم تشغيل استنتاج النموذج إذا كان النموذج يأخذ مدخلاً واحدًا فقط، ويوفر مخرجًا واحدًا فقط.

تحذير: تكون واجهة برمجة التطبيقات (API) أكثر كفاءة إذا تم استخدام Buffer المؤقت (يفضل أن يكون مباشرًا، ولكن ليس مطلوبًا) كنوع بيانات الإدخال/الإخراج. يرجى التفكير في استخدام Buffer لتغذية وجلب البيانات الأولية للحصول على أداء أفضل. يتم دعم أنواع Buffer المؤقت الخرسانية التالية:

  • ByteBuffer - متوافق مع أي نوع Tensor بدائي أساسي.
  • FloatBuffer - متوافق مع Tensors العائمة.
  • IntBuffer - متوافق مع Tensors int32.
  • LongBuffer - متوافق مع Tensors int64.
لاحظ أن الأنواع المنطقية مدعومة فقط كمصفوفات، وليس Buffer ، أو كمدخلات عددية.

حدود
مدخل مصفوفة أو مصفوفة متعددة الأبعاد، أو Buffer من الأنواع البدائية بما في ذلك int وfloat وlong وbyte. Buffer هو الطريقة المفضلة لتمرير بيانات الإدخال الكبيرة للأنواع البدائية، في حين تتطلب أنواع السلسلة استخدام مسار إدخال المصفوفة (متعدد الأبعاد). عند استخدام Buffer ، يجب أن يظل محتواه دون تغيير حتى يتم استنتاج النموذج، ويجب على المتصل التأكد من أن Buffer في موضع القراءة المناسب. يُسمح بالقيمة null فقط إذا كان المتصل يستخدم Delegate يسمح بالتشغيل المتداخل لمقبض المخزن المؤقت، وتم ربط هذا المخزن المؤقت بإدخال Tensor .
انتاج مصفوفة متعددة الأبعاد من بيانات المخرجات، أو Buffer من الأنواع البدائية بما في ذلك int وfloat وlong وbyte. عند استخدام Buffer ، يجب على المتصل التأكد من ضبطه على موضع الكتابة المناسب. يُسمح بقيمة فارغة، وهي مفيدة في حالات معينة، على سبيل المثال، إذا كان المتصل يستخدم Delegate يسمح بالتشغيل المتداخل لمقبض المخزن المؤقت، وتم ربط هذا المخزن Tensor الإخراج (راجع أيضًا Interpreter.Options#setAllowBufferHandleOutput(boolean) )، أو إذا كان الرسم البياني يحتوي على مخرجات ذات شكل ديناميكي ويجب على المتصل الاستعلام عن شكل Tensor الإخراج بعد استدعاء الاستدلال، وجلب البيانات مباشرة من موتر الإخراج (عبر Tensor.asReadOnlyBuffer() ).

runForMultipleInputsOutputs باطلة عامة (مدخلات Object[] ، خريطة < Integer ، Object > مخرجات)

يتم تشغيل استنتاج النموذج إذا كان النموذج يأخذ مدخلات متعددة، أو يقوم بإرجاع مخرجات متعددة.

تحذير: تكون واجهة برمجة التطبيقات (API) أكثر كفاءة إذا تم استخدام Buffer المؤقت (يفضل أن يكون مباشرًا، ولكن ليس مطلوبًا) كأنواع بيانات الإدخال/الإخراج. يرجى التفكير في استخدام Buffer لتغذية وجلب البيانات الأولية للحصول على أداء أفضل. يتم دعم أنواع Buffer المؤقت الخرسانية التالية:

  • ByteBuffer - متوافق مع أي نوع Tensor بدائي أساسي.
  • FloatBuffer - متوافق مع Tensors العائمة.
  • IntBuffer - متوافق مع Tensors int32.
  • LongBuffer - متوافق مع Tensors int64.
لاحظ أن الأنواع المنطقية مدعومة فقط كمصفوفات، وليس Buffer ، أو كمدخلات عددية.

ملاحظة: null يُسمح بالقيم الخالية للعناصر الفردية inputs outputs إلا إذا كان المتصل يستخدم Delegate يسمح بالتشغيل البيني لمقبض المخزن المؤقت، وقد تم ربط هذا المخزن المؤقت بالمدخلات أو Tensor المقابلة.

حدود
المدخلات مجموعة من البيانات المدخلة. يجب أن تكون المدخلات بنفس ترتيب مدخلات النموذج. يمكن أن يكون كل إدخال عبارة عن مصفوفة أو مصفوفة متعددة الأبعاد، أو Buffer من الأنواع البدائية بما في ذلك int وfloat وlong وbyte. Buffer هو الطريقة المفضلة لتمرير بيانات الإدخال الكبيرة، في حين تتطلب أنواع السلسلة استخدام مسار إدخال المصفوفة (متعدد الأبعاد). عند استخدام Buffer ، يجب أن يظل محتواه دون تغيير حتى يتم استنتاج النموذج، ويجب على المتصل التأكد من أن Buffer في موضع القراءة المناسب.
النواتج خريطة لتعيين مؤشرات الإخراج إلى صفائف متعددة الأبعاد لبيانات الإخراج أو Buffer للأنواع البدائية بما في ذلك int وfloat وlong وbyte. يحتاج فقط إلى الاحتفاظ بالإدخالات لاستخدام المخرجات. عند استخدام Buffer ، يجب على المتصل التأكد من ضبطه على موضع الكتابة المناسب. قد تكون الخريطة فارغة في الحالات التي يتم فيها استخدام مقابض المخزن المؤقت لبيانات موتر الإخراج، أو الحالات التي يتم فيها تشكيل المخرجات ديناميكيًا ويجب على المتصل الاستعلام عن شكل Tensor الإخراج بعد استدعاء الاستدلال، وجلب البيانات مباشرة من موتر الإخراج ( عبر Tensor.asReadOnlyBuffer() ).

توقيع التشغيل الفارغ العام ( خريطة < سلسلة ، كائن > المدخلات، خريطة < سلسلة ، كائن > المخرجات)

مثل runSignature(Map, Map, String) ولكنه لا يتطلب تمرير مفتاح التوقيع، بافتراض أن النموذج يحتوي على SignatureDef واحد. إذا كان النموذج يحتوي على أكثر من SignatureDef، فسيطرح استثناءً.

تحذير: هذه واجهة برمجة تطبيقات تجريبية وقابلة للتغيير.

حدود
المدخلات
النواتج

توقيع التشغيل الفراغي العام ( خريطة < سلسلة ، كائن > المدخلات، خريطة < سلسلة ، كائن > النواتج، سلسلة توقيع المفتاح)

تشغيل استدلال النموذج بناءً على SignatureDef المقدم من خلال signatureKey .

راجع run(Object, Object) لمزيد من التفاصيل حول أنواع بيانات الإدخال والإخراج المسموح بها.

تحذير: هذه واجهة برمجة تطبيقات تجريبية وقابلة للتغيير.

حدود
المدخلات خريطة من اسم الإدخال في SignatureDef إلى كائن الإدخال.
النواتج خريطة من اسم الإخراج في SignatureDef لإخراج البيانات. قد يكون هذا فارغًا إذا كان المتصل يرغب في الاستعلام عن بيانات Tensor مباشرةً بعد الاستدلال (على سبيل المثال، إذا كان شكل الإخراج ديناميكيًا، أو تم استخدام مقابض المخزن المؤقت للإخراج).
مفتاح التوقيع مفتاح التوقيع يحدد SignatureDef.
رميات
غير الشرعيين استثناء حجة إذا كانت inputs فارغة أو فارغة، إذا كانت outputs أو signatureKey فارغًا، أو إذا حدث خطأ عند تشغيل الاستدلال.

مجموعة الفراغات العامة ملغاة (تم الإلغاء المنطقي)

متقدم: يقاطع الاستدلال في منتصف استدعاء run(Object, Object) .

سيتم تعيين علامة الإلغاء على "صحيح" عند استدعاء هذه الوظيفة. سيتحقق المترجم من العلامة بين استدعاءات Op، وإذا كانت true ، فسيتوقف المترجم عن التنفيذ. سيظل المترجم في حالة الإلغاء حتى يتم "إلغاء الإلغاء" بشكل صريح بواسطة setCancelled(false) .

تحذير: هذه واجهة برمجة تطبيقات تجريبية وقابلة للتغيير.

حدود
ألغيت true لإلغاء الاستدلال بأفضل طريقة؛ false لاستئناف.
رميات
استثناء الدولة غير القانوني إذا لم تتم تهيئة المترجم باستخدام الخيار القابل للإلغاء، والذي يكون متوقفًا افتراضيًا.