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 با Toco تعیین می‌شود، همانطور که شکل‌های پیش‌فرض ورودی‌ها هستند.

هنگامی که ورودی ها به صورت آرایه های (چند بعدی) ارائه می شوند، اندازه تانسور(های) ورودی مربوطه به طور ضمنی با توجه به شکل آن آرایه تغییر می کند. هنگامی که ورودی ها به عنوان انواع Buffer ارائه می شوند، هیچ تغییر اندازه ضمنی انجام نمی شود. تماس گیرنده باید اطمینان حاصل کند که اندازه بایت Buffer یا با تانسور مربوطه مطابقت دارد، یا اینکه ابتدا اندازه تانسور را از طریق resizeInput(int, int[]) تغییر می دهد. اطلاعات شکل و نوع تانسور را می توان از طریق کلاس Tensor بدست آورد که از طریق getInputTensor(int) و getOutputTensor(int) در دسترس است.

اخطار: نمونه های InterpreterApi ایمن نیستند .

اخطار: یک نمونه InterpreterApi دارای منابعی است که باید به صراحت با فراخوانی close() آزاد شوند.

کتابخانه TFLite بر اساس NDK API 19 ساخته شده است. ممکن است برای سطوح Android API زیر 19 کار کند، اما تضمینی نیست.

کلاس های تو در تو

کلاس InterpreterApi.Options یک کلاس گزینه برای کنترل رفتار مفسر زمان اجرا.

روش های عمومی

خلأ انتزاعی
allocateTensors ()
در صورت لزوم، تخصیص ها را برای همه تانسورها به صراحت به روز می کند.
خلأ انتزاعی
بستن ()
منابع مرتبط با نمونه InterpreterApi را منتشر کنید.
Static InterpreterApi
ایجاد (گزینه های File modelFile، InterpreterApi.Options )
با استفاده از مدل و گزینه های مشخص شده، یک نمونه InterpreterApi می سازد.
Static InterpreterApi
ایجاد (گزینه های ByteBuffer byteBuffer، InterpreterApi.Options )
با استفاده از مدل و گزینه های مشخص شده، یک نمونه InterpreterApi می سازد.
انتزاعی
getInputIndex ( رشته opName)
با توجه به نام عملیات ورودی، فهرست ورودی را دریافت می کند.
تانسور انتزاعی
getInputTensor (int inputIndex)
تانسور مرتبط با شاخص ورودی ارائه شده را دریافت می کند.
انتزاعی
getInputTensorCount ()
تعداد تانسورهای ورودی را بدست می آورد.
چکیده طولانی
getLastNativeInferenceDurationNanoseconds ()
زمان استنتاج بومی را برمی‌گرداند.
انتزاعی
getOutputIndex ( رشته opame)
با توجه به نام عملیاتی خروجی، شاخص خروجی را دریافت می کند.
تانسور انتزاعی
getOutputTensor (int outputIndex)
تانسور مرتبط با شاخص خروجی ارائه شده را دریافت می کند.
انتزاعی
getOutputTensorCount ()
تعداد تانسورهای خروجی را بدست می آورد.
خلأ انتزاعی
resizeInput (int idx، int[] dims، boolean strict)
اندازه ورودی idx-امین مدل بومی را به کمرنگ‌های داده شده تغییر می‌دهد.
خلأ انتزاعی
resizeInput (int idx، int[] dims)
اندازه ورودی idx-امین مدل بومی را به کمرنگ‌های داده شده تغییر می‌دهد.
خلأ انتزاعی
اجرا (ورودی شی ، خروجی شی )
استنتاج مدل را در صورتی اجرا می کند که مدل فقط یک ورودی بگیرد و تنها یک خروجی ارائه دهد.
خلأ انتزاعی
runForMultipleInputsOutputs ( ورودی های شی[] ، نقشه < عدد صحیح ، شی > خروجی ها)
اگر مدل چندین ورودی دریافت کند یا خروجی های متعددی را برمی گرداند، استنتاج مدل را اجرا می کند.

روش های ارثی

روش های عمومی

انتزاعی عمومی void allocateTensors ()

در صورت لزوم، تخصیص ها را برای همه تانسورها به صراحت به روز می کند.

این اشکال و تخصیص حافظه را برای تانسورهای وابسته با استفاده از شکل(های) تانسور ورودی همانطور که داده شد منتشر می کند.

توجه: این تماس *صرفا اختیاری* است. اگر اندازه هر یک از تانسورهای ورودی تغییر کرده باشد، تخصیص تانسور به طور خودکار در طول اجرا اتفاق می‌افتد. این فراخوانی در تعیین اشکال برای هر تانسور خروجی قبل از اجرای نمودار بسیار مفید است، به عنوان مثال،

 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 استاتیک عمومی ( فایل modelFile، گزینه های InterpreterApi.Options )

با استفاده از مدل و گزینه های مشخص شده، یک نمونه InterpreterApi می سازد. مدل از یک فایل بارگذاری می شود.

مولفه های
modelFile فایلی حاوی یک مدل TF Lite از پیش آموزش دیده.
گزینه ها مجموعه ای از گزینه ها برای سفارشی کردن رفتار مترجم.
پرتاب می کند
IllegalArgumentException اگر modelFile یک مدل معتبر TensorFlow Lite را کد نمی کند.

ایجاد InterpreterApi استاتیک عمومی ( ByteBuffer byteBuffer، گزینه های InterpreterApi.Options )

با استفاده از مدل و گزینه های مشخص شده، یک نمونه InterpreterApi می سازد. مدل از یک ByteBuffer خوانده می شود.

مولفه های
بایت بافر یک مدل TF Lite از پیش آموزش داده شده، به صورت سریالی باینری. ByteBuffer نباید پس از ساخت یک نمونه InterpreterApi اصلاح شود. ByteBuffer می تواند یک MappedByteBuffer باشد که حافظه یک فایل مدل را نقشه برداری می کند، یا یک ByteBuffer مستقیم از NativeOrder() که حاوی محتوای بایت های یک مدل است.
گزینه ها مجموعه ای از گزینه ها برای سفارشی کردن رفتار مترجم.
پرتاب می کند
IllegalArgumentException اگر byteBuffer یک MappedByteBuffer یا یک ByteBuffer مستقیم از nativeOrder نباشد.

انتزاعی عمومی int getInputIndex ( رشته opName)

با توجه به نام عملیات ورودی، فهرست ورودی را دریافت می کند.

مولفه های
opName
پرتاب می کند
IllegalArgumentException اگر opName با هیچ ورودی در مدل مورد استفاده برای مقداردهی اولیه مفسر مطابقت نداشته باشد.

انتزاعی عمومی Tensor getInputTensor (int inputIndex)

تانسور مرتبط با شاخص ورودی ارائه شده را دریافت می کند.

مولفه های
InputIndex
پرتاب می کند
IllegalArgumentException اگر inputIndex منفی باشد یا از تعداد ورودی های مدل کوچکتر نباشد.

انتزاعی عمومی int getInputTensorCount ()

تعداد تانسورهای ورودی را بدست می آورد.

چکیده عمومی Long getLastNativeInferenceDurationNanoseconds ()

زمان استنتاج بومی را برمی‌گرداند.

پرتاب می کند
IllegalArgumentException اگر مدل توسط مفسر مقداردهی اولیه نشده باشد.

انتزاعی عمومی int getOutputIndex ( رشته opName)

با توجه به نام عملیاتی خروجی، شاخص خروجی را دریافت می کند.

مولفه های
opName
پرتاب می کند
IllegalArgumentException اگر opName با هیچ خروجی در مدل مورد استفاده برای مقداردهی اولیه مفسر مطابقت نداشته باشد.

انتزاعی عمومی Tensor getOutputTensor (int outputIndex)

تانسور مرتبط با شاخص خروجی ارائه شده را دریافت می کند.

توجه: جزئیات تانسور خروجی (به عنوان مثال، شکل) ممکن است تا پس از اجرای استنتاج به طور کامل پر نشوند. اگر *قبل از* اجرای استنتاج به جزئیات به روز نیاز دارید (به عنوان مثال، پس از تغییر اندازه یک تانسور ورودی، که ممکن است اشکال تانسور خروجی را باطل کند)، از allocateTensors() استفاده کنید تا به صراحت تخصیص و انتشار شکل را فعال کنید. توجه داشته باشید که برای نمودارهایی با اشکال خروجی که وابسته به *مقدارهای* ورودی هستند، شکل خروجی ممکن است تا زمان استنتاج به طور کامل مشخص نشود.

مولفه های
OutputIndex
پرتاب می کند
IllegalArgumentException اگر outputIndex منفی باشد یا از تعداد خروجی های مدل کوچکتر نباشد.

انتزاع عمومی int getOutputTensorCount ()

تعداد تانسورهای خروجی را بدست می آورد.

انتزاع عمومی void resizeInput (int idx، int[] dims، boolean strict)

اندازه ورودی idx-امین مدل بومی را به کمرنگ‌های داده شده تغییر می‌دهد.

وقتی «سخت» True باشد، فقط ابعاد ناشناخته را می توان تغییر اندازه داد. ابعاد ناشناخته به عنوان "-1" در آرایه ای که توسط "Tensor.shapeSignature()" برگردانده شده است نشان داده می شود.

مولفه های
idx
کم نور می کند
سخت گیرانه
پرتاب می کند
IllegalArgumentException اگر idx منفی باشد یا کمتر از تعداد ورودی های مدل نباشد. یا اگر هنگام تغییر اندازه ورودی idx ام خطایی رخ دهد. به‌علاوه، این خطا هنگام تلاش برای تغییر اندازه تانسور با ابعاد ثابت زمانی رخ می‌دهد که «سخت» True باشد.

انتزاع عمومی void resizeInput (int idx، int[] dims)

اندازه ورودی idx-امین مدل بومی را به کمرنگ‌های داده شده تغییر می‌دهد.

مولفه های
idx
کم نور می کند
پرتاب می کند
IllegalArgumentException اگر idx منفی باشد یا کمتر از تعداد ورودی های مدل نباشد. یا اگر هنگام تغییر اندازه ورودی idx ام خطایی رخ دهد.

اجرای خالی انتزاعی عمومی (ورودی شی ، خروجی شی )

استنتاج مدل را در صورتی اجرا می کند که مدل فقط یک ورودی بگیرد و تنها یک خروجی ارائه دهد.

هشدار: اگر یک Buffer (ترجیحاً مستقیم، اما لازم نیست) به عنوان نوع داده ورودی/خروجی استفاده شود، API کارآمدتر است. لطفاً از Buffer برای تغذیه و واکشی داده های اولیه برای عملکرد بهتر استفاده کنید. انواع Buffer بتن زیر پشتیبانی می شود:

  • ByteBuffer - سازگار با هر نوع Tensor ابتدایی زیرین.
  • FloatBuffer - سازگار با تانسورهای شناور.
  • IntBuffer - سازگار با تانسورهای int32.
  • LongBuffer - سازگار با تانسورهای 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() ).
پرتاب می کند
IllegalArgumentException اگر input تهی یا خالی باشد، یا اگر هنگام اجرای استنتاج خطایی رخ دهد.
IllegalArgumentException (تجربی، ممکن است تغییر کند) اگر استنتاج توسط setCancelled(true) قطع شود.

انتزاعی عمومی void runForMultipleInputsOutputs ( ورودی های Object[] ، Map < Integer ، Object > خروجی ها)

اگر مدل چندین ورودی دریافت کند یا خروجی های متعددی را برمی گرداند، استنتاج مدل را اجرا می کند.

هشدار: اگر Buffer (ترجیحاً مستقیم، اما لازم نیست) به عنوان انواع داده های ورودی/خروجی استفاده شود، API کارآمدتر است. لطفاً از Buffer برای تغذیه و واکشی داده های اولیه برای عملکرد بهتر استفاده کنید. انواع Buffer بتن زیر پشتیبانی می شود:

  • ByteBuffer - سازگار با هر نوع Tensor ابتدایی زیرین.
  • FloatBuffer - سازگار با تانسورهای شناور.
  • IntBuffer - سازگار با تانسورهای int32.
  • LongBuffer - سازگار با تانسورهای int64.
توجه داشته باشید که انواع بولی فقط به عنوان آرایه پشتیبانی می شوند، نه Buffer یا به عنوان ورودی های اسکالر.

توجه: مقادیر null برای عناصر منفرد inputs و outputs تنها در صورتی مجاز است که تماس گیرنده از یک Delegate استفاده کند که اجازه تعامل با دسته بافر را می دهد و چنین بافری به Tensor (های) ورودی یا خروجی مربوطه متصل شده باشد.

مولفه های
ورودی ها آرایه ای از داده های ورودی ورودی ها باید به ترتیب ورودی های مدل باشند. هر ورودی می تواند یک آرایه یا آرایه چند بعدی یا یک Buffer از انواع اولیه از جمله int، float، long و byte باشد. Buffer روش ترجیحی برای ارسال داده های ورودی بزرگ است، در حالی که انواع رشته ها نیاز به استفاده از مسیر ورودی آرایه (چند بعدی) دارند. هنگامی که Buffer استفاده می شود، محتوای آن باید تا زمانی که استنتاج مدل انجام شود، بدون تغییر باقی بماند و تماس گیرنده باید اطمینان حاصل کند که Buffer در موقعیت خواندن مناسب است.
خروجی ها نقشه‌ای که شاخص‌های خروجی را به آرایه‌های چند بعدی داده‌های خروجی یا Buffer از انواع ابتدایی شامل int، float، long و byte نگاشت می‌کند. برای استفاده از خروجی ها فقط باید ورودی ها را حفظ کند. هنگامی که از Buffer استفاده می شود، تماس گیرنده باید مطمئن شود که موقعیت نوشتن مناسب را تنظیم کرده است. نقشه ممکن است برای مواردی که از دسته‌های بافر برای داده‌های تانسور خروجی استفاده می‌شود، یا مواردی که خروجی‌ها به صورت پویا شکل می‌گیرند و تماس‌گیرنده باید شکل Tensor خروجی را پس از فراخوانی استنتاج جستجو کند، و داده‌ها را مستقیماً از تانسور خروجی واکشی کند، خالی باشد. از طریق Tensor.asReadOnlyBuffer() ).
پرتاب می کند
IllegalArgumentException اگر inputs تهی یا خالی باشند، اگر outputs تهی باشند، یا اگر هنگام اجرای استنتاج خطایی رخ دهد.