احضر ندوة النساء في غسل الأموال في 7 ديسمبر. سجل الآن

InterpreterApi

تنظيم صفحاتك في مجموعات يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.
الواجهة العامة InterpreterApi
الفئات الفرعية غير المباشرة المعروفة

واجهة لمترجم نموذج TensorFlow Lite ، باستثناء الطرق التجريبية.

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

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

try (InterpreterApi interpreter =
     new InterpreterApi.create(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 (InterpreterApi interpreter =
     new InterpreterApi.create(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 (InterpreterApi interpreter =
     new InterpreterApi.create(file_of_a_tensorflowlite_model)) {
   interpreter.runForMultipleInputsOutputs(input, output);
 }
 

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

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

تحذير: مثيلات InterpreterApi ليست آمنة مع مؤشر الترابط.

تحذير: يمتلك مثيل InterpreterApi الموارد التي يجب تحريرها صراحةً عن طريق استدعاء close()

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

فئات متداخلة

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

الطرق العامة

الفراغ الملخص
تخصيص
يقوم صراحة بتحديث التخصيصات لجميع الموترات ، إذا لزم الأمر.
الفراغ الملخص
إغلاق ()
قم بتحرير الموارد المرتبطة بمثيل InterpreterApi .
مترجم ثابت
إنشاء ( File modelFile، InterpreterApi.Options options)
بناء مثيل InterpreterApi ، باستخدام النموذج والخيارات المحددة.
مترجم ثابت
إنشاء ( خيارات ByteBuffer byteBuffer و InterpreterApi.Options )
بناء مثيل InterpreterApi ، باستخدام النموذج والخيارات المحددة.
كثافة العمليات مجردة
getInputIndex ( سلسلة opName)
يحصل على فهرس للمدخلات مع إعطاء اسم المرجع للإدخال.
تنسور مجردة
getInputTensor (int inputIndex)
يحصل على Tensor مرتبط بفهرس الإدخال المقدم.
كثافة العمليات مجردة
getInputTensorCount ()
الحصول على عدد موترات الإدخال.
مجردة طويلة
getLastNativeInferenceDurationNanoseconds ()
إرجاع توقيت الاستدلال الأصلي.
كثافة العمليات مجردة
getOutputIndex ( سلسلة opName)
يحصل على فهرس ناتج معطى اسم المرجع الخاص بالمخرجات.
تنسور مجردة
getOutputTensor (int outputIndex)
يحصل على Tensor المرتبط بفهرس الإخراج المقدم.
كثافة العمليات مجردة
getOutputTensorCount ()
الحصول على عدد موتر الإخراج.
الفراغ الملخص
resizeInput (int idx، int [] dims، boolean strict)
يغير حجم إدخال idx-th للنموذج الأصلي إلى التعتيم المحدد.
الفراغ الملخص
resizeInput (int idx، int [] dims)
يغير حجم إدخال idx-th للنموذج الأصلي إلى التعتيم المحدد.
الفراغ الملخص
تشغيل (إدخال الكائن ، إخراج الكائن )
لتشغيل استنتاج النموذج إذا كان النموذج يأخذ إدخالًا واحدًا فقط ، ويقدم إخراجًا واحدًا فقط.
الفراغ الملخص
runForMultipleInputsOutputs ( كائن [] المدخلات ، خريطة < عدد صحيح ، كائن > المخرجات)
لتشغيل استدلال النموذج إذا كان النموذج يأخذ مدخلات متعددة ، أو يُرجع مخرجات متعددة.

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

الطرق العامة

تخصيص الفراغ الملخص العام

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

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

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

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 .

إنشاء مترجم فوري ثابت عام (خيارات ملف نموذج الملف ، InterpreterApi.Options )

بناء مثيل InterpreterApi ، باستخدام النموذج والخيارات المحددة. سيتم تحميل النموذج من ملف.

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

إنشاء InterpreterApi ثابت عام ( خيارات ByteBuffer byteBuffer و InterpreterApi.Options )

بناء مثيل InterpreterApi ، باستخدام النموذج والخيارات المحددة. ستتم قراءة النموذج من ByteBuffer .

المعلمات
بايت بوفير نموذج TF Lite مدرب مسبقًا ، في شكل تسلسلي ثنائي. لا ينبغي تعديل ByteBuffer بعد إنشاء مثيل InterpreterApi . يمكن أن يكون ByteBuffer إما MappedByteBuffer الذي يقوم الذاكرة بتعيين ملف نموذج ، أو ByteBuffer مباشر من nativeOrder () الذي يحتوي على محتوى بايت للنموذج.
والخيارات مجموعة من الخيارات لتخصيص سلوك المترجم الفوري.
رميات
غير الشرعيين استثناء حجة إذا لم يكن byteBuffer عبارة عن MappedByteBuffer ولا ByteBuffer مباشرًا لـ originalOrder.

الملخص العام int getInputIndex ( String opName)

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

المعلمات
الاسم
رميات
غير الشرعيين استثناء حجة إذا لم يتطابق opName مع أي إدخال في النموذج المستخدم لتهيئة المترجم.

Tensor الملخص العام getInputTensor (int inputIndex)

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

المعلمات
المدخلات
رميات
غير الشرعيين استثناء حجة إذا كانت inputIndex سالبة أو ليست أصغر من عدد مدخلات النموذج.

الملخص العام int getInputTensorCount ()

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

الملخص العام getLastNativeInferenceDurationNanoseconds طويل ()

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

رميات
غير الشرعيين استثناء حجة إذا لم تتم تهيئة النموذج بواسطة المترجم.

الملخص العام int getOutputIndex ( String opName)

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

المعلمات
الاسم
رميات
غير الشرعيين استثناء حجة إذا لم يتطابق opName مع أي إخراج في النموذج المستخدم لتهيئة المترجم.

Tensor الملخص العام getOutputTensor (int outputIndex)

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

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

المعلمات
الإخراج
رميات
غير الشرعيين استثناء حجة إذا كانت outputIndex سالبة أو ليست أصغر من عدد مخرجات النموذج.

الملخص العام int getOutputTensorCount ()

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

إدخال تغيير حجم باطل الملخص العام (int idx، int [] dims، boolean strict )

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

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

المعلمات
معرف
يخفت
حازم
رميات
غير الشرعيين استثناء حجة إذا كان idx سالبًا أو ليس أصغر من عدد مدخلات النموذج ؛ أو إذا حدث خطأ عند تغيير حجم إدخال idx-th. بالإضافة إلى ذلك ، يحدث الخطأ عند محاولة تغيير حجم موتر بأبعاد ثابتة عندما تكون "صارمة" صحيحة.

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

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

المعلمات
معرف
يخفت
رميات
غير الشرعيين استثناء حجة إذا كان idx سالبًا أو ليس أصغر من عدد مدخلات النموذج ؛ أو إذا حدث خطأ عند تغيير حجم إدخال idx-th.

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

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

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

  • ByteBuffer - متوافق مع أي نوع Tensor أساسي أساسي.
  • FloatBuffer - متوافق مع موتر عائم.
  • 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 (منطقي) ) ، أو إذا كان الرسم البياني قد شكل النواتج ديناميكيًا ويجب على المتصل الاستعلام عن شكل Tensor الناتج بعد استدعاء الاستدلال ، وجلب البيانات مباشرة من موتر الإخراج (عبر Tensor.asReadOnlyBuffer() ).
رميات
غير الشرعيين استثناء حجة إذا كان input فارغًا أو فارغًا ، أو إذا حدث خطأ عند تشغيل الاستنتاج.
غير الشرعيين استثناء حجة (تجريبي ، قابل للتغيير) إذا تمت مقاطعة الاستنتاج بواسطة setCancelled(true) .

public abstract void runForMultipleInputsOutputs ( Object [] inputs ، Map < Integer ، Object > outputs)

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

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

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

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

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