InterpreterApi

antarmuka publik InterpreterApi
Subclass Tidak Langsung yang Dikenal

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

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

Misalnya, jika model hanya mengambil satu input dan hanya menampilkan satu output:

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

Jika model menggunakan 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 tensor string skalar output:

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 TensorFlowLite dengan Toco, serta bentuk default input-nya.

Ketika input diberikan sebagai array (multi-dimensi), tensor input yang sesuai akan secara implisit diubah ukurannya sesuai dengan bentuk {i>array<i} itu. Jika input disediakan sebagai jenis Buffer, tidak ada perubahan ukuran implisit yang dilakukan; pemanggil harus memastikan bahwa ukuran byte Buffer cocok dengan tensor terkait, atau bahwa ukuran mengubah ukuran tensor melalui resizeInput(int, int[]). Informasi bentuk dan jenis tensor dapat diperoleh melalui class Tensor, tersedia melalui getInputTensor(int) dan getOutputTensor(int).

PERINGATAN: Instance InterpreterApi tidak aman untuk thread.

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

Library TFLite dibuat berdasarkan NDK API 19. Fitur ini mungkin berfungsi untuk API Android dengan level di bawah 19, tetapi tidak dijamin.

Class Bertingkat

class InterpreterApi.Options Class opsi untuk mengontrol perilaku penafsir runtime.

Metode Publik

abstrak kosong
allocateTensors()
Secara eksplisit mengupdate alokasi untuk semua tensor, jika diperlukan.
abstrak kosong
close()
Melepaskan resource yang terkait dengan instance InterpreterApi.
statis InterpreterApi
create(opsi File modelFile, InterpreterApi.Options)
Membuat instance InterpreterApi, menggunakan model dan opsi yang ditentukan.
statis InterpreterApi
create(opsi ByteBuffer byteBuffer, InterpreterApi.Options)
Membuat instance InterpreterApi, menggunakan model dan opsi yang ditentukan.
abstrak Int
getInputIndex(String opName)
Mendapatkan indeks input berdasarkan nama op input.
abstrak Tensor
getInputTensor(int inputIndex)
Mendapatkan Tensor yang terkait dengan indeks input yang disediakan.
abstrak Int
getInputTensorCount()
Mendapatkan jumlah tensor input.
abstrak Panjang
getLastNativeInferenceDurationNanoseconds()
Menampilkan waktu inferensi native.
abstrak Int
getOutputIndex(opName String)
Mendapatkan indeks output berdasarkan nama op output.
abstrak Tensor
getOutputTensor(int outputIndex)
Mendapatkan Tensor yang terkait dengan indeks output yang diberikan.
abstrak Int
getOutputTensorCount()
Mendapatkan jumlah Tensor output.
abstrak kosong
resizeInput(int idx, int[] dims, boolean strict)
Mengubah ukuran input idx-th model native ke redup yang diberikan.
abstrak kosong
resizeInput(int idx, int[] dims)
Mengubah ukuran input idx-th model native ke redup yang diberikan.
abstrak kosong
run(input Objek, output Objek)
Menjalankan inferensi model jika model hanya mengambil satu input, dan hanya memberikan satu output.
abstrak kosong
runForMultipleInputsOutputs(input Object[], output Map<IntegerObject>)
Menjalankan inferensi model jika model mengambil beberapa input, atau menampilkan beberapa output.

Metode Turunan

Metode Publik

publik abstrak kosong allocateTensors ()

Secara eksplisit mengupdate alokasi untuk semua tensor, jika diperlukan.

Ini akan menyebarkan bentuk dan alokasi memori untuk tensor dependen menggunakan input Tensor shape(s) seperti yang diberikan.

Catatan: Panggilan ini *murni opsional*. Alokasi tensor akan otomatis terjadi selama eksekusi jika ada tensor input yang diubah ukurannya. Panggilan ini paling berguna dalam menentukan bentuk untuk tensor output apa pun 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 output yang berbentuk dinamis, dalam hal ini bentuk output mungkin tidak sepenuhnya disebarkan hingga inferensi dijalankan.

Menampilkan
IllegalStateException jika tensor grafik tidak berhasil dialokasikan.

publik abstrak kosong tutup ()

Melepaskan resource yang terkait dengan instance InterpreterApi.

publik statis InterpreterApi buat (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.
opsi Sekumpulan opsi untuk menyesuaikan perilaku penafsir.
Menampilkan
IllegalArgumentException jika modelFile tidak mengenkode TensorFlow Lite yang valid model transformer.

publik statis InterpreterApi buat (ByteBuffer byteBuffer, opsi 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 seharusnya tidak diubah setelah pembuatan instance InterpreterApi. ByteBuffer dapat berupa MappedByteBuffer yang memetakan file model dengan memori, atau ByteBuffer langsung dari nativeOrder() yang berisi konten byte dari suatu model.
opsi Sekumpulan opsi untuk menyesuaikan perilaku penafsir.
Menampilkan
IllegalArgumentException jika byteBuffer bukan MappedByteBuffer atau ByteBuffer langsung dari nativeOrder.

publik abstrak Int getInputIndex (String opName)

Mendapatkan indeks input berdasarkan nama op input.

Parameter
opName
Menampilkan
IllegalArgumentException jika opName tidak cocok dengan input apa pun dalam model yang digunakan untuk melakukan inisialisasi pada penafsir.

publik abstrak Tensor getInputTensor (int inputIndex)

Mendapatkan Tensor yang terkait dengan indeks input yang disediakan.

Parameter
inputIndex
Menampilkan
IllegalArgumentException jika inputIndex negatif atau tidak lebih kecil dari jumlah input model.

publik abstrak Int getInputTensorCount ()

Mendapatkan jumlah tensor input.

publik abstrak Panjang getLastNativeInferenceDurationNanoseconds ()

Menampilkan waktu inferensi native.

Menampilkan
IllegalArgumentException jika model tidak diinisialisasi oleh penafsir.

publik abstrak Int getOutputIndex (String opName)

Mendapatkan indeks output berdasarkan nama op output.

Parameter
opName
Menampilkan
IllegalArgumentException jika opName tidak cocok dengan output apa pun dalam model yang digunakan untuk melakukan inisialisasi pada penafsir.

publik abstrak Tensor getOutputTensor (int outputIndex)

Mendapatkan Tensor yang terkait dengan indeks output yang diberikan.

Catatan: Detail tensor output (misalnya, bentuk) mungkin tidak terisi sepenuhnya hingga setelah inferensi dieksekusi. Jika Anda memerlukan detail yang diperbarui *sebelum* menjalankan inferensi (mis., setelah mengubah ukuran tensor input, yang dapat membatalkan bentuk tensor output), gunakan allocateTensors() untuk secara eksplisit memicu alokasi dan propagasi bentuk. Perhatikan bahwa, untuk grafik dengan bentuk output bergantung pada *nilai* input, bentuk output mungkin tidak ditentukan sepenuhnya sampai menjalankan inferensi.

Parameter
outputIndex
Menampilkan
IllegalArgumentException jika outputIndex negatif atau tidak lebih kecil dari jumlah output model.

publik abstrak Int getOutputTensorCount ()

Mendapatkan jumlah Tensor output.

publik abstrak kosong resizeInput (int idx, int[] dims, boolean ketat)

Mengubah ukuran input idx-th model native ke redup yang diberikan.

Jika `strict` bernilai Benar, hanya dimensi yang tidak diketahui yang dapat diubah ukurannya. Dimensi yang tidak diketahui adalah ditunjukkan sebagai `-1` dalam array yang ditampilkan oleh `Tensor.shapeSignature()`.

Parameter
IDX
redupkan
ketat
Menampilkan
IllegalArgumentException jika idx negatif atau tidak lebih kecil dari angkanya input model; atau jika terjadi error saat mengubah ukuran input idx-th. Selain itu, error terjadi saat mencoba mengubah ukuran tensor dengan dimensi tetap saat `strict` bernilai True.

publik abstrak kosong resizeInput (int idx, int[] dims)

Mengubah ukuran input idx-th model native ke redup yang diberikan.

Parameter
IDX
redupkan
Menampilkan
IllegalArgumentException jika idx negatif atau tidak lebih kecil dari angkanya input model; atau jika terjadi error saat mengubah ukuran input idx-th.

publik abstrak kosong jalankan (Input Objek, output Objek)

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

Peringatan: API lebih efisien jika Buffer (sebaiknya langsung, tetapi tidak wajib) digunakan sebagai tipe data input/output. Sebaiknya gunakan Buffer untuk melakukan feed dan mengambil data primitif untuk kinerja yang lebih baik. Jenis Buffer konkret berikut adalah didukung:

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

Parameter
input array atau array multidimensi, atau Buffer jenis primitif termasuk int, float, long, dan byte. Buffer adalah cara yang direkomendasikan untuk meneruskan untuk jenis primitif, sedangkan jenis string memerlukan penggunaan string input array. Saat Buffer digunakan, kontennya tidak boleh berubah sampai inferensi model selesai, dan pemanggil harus memastikan bahwa Buffer berada di posisi baca yang sesuai. Nilai null hanya diizinkan jika pemanggil menggunakan Delegate yang memungkinkan interop penanganan buffer, dan buffer tersebut telah diikat ke masukkan Tensor.
hasil array multidimensi dari data output, atau Buffer jenis primitif termasuk int, float, long, dan byte. Saat Buffer digunakan, pemanggil harus memastikan perintahnya mengatur posisi tulis yang sesuai. Nilai {i>null <i}diizinkan, dan berguna untuk kasus tertentu, misalnya, jika pemanggil menggunakan Delegate yang memungkinkan handle buffer interop, dan buffer semacam itu telah terikat ke output Tensor (lihat juga Interpreter.Options#setAllowBufferHandleOutput(boolean)), atau jika grafik memiliki output yang berbentuk dinamis dan pemanggil harus membuat kueri bentuk Tensor output setelah inferensi dipanggil, mengambil data langsung dari output Tensor (melalui Tensor.asReadOnlyBuffer()).
Menampilkan
IllegalArgumentException jika input adalah null atau kosong, atau jika terjadi error saat menjalankan inferensi.
IllegalArgumentException (EKSPERIMENTAL, dapat berubah sewaktu-waktu) jika inferensinya diganggu oleh setCancelled(true).

publik abstrak kosong runForMultipleInputsOutputs (Input Objek[], Map<IntegerObjek> output)

Menjalankan inferensi model jika model mengambil beberapa input, atau menampilkan beberapa output.

Peringatan: API lebih efisien jika Buffer (sebaiknya langsung, tetapi tidak wajib) digunakan sebagai tipe data input/output. Sebaiknya gunakan Buffer untuk melakukan feed dan mengambil data primitif untuk kinerja yang lebih baik. Jenis Buffer konkret berikut adalah didukung:

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

Catatan: Nilai null untuk elemen individu inputs dan outputs adalah hanya diizinkan jika pemanggil menggunakan Delegate yang memungkinkan interop penanganan buffer, dan buffer tersebut telah terikat dengan Tensor input atau output yang sesuai.

Parameter
input array data input. Input harus dalam urutan yang sama dengan input model transformer. Setiap input dapat berupa array atau array multidimensi, atau Buffer dari jenis primitif termasuk int, float, long, dan byte. Buffer adalah cara yang direkomendasikan untuk meneruskan data input besar, sedangkan jenis string memerlukan penggunaan array (multi-dimensi) input teks. Saat Buffer digunakan, kontennya tidak boleh berubah sampai model inferensi selesai, dan pemanggil harus memastikan bahwa Buffer berada di posisi baca.
output indeks output pemetaan peta ke array multidimensi dari data output atau Buffer jenis primitif termasuk int, float, long, dan byte. Sistem hanya perlu menyimpan entri untuk output yang akan digunakan. Saat Buffer digunakan, pemanggil harus memastikan perintahnya mengatur posisi tulis yang sesuai. Peta mungkin kosong untuk kasus di mana handle buffer digunakan untuk data tensor output, atau saat output dibentuk dan pemanggil harus mengkueri bentuk Tensor output setelah inferensi dipanggil, mengambil data langsung dari tensor output (melalui Tensor.asReadOnlyBuffer()).
Menampilkan
IllegalArgumentException jika inputs adalah null atau kosong, jika outputs adalah {i>null<i}, atau jika terjadi {i>error<i} saat menjalankan inferensi.