Interpreter

genel final sınıfı Çevirmen

TensorFlow Lite ile model çıkarımını güçlendirmek için sürücü sınıfı.

Not: Aşağıdaki "deneysel " API özelliklerinden hiçbirine erişmeniz gerekmiyorsa TranslateerApi ve TranslateerFactory'yi doğrudan kullanmayı tercih edin.

Interpreter, 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 (Interpreter interpreter = new Interpreter(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 (Interpreter interpreter = new Interpreter(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 (Interpreter interpreter = new Interpreter(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 bilgilerine getInputTensor(int) ve getOutputTensor(int) üzerinden erişilebilen Tensor sınıfı aracılığıyla ulaşılabilir.

UYARI:Interpreter örnek iş parçacığı açısından güvenli değildir. Bir Interpreter, 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 Interpreter.Options Çalışma zamanı çevirmen davranışını kontrol etmek için bir seçenek sınıfı. 

İnşaatçılar

Çevirmen(Dosya modelFile)
Bir Interpreter başlatır.
Çevirmen(Dosya modelDosyası, Interpreter.Options seçenekleri)
Bir Interpreter başlatır ve çevirmen davranışını özelleştirme seçeneklerini belirtir.
Çevirmen(ByteBuffer byteBuffer)
Bir Interpreter, ByteBuffer model dosyasıyla başlatılır.
Çevirmen(ByteBuffer baytBuffer, Interpreter.Options seçenekleri)
ByteBuffer model dosyası ve özel Interpreter.Options kümesiyle bir Interpreter başlatır.

Herkese Açık Yöntemler

void
allocateTensors()
Gerekirse tüm tensörler için ayırmaları açık bir şekilde günceller.
void
close()
InterpreterApi örneğiyle ilişkili kaynakları serbest bırakın.
int
getInputIndex(Dize işlem adı)
Bir girişin işlem adına göre bir girişin dizinini alır.
Tensör
getInputTensor(int InputIndex)
Sağlanan giriş diziniyle ilişkilendirilmiş Tensor'ı alır.
int
getInputTensorCount()
Giriş tensörlerinin sayısını alır.
Tensör
getInputTensorFromSignature(Dize InputName, Dize imzaKey)
Sağlanan giriş adı ve imza yöntemi adıyla ilişkili Tensor'ı alır.
Uzun
getLastNativeInferenceDurationNanoseconds()
Yerel çıkarım zamanlamasını döndürür.
int
getOutputIndex(Dize işlem adı)
Çıkışın işlem adına göre bir çıkışın dizinini alır.
Tensör
getOutputTensor(int exitIndex)
Sağlanan çıkış diziniyle ilişkilendirilmiş Tensor'ı alır.
int
getOutputTensorCount()
Çıkış Tensörlerinin sayısını alır.
Tensör
getOutputTensorFromSignature(Dize exitName, String signatureKey)
Belirli bir imza yönteminde sağlanan çıkış adıyla ilişkilendirilmiş Tensor'ı alır.
Dize[]
getSignatureInputs(String signatureKey)
signatureKey yöntemi için SignatureDefs girişlerinin listesini alır.
Dize[]
getSignatureKeys()
Modelde mevcut olan SignatureDef dışa aktarılan yöntem adlarının listesini alır.
Dize[]
getSignatureOutputs(DizeSignatureKey)
signatureKey yöntemi için SignatureDefs çıkışlarının listesini alır.
void
resetVariableTensors()
Gelişmiş: Tüm değişken tensörlerini varsayılan değere sıfırlar.
void
resizeInput(int idx, int[] dims, boolean strict)
Yerel modelin idx-th girişini belirtilen soluk renk değerlerine yeniden boyutlandırır.
void
resizeInput(int idx, int[] soluk renkte)
Yerel modelin idx-th girişini belirtilen soluk renk değerlerine yeniden boyutlandırır.
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.
void
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.
void
runSignature(Map<StringObject> girişleri, Map<StringObject> çıkışları)
runSignature(Map, Map, String) ile aynıdır ancak modelin bir SignatureDef'e sahip olduğu varsayılırsa imza anahtarı geçirilmesi gerekmez.
void
runSignature(Harita<StringObject> girişleri, Map<StringObject> çıkışları, String signatureKey)
signatureKey aracılığıyla sağlanan SignatureDef'e dayanarak model çıkarımı yapar.
void
setCancelled(boole iptal edildi)
Gelişmiş: run(Object, Object) çağrısının ortasında çıkarımı keser.

Devralınan Yöntemler

İnşaatçılar

herkese açık Çevirmen (Dosya modeliDosya)

Bir Interpreter başlatır.

Parametreler
modelFile Önceden eğitilmiş bir TF Lite modeli dosyası.
Dekoratif yastıklar
IllegalArgumentException modelFile geçerli bir TensorFlow Lite modelini kodlamaz.

herkese açık Çevirmen (Dosya modeliDosya, Interpreter.Options seçenekleri)

Bir Interpreter başlatır ve çevirmen davranışını özelleştirme seçeneklerini belirtir.

Parametreler
modelFile önceden eğitilmiş bir TF Lite modelinin dosyası
seçenekler çevirmenin 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 Çevirmen (ByteBuffer byteBuffer)

Bir Interpreter, ByteBuffer model dosyasıyla başlatılır.

ByteBuffer, Interpreter oluşturulduktan sonra değiştirilmemelidir. ByteBuffer, bellekle bir model dosyasını eşleyen bir MappedByteBuffer veya bir modelin bayt içeriğini içeren NativeOrder() için doğrudan bir ByteBuffer olabilir.

Parametreler
byteBuffer
Dekoratif yastıklar
IllegalArgumentException byteBuffer, MappedByteBuffer veya NativeOrder'ın doğrudan ByteBuffer değeri değilse.

herkese açık Çevirmen (ByteBuffer byteBuffer, Interpreter.Options seçenekleri)

ByteBuffer model dosyası ve özel Interpreter.Options kümesiyle bir Interpreter başlatır.

ByteBuffer, Interpreter yapımından 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 ByteBuffer olabilir.

Parametreler
byteBuffer
seçenekler
Dekoratif yastıklar
IllegalArgumentException byteBuffer, MappedByteBuffer veya NativeOrder'ın doğrudan ByteBuffer değeri değilse.

Herkese Açık Yöntemler

herkese açık 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.

herkese açık void close ()

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

herkese açık int getInputIndex (String opName)

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

Parametreler
opName

herkese açık Tensor getInputTensor (int inputIndex)

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

Parametreler
inputIndex

herkese açık int getInputTensorCount ()

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

herkese açık Tensor getInputTensorFromSignature (String InputName, String signatureKey)

Sağlanan giriş adı ve imza yöntemi adıyla ilişkili Tensor'ı alır.

UYARI: Bu deneysel bir API'dir ve değiştirilebilir.

Parametreler
inputName İmzaya adı girin.
signatureKey SignatureDef'i tanımlayan imza anahtarı, modelin bir imzası varsa boş olabilir.
Dekoratif yastıklar
IllegalArgumentException (inputName veya signatureKey null veya boşsa ya da geçersiz ad sağlanmışsa).

herkese açık Long getLastNativeInferenceDurationNanoseconds ()

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

herkese açık int getOutputIndex (String opName)

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

Parametreler
opName

herkese açık 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

herkese açık int getOutputTensorCount ()

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

herkese açık Tensor getOutputTensorFromSignature (String exitName, String signatureKey)

Belirli bir imza yönteminde sağlanan çıkış adıyla 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.

UYARI: Bu deneysel bir API'dir ve değiştirilebilir.

Parametreler
outputName İmzadaki çıkış adı.
signatureKey SignatureDef'i tanımlayan imza anahtarı, modelin bir imzası varsa boş olabilir.
Dekoratif yastıklar
IllegalArgumentException (outputName veya signatureKey null veya boşsa ya da geçersiz ad sağlanmışsa).

herkese açık String[] getSignatureInputs (String signatureKey)

signatureKey yöntemi için SignatureDefs girişlerinin listesini alır.

UYARI: Bu deneysel bir API'dir ve değiştirilebilir.

Parametreler
signatureKey

herkese açık String[] getSignatureKeys ()

Modelde mevcut olan SignatureDef dışa aktarılan yöntem adlarının listesini alır.

UYARI: Bu deneysel bir API'dir ve değiştirilebilir.

herkese açık String[] getSignatureOutputs (String signatureKey)

signatureKey yöntemi için SignatureDefs çıkışlarının listesini alır.

UYARI: Bu deneysel bir API'dir ve değiştirilebilir.

Parametreler
signatureKey

herkese açık void resetVariableTensors ()

Gelişmiş: Tüm değişken tensörlerini varsayılan değere sıfırlar.

Bir değişken tensörle ilişkili bir tampon yoksa sıfıra sıfırlanır.

UYARI: Bu deneysel bir API'dir ve değiştirilebilir.

herkese açık 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

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

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

Parametreler
idx
dims

herkese açık 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()

herkese açık 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.

herkese açık void runSignature (Harita<DizeNesne> girişleri, Harita<DizeNesne> çıkışlar)

runSignature(Map, Map, String) ile aynıdır ancak modelin bir SignatureDef'e sahip olduğu varsayılırsa imza anahtarı geçirilmesi gerekmez. Modelde birden fazla SignatureDef varsa bir istisna oluşur.

UYARI: Bu deneysel bir API'dir ve değiştirilebilir.

Parametreler
girişler
çıktılar

herkese açık void runSignature (Harita<DizeNesne> girişleri, Harita<DizeNesne> çıkışlar, Stringimza Anahtarı)

signatureKey aracılığıyla sağlanan SignatureDef'e dayanarak model çıkarımı yapar.

İzin verilen giriş ve çıkış veri türleri hakkında daha fazla bilgi için run(Object, Object) inceleyin.

UYARI: Bu deneysel bir API'dir ve değiştirilebilir.

Parametreler
girişler SignatureDef'teki giriş adından bir giriş nesnesine eşleme.
çıktılar SignatureDef'teki çıkış adından çıkış verilerine bir harita. Arayan kişi çıkarımdan hemen sonra Tensor verilerini sorgulamak isterse (ör. çıkış şekli dinamikse veya çıkış arabellek tutamaçları kullanılıyorsa) bu alan boş olabilir.
signatureKey SignatureDef'i tanımlayan imza anahtarı.
Dekoratif yastıklar
IllegalArgumentException inputs null veya boş olursa, outputs veya signatureKey null ise ya da çıkarım çalıştırılırken hata oluşursa.

herkese açık void setCancelled (boolean cancelled)

Gelişmiş: run(Object, Object) çağrısının ortasında çıkarımı keser.

Bu işlev çağrıldığında iptal işareti true olarak ayarlanır. Çevirmen, işlem çağrıları arasındaki bayrağı kontrol eder ve true ise çevirmen yürütmeyi durdurur. Çevirmen, setCancelled(false) tarafından açıkça "iptal edilmeyene" kadar iptal edilmiş durumda kalır.

UYARI: Bu deneysel bir API'dir ve değiştirilebilir.

Parametreler
iptal edildi Çıkarımı en iyi şekilde iptal etmek için true; devam etmek için false.
Dekoratif yastıklar
IllegalStateException çevirmen varsayılan olarak kapalı olan iptal edilebilir seçenekle başlatılmazsa.