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 | |
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 | |
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 | |
abstrak kosong |
runForMultipleInputsOutputs(input Object[], output Map<Integer, Object>)
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.
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<Integer, Objek> 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.
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.
|
---|