Interpreter

class final publik Penerjemah

Class pengemudi untuk mendorong inferensi model dengan TensorFlow Lite.

Catatan: Jika Anda tidak membutuhkan akses ke "eksperimental" Fitur API di bawah ini, lebih suka menggunakan InterpreterApi dan InterpreterFactory daripada menggunakan Interpreter secara langsung.

Interpreter mengenkapsulasi model TensorFlow Lite terlatih, dengan operasi dieksekusi untuk inferensi model.

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

try (Interpreter interpreter = new Interpreter(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 (Interpreter interpreter = new Interpreter(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 (Interpreter interpreter = new Interpreter(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 diberikan sebagai Buffer tidak perlu mengubah ukuran secara implisit; pemanggil harus memastikan bahwa ukuran byte Buffer cocok dengan tensor yang terkait, atau yang 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 Interpreter tidak aman untuk thread. Interpreter memiliki resource yang harus 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 Interpreter.Options Class opsi untuk mengontrol perilaku penafsir runtime.

Konstruktor Publik

Penerjemah(modelFile File)
Melakukan inisialisasi Interpreter.
Penerjemah(opsi File modelFile, Interpreter.Options)
Melakukan inisialisasi Interpreter dan menentukan opsi untuk menyesuaikan perilaku penafsir.
Penerjemah(ByteBuffer byteBuffer)
Melakukan inisialisasi Interpreter dengan ByteBuffer file model.
Penerjemah(opsi ByteBuffer byteBuffer, Interpreter.Options)
Melakukan inisialisasi Interpreter dengan ByteBuffer dari file model dan sekumpulan Interpreter.Options kustom.

Metode Publik

void
allocateTensors()
Secara eksplisit mengupdate alokasi untuk semua tensor, jika diperlukan.
void
close()
Melepaskan resource yang terkait dengan instance InterpreterApi.
int
getInputIndex(String opName)
Mendapatkan indeks input berdasarkan nama op input.
Tensor
getInputTensor(int inputIndex)
Mendapatkan Tensor yang terkait dengan indeks input yang disediakan.
int
getInputTensorCount()
Mendapatkan jumlah tensor input.
Tensor
getInputTensorFromSignature(String inputName, String signatureKey)
Mendapatkan Tensor yang terkait dengan nama input dan nama metode tanda tangan yang diberikan.
Panjang
getLastNativeInferenceDurationNanoseconds()
Menampilkan waktu inferensi native.
int
getOutputIndex(opName String)
Mendapatkan indeks output berdasarkan nama op output.
Tensor
getOutputTensor(int outputIndex)
Mendapatkan Tensor yang terkait dengan indeks output yang diberikan.
int
getOutputTensorCount()
Mendapatkan jumlah Tensor output.
Tensor
getOutputTensorFromSignature(String outputName, String signatureKey)
Mendapatkan Tensor yang terkait dengan nama output yang diberikan dalam metode tanda tangan tertentu.
String[]
getSignatureInputs(String signatureKey)
Mendapatkan daftar input SignatureDef untuk metode signatureKey.
String[]
getSignatureKeys()
Mendapatkan daftar nama metode yang diekspor SignatureDef yang tersedia di model.
String[]
getSignatureOutputs(String signatureKey)
Mendapatkan daftar output SignatureDef untuk metode signatureKey.
void
resetVariableTensors()
Lanjutan: Mereset semua tensor variabel ke nilai default.
void
resizeInput(int idx, int[] dims, boolean strict)
Mengubah ukuran input idx-th model native ke redup yang diberikan.
void
resizeInput(int idx, int[] dims)
Mengubah ukuran input idx-th model native ke redup yang diberikan.
void
run(input Objek, output Objek)
Menjalankan inferensi model jika model hanya mengambil satu input, dan hanya memberikan satu output.
void
runForMultipleInputsOutputs(input Object[], output Map<IntegerObject>)
Menjalankan inferensi model jika model mengambil beberapa input, atau menampilkan beberapa output.
void
runSignature(Map<StringObject> input, Map<StringObjek> output)
Sama seperti runSignature(Map, Map, String) tetapi tidak memerlukan penerusan signatureKey, dengan asumsi model memiliki satu SignatureDef.
void
runSignature(Map<StringObject> input, Map<Stringoutput>, String signatureKey)
Menjalankan inferensi model berdasarkan SignatureDef yang disediakan melalui signatureKey.
void
setCancelled(boolean dibatalkan)
Lanjutan: Mengganggu inferensi saat panggilan ke run(Object, Object).

Metode Turunan

Konstruktor Publik

publik Penerjemah (File modelFile)

Melakukan inisialisasi Interpreter.

Parameter
modelFile File model TF Lite terlatih.
Menampilkan
IllegalArgumentException jika modelFile tidak mengenkode TensorFlow Lite yang valid model transformer.

publik Penerjemah (File modelFile, opsi Interpreter.Options)

Melakukan inisialisasi Interpreter dan menentukan opsi untuk menyesuaikan perilaku penafsir.

Parameter
modelFile file model TF Lite terlatih
opsi sekumpulan opsi untuk menyesuaikan perilaku penerjemah
Menampilkan
IllegalArgumentException jika modelFile tidak mengenkode TensorFlow Lite yang valid model transformer.

publik Penerjemah (ByteBuffer byteBuffer)

Menginisialisasi Interpreter dengan ByteBuffer file model.

ByteBuffer tidak boleh diubah setelah pembuatan Interpreter. Tujuan ByteBuffer dapat berupa MappedByteBuffer yang memetakan file model, atau ByteBuffer langsung dari nativeOrder() yang berisi konten byte dari suatu model.

Parameter
byteBuffer
Menampilkan
IllegalArgumentException jika byteBuffer bukan MappedByteBuffer atau ByteBuffer langsung dari nativeOrder.

publik Penerjemah (ByteBuffer byteBuffer, opsi Interpreter.Options)

Melakukan inisialisasi Interpreter dengan ByteBuffer dari file model dan sekumpulan Interpreter.Options kustom.

ByteBuffer tidak boleh diubah setelah pembuatan Interpreter. ByteBuffer dapat berupa MappedByteBuffer yang dipetakan memori file model, atau ByteBuffer langsung dari nativeOrder() yang berisi konten byte dari suatu model.

Parameter
byteBuffer
opsi
Menampilkan
IllegalArgumentException jika byteBuffer bukan MappedByteBuffer atau ByteBuffer langsung dari nativeOrder.

Metode Publik

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

publik kosong tutup ()

Melepaskan resource yang terkait dengan instance InterpreterApi.

publik Int getInputIndex (String opName)

Mendapatkan indeks input berdasarkan nama op input.

Parameter
opName

publik Tensor getInputTensor (int inputIndex)

Mendapatkan Tensor yang terkait dengan indeks input yang disediakan.

Parameter
inputIndex

publik Int getInputTensorCount ()

Mendapatkan jumlah tensor input.

publik Tensor getInputTensorFromSignature (String inputName, String signatureKey)

Mendapatkan Tensor yang terkait dengan nama input dan nama metode tanda tangan yang diberikan.

PERINGATAN: Ini adalah API eksperimental dan dapat berubah sewaktu-waktu.

Parameter
inputName Nama input dalam tanda tangan.
signatureKey Kunci tanda tangan yang mengidentifikasi SignatureDef, bisa bernilai null jika model memiliki satu tanda tangan.
Menampilkan
IllegalArgumentException jika inputName atau signatureKey adalah null atau kosong, atau nama yang diberikan tidak valid.

publik Panjang getLastNativeInferenceDurationNanoseconds ()

Menampilkan waktu inferensi native.

publik Int getOutputIndex (String opName)

Mendapatkan indeks output berdasarkan nama op output.

Parameter
opName

publik 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

publik Int getOutputTensorCount ()

Mendapatkan jumlah Tensor output.

publik Tensor getOutputTensorFromSignature (String outputName, String signatureKey)

Mendapatkan Tensor yang terkait dengan nama output yang diberikan dalam metode tanda tangan tertentu.

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.

PERINGATAN: Ini adalah API eksperimental dan dapat berubah sewaktu-waktu.

Parameter
outputName Nama output dalam tanda tangan.
signatureKey Kunci tanda tangan yang mengidentifikasi SignatureDef, bisa bernilai null jika model memiliki satu tanda tangan.
Menampilkan
IllegalArgumentException jika outputName atau signatureKey adalah null atau nama yang diberikan kosong, atau tidak valid.

publik String[] getSignatureInputs (String signatureKey)

Mendapatkan daftar input SignatureDef untuk metode signatureKey.

PERINGATAN: Ini adalah API eksperimental dan dapat berubah sewaktu-waktu.

Parameter
signatureKey

publik String[] getSignatureKeys ()

Mendapatkan daftar nama metode yang diekspor SignatureDef yang tersedia di model.

PERINGATAN: Ini adalah API eksperimental dan dapat berubah sewaktu-waktu.

publik String[] getSignatureOutputs (String signatureKey)

Mendapatkan daftar output SignatureDef untuk metode signatureKey.

PERINGATAN: Ini adalah API eksperimental dan dapat berubah sewaktu-waktu.

Parameter
signatureKey

publik kosong resetVariableTensors ()

Lanjutan: Mereset semua tensor variabel ke nilai default.

Jika tensor variabel tidak memiliki buffer terkait, tensor akan direset ke nol.

PERINGATAN: Ini adalah API eksperimental dan dapat berubah sewaktu-waktu.

publik 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

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

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

Parameter
IDX
redupkan

publik 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()).

publik 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()).

publik kosong runSignature (Map<StringObject> input, Map<StringObjek> output)

Sama seperti runSignature(Map, Map, String) tetapi tidak memerlukan penerusan signatureKey, dengan asumsi model memiliki satu SignatureDef. Jika model memiliki lebih dari satu SignatureDef, maka menampilkan pengecualian.

PERINGATAN: Ini adalah API eksperimental dan dapat berubah sewaktu-waktu.

Parameter
input
output

publik kosong runSignature (Map<StringObject> input, Map<StringObject> output, String signatureKey)

Menjalankan inferensi model berdasarkan SignatureDef yang disediakan melalui signatureKey.

Lihat run(Object, Object) untuk detail selengkapnya tentang input dan output yang diizinkan tipe data.

PERINGATAN: Ini adalah API eksperimental dan dapat berubah sewaktu-waktu.

Parameter
input Peta dari nama input di SignatureDef ke objek input.
output Peta dari nama output di SignatureDef ke data output. Kolom ini mungkin kosong jika pemanggil ingin membuat kueri data Tensor langsung setelah inferensi (mis., jika bentuk output bersifat dinamis, atau handle buffer output digunakan).
signatureKey Kunci tanda tangan yang mengidentifikasi SignatureDef.
Menampilkan
IllegalArgumentException jika inputs adalah null atau kosong, jika outputs atau signatureKey adalah null, atau jika terjadi error saat menjalankan inferensi.

publik kosong setCancelled (boolean dibatalkan)

Lanjutan: Mengganggu inferensi saat panggilan ke run(Object, Object).

Tanda pembatalan akan ditetapkan ke true saat fungsi ini dipanggil. Penerjemah akan memeriksa flag di antara pemanggilan Op, dan jika yang ditampilkan adalah true, penafsir akan berhenti dalam proses eksekusi. Penerjemah akan tetap berstatus dibatalkan hingga "tidak dibatalkan" secara eksplisit dengan cara setCancelled(false).

PERINGATAN: Ini adalah API eksperimental dan dapat berubah sewaktu-waktu.

Parameter
dibatalkan true untuk membatalkan inferensi dengan cara terbaik; false hingga resume.
Menampilkan
IllegalStateException jika penafsir tidak diinisialisasi dengan cancellable , yang secara default nonaktif.