InterpreterApi

genel arayüz InterpreterApi
Bilinen Dolaylı Alt Sınıflar

Deneysel yöntemler hariç, TensorFlow Lite model yorumlayıcısına yönelik arayüz.

Bir InterpreterApi örneği, model çıkarımı için işlemlerin yürütüldüğü, önceden eğitilmiş bir TensorFlow Lite modelini kapsar.

Örneğin, bir model yalnızca bir girdi alıp yalnızca bir çıktı döndürüyorsa:

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

Bir model birden fazla giriş veya çıkış alıyorsa:

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

Bir model dize tensörlerini alıyor veya üretiyorsa:

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

Şekil [] ve şekil[1] arasında bir ayrım olduğunu unutmayın. Skaler dizi tensör çıkışları için:

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

Girişlerin ve çıkışların sıraları, girişlerin varsayılan şekilleri gibi TensorFlow modeli Toco ile TensorFlowLite modeline dönüştürülürken belirlenir.

Girişler (çok boyutlu) diziler olarak sağlandığında, karşılık gelen giriş tensörleri, o dizinin şekline göre örtülü olarak yeniden boyutlandırılacaktır. Girişler Buffer türleri olarak sağlandığında örtülü yeniden boyutlandırma yapılmaz; arayan kişi, Buffer bayt boyutunun karşılık gelen tensörünkiyle eşleştiğinden veya önce resizeInput(int, int[]) aracılığıyla tensörü yeniden boyutlandırdığından emin olmalıdır. Tensör şekli ve türü bilgisi, getInputTensor(int) ve getOutputTensor(int) aracılığıyla erişilebilen Tensor sınıfı aracılığıyla elde edilebilir.

UYARI: InterpreterApi örnekleri iş parçacığı açısından güvenli değildir .

UYARI: Bir InterpreterApi örneği, close() çağrılarak açıkça serbest bırakılması gereken kaynaklara sahiptir.

TFLite kitaplığı, NDK API 19'a göre oluşturulmuştur. 19'un altındaki Android API düzeylerinde çalışabilir ancak garanti edilmez.

İç İçe Sınıflar

sınıf InterpreterApi.Options Çalışma zamanı yorumlayıcısının davranışını kontrol etmeye yönelik bir seçenekler sınıfı.

Genel Yöntemler

soyut geçersiz
tahsisTensörler ()
Gerekirse tüm tensörlerin tahsislerini açıkça günceller.
soyut geçersiz
kapalı ()
InterpreterApi örneğiyle ilişkili kaynakları serbest bırakın.
Statik InterpreterApi
oluştur ( Dosya modeliDosya, InterpreterApi.Options seçenekleri)
Belirtilen modeli ve seçenekleri kullanarak bir InterpreterApi örneği oluşturur.
Statik InterpreterApi
oluştur ( ByteBuffer byteBuffer, InterpreterApi.Options seçenekleri)
Belirtilen modeli ve seçenekleri kullanarak bir InterpreterApi örneği oluşturur.
soyut int
getInputIndex ( String opName)
Girişin işlem adı verilen bir girişin dizinini alır.
soyut Tensör
getInputTensor (int inputIndex)
Sağlanan giriş dizini ile ilişkili Tensor'u alır.
soyut int
getInputTensorCount ()
Giriş tensörlerinin sayısını alır.
özet Uzun
getLastNativeInferenceDurationNanoseconds ()
Yerel çıkarım zamanlamasını döndürür.
soyut int
getOutputIndex ( String opName)
Çıkışın işlem adı verilen bir çıkışın indeksini alır.
soyut Tensör
getOutputTensor (int çıktıIndex)
Sağlanan çıktı dizini ile ilişkili Tensor'u alır.
soyut int
getOutputTensorCount ()
Çıkış Tensörlerinin sayısını alır.
soyut geçersiz
resizeInput (int idx, int[] dims, boolean strict)
Yerel modelin idx-th girişini verilen karartmaya göre yeniden boyutlandırır.
soyut geçersiz
resizeInput (int idx, int[] karartma)
Yerel modelin idx-th girişini verilen karartmaya göre yeniden boyutlandırır.
soyut geçersiz
çalıştır ( Nesne girişi, Nesne çıkışı)
Model yalnızca bir girdi alıp yalnızca bir çıktı sağlıyorsa model çıkarımını çalıştırır.
soyut geçersiz
runForMultipleInputsOutputs ( Nesne[] girişleri, Harita < Tamsayı , Nesne > çıkışları)
Model birden çok girdi alıyorsa veya birden çok çıktı döndürüyorsa model çıkarımını çalıştırır.

Kalıtsal Yöntemler

Genel Yöntemler

genel soyut void allocateTensors ()

Gerekirse tüm tensörlerin tahsislerini açıkça günceller.

Bu, verildiği gibi giriş tensör şeklini/şekillerini kullanarak bağımlı tensörler için şekilleri ve bellek tahsislerini yayacaktır.

Not: Bu çağrı *tamamen isteğe bağlıdır*. Herhangi bir giriş tensörü yeniden boyutlandırılırsa tensör tahsisi yürütme sırasında otomatik olarak gerçekleşir. Bu çağrı, grafiği çalıştırmadan önce herhangi bir çıkış tensörünün şeklinin belirlenmesinde en kullanışlıdır; örneğin,

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

Not: Bazı grafiklerin dinamik olarak şekillendirilmiş çıktıları vardır; bu durumda çıktı şekli, çıkarım yürütülene kadar tam olarak yayılmayabilir.

Atar
Yasadışı Durum İstisnası Grafiğin tensörleri başarılı bir şekilde tahsis edilemezse.

genel soyut void close ()

InterpreterApi örneğiyle ilişkili kaynakları serbest bırakın.

public static InterpreterApi create ( Dosya modelFile, InterpreterApi.Options seçenekleri)

Belirtilen modeli ve seçenekleri kullanarak bir InterpreterApi örneği oluşturur. Model bir dosyadan yüklenecektir.

Parametreler
modelDosya Önceden eğitilmiş bir TF Lite modelini içeren bir dosya.
seçenekler Tercüman davranışını özelleştirmeye yönelik bir dizi seçenek.
Atar
YasadışıTartışmaİstisna modelFile geçerli bir TensorFlow Lite modelini kodlamıyorsa.

public static InterpreterApi create ( ByteBuffer byteBuffer, InterpreterApi.Options seçenekleri)

Belirtilen modeli ve seçenekleri kullanarak bir InterpreterApi örneği oluşturur. Model bir ByteBuffer okunacaktır.

Parametreler
baytBuffer İkili serileştirilmiş biçimde, önceden eğitilmiş bir TF Lite modeli. ByteBuffer, InterpreterApi örneğinin oluşturulmasından sonra değiştirilmemelidir. ByteBuffer bir model dosyasının bellek eşlemesini yapan bir MappedByteBuffer veya bir modelin bayt içeriğini içeren nativeOrder()'ın doğrudan ByteBuffer olabilir.
seçenekler Tercüman davranışını özelleştirmeye yönelik bir dizi seçenek.
Atar
YasadışıTartışmaİstisna byteBuffer bir MappedByteBuffer veya nativeOrder'ın doğrudan ByteBuffer değilse.

public abstract int getInputIndex ( String opName)

Girişin işlem adı verilen bir girişin dizinini alır.

Parametreler
işlemAdı
Atar
YasadışıTartışmaİstisna opName yorumlayıcıyı başlatmak için kullanılan modeldeki herhangi bir girişle eşleşmiyorsa.

genel özet Tensör getInputTensor (int inputIndex)

Sağlanan giriş dizini ile ilişkili Tensor'u alır.

Parametreler
girişIndex
Atar
YasadışıTartışmaİstisna inputIndex negatifse veya model giriş sayısından küçük değilse.

genel özet int getInputTensorCount ()

Giriş tensörlerinin sayısını alır.

genel özet Uzun getLastNativeInferenceDurationNanoseconds ()

Yerel çıkarım zamanlamasını döndürür.

Atar
YasadışıTartışmaİstisna model tercüman tarafından başlatılmadıysa.

public abstract int getOutputIndex ( String opName)

Çıkışın işlem adı verilen bir çıkışın indeksini alır.

Parametreler
işlemAdı
Atar
YasadışıTartışmaİstisna opName yorumlayıcıyı başlatmak için kullanılan modeldeki herhangi bir çıktıyla eşleşmiyorsa.

genel özet Tensör getOutputTensor (int çıktıIndex)

Sağlanan çıktı dizini ile ilişkili Tensor'u alır.

Not: Çıkış tensör ayrıntıları (örneğin şekil), çıkarım yürütülene kadar tam olarak doldurulmayabilir. Çıkarımı çalıştırmadan *önce* güncellenmiş ayrıntılara ihtiyacınız varsa (örneğin, çıktı tensör şekillerini geçersiz kılabilecek bir giriş tensörünü yeniden boyutlandırdıktan sonra), tahsisi ve şekil yayılımını açıkça tetiklemek için allocateTensors() kullanın. Giriş *değerlerine* bağlı çıktı şekillerine sahip grafikler için çıktı şeklinin çıkarım çalıştırılana kadar tam olarak belirlenemeyebileceğini unutmayın.

Parametreler
çıktıIndex
Atar
YasadışıTartışmaİstisna outputIndex negatifse veya model çıktılarının sayısından küçük değilse.

genel soyut int getOutputTensorCount ()

Çıkış Tensörlerinin sayısını alır.

genel soyut void resizeInput (int idx, int[] dims, boolean strict)

Yerel modelin idx-th girişini verilen karartmaya göre yeniden boyutlandırır.

"Katı" Doğru olduğunda yalnızca bilinmeyen boyutlar yeniden boyutlandırılabilir. Bilinmeyen boyutlar "Tensor.shapeSignature()" tarafından döndürülen dizide "-1" olarak gösterilir.

Parametreler
kimlik
kararır
sıkı
Atar
YasadışıTartışmaİstisna idx negatifse veya model girişi sayısından küçük değilse; veya idx-th girişi yeniden boyutlandırılırken hata oluşursa. Ek olarak, "katı" Doğru olduğunda sabit boyutlara sahip bir tensörü yeniden boyutlandırmaya çalışırken hata oluşur.

genel soyut void resizeInput (int idx, int[] dims)

Yerel modelin idx-th girişini verilen karartmaya göre yeniden boyutlandırır.

Parametreler
kimlik
kararır
Atar
YasadışıTartışmaİstisna idx negatifse veya model girişi sayısından küçük değilse; veya idx-th girişi yeniden boyutlandırılırken hata oluşursa.

genel soyut geçersiz çalışma ( Nesne girişi, Nesne çıkışı)

Model yalnızca bir girdi alıp yalnızca bir çıktı sağlıyorsa model çıkarımını çalıştırır.

Uyarı: Giriş/çıkış veri türü olarak bir Buffer (tercihen doğrudan, ancak gerekli değildir) kullanılırsa API daha verimli olur. Daha iyi performans için lütfen ilkel verileri beslemek ve getirmek için Buffer kullanmayı düşünün. Aşağıdaki somut Buffer türleri desteklenir:

  • ByteBuffer - temeldeki herhangi bir ilkel Tensör türüyle uyumludur.
  • FloatBuffer - şamandıra Tensörleriyle uyumludur.
  • IntBuffer - int32 Tensörleriyle uyumludur.
  • LongBuffer - int64 Tensörleriyle uyumludur.
Boolean türlerinin Buffer veya skaler girişler olarak değil, yalnızca diziler olarak desteklendiğini unutmayın.

Parametreler
giriş bir dizi veya çok boyutlu dizi veya int, float, long ve byte dahil olmak üzere ilkel türlerden oluşan bir Buffer . Buffer , ilkel türler için büyük giriş verilerini iletmenin tercih edilen yoludur, oysa dize türleri (çok boyutlu) dizi giriş yolunun kullanılmasını gerektirir. Bir Buffer kullanıldığında, model çıkarımı yapılana kadar içeriği değişmeden kalmalı ve arayan kişi, Buffer uygun okuma konumunda olduğundan emin olmalıdır. null bir değere yalnızca arayan kişi arabellek tanıtıcısının birlikte çalışmasına izin veren bir Delegate kullanıyorsa ve böyle bir arabellek Tensor girişine bağlanmışsa izin verilir.
çıktı çok boyutlu bir çıktı verileri dizisi veya int, float, long ve byte dahil olmak üzere ilkel türlerden oluşan bir Buffer . Bir Buffer kullanıldığında, arayan kişinin uygun yazma konumunun ayarlandığından emin olması gerekir. Boş bir değere izin verilir ve belirli durumlar için faydalıdır; örneğin, arayan, arabellek tanıtıcısının birlikte çalışmasına izin veren bir Delegate kullanıyorsa ve böyle bir arabellek, çıkış Tensor bağlanmışsa (ayrıca bkz . Interpreter.Options#setAllowBufferHandleOutput(boolean) ) veya grafiğin dinamik olarak şekillendirilmiş çıktıları varsa ve arayanın, çıkarım çağrıldıktan sonra çıktı Tensor şeklini sorgulaması gerekiyorsa, verileri doğrudan çıkış tensöründen alır ( Tensor.asReadOnlyBuffer() aracılığıyla).
Atar
YasadışıTartışmaİstisna input boş veya boşsa ya da çıkarım çalıştırılırken bir hata meydana gelirse.
YasadışıTartışmaİstisna (DENEYSEL, değişikliğe tabidir) eğer çıkarım setCancelled(true) tarafından kesilirse.

genel soyut void runForMultipleInputsOutputs ( Object[] girişleri, Harita < Tamsayı , Object > çıkışları)

Model birden çok girdi alıyorsa veya birden çok çıktı döndürüyorsa model çıkarımını çalıştırır.

Uyarı: Giriş/çıkış veri türleri olarak Buffer (tercihen doğrudan, ancak gerekli değildir) kullanılırsa API daha verimli olur. Daha iyi performans için lütfen ilkel verileri beslemek ve getirmek için Buffer kullanmayı düşünün. Aşağıdaki somut Buffer türleri desteklenir:

  • ByteBuffer - temeldeki herhangi bir ilkel Tensör türüyle uyumludur.
  • FloatBuffer - şamandıra Tensörleriyle uyumludur.
  • IntBuffer - int32 Tensörleriyle uyumludur.
  • LongBuffer - int64 Tensörleriyle uyumludur.
Boolean türlerinin Buffer veya skaler girişler olarak değil, yalnızca diziler olarak desteklendiğini unutmayın.

Not: inputs ve outputs ayrı ayrı öğeleri için null değerlere, yalnızca arayan kişinin arabellek tanıtıcısının birlikte çalışmasına izin veren bir Delegate kullanması durumunda ve böyle bir arabellek karşılık gelen giriş veya çıkış Tensor bağlıysa izin verilir.

Parametreler
girişler bir dizi giriş verisi. Girişler modelin girişleriyle aynı sırada olmalıdır. Her giriş bir dizi veya çok boyutlu bir dizi veya int, float, long ve byte dahil olmak üzere ilkel türlerden oluşan bir Buffer olabilir. Buffer büyük giriş verilerini iletmenin tercih edilen yoludur, oysa dize türleri (çok boyutlu) dizi giriş yolunun kullanılmasını gerektirir. Buffer kullanıldığında, model çıkarımı yapılana kadar içeriği değişmeden kalmalı ve arayan kişi, Buffer uygun okuma konumunda olduğundan emin olmalıdır.
çıktılar çıktı endekslerini çok boyutlu çıktı verileri dizilerine veya int, float, long ve byte dahil olmak üzere ilkel türlerin Buffer eşleyen bir harita. Yalnızca kullanılacak çıktılar için girişleri tutması gerekir. Bir Buffer kullanıldığında, arayan kişinin uygun yazma konumunun ayarlandığından emin olması gerekir. Çıkış tensör verileri için arabellek tutamaçlarının kullanıldığı veya çıkışların dinamik olarak şekillendirildiği ve çağıranın, çıkarım çağrıldıktan sonra çıkış Tensor şeklini sorgulaması gerektiği ve verileri doğrudan çıkış tensöründen getirdiği durumlar için harita boş olabilir ( Tensor.asReadOnlyBuffer() aracılığıyla).
Atar
YasadışıTartışmaİstisna inputs boş veya boşsa, outputs boşsa veya çıkarım çalıştırılırken bir hata meydana gelirse.