InterpreterApi

herkese açık arayüz InterpreterApi
Bilinen Dolaylı Alt Sınıflar

TensorFlow Lite model yorumlayıcı arayüzü (Deneysel yöntemler hariç).

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

Örneğin, bir model yalnızca bir giriş alıp yalnızca bir çıkış döndürürse:

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örleri alıyorsa veya oluşturuyorsa:

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 [] ile şekil[1] arasında bir fark olduğuna dikkat edin. Skalar dize 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ş ve çıkış sırası, TensorFlow modeli Toco ile TensorFlowLite modeline ve girişlerin varsayılan şekillerine dönüştürülürken belirlenir.

Girişler (çok boyutlu) diziler olarak sağlandığında, karşılık gelen giriş tensörleri dizinin şekline göre dolaylı olarak yeniden boyutlandırılır. Girişler Buffer türleri olarak sağlandığında, örtülü yeniden boyutlandırma yapılmaz. Çağrıyı yapan, Buffer bayt boyutunun karşılık gelen tensörün boyutuyla eşleştiğinden veya önce resizeInput(int, int[]) aracılığıyla tensörü yeniden boyutlandırdığından emin olmalıdır. Tensör şekil ve tür bilgileri, getInputTensor(int) ve getOutputTensor(int) üzerinden kullanılabilen Tensor sınıfı aracılığıyla elde edilebilir.

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

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

TFLite kitaplığı, NDK API 19'a dayalı olarak geliştirilmiştir. 19'un altındaki Android API seviyelerinde çalışabilir ancak garanti edilmez.

İç İçe Sınıflar

sınıf InterpreterApi.Options Çalışma zamanı çevirmen davranışını kontrol etmek için bir seçenek sınıfı. 

Herkese Açık Yöntemler

soyut geçersiz
allocateTensors()
Gerekirse tüm tensörler için ayırmaları açık bir şekilde günceller.
soyut geçersiz
close()
InterpreterApi örneğiyle ilişkili kaynakları serbest bırakın.
statik InterpreterApi
create(Dosya modelFile, InterpreterApi.Options seçenekleri)
Belirtilen modeli ve seçenekleri kullanarak bir InterpreterApi örneği oluşturur.
statik InterpreterApi
create(ByteBuffer byteBuffer, InterpreterApi.Options seçenekleri)
Belirtilen modeli ve seçenekleri kullanarak bir InterpreterApi örneği oluşturur.
soyut int
getInputIndex(Dize işlem adı)
Bir girişin işlem adına göre bir girişin dizinini alır.
abstract Tensör
getInputTensor(int InputIndex)
Sağlanan giriş diziniyle ilişkilendirilmiş Tensor'ı alır.
soyut int
getInputTensorCount()
Giriş tensörlerinin sayısını alır.
soyut Uzun
getLastNativeInferenceDurationNanoseconds()
Yerel çıkarım zamanlamasını döndürür.
soyut int
getOutputIndex(Dize işlem adı)
Çıkışın işlem adına göre bir çıkışın dizinini alır.
abstract Tensör
getOutputTensor(int exitIndex)
Sağlanan çıkış diziniyle ilişkilendirilmiş Tensor'ı 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 belirtilen soluk renk değerlerine yeniden boyutlandırır.
soyut geçersiz
resizeInput(int idx, int[] soluk renkte)
Yerel modelin idx-th girişini belirtilen soluk renk değerlerine yeniden boyutlandırır.
soyut geçersiz
run(Nesne girişi, Nesne çıkışı)
Model yalnızca bir giriş alırsa ve yalnızca bir çıkış sağlarsa model çıkarımı yapar.
soyut geçersiz
runForMultipleInputsOutputs(Object[] girişleri, Map<IntegerObject> çıkışları)
Model birden fazla giriş alırsa veya birden fazla çıkış döndürürse model çıkarımı yapar.

Devralınan Yöntemler

Herkese Açık Yöntemler

herkese açık soyut void allocateTensors ()

Gerekirse tüm tensörler için ayırmaları açık bir şekilde günceller.

Bu işlem, verilen şekilde giriş tensörü şekillerini kullanarak bağımlı tensörler için şekilleri ve bellek ayırmalarını yayar.

Not: Bu görüşme *tamamen isteğe bağlıdır*. Herhangi bir giriş tensörü yeniden boyutlandırılırsa tensör ayırma işlemi, yürütme sırasında otomatik olarak gerçekleşir. Bu çağrı, grafiği yürütmeden önce herhangi bir çıkış tensörü için şekilleri belirlemede oldukça yararlıdır.Ör.

 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 çıkışları dinamik olarak şekillenmiş çıkışlara sahiptir. Bu durumda, çıkarım yürütülene kadar çıkış şekli tam olarak yansıtılmayabilir.

Dekoratif yastıklar
IllegalStateException grafikteki tensörler başarıyla tahsis edilemezse.

herkese açık soyut void close ()

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

herkese açık static InterpreterApi create (File modelFile, InterpreterApi.Options seçenekleri)

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

Parametreler
modelFile Önceden eğitilmiş TF Lite modeli içeren bir dosya.
seçenekler Çevirmen davranışını özelleştirmek için bir dizi seçenek.
Dekoratif yastıklar
IllegalArgumentException modelFile geçerli bir TensorFlow Lite modelini kodlamaz.

herkese açık static InterpreterApi create (ByteBuffer byteBuffer, InterpreterApi.Options seçenekleri)

Belirtilen modeli ve seçenekleri kullanarak bir InterpreterApi örneği oluşturur. Model bir ByteBuffer öğesinden okunur.

Parametreler
byteBuffer İkili programlanmış biçimde önceden eğitilmiş bir TF Lite modeli. ByteBuffer, InterpreterApi örneği oluşturulduktan sonra değiştirilmemelidir. ByteBuffer, bellekle bir model dosyası eşleyen bir MappedByteBuffer veya bir modelin bayt içeriğini içeren NativeOrder() için doğrudan bir ByteBuffer olabilir.
seçenekler Çevirmen davranışını özelleştirmek için bir dizi seçenek.
Dekoratif yastıklar
IllegalArgumentException byteBuffer, MappedByteBuffer veya NativeOrder'ın doğrudan ByteBuffer değeri değilse.

genel abstract int getInputIndex (String opName)

Bir girişin işlem adına göre bir girişin dizinini alır.

Parametreler
opName
Dekoratif yastıklar
IllegalArgumentException opName değeri, yorumlayıcıyı başlatmak için kullanılan modeldeki herhangi bir girişle eşleşmez.

genel abstract Tensor getInputTensor (int InputIndex)

Sağlanan giriş diziniyle ilişkilendirilmiş Tensor'ı alır.

Parametreler
inputIndex
Dekoratif yastıklar
IllegalArgumentException inputIndex negatifse veya model girişlerinin sayısından küçük değilse.

herkese açık soyut int getInputTensorCount ()

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

herkese açık abstract Long getLastNativeInferenceDurationNanoseconds ()

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

Dekoratif yastıklar
IllegalArgumentException model, çevirmen tarafından başlatılmazsa devre dışı bırakılır.

herkese açık abstract int getOutputIndex (String opName)

Çıkışın işlem adına göre bir çıkışın dizinini alır.

Parametreler
opName
Dekoratif yastıklar
IllegalArgumentException opName değeri, yorumlayıcıyı başlatmak için kullanılan modelde hiçbir çıkışla eşleşmezse.

public abstract Tensor getOutputTensor (int exitIndex)

Sağlanan çıkış diziniyle ilişkilendirilmiş Tensor'ı alır.

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

Parametreler
outputIndex
Dekoratif yastıklar
IllegalArgumentException outputIndex negatifse veya model çıkışlarının sayısından küçük değilse.

herkese açık soyut int getOutputTensorCount ()

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

herkese açık soyut void resizeInput (int idx, int[] dims, boolean strict)

Yerel modelin idx-th girişini belirtilen soluk renk değerlerine yeniden boyutlandırır.

"strict" değeri Doğru değerine ayarlandığında yalnızca bilinmeyen boyutlar yeniden boyutlandırılabilir. Bilinmeyen boyutlar, "Tensor.shapeSignature()" işlevi tarafından döndürülen dizide "-1" olarak gösterilir.

Parametreler
idx
dims
yüksek düzey
Dekoratif yastıklar
IllegalArgumentException idx negatifse veya model girişlerinin sayısından küçük değilse ya da idx'teki giriş yeniden boyutlandırıldığında hata oluşursa. Ayrıca, "kat" değeri Doğru olduğunda bu hata, sabit boyutlu bir tensör yeniden boyutlandırılmaya çalışıldığında ortaya çıkar.

herkese açık soyut void resizeInput (int idx, int[] dims)

Yerel modelin idx-th girişini belirtilen soluk renk değerlerine yeniden boyutlandırır.

Parametreler
idx
dims
Dekoratif yastıklar
IllegalArgumentException idx negatifse veya model girişlerinin sayısından küçük değilse ya da idx'teki giriş yeniden boyutlandırıldığında hata oluşursa.

herkese açık abstract void run (Nesne girişi, Nesne çıkışı)

Model yalnızca bir giriş alırsa ve yalnızca bir çıkış sağlarsa model çıkarımı yapar.

Uyarı: Giriş/çıkış veri türü olarak Buffer (tercihen doğrudan fakat zorunlu değildir) kullanılıyorsa API daha verimlidir. Daha iyi performans elde etmek amacıyla temel verileri feed'lemek ve getirmek için lütfen Buffer kullanmayı düşünün. Aşağıdaki somut Buffer türleri desteklenir:

  • ByteBuffer: Temel Tensor türleriyle uyumludur.
  • FloatBuffer - kayan Tensörlerle uyumludur.
  • IntBuffer - int32 Tensors ile uyumludur.
  • LongBuffer - int64 Tensors ile uyumludur.
Boole türlerinin yalnızca dizi olarak desteklendiğini, Buffer veya skaler girdiler olarak desteklenmediğini unutmayın.

Parametreler
giriş bir dizi veya çok boyutlu dizi ya da int, kayan nokta, uzun ve bayt gibi temel türlerden oluşan Buffer. Buffer, temel türler için büyük giriş verilerini iletmenin tercih edilen yöntemidir. Dize türleri ise (ç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 çağrıyı yapan kişi Buffer öğesinin uygun okuma konumunda olduğundan emin olmalıdır. null değerine yalnızca çağrıyı yapan, arabellek tutamacı birlikte çalışmaya izin veren bir Delegate kullanıyorsa ve böyle bir arabellek, Tensor girişine bağlanmışsa izin verilir.
çıkış çok boyutlu bir çıkış verileri dizisi veya int, kayan, uzun ve bayt gibi temel türlerden oluşan Buffer Bir Buffer kullanıldığında çağrıyı yapan, uygun yazma konumunun ayarlandığından emin olmalıdır. Boş değere izin verilir ve belirli durumlarda yararlıdır.Örneğin, çağrıyı yapan kişi arabellek tutma yeri birlikte çalışmaya izin veren bir Delegate kullanıyorsa ve böyle bir arabellek Tensor çıkışına bağlanmışsa (ayrıca bkz. Interpreter.Options#setAllowBufferHandleOutput(boolean)).TensorTensor.asReadOnlyBuffer()
Dekoratif yastıklar
IllegalArgumentException input null veya boş olursa ya da çıkarım çalıştırılırken hata oluşursa.
IllegalArgumentException (DENEYSEL, değişebilir). setCancelled(true)

herkese açık abstract void runForMultipleInputsOutputs (Object[] girişleri, Harita<TamsayıNesne> çıkışları)

Model birden fazla giriş alırsa veya birden fazla çıkış döndürürse model çıkarımı yapar.

Uyarı: Giriş/çıkış veri türü olarak Buffer (tercihen doğrudan ancak zorunlu değil) kullanılırsa API daha verimli olur. Daha iyi performans elde etmek amacıyla temel verileri feed'lemek ve getirmek için lütfen Buffer kullanmayı düşünün. Aşağıdaki somut Buffer türleri desteklenir:

  • ByteBuffer: Temel Tensor türleriyle uyumludur.
  • FloatBuffer - kayan Tensörlerle uyumludur.
  • IntBuffer - int32 Tensors ile uyumludur.
  • LongBuffer - int64 Tensors ile uyumludur.
Boole türlerinin yalnızca dizi olarak desteklendiğini, Buffer veya skaler girdiler olarak desteklenmediğini unutmayın.

Not: inputs ve outputs öğelerinin tek tek öğeleri için null değerlerine, yalnızca çağrıyı yapan kişi arabellek tutamacı birlikte çalışmaya izin veren bir Delegate kullanıyorsa ve böyle bir arabellek, karşılık gelen giriş veya çıkışa Tensor bağlanmışsa izin verilir.

Parametreler
girişler giriş verileri dizisidir. Girişler, modelin girişleriyle aynı sırada olmalıdır. Her giriş bir dizi veya çok boyutlu dizi ya da int, kayan, uzun ve bayt gibi temel türlerden oluşan bir Buffer olabilir. Buffer, büyük giriş verilerini geçirmek için tercih edilen yöntemdir. Dize türleri ise (çok boyutlu) dizi giriş yolunun kullanılmasını gerektirir. Buffer kullanıldığında, model çıkarımı yapılana kadar içeriğin içeriği değişmeden kalmalı ve çağrıyı yapan kişi Buffer öğesinin uygun okuma konumunda olduğundan emin olmalıdır.
çıktılar çok boyutlu çıkış verisi dizilerine harita eşleme çıkış dizinleri veya tam, kayan, uzun ve bayt gibi temel tür Buffer. Yalnızca çıkışların kullanılması için girişleri tutması yeterlidir. Bir Buffer kullanıldığında çağrıyı yapan, uygun yazma konumunun ayarlandığından emin olmalıdır. Harita, çıkış tensörü verileri için arabellek tutma yerlerinden birinin kullanıldığı veya çıkışların dinamik olarak şekillendirildiği ve çıkarım çağrıldıktan sonra çağrının, çıkış Tensor şeklini sorgulaması ve verileri doğrudan çıkış tensöründen (Tensor.asReadOnlyBuffer() ile) getirmesinin gerektiği durumlarda boş olabilir.
Dekoratif yastıklar
IllegalArgumentException inputs null veya boş ise, outputs null ise ya da çıkarım çalıştırılırken hata oluşursa.