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);
 }
 

لاحظ أن هناك فرقًا بين الشكل [] والشكل[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 نموذج مع توكو، وكذلك الأشكال الافتراضية للمدخلات.

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

تحذير: مثيلات InterpreterApi غير آمنة لسلاسل المحادثات.

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

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

الفصول الدراسية المتداخلة

صنف InterpreterApi.Options فئة خيارات للتحكّم في سلوك ميزة "الترجمة الفورية" في بيئة التشغيل.

الطرق العامة

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

الطرق المكتسبة

الطرق العامة

علنية تجريدي فراغ allocateTensors ()

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

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

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

 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...

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

الرميات
IllegalStateException إذا تعذر تخصيص عشرات الرسم البياني بنجاح.

علنية تجريدي فراغ إغلاق ()

إصدار الموارد المرتبطة بالمثيل InterpreterApi

علنية ثابتة InterpreterApi إنشاء (File modelFile, InterpreterApi.Options )

تنشئ هذه الدالة مثيل InterpreterApi باستخدام النموذج والخيارات المحدّدة. النموذج سيتم تحميله من ملف.

المعلمات
modelFile ملف يحتوي على نموذج TF Lite المدرَّب مسبقًا
الخيارات مجموعة من الخيارات لتخصيص سلوك ميزة "الترجمة الفورية"
الرميات
IllegalArgumentException إذا كان modelFile لا يشفّر ملف TensorFlow Lite صالح الأمثل.

علنية ثابتة InterpreterApi إنشاء (ByteBuffer byteBuffer, InterpreterApi.Options)

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

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

علنية تجريدي تدخُّل دفاعي getInputIndex (سلسلة opName)

الحصول على فهرس للمدخل حسب اسم العملية للمدخل

المعلمات
opName
الرميات
IllegalArgumentException إذا كان opName لا يتطابق مع أي إدخال في النموذج المستخدَم لإعداد المترجم الفوري.

علنية تجريدي Tensor getInputTensor (int enterIndex)

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

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

علنية تجريدي تدخُّل دفاعي getInputTensorCount ()

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

علنية تجريدي طويل getLastNativeInferenceDurationNanoseconds ()

تعرض توقيت الاستنتاج الأصلي.

الرميات
IllegalArgumentException إذا لم يتم إعداد النموذج بواسطة المترجم.

علنية تجريدي تدخُّل دفاعي getOutputIndex (سلسلة opName)

الحصول على فهرس للناتج وفقًا لاسم عملية المخرجات.

المعلمات
opName
الرميات
IllegalArgumentException إذا لم تتطابق السمة opName مع أي ناتج في النموذج المستخدَم لإعداد المترجم الفوري.

علنية تجريدي Tensor getOutputTensor (int consentIndex)

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

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

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

علنية تجريدي تدخُّل دفاعي getOutputTensorCount ()

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

علنية تجريدي فراغ resizeInput (int idx, int[] تتعلق بالتعتيم، منطقي)

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

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

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

علنية تجريدي فراغ resizeInput (int idx, int[] تعتيم)

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

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

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

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

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

  • ByteBuffer - متوافق مع أي نوع من أنواع Tensor الأساسية.
  • FloatBuffer - متوافق مع العشرات العائمة.
  • IntBuffer: متوافق مع int32 Tensors
  • LongBuffer - متوافق مع int64 Tensors.
يُرجى العلم أنّ الأنواع المنطقية لا يمكن استخدامها إلا كصفائف، وليس كقيم Buffer أو كمدخلات عددية.

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

علنية تجريدي فراغ runForMultipleInputsOutputs (إدخالات Object[]، الخريطة<عدد صحيح والكائن> المخرجات)

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

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

  • ByteBuffer - متوافق مع أي نوع من أنواع Tensor الأساسية.
  • FloatBuffer - متوافق مع العشرات العائمة.
  • IntBuffer: متوافق مع int32 Tensors
  • LongBuffer - متوافق مع int64 Tensors.
يُرجى العلم أنّ الأنواع المنطقية لا يمكن استخدامها إلا كصفائف، وليس كقيم Buffer أو كمدخلات عددية.

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

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