InterpreterApi

antarmuka publik InterpreterApi
Subkelas Tidak Langsung yang Diketahui

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

Instance InterpreterApi merangkum model TensorFlow Lite yang telah dilatih sebelumnya, tempat operasi dijalankan untuk inferensi model.

Misalnya, jika suatu 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 suatu 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 suatu 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 keluaran 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, begitu pula bentuk default inputnya.

Jika masukan disediakan sebagai larik (multidimensi), tensor masukan yang terkait akan diubah ukurannya secara implisit sesuai dengan bentuk larik tersebut. Ketika input diberikan sebagai tipe Buffer , tidak ada pengubahan ukuran implisit yang dilakukan; pemanggil harus memastikan bahwa ukuran byte Buffer cocok dengan 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 sumber daya yang harus dibebaskan secara eksplisit dengan memanggil close()

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

Kelas Bersarang

kelas InterpreterApi.Options Kelas opsi untuk mengendalikan perilaku juru bahasa runtime.

Metode Publik

kekosongan abstrak
mengalokasikanTensor ()
Perbarui alokasi untuk semua tensor secara eksplisit, jika perlu.
kekosongan abstrak
menutup ()
Rilis sumber daya yang terkait dengan instans InterpreterApi .
InterpreterApi statis
buat ( File modelFile, opsi InterpreterApi.Options )
Membuat instance InterpreterApi , menggunakan model dan opsi yang ditentukan.
InterpreterApi statis
buat ( ByteBuffer byteBuffer, opsi InterpreterApi.Options )
Membuat instance InterpreterApi , menggunakan model dan opsi yang ditentukan.
abstrak ke dalam
getInputIndex ( String nama operasi)
Mendapatkan indeks masukan berdasarkan nama operasi masukan tersebut.
Tensor abstrak
getInputTensor (int inputIndex)
Mengasosiasikan Tensor dengan indeks masukan yang disediakan.
abstrak ke dalam
dapatkanInputTensorCount ()
Mendapatkan jumlah tensor masukan.
abstrak Panjang
dapatkanLastNativeInferenceDurationNanodetik ()
Mengembalikan waktu inferensi asli.
abstrak ke dalam
getOutputIndex ( String nama operasi)
Mendapat indeks keluaran dengan nama operasi keluaran.
Tensor abstrak
getOutputTensor (int keluaranIndeks)
Mengasosiasikan Tensor dengan indeks keluaran yang disediakan.
abstrak ke dalam
dapatkanOutputTensorCount ()
Mendapatkan jumlah Tensor keluaran.
kekosongan abstrak
resizeInput (int idx, int[] meredup, boolean ketat)
Mengubah ukuran masukan ke-idx dari model asli ke peredupan tertentu.
kekosongan abstrak
resizeInput (int idx, int[] meredup)
Mengubah ukuran masukan ke-idx dari model asli ke peredupan tertentu.
kekosongan abstrak
jalankan (Masukan objek , Keluaran objek )
Menjalankan inferensi model jika model hanya mengambil satu masukan, dan hanya menyediakan satu keluaran.
kekosongan abstrak
runForMultipleInputsOutputs ( masukan Objek[] , keluaran Peta < Integer , Objek >)
Menjalankan inferensi model jika model mengambil banyak masukan, atau mengembalikan beberapa keluaran.

Metode Warisan

Metode Publik

public abstract void mengalokasikanTensor ()

Perbarui alokasi untuk semua tensor secara eksplisit, jika perlu.

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

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

Melempar
IlegalStateException jika tensor grafik tidak berhasil dialokasikan.

abstrak publik batal tutup ()

Rilis sumber daya yang terkait dengan instans InterpreterApi .

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

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

Parameter
file model File yang berisi model TF Lite terlatih.
pilihan Serangkaian opsi untuk menyesuaikan perilaku juru bahasa.
Melempar
Pengecualian Argumen Ilegal jika modelFile tidak mengkodekan model TensorFlow Lite yang valid.

pembuatan InterpreterApi statis publik ( 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 tidak boleh diubah setelah pembuatan instance InterpreterApi . ByteBuffer dapat berupa MappedByteBuffer yang memetakan memori file model, atau ByteBuffer langsung dari nativeOrder() yang berisi konten byte model.
pilihan Serangkaian opsi untuk menyesuaikan perilaku juru bahasa.
Melempar
Pengecualian Argumen Ilegal jika byteBuffer bukan MappedByteBuffer atau ByteBuffer langsung dari nativeOrder.

abstrak publik int getInputIndex ( String opName)

Mendapatkan indeks masukan berdasarkan nama operasi masukan tersebut.

Parameter
nama op
Melempar
Pengecualian Argumen Ilegal jika opName tidak cocok dengan masukan apa pun dalam model yang digunakan untuk menginisialisasi penerjemah.

Tensor abstrak publik getInputTensor (int inputIndex)

Mengasosiasikan Tensor dengan indeks masukan yang disediakan.

Parameter
masukanIndeks
Melempar
Pengecualian Argumen Ilegal jika inputIndex negatif atau tidak lebih kecil dari jumlah input model.

abstrak publik int getInputTensorCount ()

Mendapatkan jumlah tensor masukan.

abstrak publik Long getLastNativeInferenceDurationNanodetik ()

Mengembalikan waktu inferensi asli.

Melempar
Pengecualian Argumen Ilegal jika model tidak diinisialisasi oleh interpreter.

abstrak publik int getOutputIndex ( String opName)

Mendapat indeks keluaran dengan nama operasi keluaran.

Parameter
nama op
Melempar
Pengecualian Argumen Ilegal jika opName tidak cocok dengan keluaran apa pun dalam model yang digunakan untuk menginisialisasi penerjemah.

Tensor abstrak publik getOutputTensor (int outputIndex)

Mengasosiasikan Tensor dengan indeks keluaran yang disediakan.

Catatan: Detail tensor keluaran (misalnya bentuk) mungkin tidak terisi penuh hingga inferensi dijalankan. Jika Anda memerlukan detail yang diperbarui *sebelum* menjalankan inferensi (misalnya, setelah mengubah ukuran tensor masukan, yang mungkin 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 inferensi dijalankan.

Parameter
Indeks keluaran
Melempar
Pengecualian Argumen Ilegal jika outputIndex negatif atau tidak lebih kecil dari jumlah output model.

abstrak publik int getOutputTensorCount ()

Mendapatkan jumlah Tensor keluaran.

public abstract void resizeInput (int idx, int[] meredup, boolean ketat)

Mengubah ukuran masukan ke-idx dari model asli ke peredupan tertentu.

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

Parameter
idx
meredup
ketat
Melempar
Pengecualian Argumen Ilegal jika idx bernilai negatif atau tidak lebih kecil dari jumlah input model; atau jika terjadi kesalahan saat mengubah ukuran input ke-idx. Selain itu, kesalahan terjadi saat mencoba mengubah ukuran tensor dengan dimensi tetap ketika `strict` bernilai True.

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

Mengubah ukuran masukan ke-idx dari model asli ke peredupan tertentu.

Parameter
idx
meredup
Melempar
Pengecualian Argumen Ilegal jika idx bernilai negatif atau tidak lebih kecil dari jumlah input model; atau jika terjadi kesalahan saat mengubah ukuran input ke-idx.

public abstract void run (masukan objek , keluaran objek )

Menjalankan inferensi model jika model hanya mengambil satu masukan, dan hanya menyediakan satu keluaran.

Peringatan: API lebih efisien jika Buffer (sebaiknya langsung, tetapi tidak wajib) digunakan sebagai tipe data masukan/keluaran. 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 , 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 (multi-dimensi). Ketika Buffer digunakan, kontennya harus tetap tidak berubah sampai inferensi model selesai, dan pemanggil harus memastikan bahwa Buffer berada pada posisi baca yang sesuai. Nilai null hanya diperbolehkan jika pemanggil menggunakan Delegate yang mengizinkan interop penanganan buffer, dan buffer tersebut telah terikat ke input Tensor .
keluaran array multidimensi dari data keluaran, atau Buffer tipe primitif termasuk int, float, long, dan byte. Ketika Buffer digunakan, pemanggil harus memastikan bahwa buffer tersebut diatur pada posisi tulis yang sesuai. Nilai null diperbolehkan, dan berguna untuk kasus tertentu, misalnya, jika pemanggil menggunakan Delegate yang mengizinkan interop penanganan buffer, dan buffer tersebut telah terikat ke Tensor output (lihat juga Interpreter.Options#setAllowBufferHandleOutput(boolean) ), atau jika grafik memiliki keluaran berbentuk dinamis dan pemanggil harus menanyakan bentuk Tensor keluaran setelah inferensi dipanggil, mengambil data langsung dari tensor keluaran (melalui Tensor.asReadOnlyBuffer() ).
Melempar
Pengecualian Argumen Ilegal jika input nol atau kosong, atau jika terjadi kesalahan saat menjalankan inferensi.
Pengecualian Argumen Ilegal (EKSPERIMENTAL, dapat berubah sewaktu-waktu) jika inferensi diinterupsi oleh setCancelled(true) .

public abstract void runForMultipleInputsOutputs (masukan Objek[] , Peta < Integer , Objek > keluaran)

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

Peringatan: API lebih efisien jika Buffer (sebaiknya langsung, tetapi tidak wajib) digunakan sebagai tipe data masukan/keluaran. 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 , atau sebagai input skalar.

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

Parameter
masukan serangkaian data masukan. Inputnya 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 masukan yang besar, sedangkan tipe string memerlukan penggunaan jalur masukan array (multidimensi). Ketika Buffer digunakan, kontennya harus tetap tidak berubah sampai inferensi model selesai, dan pemanggil harus memastikan bahwa Buffer berada pada posisi baca yang sesuai.
keluaran peta yang memetakan indeks keluaran ke array multidimensi dari data keluaran atau Buffer tipe primitif termasuk int, float, long, dan byte. Ia hanya perlu menyimpan entri agar output dapat digunakan. Ketika Buffer digunakan, pemanggil harus memastikan bahwa buffer tersebut diatur pada posisi tulis yang sesuai. Peta mungkin kosong jika salah satu pegangan buffer digunakan untuk data tensor keluaran, atau jika keluaran berbentuk dinamis dan pemanggil harus menanyakan bentuk Tensor keluaran setelah inferensi dipanggil, mengambil data langsung dari tensor keluaran ( melalui Tensor.asReadOnlyBuffer() ).
Melempar
Pengecualian Argumen Ilegal jika inputs bernilai nol atau kosong, jika outputs bernilai nol, atau jika terjadi kesalahan saat menjalankan inferensi.