Terima kasih telah mendengarkan Google I/O. Lihat semua sesi sesuai permintaan Tonton sesuai permintaan

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, di mana operasi dijalankan untuk inferensi model.

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

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

Jika 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 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);
 }

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: Instans InterpreterApi tidak aman untuk thread.

PERINGATAN: Instance InterpreterApi memiliki sumber daya yang harus dibebaskan secara eksplisit dengan menjalankan close()

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

Kelas Bersarang

kelas InterpreterApi.Options Kelas opsi untuk mengontrol perilaku juru runtime.

Metode Publik

kekosongan abstrak
mengalokasikanTensor ()
Memperbarui alokasi secara eksplisit untuk semua tensor, jika perlu.
kekosongan abstrak
tutup ()
Lepaskan sumber daya yang terkait dengan instance InterpreterApi .
InterpreterApi . statis
buat ( File modelFile, opsi InterpreterApi.Options )
Membuat instance InterpreterApi , menggunakan model dan opsi yang ditentukan.
InterpreterApi . statis
buat ( opsi ByteBuffer byteBuffer, InterpreterApi.Options )
Membuat instance InterpreterApi , menggunakan model dan opsi yang ditentukan.
abstrak menjadi
getInputIndex ( String opName)
Mendapat indeks input yang diberikan nama op input.
Tensor abstrak
getInputTensor (int inputIndex)
Mendapatkan Tensor yang terkait dengan indeks input yang disediakan.
abstrak menjadi
getInputTensorCount ()
Mendapatkan jumlah tensor input.
abstrak panjang
getLastNativeInferenceDurationNanoseconds ()
Mengembalikan waktu inferensi asli.
abstrak menjadi
getOutputIndex ( String opName)
Mendapat indeks dari sebuah output yang diberi nama op dari output tersebut.
Tensor abstrak
getOutputTensor (int outputIndex)
Mendapatkan Tensor yang terkait dengan indeks keluaran yang disediakan.
abstrak menjadi
getOutputTensorCount ()
Mendapatkan jumlah Tensor keluaran.
kekosongan abstrak
resizeInput (int idx, int[] redup, boolean ketat)
Mengubah ukuran input ke-idx dari model asli ke redup yang diberikan.
kekosongan abstrak
resizeInput (int idx, int[] redup)
Mengubah ukuran input ke-idx dari model asli ke redup yang diberikan.
kekosongan abstrak
jalankan ( Masukan objek , keluaran objek )
Menjalankan inferensi model jika model hanya membutuhkan satu input, dan hanya menyediakan satu output.
kekosongan abstrak
runForMultipleInputsOutputs ( Object[] input, Map < Integer , Object > outputs)
Menjalankan inferensi model jika model mengambil banyak input, atau mengembalikan beberapa output.

Metode yang Diwarisi

Metode Publik

public abstract void mengalokasikanTensors ()

Memperbarui alokasi secara eksplisit untuk semua tensor, jika perlu.

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

Catatan: Panggilan ini *hanya 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...

Catatan: Beberapa grafik memiliki output berbentuk dinamis, dalam hal ini bentuk output mungkin tidak sepenuhnya menyebar sampai inferensi dieksekusi.

Melempar
Pengecualian Status Ilegal jika tensor grafik tidak berhasil dialokasikan.

abstrak publik batal tutup ()

Lepaskan sumber daya yang terkait dengan instance InterpreterApi .

Buat InterpreterApi statis publik ( 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 yang telah dilatih sebelumnya.
pilihan Satu set opsi untuk menyesuaikan perilaku juru bahasa.
Melempar
Pengecualian Argumen Ilegal jika modelFile tidak mengkodekan model TensorFlow Lite yang valid.

Buat InterpreterApi statis publik ( opsi ByteBuffer byteBuffer, InterpreterApi.Options )

Membuat instance InterpreterApi , menggunakan model dan opsi yang ditentukan. Model akan dibaca dari ByteBuffer .

Parameter
byteBuffer Model TF Lite pra-terlatih, dalam bentuk serial biner. ByteBuffer tidak boleh dimodifikasi setelah konstruksi instance InterpreterApi . ByteBuffer dapat berupa MappedByteBuffer yang memetakan memori file model, atau ByteBuffer langsung dari nativeOrder() yang berisi konten byte model.
pilihan Satu set opsi untuk menyesuaikan perilaku juru bahasa.
Melempar
Pengecualian Argumen Ilegal jika byteBuffer bukan MappedByteBuffer atau ByteBuffer langsung dari nativeOrder.

int abstrak publik getInputIndex ( String opName)

Mendapat indeks input yang diberikan nama op input.

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

Tensor abstrak publik getInputTensor (int inputIndex)

Mendapatkan Tensor yang terkait dengan indeks input yang disediakan.

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

int abstrak publik getInputTensorCount ()

Mendapatkan jumlah tensor input.

abstrak publik Long getLastNativeInferenceDurationNanoseconds ()

Mengembalikan waktu inferensi asli.

Melempar
Pengecualian Argumen Ilegal jika model tidak diinisialisasi oleh interpreter.

int abstrak publik getOutputIndex ( String opName)

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

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

publik abstrak Tensor 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 membuat bentuk tensor output tidak valid), 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
indeks keluaran
Melempar
Pengecualian Argumen Ilegal jika outputIndex negatif atau tidak lebih kecil dari jumlah output model.

int abstrak publik getOutputTensorCount ()

Mendapatkan jumlah Tensor keluaran.

public abstract 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()`.

Parameter
idx
redup
ketat
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 `strict` adalah True.

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

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

Parameter
idx
redup
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 abstract void run ( Object input, Object output)

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:

  • 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 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 terikat 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 diperbolehkan, dan berguna untuk kasus tertentu, misalnya, jika pemanggil menggunakan Delegate yang memungkinkan interop pegangan buffer, dan buffer semacam itu telah diikat ke Tensor keluaran (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 ( 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:

  • 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 tipe boolean hanya didukung sebagai array, bukan Buffer s, atau sebagai input skalar.

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

Parameter
masukan serangkaian 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. Peta mungkin kosong untuk kasus di mana salah satu pegangan buffer digunakan untuk data tensor keluaran, atau kasus di mana 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 nol atau kosong, jika outputs nol, atau jika terjadi kesalahan saat menjalankan inferensi.