Interpreter

genel son sınıf Tercüman

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

Not: Aşağıdaki "deneysel" API özelliklerinden herhangi birine erişmeniz gerekmiyorsa, doğrudan Interpreter kullanmak yerine InterpreterApi ve InterpreterFactory kullanmayı tercih edin.

Interpreter 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ır ve yalnızca bir çıktı 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örlerini alır veya üretirse:

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ğ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ı, TensorFlow modelini Toco ile TensorFlowLite modeline dönüştürürken, girişlerin varsayılan şekilleri gibi belirlenir.

Girişler (çok boyutlu) diziler olarak sağlandığında, karşılık gelen giriş tensör(ler)i o dizinin şekline göre dolaylı olarak yeniden boyutlandırılacaktır. Girişler Buffer türleri olarak sağlandığında, hiçbir örtük yeniden boyutlandırma yapılmaz; çağıran, Buffer bayt boyutunun karşılık gelen tensörünkiyle eşleştiğinden veya önce resizeInput(int, int[]) yoluyla 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 sağlanan Tensor sınıfı aracılığıyla elde edilebilir.

UYARI: Interpreter örnekleri iş parçacığı açısından güvenli değildir . Bir Interpreter close() işlevini çağırarak 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 seviyeleri için çalışabilir, ancak garanti edilmez.

İç İçe Sınıflar

sınıf Tercüman.Seçenekler Çalışma zamanı yorumlayıcı davranışını denetlemek için bir seçenekler sınıfı.

Kamu İnşaatçılar

Tercüman ( Dosya modeliDosya)
Bir Interpreter başlatır.
Tercüman ( Dosya modeliDosya, Tercüman.Seçenekler seçenekleri)
Bir Interpreter başlatır ve yorumlayıcı davranışını özelleştirmek için seçenekleri belirtir.
Tercüman ( ByteBuffer byteBuffer)
Bir Interpreter bir model dosyasının ByteBuffer ile başlatır.
Tercüman ( ByteBuffer byteBuffer, Interpreter.Options seçenekleri)
Bir model dosyasının ByteBuffer ve bir dizi özel Interpreter.Options ile bir Interpreter başlatır.

Genel Yöntemler

geçersiz
tahsisTensors ()
Gerekirse, tüm tensörler için ayırmaları açıkça günceller.
geçersiz
kapat ()
InterpreterApi örneğiyle ilişkili kaynakları serbest bırakın.
int
getInputIndex ( Dize işlemAdı)
Girişin işlem adı verilen bir girişin dizinini alır.
tensör
getInputTensor (int inputIndex)
Sağlanan giriş dizini ile ilişkili Tensörü alır.
int
getInputTensorCount ()
Giriş tensörlerinin sayısını alır.
tensör
getInputTensorFromSignature ( Dize girdiAdı, Dize imzaAnahtarı)
Sağlanan giriş adı ve imza yöntemi adıyla ilişkili Tensörü alır.
Uzun
getLastNativeInferenceDurationNanosaniye ()
Yerel çıkarım zamanlamasını döndürür.
int
getOutputIndex ( Dize işlemAdı)
Çıktının işlem adı verilen bir çıktının dizinini alır.
tensör
getOutputTensor (int outputIndex)
Sağlanan çıktı dizini ile ilişkili Tensörü alır.
int
getOutputTensorCount ()
Çıkış Tensörlerinin sayısını alır.
tensör
getOutputTensorFromSignature ( Dize çıktıAdı, Dize imzaAnahtarı)
Belirli bir imza yönteminde sağlanan çıktı adıyla ilişkili Tensörü alır.
Sicim[]
getSignatureInputs ( Dize imzaKey)
signatureKey yöntemi için SignatureDefs girişlerinin listesini alırsignatureKey .
Sicim[]
getSignatureKeys ()
Modelde bulunan SignatureDef dışa aktarılan yöntem adlarının listesini alır.
Sicim[]
getSignatureOutputs ( Dize imzaKey)
signatureKey yöntemi için SignatureDefs çıktılarının listesini alır.
geçersiz
resetVariableTensors ()
Gelişmiş: Tüm değişken tensörleri varsayılan değere sıfırlar.
geçersiz
resizeInput (int idx, int[] loşluk, katı boolean)
Yerel modelin idx-th girişini verilen boyutlara göre yeniden boyutlandırır.
geçersiz
resizeInput (int idx, int[] soluk)
Yerel modelin idx-th girişini verilen boyutlara göre yeniden boyutlandırır.
geçersiz
çalıştır ( Nesne girişi, Nesne çıkışı)
Model yalnızca bir girdi alıyorsa ve yalnızca bir çıktı sağlıyorsa, model çıkarımını çalıştırır.
geçersiz
runForMultipleInputsOutputs ( Object[] girişleri, Map < Integer , Object > outputs)
Model birden çok girdi alırsa veya birden çok çıktı döndürürse model çıkarımını çalıştırır.
geçersiz
runSignature ( Map < String , Object > girişler, Map < String , Object > çıkışlar)
runSignature(Map, Map, String) ile aynıdır, ancak modelin bir SignatureDef'e sahip olduğu varsayılarak bir imza Anahtarının iletilmesini gerektirmez.
geçersiz
runSignature ( Map < String , Object > girişler, Map < String , Object > outputs, StringsignAnahtar )
SignatureDef aracılığıyla signatureKey aracılığıyla sağlanan model çıkarımını çalıştırır.
geçersiz
setCancelled (boolean iptal edildi)
Gelişmiş: run(Object, Object) çağrısının ortasında çıkarımı keser.

Miras Alınan Yöntemler

Kamu İnşaatçılar

genel Tercüman ( Dosya modeliDosyası)

Bir Interpreter başlatır.

parametreler
modelDosyası a Önceden eğitilmiş bir TF Lite modelinin dosyası.
Atar
Yasa Dışı Argümanİstisna modelFile geçerli bir TensorFlow Lite modelini kodlamazsa.

public Interpreter ( Dosya modeliDosya, Interpreter.Options seçenekleri)

Bir Interpreter başlatır ve yorumlayıcı davranışını özelleştirmek için seçenekleri belirtir.

parametreler
modelDosyası önceden eğitilmiş bir TF Lite modelinin dosyası
seçenekler tercüman davranışını özelleştirmek için bir dizi seçenek
Atar
Yasa Dışı Argümanİstisna modelFile geçerli bir TensorFlow Lite modelini kodlamazsa.

genel Tercüman ( ByteBuffer byteBuffer)

Bir Interpreter bir model dosyasının ByteBuffer ile başlatır.

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

parametreler
byteBuffer
Atar
Yasa Dışı Argümanİstisna byteBuffer bir MappedByteBuffer veya doğrudan bir nativeOrder ByteBuffer değilse.

genel Tercüman ( ByteBuffer byteBuffer, Interpreter.Options seçenekleri)

Bir model dosyasının ByteBuffer ve bir dizi özel Interpreter.Options ile bir Interpreter başlatır.

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

parametreler
byteBuffer
seçenekler
Atar
Yasa Dışı Argümanİstisna byteBuffer bir MappedByteBuffer veya doğrudan bir nativeOrder ByteBuffer değilse.

Genel Yöntemler

public void allocateTensors ()

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

Bu, verildiği gibi giriş tensörü şekil(ler)ini kullanan bağımlı tensörler için şekilleri ve bellek tahsislerini yayar.

Not: Bu arama *tamamen isteğe bağlıdır*. Herhangi bir giriş tensörü yeniden boyutlandırıldıysa, tensör tahsisi yürütme sırasında otomatik olarak gerçekleşir. Bu çağrı, grafiği yürütmeden önce herhangi bir çıktı tensörü için şekillerin 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.

genel boşluk kapat ()

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

public int getInputIndex ( Dize işlemAdı)

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

parametreler
işlemAdı

genel Tensör getInputTensor (int inputIndex)

Sağlanan giriş dizini ile ilişkili Tensörü alır.

parametreler
girdi dizini

genel int getInputTensorCount ()

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

public Tensor getInputTensorFromSignature ( Dize girdiAdı, Dize imzaKey)

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

UYARI: Bu deneysel bir API'dir ve değişikliğe tabidir.

parametreler
isim girin İmzaya adı girin.
imzaAnahtarı SignatureDef'i tanımlayan imza anahtarı, modelde bir imza varsa boş olabilir.
Atar
Yasa Dışı Argümanİstisna inputName veya signatureKey boş veya boşsa veya geçersiz ad sağlanmışsa.

public Uzun getLastNativeInferenceDurationNanoseconds ()

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

public int getOutputIndex ( Dize işlemAdı)

Çıktının işlem adı verilen bir çıktının dizinini alır.

parametreler
işlemAdı

genel Tensör getOutputTensor (int outputIndex)

Sağlanan çıktı dizini ile ilişkili Tensörü alır.

Not: Çıkış tensörü ayrıntıları (örn. ş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ı dizini

genel int getOutputTensorCount ()

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

public Tensor getOutputTensorFromSignature ( Dize outputName, String imzaAnahtarı)

Belirli bir imza yönteminde sağlanan çıktı adıyla ilişkili Tensörü alır.

Not: Çıkış tensörü ayrıntıları (örn. ş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.

UYARI: Bu deneysel bir API'dir ve değişikliğe tabidir.

parametreler
çıktıAdı İmzadaki çıktı adı.
imzaAnahtarı SignatureDef'i tanımlayan imza anahtarı, modelde bir imza varsa boş olabilir.
Atar
Yasa Dışı Argümanİstisna outputName veya signatureKey boş veya boşsa veya geçersiz ad sağlanmışsa.

public String[] getSignatureInputs ( StringsignatureKey )

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

UYARI: Bu deneysel bir API'dir ve değişikliğe tabidir.

parametreler
imzaAnahtarı

public String[] getSignatureKeys ()

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

UYARI: Bu deneysel bir API'dir ve değişikliğe tabidir.

public String[] getSignatureOutputs ( StringsignatureKey )

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

UYARI: Bu deneysel bir API'dir ve değişikliğe tabidir.

parametreler
imzaAnahtarı

genel geçersiz resetVariableTensors ()

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

Bir değişken tensörün ilişkili bir arabelleği yoksa, sıfıra sıfırlanacaktır.

UYARI: Bu deneysel bir API'dir ve değişikliğe tabidir.

genel geçersiz resizeInput (int idx, int[] dims, katı boolean)

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

"strict" True olduğunda, yalnızca bilinmeyen boyutlar yeniden boyutlandırılabilir. Bilinmeyen boyutlar, "Tensor.shapeSignature()" tarafından döndürülen dizide "-1" olarak belirtilir.

parametreler
idx
loş
sıkı

genel geçersiz resizeInput (int idx, int[] soluk)

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

parametreler
idx
loş

genel geçersiz çalıştırma ( Nesne girişi, Nesne çıkışı)

Model yalnızca bir girdi alıyorsa ve 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ğil) kullanılırsa API daha verimli olur. Lütfen daha iyi performans için ilkel verileri beslemek ve almak için Buffer kullanmayı düşünün. Aşağıdaki somut Buffer türleri desteklenir:

  • ByteBuffer - herhangi bir temel ilkel Tensör türüyle uyumludur.
  • FloatBuffer - yüzer Tensörlerle uyumludur.
  • IntBuffer - int32 Tensörlerle uyumludur.
  • LongBuffer - int64 Tensörleri ile uyumludur.
Boole türlerinin yalnızca diziler olarak desteklendiğini, Buffer s veya skaler girişler olarak desteklenmediğ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 girdi verilerini iletmenin tercih edilen yoludur, oysa dize türleri (çok boyutlu) dizi giriş yolunun kullanılmasını gerektirir. Bir Buffer kullanıldığında, içeriği model çıkarımı yapılana kadar değişmeden kalmalıdır ve çağıran, Buffer uygun okuma konumunda olduğundan emin olmalıdır. Yalnızca arayan, arabellek tanıtıcı birlikte çalışmasına izin veren bir Delegate kullanıyorsa ve böyle bir arabellek Tensor girişine bağlanmışsa null bir değere izin verilir.
çıktı çıktı verilerinin çok boyutlu bir dizisi veya int, float, long ve byte dahil olmak üzere ilkel türlerden oluşan bir Buffer . Bir Buffer kullanıldığında, arayan kişi bunun uygun yazma konumuna ayarlandığından emin olmalıdır. Boş bir değere izin verilir ve belirli durumlar için kullanışlıdır, örneğin, çağıran arabellek tanıtıcısı birlikte çalışmasına izin veren bir Delegate kullanıyorsa ve böyle bir arabellek çıktı 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 başlatıldıktan sonra çıktı Tensor şeklini sorgulaması ve verileri doğrudan çıktı tensöründen alması gerekiyorsa ( Tensor.asReadOnlyBuffer() aracılığıyla).

public void runForMultipleInputsOutputs ( Object[] girişleri, Map < Integer , Object > outputs)

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

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

  • ByteBuffer - herhangi bir temel ilkel Tensör türüyle uyumludur.
  • FloatBuffer - yüzer Tensörlerle uyumludur.
  • IntBuffer - int32 Tensörlerle uyumludur.
  • LongBuffer - int64 Tensörleri ile uyumludur.
Boole türlerinin yalnızca diziler olarak desteklendiğini, Buffer s veya skaler girişler olarak desteklenmediğini unutmayın.

Not: inputs ve outputs ayrı ayrı öğeleri için null değerlere, yalnızca arayan arabellek tanıtıcı birlikte çalışmasına izin veren bir Delegate kullanıyorsa ve böyle bir arabellek karşılık gelen giriş veya çıkış Tensor /Tensorlarına bağlanmışsa izin verilir.

parametreler
girdiler bir dizi giriş verisi. Girişler, modelin girişleriyle aynı sırada olmalıdır. Her giriş bir dizi veya çok boyutlu dizi veya int, float, long ve byte dahil olmak üzere ilkel türlerden bir Buffer olabilir. Buffer büyük girdi verilerini iletmek için tercih edilen yoldur, oysa dize türleri (çok boyutlu) dizi giriş yolunun kullanılmasını gerektirir. Buffer kullanıldığında, içeriği model çıkarımı yapılana kadar değişmeden kalmalı ve çağıran, Buffer uygun okuma konumunda olduğundan emin olmalıdır.
çıktılar int, float, long ve byte dahil olmak üzere ilkel türlerdeki çok boyutlu çıktı verisi veya Buffer s dizilerine çıktı dizinlerini eşleyen bir harita. Yalnızca kullanılacak çıktılar için girdileri tutması gerekir. Bir Buffer kullanıldığında, arayan kişi bunun uygun yazma konumuna ayarlandığından emin olmalıdır. Çıktı tensörü verileri için arabellek tutamaçlarından birinin kullanıldığı durumlarda veya çıktıların dinamik olarak şekillendirildiği ve arayanın çıkarım başlatıldıktan sonra çıktı Tensor şeklini sorgulaması gerektiği durumlarda harita boş olabilir ve verileri doğrudan çıkış tensöründen alır ( Tensor.asReadOnlyBuffer() aracılığıyla).

public void runSignature ( Map < String , Object > girdiler, Map < String , Object > çıktılar)

runSignature(Map, Map, String) ile aynıdır, ancak modelin bir SignatureDef'e sahip olduğu varsayılarak bir imza Anahtarının iletilmesini gerektirmez. Modelde birden fazla SignatureDef varsa, bir istisna atar.

UYARI: Bu deneysel bir API'dir ve değişikliğe tabidir.

parametreler
girdiler
çıktılar

public void runSignature ( Map < String , Object > girdiler, Map < String , Object > çıktılar, String imza Anahtarı)

SignatureDef aracılığıyla signatureKey aracılığıyla sağlanan model çıkarımını çalıştırır.

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

UYARI: Bu deneysel bir API'dir ve değişikliğe tabidir.

parametreler
girdiler SignatureDef'teki giriş adından bir giriş nesnesine eşleme.
çıktılar Verileri çıkarmak için SignatureDef'teki çıktı adından bir harita. Arayan, çıkarımdan hemen sonra Tensor verilerini sorgulamak isterse (örneğin, çıktı şekli dinamikse veya çıktı arabellek tutamaçları kullanılıyorsa) bu boş olabilir.
imzaAnahtarı SignatureDef'i tanımlayan imza anahtarı.
Atar
Yasa Dışı Argümanİstisna inputs boş veya boşsa, outputs veya signatureKey boşsa veya çıkarım çalıştırılırken bir hata oluşursa.

public void setCancelled (boolean iptal edildi)

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

Bu işlev çağrıldığında bir iptal bayrağı true olarak ayarlanacaktır. Tercüman, Op çağrıları arasındaki bayrağı kontrol edecek ve eğer true ise, tercüman yürütmeyi durduracaktır. Yorumlayıcı, setCancelled(false) tarafından açıkça "iptal edilmeyene" kadar iptal edilmiş durumda kalacaktır.

UYARI: Bu deneysel bir API'dir ve değişikliğe tabidir.

parametreler
iptal edildi true çıkarımı en iyi şekilde iptal etmek için; devam etmek için false .
Atar
IllegalStateException tercüman, varsayılan olarak kapalı olan iptal edilebilir seçeneğiyle başlatılmamışsa.