InterpreterApi

antarmuka publik InterpreterApi
Subkelas Tidak Langsung yang Dikenal

Antarmuka ke penafsir model TensorFlow Lite, tidak termasuk metode eksperimental.

Instance InterpreterApi mengenkapsulasi model TensorFlow Lite terlatih, tempat operasi dijalankan untuk inferensi model.

Misalnya, jika model hanya mengambil satu masukan dan hanya mengembalikan satu keluaran:

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

Jika model mengambil beberapa input atau 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);
 }
 

Jika model mengambil atau menghasilkan tensor string:

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

Perhatikan bahwa ada perbedaan antara bentuk [] dan bentuk[1]. Untuk output tensor string skalar:

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

Urutan input dan output ditentukan saat mengonversi model TensorFlow ke model TensorFlowLite dengan Toco, seperti bentuk input default.

Ketika input diberikan sebagai array (multi-dimensi), tensor input yang sesuai akan secara implisit diubah ukurannya sesuai dengan bentuk array tersebut. Saat input diberikan sebagai tipe Buffer , tidak ada pengubahan ukuran implisit yang dilakukan; pemanggil harus memastikan bahwa ukuran byte Buffer cocok dengan ukuran tensor yang sesuai, atau mereka terlebih dahulu mengubah ukuran tensor melalui resizeInput(int, int[]) . Informasi bentuk dan jenis tensor dapat diperoleh melalui kelas Tensor , tersedia melalui getInputTensor(int) dan getOutputTensor(int) .

PERINGATAN: Instance InterpreterApi tidak aman untuk thread.

PERINGATAN: Instance InterpreterApi memiliki resource yang harus dibebaskan secara eksplisit dengan mengaktifkan close()

Pustaka TFLite dibangun dengan NDK API 19. Ini mungkin berfungsi untuk Android API level di bawah 19, tetapi tidak dijamin.

Kelas Bersarang

kelas InterpreterApi.Options Kelas opsi untuk mengontrol perilaku juru runtime.

Metode Publik

kekosongan abstrak
mengalokasikanTensor ()
Memperbarui alokasi secara eksplisit untuk semua tensor, jika perlu.
kekosongan abstrak
tutup ()
Lepaskan sumber daya yang terkait dengan instance InterpreterApi .
statis InterpreterApi
buat ( File modelFile, opsi InterpreterApi.Options )
Membuat instance InterpreterApi , menggunakan model dan opsi yang ditentukan.
statis InterpreterApi
buat ( opsi ByteBuffer byteBuffer, InterpreterApi.Options )
Membuat instance InterpreterApi , menggunakan model dan opsi yang ditentukan.
int abstrak
getInputIndex ( String opName)
Mendapat indeks input diberi nama op dari input.
Tensor abstrak
getInputTensor (int inputIndex)
Mendapatkan Tensor yang terkait dengan indeks input yang diberikan.
int abstrak
getInputTensorCount ()
Mendapatkan jumlah tensor input.
abstrak Panjang
getLastNativeInferenceDurationNanoseconds ()
Mengembalikan waktu inferensi asli.
int abstrak
getOutputIndex ( String opName)
Mendapat indeks dari output yang diberi nama op dari output.
Tensor abstrak
getOutputTensor (int outputIndex)
Mendapatkan Tensor yang terkait dengan indeks keluaran yang disediakan.
int abstrak
getOutputTensorCount ()
Mendapatkan jumlah Tensor keluaran.
kekosongan abstrak
resizeInput (int idx, int[] redup, boolean ketat)
Mengubah ukuran masukan idx-th dari model asli ke peredupan yang diberikan.
kekosongan abstrak
resizeInput (int idx, int[] redup)
Mengubah ukuran masukan idx-th dari model asli ke peredupan yang diberikan.
kekosongan abstrak
jalankan (Masukan objek , Keluaran objek )
Menjalankan inferensi model jika model hanya mengambil satu input, dan hanya menyediakan satu output.
kekosongan abstrak
runForMultipleInputsOutputs ( input Object[] , Map < Integer , Object > output)
Menjalankan inferensi model jika model mengambil banyak masukan, atau mengembalikan banyak keluaran.

Metode Warisan

Metode Publik

alokasi abstrak public voidTensors ()

Memperbarui alokasi secara eksplisit untuk semua tensor, jika perlu.

Ini akan menyebarkan bentuk dan alokasi memori untuk tensor dependen menggunakan bentuk tensor input seperti yang diberikan.

Catatan: Panggilan ini *murni opsional*. Alokasi tensor akan terjadi secara otomatis selama eksekusi jika ada tensor input yang ukurannya diubah. Panggilan ini paling berguna dalam menentukan bentuk untuk setiap tensor keluaran sebelum mengeksekusi grafik, misalnya,

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

Catatan: Beberapa grafik memiliki keluaran berbentuk dinamis, dalam hal ini bentuk keluaran mungkin tidak sepenuhnya menyebar hingga inferensi dieksekusi.

Melempar
IllegalStateException jika tensor grafik tidak berhasil dialokasikan.

kekosongan abstrak publik tutup ()

Lepaskan sumber daya yang terkait dengan instance InterpreterApi .

membuat InterpreterApi statis publik ( File modelFile, opsi InterpreterApi.Options )

Membuat instance InterpreterApi , menggunakan model dan opsi yang ditentukan. Model akan dimuat dari file.

Parameter
modelFile File yang berisi model TF Lite terlatih.
pilihan Seperangkat opsi untuk menyesuaikan perilaku juru bahasa.
Melempar
IllegalArgumentException jika modelFile tidak menyandikan model TensorFlow Lite yang valid.

public static InterpreterApi buat ( opsi ByteBuffer byteBuffer, InterpreterApi.Options )

Membuat instance InterpreterApi , menggunakan model dan opsi yang ditentukan. Model akan dibaca dari ByteBuffer .

Parameter
byteBuffer Model TF Lite terlatih, dalam bentuk serial biner. ByteBuffer tidak boleh dimodifikasi setelah pembuatan instance InterpreterApi . ByteBuffer dapat berupa MappedByteBuffer yang memetakan memori file model, atau ByteBuffer langsung dari nativeOrder() yang berisi konten byte dari sebuah model.
pilihan Seperangkat opsi untuk menyesuaikan perilaku juru bahasa.
Melempar
IllegalArgumentException jika byteBuffer bukan MappedByteBuffer atau ByteBuffer langsung dari nativeOrder.

public abstract int getInputIndex ( String opName)

Mendapat indeks input diberi nama op dari input.

Parameter
opName
Melempar
IllegalArgumentException jika opName tidak cocok dengan masukan apa pun dalam model yang digunakan untuk menginisialisasi juru bahasa.

Tensor abstrak publik getInputTensor (int inputIndex)

Mendapatkan Tensor yang terkait dengan indeks input yang disediakan.

Parameter
indeks masukan
Melempar
IllegalArgumentException jika inputIndex negatif atau tidak lebih kecil dari jumlah input model.

int abstrak publik getInputTensorCount ()

Mendapatkan jumlah tensor input.

publik abstrak Long getLastNativeInferenceDurationNanoseconds ()

Mengembalikan waktu inferensi asli.

Melempar
IllegalArgumentException jika model tidak diinisialisasi oleh interpreter.

publik abstrak int getOutputIndex ( String opName)

Mendapat indeks dari output yang diberi nama op dari output.

Parameter
opName
Melempar
IllegalArgumentException jika opName tidak cocok dengan keluaran apa pun dalam model yang digunakan untuk menginisialisasi juru bahasa.

getOutputTensor Tensor abstrak publik (int outputIndex)

Mendapatkan Tensor yang terkait dengan indeks keluaran yang disediakan.

Catatan: Detail tensor keluaran (mis., bentuk) mungkin tidak terisi penuh hingga setelah inferensi dieksekusi. Jika Anda memerlukan perincian yang diperbarui *sebelum* menjalankan inferensi (mis., setelah mengubah ukuran tensor masukan, yang dapat membuat bentuk tensor keluaran tidak valid), gunakan allocateTensors() untuk secara eksplisit memicu alokasi dan propagasi bentuk. Perhatikan bahwa, untuk grafik dengan bentuk keluaran yang bergantung pada *nilai* masukan, bentuk keluaran mungkin tidak sepenuhnya ditentukan hingga menjalankan inferensi.

Parameter
Indeks keluaran
Melempar
IllegalArgumentException jika outputIndex negatif atau tidak lebih kecil dari jumlah keluaran model.

int abstrak publik getOutputTensorCount ()

Mendapatkan jumlah Tensor keluaran.

public abstract void resizeInput (int idx, int[] dims, boolean strict)

Mengubah ukuran masukan idx-th dari model asli ke peredupan yang diberikan.

Ketika `strict` bernilai True, hanya dimensi yang tidak diketahui yang dapat diubah ukurannya. Dimensi yang tidak diketahui ditunjukkan sebagai `-1` dalam larik yang dikembalikan oleh `Tensor.shapeSignature()`.

Parameter
idx
redup
ketat
Melempar
IllegalArgumentException jika idx negatif atau tidak lebih kecil dari jumlah input model; atau jika terjadi kesalahan saat mengubah ukuran input idx-th. Selain itu, kesalahan terjadi saat mencoba mengubah ukuran tensor dengan dimensi tetap saat `strict` adalah True.

public abstract void resizeInput (int idx, int[] redup)

Mengubah ukuran masukan idx-th dari model asli ke peredupan yang diberikan.

Parameter
idx
redup
Melempar
IllegalArgumentException jika idx negatif atau tidak lebih kecil dari jumlah input model; atau jika terjadi kesalahan saat mengubah ukuran input idx-th.

public void abstrak dijalankan (Masukan objek , Keluaran objek )

Menjalankan inferensi model jika model hanya mengambil satu input, dan hanya menyediakan satu output.

Peringatan: API lebih efisien jika Buffer (sebaiknya langsung, tetapi tidak wajib) digunakan sebagai tipe data input/output. Harap pertimbangkan untuk menggunakan Buffer untuk memberi makan dan mengambil data primitif untuk kinerja yang lebih baik. Jenis Buffer beton berikut ini didukung:

  • ByteBuffer - kompatibel dengan semua tipe Tensor primitif yang mendasarinya.
  • FloatBuffer - kompatibel dengan Tensor float.
  • IntBuffer - kompatibel dengan Tensor int32.
  • LongBuffer - kompatibel dengan Tensor int64.
Perhatikan bahwa tipe boolean hanya didukung sebagai array, bukan Buffer s, atau sebagai input skalar.

Parameter
memasukkan array atau array multidimensi, atau Buffer tipe primitif termasuk int, float, long, dan byte. Buffer adalah cara yang lebih disukai untuk meneruskan data input besar untuk tipe primitif, sedangkan tipe string memerlukan penggunaan jalur input array (multidimensi). Saat Buffer digunakan, kontennya harus tetap tidak berubah hingga inferensi model selesai, dan pemanggil harus memastikan bahwa Buffer berada pada posisi baca yang sesuai. Nilai null hanya diperbolehkan jika pemanggil menggunakan Delegate yang memungkinkan buffer handle interop, dan buffer tersebut telah terikat ke input Tensor .
keluaran array multidimensi data keluaran, atau Buffer tipe primitif termasuk int, float, long, dan byte. Saat Buffer digunakan, pemanggil harus memastikan bahwa buffer telah diatur ke posisi tulis yang sesuai. Nilai null diperbolehkan, dan berguna untuk kasus tertentu, misalnya, jika pemanggil menggunakan Delegate yang memungkinkan buffer menangani interop, dan buffer tersebut telah terikat ke output Tensor (lihat juga Interpreter.Options#setAllowBufferHandleOutput(boolean) ), atau jika grafik memiliki keluaran berbentuk dinamis dan pemanggil harus mengkueri bentuk Tensor keluaran setelah inferensi dipanggil, mengambil data langsung dari tensor keluaran (melalui Tensor.asReadOnlyBuffer() ).
Melempar
IllegalArgumentException jika input null atau kosong, atau jika terjadi kesalahan saat menjalankan inferensi.
IllegalArgumentException (EKSPERIMENTAL, dapat berubah) jika inferensi diinterupsi oleh setCancelled(true) .

public void abstrak runForMultipleInputsOutputs ( input Object[] , Map < Integer , Object > output)

Menjalankan inferensi model jika model mengambil banyak masukan, atau mengembalikan banyak keluaran.

Peringatan: API lebih efisien jika Buffer s (sebaiknya langsung, tetapi tidak wajib) digunakan sebagai tipe data input/output. Harap pertimbangkan untuk menggunakan Buffer untuk memberi makan dan mengambil data primitif untuk kinerja yang lebih baik. Jenis Buffer beton berikut ini didukung:

  • ByteBuffer - kompatibel dengan semua tipe Tensor primitif yang mendasarinya.
  • FloatBuffer - kompatibel dengan Tensor float.
  • IntBuffer - kompatibel dengan Tensor int32.
  • LongBuffer - kompatibel dengan Tensor int64.
Perhatikan bahwa tipe boolean hanya didukung sebagai array, bukan Buffer s, atau sebagai input skalar.

Catatan: nilai null untuk elemen inputs dan outputs invididual hanya diperbolehkan jika pemanggil menggunakan Delegate yang memungkinkan buffer menangani interop, dan buffer tersebut telah terikat ke Tensor input atau output yang sesuai.

Parameter
input array data masukan. Input harus dalam urutan yang sama dengan input model. Setiap input dapat berupa array atau array multidimensi, atau Buffer tipe primitif termasuk int, float, long, dan byte. Buffer adalah cara yang lebih disukai untuk meneruskan data input yang besar, sedangkan tipe string memerlukan penggunaan jalur input array (multidimensi). Saat Buffer digunakan, kontennya harus tetap tidak berubah hingga inferensi model selesai, dan pemanggil harus memastikan bahwa Buffer berada pada posisi baca yang sesuai.
output indeks output pemetaan peta ke array multidimensi dari data output atau Buffer s dari tipe primitif termasuk int, float, long, dan byte. Itu hanya perlu menyimpan entri untuk output yang akan digunakan. Saat Buffer digunakan, pemanggil harus memastikan bahwa buffer telah diatur ke posisi tulis yang sesuai. Peta mungkin kosong untuk kasus di mana pegangan buffer digunakan untuk data tensor output, atau kasus di mana output berbentuk dinamis dan pemanggil harus mengkueri bentuk Tensor output setelah inferensi dipanggil, mengambil data langsung dari tensor output ( melalui Tensor.asReadOnlyBuffer() ).
Melempar
IllegalArgumentException jika inputs null atau kosong, jika outputs null, atau jika terjadi kesalahan saat menjalankan inferensi.