InterpreterApi

antarmuka publik InterpreterApi
Subclass Tidak Langsung yang Diketahui

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

Jika input disediakan sebagai array (multidimensi), tensor input yang sesuai akan diubah ukurannya secara implisit sesuai dengan bentuk array tersebut. Jika input disediakan sebagai jenis Buffer, pengubahan ukuran implisit tidak akan dilakukan; pemanggil harus memastikan bahwa ukuran byte Buffer sesuai dengan tensor yang sesuai, atau terlebih dahulu mengubah ukuran tensor melalui resizeInput(int, int[]). Informasi bentuk dan jenis Tensor dapat diperoleh melalui class Tensor, yang 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 memanggil close()

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

Class Bertingkat

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

Metode Publik

abstrak void
allocateTensors()
Mengupdate alokasi secara eksplisit untuk semua tensor, jika diperlukan.
abstrak void
close()
Melepaskan resource yang terkait dengan instance InterpreterApi.
statis InterpreterApi
create(opsi File modelFile, opsi InterpreterApi.Options)
Membuat instance InterpreterApi, menggunakan model dan opsi yang ditentukan.
statis InterpreterApi
create(opsi ByteBuffer byteBuffer, opsi InterpreterApi.Options)
Membuat instance InterpreterApi, menggunakan model dan opsi yang ditentukan.
abstrak int
getInputIndex(String opName)
Mendapatkan indeks input dengan nama op input tersebut.
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(String opName)
Mendapatkan indeks output dengan nama op output.
abstrak Tensor
getOutputTensor(int outputIndex)
Mendapatkan Tensor yang terkait dengan indeks output yang disediakan.
abstrak int
getOutputTensorCount()
Mendapatkan jumlah Tensor output.
abstrak void
resizeInput(int idx, int[] dims, boolean strict)
Mengubah ukuran input ke-idx dari model native ke peredupan yang ditentukan.
abstrak void
resizeInput(int idx, int[] dims)
Mengubah ukuran input ke-idx dari model native ke peredupan yang ditentukan.
abstrak void
run(input Object, output Object)
Menjalankan inferensi model jika model hanya mengambil satu input, dan hanya menyediakan satu output.
abstrak void
runForMultipleInputsOutputs(input Object[], output Map<IntegerObject> output)
Menjalankan inferensi model jika model mengambil beberapa input, atau menampilkan beberapa output.

Metode Turunan

Metode Publik

public abstract void allocateTensors ()

Mengupdate alokasi secara eksplisit untuk semua tensor, jika diperlukan.

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

Catatan: Panggilan ini *sepenuhnya opsional*. Alokasi tensor akan terjadi secara otomatis selama eksekusi jika ada tensor input yang diubah ukurannya. Panggilan ini paling berguna dalam menentukan bentuk untuk setiap tensor output 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 dieksekusi.

Menampilkan
IllegalStateException jika tensor grafik tidak berhasil dialokasikan.

public abstrak void close ()

Melepaskan resource yang terkait dengan instance InterpreterApi.

public statis InterpreterApi create (File modelFile, 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 Serangkaian opsi untuk menyesuaikan perilaku penerjemah.
Menampilkan
IllegalArgumentException jika modelFile tidak mengenkode model TensorFlow Lite yang valid.

publik statis InterpreterApi create (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 file model di memori, atau ByteBuffer langsung dari nativeOrder() yang berisi konten byte model.
opsi Serangkaian opsi untuk menyesuaikan perilaku penerjemah.
Menampilkan
IllegalArgumentException jika byteBuffer bukan MappedByteBuffer atau ByteBuffer langsung dari nativeOrder.

public abstract int getInputIndex (String opName)

Mendapatkan indeks input dengan nama op input tersebut.

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

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

public abstrak Long getLastNativeInferenceDurationNanoseconds ()

Menampilkan waktu inferensi native.

Menampilkan
IllegalArgumentException jika model tidak diinisialisasi oleh penafsir.

public abstract int getOutputIndex (String opName)

Mendapatkan indeks output dengan nama op output.

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

public abstract Tensor getOutputTensor (int outputIndex)

Mendapatkan Tensor yang terkait dengan indeks output yang disediakan.

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

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

publik abstrak int getOutputTensorCount ()

Mendapatkan jumlah Tensor output.

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

Mengubah ukuran input ke-idx dari model native ke peredupan yang ditentukan.

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

Parameter
idx
dims
ketat
Menampilkan
IllegalArgumentException jika idx negatif atau tidak lebih kecil dari jumlah input model; atau jika terjadi error saat mengubah ukuran input ke-idx. Selain itu, error ini juga terjadi saat mencoba mengubah ukuran tensor dengan dimensi tetap jika `strict` bernilai True.

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

Mengubah ukuran input ke-idx dari model native ke peredupan yang ditentukan.

Parameter
idx
dims
Menampilkan
IllegalArgumentException jika idx negatif atau tidak lebih kecil dari jumlah input model; atau jika terjadi error saat mengubah ukuran input ke-idx.

public abstract void run (input Object, output Object)

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

Peringatan: API akan lebih efisien jika Buffer (lebih disarankan langsung, tetapi tidak diperlukan) digunakan sebagai jenis data input/output. Sebaiknya gunakan Buffer untuk memberi feed dan mengambil data primitif untuk performa yang lebih baik. Jenis Buffer konkret berikut didukung:

  • ByteBuffer - kompatibel dengan jenis Tensor primitif apa pun 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 elemen primitif termasuk int, float, long, dan byte. Buffer adalah cara yang direkomendasikan untuk meneruskan data input besar untuk jenis primitif, sedangkan jenis string memerlukan penggunaan jalur input array (multi-dimensi). Saat Buffer digunakan, kontennya tidak boleh berubah sampai inferensi model selesai, dan pemanggil harus memastikan bahwa Buffer berada di posisi baca yang tepat. Nilai null hanya diizinkan jika pemanggil menggunakan Delegate yang memungkinkan interop penanganan buffer, dan buffer tersebut telah terikat ke Tensor input.
hasil array data output multidimensi, atau Buffer jenis primitif yang mencakup int, float, long, dan byte. Saat Buffer digunakan, pemanggil harus memastikan bahwa posisi tulis yang sesuai telah ditetapkan. Nilai null diizinkan, dan berguna untuk kasus tertentu, misalnya, jika pemanggil menggunakan Delegate yang memungkinkan interop menangani buffer, dan buffer tersebut telah terikat dengan Tensor output (lihat juga Interpreter.Options#setAllowBufferHandleOutput(boolean)), atau jika grafik memiliki output berbentuk dinamis dan pemanggil harus mengkueri bentuk Tensor output setelah inferensi dipanggil, pengambilan data secara langsung dari Tensor.asReadOnlyBuffer() output).
Menampilkan
IllegalArgumentException jika input adalah null atau kosong, atau jika error terjadi saat menjalankan inferensi.
IllegalArgumentException (EKSPERIMENTAL, dapat berubah) jika inferensi terganggu oleh setCancelled(true).

public abstract void runForMultipleInputsOutputs (Object[] input, Map<IntegerObject> output)

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

Peringatan: API akan lebih efisien jika Buffer (lebih disarankan langsung, tetapi tidak diperlukan) digunakan sebagai jenis data input/output. Sebaiknya gunakan Buffer untuk memberi feed dan mengambil data primitif untuk performa yang lebih baik. Jenis Buffer konkret berikut didukung:

  • ByteBuffer - kompatibel dengan jenis Tensor primitif apa pun 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 individual inputs dan outputs hanya diizinkan jika pemanggil menggunakan Delegate yang memungkinkan interop menangani buffer, dan buffer tersebut telah terikat ke input atau output Tensor yang sesuai.

Parameter
input array data input. Input harus dalam urutan yang sama dengan input model. Setiap input dapat berupa array atau array multidimensi, atau Buffer dari jenis dasar seperti int, float, long, dan byte. Buffer adalah cara yang direkomendasikan untuk meneruskan data input besar, sedangkan jenis string memerlukan penggunaan jalur input array (multidimensi). Saat Buffer digunakan, kontennya tidak boleh berubah sampai inferensi model selesai, dan pemanggil harus memastikan bahwa Buffer berada di posisi baca yang tepat.
output peta yang memetakan output indeks ke array multidimensi dari data output atau Buffer dari jenis primitif seperti int, float, long, dan byte. Modul ini hanya perlu menyimpan entri agar output yang akan digunakan. Saat Buffer digunakan, pemanggil harus memastikan bahwa posisi tulis yang sesuai telah ditetapkan. Peta mungkin kosong untuk kasus di mana tuas buffer digunakan untuk data tensor output, atau kasus ketika output berbentuk dinamis dan pemanggil harus mengkueri bentuk Tensor output setelah inferensi dipanggil, mengambil data secara langsung dari tensor output (melalui Tensor.asReadOnlyBuffer()).
Menampilkan
IllegalArgumentException jika inputs null atau kosong, jika outputs adalah null, atau jika terjadi error saat menjalankan inferensi.