Interpreter

genel final dersi Tercümanı

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

Not: Aşağıdaki "deneysel" API özelliklerinden herhangi birine erişmeniz gerekmiyorsa, Interpreter'ı doğrudan kullanmak yerine InterpreterApi ve InterpreterFactory'yi 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ıp yalnızca bir çıktı döndürüyorsa:

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ı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 (Interpreter interpreter = new Interpreter(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: Interpreter örnekleri iş parçacığı açısından güvenli değildir . Bir Interpreter 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 Tercüman.Seçenekler Çalışma zamanı yorumlayıcısının davranışını kontrol etmeye yönelik 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çenek seçenekleri)
Bir Interpreter başlatır ve yorumlayıcı davranışını özelleştirmeye yönelik seçenekleri belirtir.
Tercüman ( ByteBuffer byteBuffer)
Bir model dosyasının ByteBuffer ile bir Interpreter 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
tahsisTensörler ()
Gerekirse tüm tensörlerin tahsislerini açıkça günceller.
geçersiz
kapalı ()
InterpreterApi örneğiyle ilişkili kaynakları serbest bırakın.
int
getInputIndex ( String opName)
Girişin işlem adı verilen bir girişin dizinini alır.
Tensör
getInputTensor (int inputIndex)
Sağlanan giriş dizini ile ilişkili Tensor'u alır.
int
getInputTensorCount ()
Giriş tensörlerinin sayısını alır.
Tensör
getInputTensorFromSignature ( String inputName, String imzaKey)
Sağlanan giriş adı ve imza yöntemi adıyla ilişkili Tensor'u alır.
Uzun
getLastNativeInferenceDurationNanoseconds ()
Yerel çıkarım zamanlamasını döndürür.
int
getOutputIndex ( String opName)
Çıkışın işlem adı verilen bir çıkışın indeksini alır.
Tensör
getOutputTensor (int çıktıIndex)
Sağlanan çıktı dizini ile ilişkili Tensor'u alır.
int
getOutputTensorCount ()
Çıkış Tensörlerinin sayısını alır.
Tensör
getOutputTensorFromSignature ( Dize çıktıAdı, Dize imzaKey)
Belirli imza yönteminde sağlanan çıktı adıyla ilişkili Tensor'u alır.
Sicim[]
getSignatureInputs ( Dize imzaKey)
signatureKey yöntemi için SignatureDefs girişlerinin listesini alır.
Sicim[]
getSignatureKeys ()
Modelde mevcut olan 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[] dims, boolean strict)
Yerel modelin idx-th girişini verilen karartmaya göre yeniden boyutlandırır.
geçersiz
resizeInput (int idx, int[] karartma)
Yerel modelin idx-th girişini verilen karartmaya göre yeniden boyutlandırır.
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.
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.
geçersiz
runSignature ( Harita < Dize , Nesne > girişler, Harita < Dize , Nesne > çıkışlar)
runSignature(Map, Map, String) ile aynıdır ancak modelin bir SignatureDef'e sahip olduğu varsayıldığında, birsignatureKey iletilmesini gerektirmez.
geçersiz
runSignature ( Harita < Dizge , Nesne > girişler, Harita < Dizge , Nesne > çıktılar, Dizgi imzaKey)
signatureKey aracılığıyla sağlanan SignatureDef'e dayalı olarak 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ı kesintiye uğratır.

Kalıtsal Yöntemler

Kamu İnşaatçıları

genel tercüman ( Dosya modeliDosya)

Bir Interpreter başlatır.

Parametreler
modelDosya Önceden eğitilmiş bir TF Lite modelinin dosyası.
Atar
YasadışıTartışmaİstisna modelFile geçerli bir TensorFlow Lite modelini kodlamıyorsa.

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

Bir Interpreter başlatır ve yorumlayıcı davranışını özelleştirmeye yönelik seçenekleri belirtir.

Parametreler
modelDosya önceden eğitilmiş bir TF Lite modelinin dosyası
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.

genel Tercüman ( ByteBuffer byteBuffer)

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

ByteBuffer, bir Interpreter inşası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.

Parametreler
baytBuffer
Atar
YasadışıTartışmaİstisna byteBuffer bir MappedByteBuffer veya nativeOrder'ın doğrudan 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 inşası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.

Parametreler
baytBuffer
seçenekler
Atar
YasadışıTartışmaİstisna byteBuffer bir MappedByteBuffer veya nativeOrder'ın doğrudan ByteBuffer değilse.

Genel Yöntemler

genel geçersiz tahsisTensörler ()

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.

genel boşluk kapat ()

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

public int getInputIndex ( String opName)

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 Tensor'u alır.

Parametreler
girişIndex

public int getInputTensorCount ()

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

public Tensor getInputTensorFromSignature ( String inputName, String imzaKey)

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

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

Parametreler
isim girin İmzaya adı girin.
imzaAnahtar SignatureDef'i tanımlayan imza anahtarı, modelin bir imzası varsa boş olabilir.
Atar
YasadışıTartışmaİstisna inputName veya signatureKey boş veya boşsa ya da geçersiz ad sağlanmışsa.

public Uzun getLastNativeInferenceDurationNanoseconds ()

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

public int getOutputIndex ( String opName)

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

Parametreler
işlemAdı

genel 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

public int getOutputTensorCount ()

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

public Tensor getOutputTensorFromSignature ( String çıktıAdı, String imzaKey)

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

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

Parametreler
çıktıAdı İmzadaki çıktı adı.
imzaAnahtar SignatureDef'i tanımlayan imza anahtarı, modelin bir imzası varsa boş olabilir.
Atar
YasadışıTartışmaİstisna outputName veya signatureKey boş veya boşsa ya da geçersiz ad sağlanmışsa.

public String[] getSignatureInputs ( StringsignatureKey )

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

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

Parametreler
imzaAnahtar

public 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şebilir.

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

Parametreler
imzaAnahtar

genel geçersiz sıfırlamaVariableTensors ()

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

Değişken tensörün ilişkili bir tamponu yoksa sıfıra sıfırlanacaktır.

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

public 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ı

public void resizeInput (int idx, int[] dims)

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

Parametreler
kimlik
kararır

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

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

public void runSignature ( Harita < Dize , Nesne > girişler, Harita < Dize , Nesne > çıkışlar)

runSignature(Map, Map, String) ile aynıdır ancak modelin bir SignatureDef'e sahip olduğu varsayıldığında, birsignatureKey iletilmesini gerektirmez. Modelin birden fazla SignatureDef'i varsa, bir istisna oluşturacaktır.

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

Parametreler
girişler
çıktılar

public void runSignature ( Harita < Dizge , Nesne > girişler, Harita < Dizge , Nesne > çıktılar, Dizgi imzaKey)

signatureKey aracılığıyla sağlanan SignatureDef'e dayalı olarak 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şebilir.

Parametreler
girişler SignatureDef'teki giriş adından bir giriş nesnesine bir harita.
çıktılar SignatureDef'teki çıktı adından çıktı verilerine kadar bir harita. Arayanın çıkarımdan sonra Tensor verilerini doğrudan sorgulamak istemesi durumunda bu alan boş olabilir (örneğin, çıktı şekli dinamikse veya çıktı arabellek tutamaçları kullanılıyorsa).
imzaAnahtar SignatureDef'i tanımlayan imza anahtarı.
Atar
YasadışıTartışmaİstisna inputs boş veya boşsa, outputs veya signatureKey boşsa veya çıkarım çalıştırılırken bir hata meydana gelirse.

genel geçersiz küme İptal edildi (boolean iptal edildi)

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

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

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

Parametreler
iptal edildi true çıkarımı en iyi çabayı göstererek iptal etmek için; Devam etmek için false .
Atar
Yasadışı Durum İstisnası yorumlayıcı, varsayılan olarak kapalı olan iptal edilebilir seçenekle başlatılmamışsa.