Google I/O adalah bungkusnya! Ikuti sesi TensorFlow Lihat sesi

Interpreter

Interpreter kelas akhir publik

Kelas driver untuk mendorong inferensi model dengan TensorFlow Lite.

Interpreter merangkum model TensorFlow Lite yang telah dilatih sebelumnya, di mana operasi dijalankan untuk inferensi model.

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

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

Jika model mengambil beberapa input atau output:

Object[] inputs = {input0, input1, ...;
 Map 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);
 }
 }

Urutan input dan output ditentukan saat mengonversi model TensorFlow ke model TensorFlowLite dengan Toco, seperti juga bentuk default input.

Ketika input disediakan sebagai array (multi-dimensi), tensor input yang sesuai akan diubah ukurannya secara implisit sesuai dengan bentuk array tersebut. Ketika input disediakan sebagai tipe Buffer , tidak ada pengubahan ukuran implisit yang dilakukan; pemanggil harus memastikan bahwa ukuran byte Buffer cocok dengan tensor terkait, 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 dari Interpreter tidak aman untuk thread. Interpreter memiliki resource yang harus dibebaskan secara eksplisit dengan memanggil close()

Pustaka TFLite dibuat dengan NDK API 19. Pustaka ini dapat berfungsi untuk Android API level di bawah 19, tetapi tidak dijamin.

Catatan: Kelas ini tidak aman untuk thread.

Kelas Bersarang

kelas Interpreter.Options Kelas opsi untuk mengontrol perilaku juru bahasa runtime.

Konstruktor Publik

Interpreter (File modelFile)
Menginisialisasi Interpreter
Interpreter (File modelFile, int numThreads)
Konstruktor ini tidak digunakan lagi di API level . Lebih suka menggunakan konstruktor Interpreter(File, Options) . Metode ini akan dihapus dalam rilis mendatang.
Interpreter (Model fileFile, opsi Interpreter.Options )
Menginisialisasi Interpreter dan menentukan jumlah thread yang digunakan untuk inferensi.
Interpreter (ByteBuffer byteBuffer)
Menginisialisasi Interpreter dengan ByteBuffer dari file model.
Interpreter (ByteBuffer byteBuffer, int numThreads)
Konstruktor ini tidak digunakan lagi di API level . Lebih suka menggunakan konstruktor Interpreter(ByteBuffer, Options) . Metode ini akan dihapus dalam rilis mendatang.
Interpreter (MappedByteBuffer mappedByteBuffer)
Konstruktor ini tidak digunakan lagi di API level . Lebih suka menggunakan konstruktor Interpreter(ByteBuffer, Options) . Metode ini akan dihapus dalam rilis mendatang.
Interpreter (Opsi ByteBuffer byteBuffer, Interpreter.Options )
Menginisialisasi Interpreter dengan ByteBuffer dari file model dan satu set Interpreter.Options kustom.

Metode Publik

kosong
mengalokasikanTensor ()
Memperbarui alokasi secara eksplisit untuk semua tensor, jika perlu.
kosong
tutup ()
Lepaskan sumber daya yang terkait dengan Interpreter .
ke dalam
getInputIndex (String opName)
Mendapat indeks input yang diberikan nama op input.
Tensor
getInputTensor (int inputIndex)
Mendapatkan Tensor yang terkait dengan indeks input yang disediakan.
ke dalam
getInputTensorCount ()
Mendapatkan jumlah tensor input.
Tensor
getInputTensorFromSignature (String inputName, String methodName)
Mendapatkan Tensor yang terkait dengan nama input yang disediakan dan nama metode tanda tangan.
Panjang
getLastNativeInferenceDurationNanoseconds ()
Mengembalikan waktu inferensi asli.
ke dalam
getOutputIndex (String opName)
Mendapat indeks dari sebuah output yang diberi nama op dari output tersebut.
Tensor
getOutputTensor (int outputIndex)
Mendapatkan Tensor yang terkait dengan indeks keluaran yang disediakan.
ke dalam
getOutputTensorCount ()
Mendapatkan jumlah Tensor keluaran.
Tensor
getOutputTensorFromSignature (String outputName, String methodName)
Mendapatkan Tensor yang terkait dengan nama keluaran yang disediakan dalam metode tanda tangan tertentu.
Tali[]
getSignatureDefNames ()
Mendapatkan daftar nama metode yang diekspor SignatureDef yang tersedia dalam model.
Tali[]
getSignatureInputs ( Nama metode String)
Mendapatkan daftar input SignatureDefs untuk metode methodName

PERINGATAN: Ini adalah API eksperimental dan dapat berubah.

Tali[]
getSignatureOutputs (String methodName)
Mendapatkan daftar keluaran SignatureDefs untuk metode methodName

PERINGATAN: Ini adalah API eksperimental dan dapat berubah.

kosong
memodifikasiGraphWithDelegate ( Delegasi delegasi)
Metode ini tidak digunakan lagi di API level . Lebih suka menggunakan addDelegate(Delegate) untuk menyediakan delegasi pada waktu pembuatan. Metode ini akan dihapus dalam rilis mendatang.
kosong
resetVariableTensor ()
Lanjutan: Mereset semua tensor variabel ke nilai default.
kosong
resizeInput (int idx, int[] redup, boolean ketat)
Mengubah ukuran input ke-idx dari model asli ke redup yang diberikan.
kosong
resizeInput (int idx, int[] redup)
Mengubah ukuran input ke-idx dari model asli ke redup yang diberikan.
kosong
jalankan (Input objek, Output objek)
Menjalankan inferensi model jika model hanya membutuhkan satu input, dan hanya menyediakan satu output.
kosong
runForMultipleInputsOutputs (Object[] input, Map<Integer, Object> output)
Menjalankan inferensi model jika model mengambil banyak input, atau mengembalikan beberapa output.
kosong
runSignature (Map<String, Object> input, Map<String, Object> output)
kosong
runSignature (Map<String, Object> input, Map<String, Object> output, String methodName)
Menjalankan inferensi model berdasarkan SignatureDef yang disediakan melalui @code methodName.
kosong
setCancelled (boolean dibatalkan)
Lanjutan: Menginterupsi inferensi di tengah panggilan untuk run(Object, Object) .
kosong
setNumThreads (int numThreads)
Metode ini tidak digunakan lagi di API level . Lebih suka menggunakan setNumThreads(int) secara langsung untuk mengontrol multi-threading thread. Metode ini akan dihapus dalam rilis mendatang.

Metode yang Diwarisi

Konstruktor Publik

Interpreter publik (File modelFile)

Menginisialisasi Interpreter

Melempar
Pengecualian Argumen Ilegal jika modelFile tidak mengkodekan model TensorFlow Lite yang valid.

Interpreter publik (File modelFile, int numThreads)

Konstruktor ini tidak digunakan lagi di API level .
Lebih suka menggunakan konstruktor Interpreter(File, Options) . Metode ini akan dihapus dalam rilis mendatang.

Menginisialisasi Interpreter dan menentukan jumlah thread yang digunakan untuk inferensi.

Interpreter publik (File modelFile, opsi Interpreter.Options )

Menginisialisasi Interpreter dan menentukan jumlah thread yang digunakan untuk inferensi.

Melempar
Pengecualian Argumen Ilegal jika modelFile tidak mengkodekan model TensorFlow Lite yang valid.

Interpreter publik (ByteBuffer byteBuffer)

Menginisialisasi Interpreter dengan ByteBuffer dari file model.

ByteBuffer tidak boleh dimodifikasi setelah konstruksi Interpreter . ByteBuffer dapat berupa MappedByteBuffer yang memetakan memori file model, atau ByteBuffer langsung dari nativeOrder() yang berisi konten byte model.

Melempar
Pengecualian Argumen Ilegal jika byteBuffer bukan MappedByteBuffer atau ERROR(/Bytebuffer) dari nativeOrder.

Interpreter publik (ByteBuffer byteBuffer, int numThreads)

Konstruktor ini tidak digunakan lagi di API level .
Lebih suka menggunakan konstruktor Interpreter(ByteBuffer, Options) . Metode ini akan dihapus dalam rilis mendatang.

Menginisialisasi Interpreter dengan ByteBuffer dari file model dan menentukan jumlah thread yang digunakan untuk inferensi.

ByteBuffer tidak boleh dimodifikasi setelah konstruksi Interpreter . ByteBuffer dapat berupa MappedByteBuffer yang memetakan memori file model, atau ByteBuffer langsung dari nativeOrder() yang berisi konten byte model.

Interpreter publik (MappedByteBuffer mappedByteBuffer)

Konstruktor ini tidak digunakan lagi di API level .
Lebih suka menggunakan konstruktor Interpreter(ByteBuffer, Options) . Metode ini akan dihapus dalam rilis mendatang.

Menginisialisasi Interpreter dengan MappedByteBuffer ke file model.

MappedByteBuffer harus tetap tidak berubah setelah konstruksi Interpreter .

Interpreter publik (Opsi ByteBuffer byteBuffer, Interpreter.Options )

Menginisialisasi Interpreter dengan ByteBuffer dari file model dan satu set Interpreter.Options kustom.

ByteBuffer tidak boleh dimodifikasi setelah konstruksi Interpreter . ByteBuffer dapat berupa MappedByteBuffer yang memetakan memori file model, atau ByteBuffer langsung dari nativeOrder() yang berisi konten byte model.

Melempar
Pengecualian Argumen Ilegal jika byteBuffer bukan MappedByteBuffer atau ERROR(/Bytebuffer) dari nativeOrder.

Metode Publik

public void mengalokasikanTensor ()

Memperbarui alokasi secara eksplisit untuk semua tensor, jika perlu.

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

Catatan: Panggilan ini *semata-mata 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 keluaran 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...
 }

Melempar
Pengecualian Status Ilegal jika tensor grafik tidak berhasil dialokasikan.

kekosongan publik tutup ()

Lepaskan sumber daya yang terkait dengan Interpreter .

publik int getInputIndex (String opName)

Mendapat indeks input yang diberikan nama op input.

Melempar
Pengecualian Argumen Ilegal jika opName tidak cocok dengan input apa pun dalam model yang digunakan untuk menginisialisasi Interpreter .

Tensor publik getInputTensor (int inputIndex)

Mendapatkan Tensor yang terkait dengan indeks input yang disediakan.

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

publik int getInputTensorCount ()

Mendapatkan jumlah tensor input.

publik Tensor getInputTensorFromSignature (String inputName, String methodName)

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

Parameter
masukanNama Masukkan nama dalam tanda tangan.
nama metode Nama metode yang diekspor yang mengidentifikasi SignatureDef, dapat menjadi null jika model memiliki satu tanda tangan.
Melempar
Pengecualian Argumen Ilegal jika inputName atau methodName adalah null atau kosong, atau nama yang diberikan tidak valid.

PERINGATAN: Ini adalah API eksperimental dan dapat berubah.

publik Long getLastNativeInferenceDurationNanoseconds ()

Mengembalikan waktu inferensi asli.

Melempar
Pengecualian Argumen Ilegal jika model tidak diinisialisasi oleh Interpreter .

publik int getOutputIndex (String opName)

Mendapat indeks dari sebuah output yang diberi nama op dari output tersebut.

Melempar
Pengecualian Argumen Ilegal jika opName tidak cocok dengan output apa pun dalam model yang digunakan untuk menginisialisasi Interpreter .

Tensor publik getOutputTensor (int outputIndex)

Mendapatkan Tensor yang terkait dengan indeks keluaran yang disediakan.

Catatan: Detail tensor keluaran (misalnya, bentuk) mungkin tidak terisi penuh hingga setelah 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 keluaran yang bergantung pada *nilai* masukan, bentuk keluaran mungkin tidak sepenuhnya ditentukan hingga inferensi dijalankan.

Melempar
Pengecualian Argumen Ilegal jika outputIndex atau tidak lebih kecil dari jumlah output model.

int publik getOutputTensorCount ()

Mendapatkan jumlah Tensor keluaran.

publik Tensor getOutputTensorFromSignature (String outputName, String methodName)

Mendapatkan Tensor yang terkait dengan nama keluaran yang disediakan dalam metode tanda tangan tertentu.

Catatan: Detail tensor keluaran (misalnya, bentuk) mungkin tidak terisi penuh hingga setelah 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 keluaran yang bergantung pada *nilai* masukan, bentuk keluaran mungkin tidak sepenuhnya ditentukan hingga inferensi dijalankan.

Parameter
nama keluaran Nama keluaran dalam tanda tangan.
nama metode Nama metode yang diekspor yang mengidentifikasi SignatureDef, dapat menjadi null jika model memiliki satu tanda tangan.
Melempar
Pengecualian Argumen Ilegal jika outputName atau methodName adalah null atau kosong, atau nama yang diberikan tidak valid.

PERINGATAN: Ini adalah API eksperimental dan dapat berubah.

String publik[] getSignatureDefNames ()

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

PERINGATAN: Ini adalah API eksperimental dan dapat berubah.

public String[] getSignatureInputs (String methodName)

Mendapatkan daftar input SignatureDefs untuk metode methodName

PERINGATAN: Ini adalah API eksperimental dan dapat berubah.

public String[] getSignatureOutputs (String methodName)

Mendapatkan daftar keluaran SignatureDefs untuk metode methodName

PERINGATAN: Ini adalah API eksperimental dan dapat berubah.

public void memodifikasiGraphWithDelegate ( Delegasi delegasi)

Metode ini tidak digunakan lagi di API level .
Lebih suka menggunakan addDelegate(Delegate) untuk menyediakan delegasi pada waktu pembuatan. Metode ini akan dihapus dalam rilis mendatang.

Lanjutan: Memodifikasi grafik dengan Delegate disediakan.

Melempar
Pengecualian Argumen Ilegal jika terjadi kesalahan saat memodifikasi grafik dengan delegate .

public void resetVariableTensors ()

Lanjutan: Mereset semua tensor variabel ke nilai default.

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

PERINGATAN: Ini adalah API eksperimental dan dapat berubah.

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

Mengubah ukuran input ke-idx dari model asli ke redup yang diberikan.

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

Melempar
Pengecualian Argumen Ilegal jika idx 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 saat `struct` bernilai True.

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

Mengubah ukuran input ke-idx dari model asli ke redup yang diberikan.

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

public void run (Input objek, Output objek)

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

Peringatan: API lebih efisien jika Buffer (sebaiknya langsung, tetapi tidak wajib) digunakan sebagai tipe data input/output. Harap pertimbangkan untuk menggunakan Buffer untuk memberi makan dan mengambil data primitif untuk kinerja yang lebih baik. Jenis Buffer beton berikut ini didukung:

Perhatikan bahwa tipe boolean hanya didukung sebagai array, bukan Buffer s, 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 melewatkan data input besar untuk tipe primitif, sedangkan tipe string memerlukan penggunaan jalur input array (multi-dimensi). Ketika Buffer digunakan, isinya 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 memungkinkan buffer menangani interop, dan buffer tersebut telah diikat ke input Tensor .
keluaran array multidimensi data keluaran, atau Buffer tipe primitif termasuk int, float, long, dan byte. Ketika Buffer digunakan, pemanggil harus memastikan bahwa itu diatur pada posisi tulis yang sesuai. Nilai null hanya diperbolehkan jika pemanggil menggunakan Delegate yang memungkinkan buffer menangani interop, dan buffer tersebut telah terikat ke output Tensor . Lihat setAllowBufferHandleOutput(boolean) .
Melempar
Pengecualian Argumen Ilegal jika input atau output adalah null atau kosong, atau jika terjadi kesalahan saat menjalankan inferensi.
Pengecualian Argumen Ilegal (EKSPERIMENTAL, dapat berubah sewaktu-waktu) jika inferensi diinterupsi oleh setCancelled(true) .

public void runForMultipleInputsOutputs (Object[] inputs, Map<Integer, Object> outputs)

Menjalankan inferensi model jika model mengambil banyak input, atau mengembalikan beberapa output.

Peringatan: API lebih efisien jika Buffer s (sebaiknya langsung, tetapi tidak wajib) digunakan sebagai tipe data input/output. Harap pertimbangkan untuk menggunakan Buffer untuk memberi makan dan mengambil data primitif untuk kinerja yang lebih baik. Jenis Buffer beton berikut ini didukung:

Perhatikan bahwa tipe boolean hanya didukung sebagai array, bukan Buffer s, atau sebagai input skalar.

Catatan: nilai null untuk elemen inputs dan outputs hanya diperbolehkan jika pemanggil menggunakan Delegate yang memungkinkan interop pegangan buffer, dan buffer tersebut telah diikat ke Tensor input atau output yang sesuai.

Parameter
masukan array data masukan. Input 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 melewatkan data input yang besar, sedangkan tipe string memerlukan penggunaan jalur input array (multi-dimensi). Ketika Buffer digunakan, isinya harus tetap tidak berubah sampai model inferensi selesai, dan pemanggil harus memastikan bahwa Buffer berada pada posisi baca yang sesuai.
keluaran peta indeks keluaran pemetaan ke array multidimensi data keluaran atau Buffer s tipe primitif termasuk int, float, long, dan byte. Itu hanya perlu menyimpan entri untuk output yang akan digunakan. Ketika Buffer digunakan, pemanggil harus memastikan bahwa itu diatur pada posisi tulis yang sesuai.
Melempar
Pengecualian Argumen Ilegal jika inputs atau outputs adalah null atau kosong, atau jika terjadi kesalahan saat menjalankan inferensi.

public void runSignature (Map<String, Object> input, Map<String, Object> output)

public void runSignature (Map<String, Object> inputs, Map<String, Object> outputs, String methodName)

Menjalankan inferensi model berdasarkan SignatureDef yang disediakan melalui @code methodName.

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

Parameter
masukan Peta input dari nama input di signatureDef ke objek input.
keluaran pemetaan peta dari nama keluaran di SignatureDef ke data keluaran.
nama metode Nama metode yang diekspor yang mengidentifikasi SignatureDef.
Melempar
Pengecualian Argumen Ilegal jika inputs atau outputs atau methodName adalah null atau kosong, atau jika terjadi kesalahan saat menjalankan inferensi.

PERINGATAN: Ini adalah API eksperimental dan dapat berubah.

public void setCancelled (boolean dibatalkan)

Lanjutan: Menginterupsi inferensi di tengah panggilan untuk run(Object, Object) .

Tanda pembatalan akan disetel ke true saat fungsi ini dipanggil. Interpreter akan memeriksa flag di antara pemanggilan Op, dan jika true , interpreter akan menghentikan eksekusi. Penerjemah akan tetap dalam status dibatalkan hingga secara eksplisit "dibatalkan" oleh setCancelled(false) .

PERINGATAN: Ini adalah API eksperimental dan dapat berubah.

Parameter
dibatalkan true untuk membatalkan inferensi dengan cara upaya terbaik; false untuk melanjutkan.
Melempar
Pengecualian Status Ilegal jika penerjemah tidak diinisialisasi dengan opsi yang dapat dibatalkan, yang secara default dinonaktifkan.

public void setNumThreads (int numThreads)

Metode ini tidak digunakan lagi di API level .
Lebih suka menggunakan setNumThreads(int) secara langsung untuk mengontrol thread multi-threading. Metode ini akan dihapus dalam rilis mendatang.

Menetapkan jumlah thread yang akan digunakan untuk operasi yang mendukung multi-threading.