Interpreter

herkese açık final dersi Çevirmen

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

Not: "Deneysel" çalışmalardan hiçbirine erişmeniz gerekmiyorsa Aşağıdaki API özelliklerini kullanın; Yorumlayıcı'yı doğrudan kullanmak yerine ConsulterApi ve ConsulterFactory.

Interpreter, önceden eğitilmiş bir TensorFlow Lite modelini içerir. Bu modelde gibi işlemler model çıkarımı için yürütülür.

Örneğin, bir model yalnızca bir giriş alır ve 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ı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 ayrım olduğuna dikkat edin. Skaler dize tensörü için çıktılar:

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

TensorFlow modeli TensorFlowLite'a dönüştürülürken giriş ve çıkış sıraları belirlenir. girişlerin varsayılan şekillerini de içerir.

Girişler (çok boyutlu) diziler olarak sağlandığında karşılık gelen giriş tensörleri dolaylı olarak yeniden boyutlandırabilirsiniz. Girişler Buffer olarak sağlandığında dolaylı yeniden boyutlandırma yapılmaz; arayan, Buffer bayt boyutundan emin olmalıdır. tensörü önce resizeInput(int, int[]) aracılığıyla yeniden boyutlandırırlar. Tensor şekil ve tür bilgileri, getInputTensor(int) ve getOutputTensor(int) aracılığıyla kullanılabilen Tensor sınıfı aracılığıyla elde edilebilir.

UYARI:Interpreter örnekleri iş parçacığı için güvenli değildir. Interpreter close() çağrılmasıyla açık bir şekilde serbest bırakılması gereken kaynaklara sahip

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

İç İçe Yerleştirilmiş Sınıflar

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

Kamu Yüklenicileri

Çevirmen(Dosya modelFile)
Bir Interpreter başlatır.
Yorumlayıcı(Dosya modelFile, Interpreter.Options seçenekleri)
Bir Interpreter başlatır ve çevirmen davranışını özelleştirme seçeneklerini belirtir.
Çevirmen(ByteBuffer byteBuffer)
Interpreter işlemini, bir model dosyasının ByteBuffer değeriyle başlatır.
Çevirmen(ByteBuffer byteBuffer, Interpreter.Options seçenekleri)
Bir model dosyasının ByteBuffer ve bir grupInterpreter özel Interpreter.Options.

Herkese Açık Yöntemler

geçersiz
allocateTensors()
Gerekirse tüm tensörler için ayırmaları açık bir şekilde günceller.
geçersiz
close()
InterpreterApi örneğiyle ilişkili kaynakları serbest bırakın.
int
getInputIndex(Dize opName)
Girişin işlem adı verilen bir girişin dizinini alır.
Tensor
getInputTensor(int inputIndex)
Sağlanan giriş diziniyle ilişkilendirilmiş Tensor'u alır.
int
getInputTensorCount()
Giriş tensörü sayısını alır.
Tensor
getInputTensorFromSignature(Dize girdisiAdı, Dize İleti İmzası)
Sağlanan giriş adı ve imza yöntemi adıyla ilişkilendirilmiş Tensor'u alır.
Uzun
getLastNativeInferenceDurationNanoseconds()
Yerel çıkarım zamanlamasını döndürür.
int
getOutputIndex(Dize opName)
Çıkışın işlem adı olarak belirtilen çıkışın dizinini alır.
Tensor
getOutputTensor(int exitIndex)
Sağlanan çıkış diziniyle ilişkilendirilmiş Tensor'u alır.
int
getOutputTensorCount()
Çıkış Tensör sayısını alır.
Tensor
getOutputTensorFromSignature(Dize çıkışAdı, Dize üstbilgisi)
Belirli bir imza yönteminde, sağlanan çıkış adıyla ilişkilendirilmiş Tensor'u alır.
String[]
getSignatureInputs(String sürümlerinin imzası)
signatureKey yöntemi için SignatureDefs girişlerinin listesini alır.
String[]
getSignatureKeys()
Modelde kullanılabilen SignatureDef dışa aktarılan yöntem adlarının listesini alır.
String[]
getSignatureOutputs(StringSignatureKey)
signatureKey yöntemi için SignatureDefs çıkış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 belirtilen karartma değerlerine yeniden boyutlandırır.
geçersiz
resizeInput(int idx, int[] loş)
Yerel modelin idx-th girişini belirtilen karartma değerlerine yeniden boyutlandırır.
geçersiz
run(Nesne girişi, Nesne çıkışı)
Model yalnızca bir giriş alıp yalnızca bir çıkış sağlıyorsa model çıkarımı çalıştırır.
geçersiz
runForMultipleInputsOutputs(Nesne[] girişleri, Harita <TamsayıNesne> çıkışlar)
Model birden fazla giriş alıyorsa veya birden fazla çıkış döndürürse model çıkarımını çalıştırır.
geçersiz
runSignature(Harita<DizeNesne> girişleri, Harita<DizeNesne> çıkışları)
runSignature(Map, Map, String) ile aynıdır ancak kaydolma anahtarı iletmeyi gerektirmez. varsayabilirsiniz.
geçersiz
runSignature(Harita<DizeNesne> girişleri, Harita<DizeNesne> çıkışları, StringSignatureKey)
signatureKey aracılığıyla sağlanan SignatureDef'e göre model çıkarımı çalıştırır.
geçersiz
setCancelled(boole iptal edildi)
Gelişmiş: run(Object, Object) için yapılan bir çağrının ortasında çıkarımı kesintiye uğratır.

Devralınan Yöntemler

Kamu Yüklenicileri

herkese açık 'nı inceleyin. Çevirmen (Dosya modelFile)

Bir Interpreter başlatır.

Parametreler
modelFile Önceden eğitilmiş TF Lite modelinin dosyası.
Fırlatma
IllegalArgumentException modelFile geçerli bir TensorFlow Lite kodlamazsa modeli.

herkese açık 'nı inceleyin. Çevirmen (Dosya modelFile, Interpreter.Options seçenekleri)

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

Parametreler
modelFile önceden eğitilmiş TF Lite modelinin dosyası
seçenekler çevirmen davranışını özelleştirmek için bir dizi seçenek
Fırlatma
IllegalArgumentException modelFile geçerli bir TensorFlow Lite kodlamazsa modeli.

herkese açık 'nı inceleyin. Çevirmen (ByteBuffer byteBuffer)

Interpreter işlemini, bir model dosyasının ByteBuffer değeriyle başlatır.

ByteBuffer, Interpreter oluşturulduktan sonra değiştirilmemelidir. İlgili içeriği oluşturmak için kullanılan ByteBuffer, bir model dosyasıyla bellek eşleyen bir MappedByteBuffer veya bir modelin bayt içeriğini içeren yerel Order() doğrudan ByteBuffer.

Parametreler
byteBuffer
Fırlatma
IllegalArgumentException byteBuffer bir MappedByteBuffer veya bir değilse yerelSiparişin doğrudan ByteBuffer.

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

Bir model dosyasının ByteBuffer ve bir grupInterpreter özel Interpreter.Options.

ByteBuffer, Interpreter oluşturulduktan sonra değiştirilmemelidir. ByteBuffer, bellek eşlenen bir MappedByteBuffer olabilir bir model dosyası veya bayt içeriğini içeren yerelSipariş() çağrısının doğrudan ByteBuffer öğesi olabilir.

Parametreler
byteBuffer
seçenekler
Fırlatma
IllegalArgumentException byteBuffer bir MappedByteBuffer veya bir değilse yerelSiparişin doğrudan ByteBuffer.

Herkese Açık Yöntemler

herkese açık geçersiz 'nı inceleyin. allocateTensors ()

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

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

Not: Bu arama *tamamen isteğe bağlıdır*. Tensor tahsisi, şu süre boyunca otomatik olarak gerçekleşir: herhangi bir giriş tensörü yeniden boyutlandırıldığında yürütülür. Bu çağrı, projenizin en önemli herhangi bir çıkış tensörü için farklı şekiller (ö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 şekillendirilmiştir. Bu durumda, çıkış şekli çıkarım yürütülene kadar tam olarak yayılır.

herkese açık geçersiz 'nı inceleyin. kapat ()

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

herkese açık tamsayı 'nı inceleyin. getInputIndex (Dize opName)

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

Parametreler
opName

herkese açık Tensor getInputTensor (int inputIndex)

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

Parametreler
inputIndex

herkese açık tamsayı 'nı inceleyin. getInputTensorCount ()

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

herkese açık Tensor getInputTensorFromSignature (DizeinputName, StringSignatureKey)

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

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

Parametreler
inputName İmzadaki adı girin.
signatureKey SignatureDef'i tanımlayan imza anahtarı, modelde olduğunu unutmayın.
Fırlatma
IllegalArgumentException inputName veya signatureKey null ya da boşsa veya verilen ad geçersiz.

herkese açık Uzun getLastNativeInferenceDurationNanoseconds ()

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

herkese açık tamsayı 'nı inceleyin. getOutputIndex (Dize opName)

Çıkışın işlem adı olarak belirtilen çıkışın dizinini alır.

Parametreler
opName

herkese açık Tensor getOutputTensor (int exitIndex)

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

Not: Çıkış tensörü ayrıntıları (ör. şekil), çıkarım sonrasına kadar tam olarak doldurulamaz yürütüldüğünden emin olun. Çıkarım yapmadan *önce* güncellenmiş ayrıntılara ihtiyacınız varsa (ör. çıkış tensörü şekillerini geçersiz kılacak olan giriş tensörü için allocateTensors() kullanın ayırma ve şekil yayılımını açıkça tetiklemesi. Çıktı şekillerine sahip grafiklerde, *değerlerine* bağlı olan satır öğeleri için, çıktının şekli çıkarım yapabilirsiniz.

Parametreler
outputIndex

herkese açık tamsayı 'nı inceleyin. getOutputTensorCount ()

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

herkese açık Tensor getOutputTensorFromSignature (Dize exitName, StringSignatureKey)

Belirli bir imza yönteminde, sağlanan çıkış adıyla ilişkilendirilmiş Tensor'u alır.

Not: Çıkış tensörü ayrıntıları (ör. şekil), çıkarım sonrasına kadar tam olarak doldurulamaz yürütüldüğünden emin olun. Çıkarım yapmadan *önce* güncellenmiş ayrıntılara ihtiyacınız varsa (ör. çıkış tensörü şekillerini geçersiz kılacak olan giriş tensörü için allocateTensors() kullanın ayırma ve şekil yayılımını açıkça tetiklemesi. Çıktı şekillerine sahip grafiklerde, *değerlerine* bağlı olan satır öğeleri için, çıktının şekli çıkarım yapabilirsiniz.

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

Parametreler
outputName İmzadaki çıkış adı.
signatureKey SignatureDef'i tanımlayan imza anahtarı, modelde olduğunu unutmayın.
Fırlatma
IllegalArgumentException outputName veya signatureKey null ya da veya verilen ad geçersiz.

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

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

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

Parametreler
signatureKey

herkese açık String[] getSignatureKeys ()

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

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

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

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

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

Parametreler
signatureKey

herkese açık geçersiz 'nı inceleyin. resetVariableTensors ()

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

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

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

herkese açık geçersiz 'nı inceleyin. resizeInput (int idx, int[] dims, boole katı)

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

"strict" (doğru) değerine ayarlandığında yalnızca bilinmeyen boyutlar yeniden boyutlandırılabilir. Bilinmeyen boyutlar "Tensor.shapeSignature()" tarafından döndürülen dizide "-1" olarak belirtilir.

Parametreler
idx
kararır
yüksek düzey

herkese açık geçersiz 'nı inceleyin. resizeInput (int idx, int[] soluk)

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

Parametreler
idx
kararır

herkese açık geçersiz 'nı inceleyin. koş (Nesne girişi, Nesne çıkışı)

Model yalnızca bir giriş alıp yalnızca bir çıkış sağlıyorsa model çıkarımı çalıştırır.

Uyarı: API, Buffer (tercihen doğrudan ancak zorunlu değil) ise daha verimlidir giriş/çıkış veri türü olarak kullanılır. Feed'i alıp getirmek için Buffer kullanmayı düşünün temel verilere sahip olacaktır. Aşağıdaki somut Buffer türleri şunlardır: desteklenir:

  • ByteBuffer: Temel Tensor türleriyle uyumludur.
  • FloatBuffer - kayan Tensörler ile uyumludur.
  • IntBuffer - int32 Tensor ile uyumlu.
  • LongBuffer - int64 Tensor ile uyumlu.
ziyaret edin. Boole türlerinin yalnızca dizi olarak desteklendiğini, Buffer veya skaler giriş olarak desteklendiğini unutmayın.

Parametreler
giriş bir dizi veya çok boyutlu dizi ya da temel türlerin Buffer kadarı (int, float, long ve byte gibi). Buffer, büyük boyutlu öğeleri aktarmak için tercih edilen yoldur ilkel türler için giriş verileri, dize türlerinde ise (çok boyutlu) dizi giriş yolunu izleyin. Bir Buffer kullanıldığında, içeriği şu tarihe kadar değişmeden kalmalıdır: model çıkarımı yapılır ve çağrıyı yapan, Buffer öğesinin uygun okuma konumuna getirin. null değerine yalnızca çağrıyı yapan bir arabellek işleyici birlikte çalışabilirliğine izin veren Delegate ve böyle bir arabellek, Tensor girişi.
çıkış çıkış verilerinin çok boyutlu bir dizisi veya temel türlerin Buffer kadarı (int, float, long ve byte gibi). Buffer kullanıldığında, arayan kullanıcı şunlardan emin olmalıdır: olarak ayarlandığından emin olun. Null değere izin verilir ve bu değer, belirli durumlarda (ör. arayan, arabellek tutma yerine izin veren bir Delegate kullanıyorsa) birlikte çalışabilirlik ve böyle bir arabellek, Tensor çıktısına bağlanmıştır (ayrıca bkz. Interpreter.Options#setAllowBufferHandleOutput(boolean)), veya grafik dinamik olarak şekillendirilmiş çıkışlara sahipse ve çıkarım çağrıldıktan sonra çağrıyı yapan kişinin çıktıyı Tensor şeklini sorgulaması, verileri doğrudan çıkıştan getirmesi gerekir tensor (Tensor.asReadOnlyBuffer() üzerinden).

herkese açık geçersiz 'nı inceleyin. runForMultipleInputsOutputs (Nesne[] girişleri, Harita <TamsayıNesne> çıkışlar)

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

Uyarı: API, Buffer öğeleri (tercihen doğrudan ancak zorunlu değil) ise daha verimlidir giriş/çıkış veri türü olarak kullanılır. Feed'i alıp getirmek için Buffer kullanmayı düşünün temel verilere sahip olacaktır. Aşağıdaki somut Buffer türleri şunlardır: desteklenir:

  • ByteBuffer: Temel Tensor türleriyle uyumludur.
  • FloatBuffer - kayan Tensörler ile uyumludur.
  • IntBuffer - int32 Tensor ile uyumlu.
  • LongBuffer - int64 Tensor ile uyumlu.
ziyaret edin. Boole türlerinin yalnızca dizi olarak desteklendiğini, Buffer veya skaler giriş olarak desteklendiğini unutmayın.

Not: inputs ve outputs öğelerinin ayrı öğeleri için null değerleri yalnızca çağrıyı yapan, arabellek tutma yeri birlikte çalışabilirlik özelliğine izin veren bir Delegate kullanıyorsa ve bu tür bir tampon, karşılık gelen giriş veya çıkışa Tensor bağlanmıştır.

Parametreler
girişler giriş verileri dizisidir. Girişler, modeli. Her giriş bir dizi veya çok boyutlu dizi ya da Buffer int, float, long ve byte gibi temel türler. Tercih edilen yöntem Buffer dize türünde (çok boyutlu) diziyi kullanmayı gerektirirken, dize türünde giriş yolunu izleyin. Buffer kullanıldığında, içeriği modele kadar değişmeden kalmalıdır. Çıkarım yapılır ve arayan, Buffer öğesinin uygun durumda olduğundan emin olmalıdır. okuma konumu.
çıkışlar çok boyutlu çıkış verileri dizilerine veya int, float, long ve byte gibi temel türlere ait Buffer'ler ile harita çıktı dizinlerini eşleyen bir harita. Sadece girişlerden oluşmalıdır. Buffer kullanıldığında, arayan kullanıcı şunlardan emin olmalıdır: olarak ayarlandığından emin olun. Harita, arabellek tutma yerleri çıkış tensörü verileri veya çıkışların dinamik olarak şekilli olmalı ve çağrı yapanın, çıkarım yapıldıktan sonra Tensor çıktısı şeklini sorgulaması gerekir. çağrılır ve veriler doğrudan çıkış tensöründen (Tensor.asReadOnlyBuffer() aracılığıyla) getirilir.

herkese açık geçersiz 'nı inceleyin. runSignature (Harita<DizeNesne> girişler, Harita<DizeNesne> çıkışları)

runSignature(Map, Map, String) ile aynıdır ancak kaydolma anahtarı iletmeyi gerektirmez. varsayabilirsiniz. Modelde birden fazla SignatureDef varsa istisna olabilir.

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

Parametreler
girişler
çıkışlar

herkese açık geçersiz 'nı inceleyin. runSignature (Harita<DizeNesne> girişler, Harita<DizeNesne> çıkışları, StringSignatureKey)

signatureKey aracılığıyla sağlanan SignatureDef'e göre model çıkarımı çalıştırır.

İzin verilen giriş ve çıkışla ilgili daha fazla bilgi için run(Object, Object) sayfasına bakın veri türlerini analiz edeceksiniz.

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

Parametreler
girişler SignatureDef'teki giriş adından bir giriş nesnesine harita.
çıkışlar SignatureDef'teki çıkış adından çıkış verilerine yönlendiren bir harita. Bu, arayan, çıkarımdan hemen sonra Tensor verilerini sorgulamak istiyor (ör. çıkış şekli dinamik veya çıkış arabellek tutma yerleri kullanılıyor).
signatureKey SignatureDef'i tanımlayan imza anahtarı.
Fırlatma
IllegalArgumentException inputs null veya boşsa, outputs veya signatureKey null bir değer veya çıkarım çalıştırılırken bir hata oluşursa.

herkese açık geçersiz 'nı inceleyin. setCancelled (boole iptal edildi)

Gelişmiş: run(Object, Object) için yapılan bir çağrının ortasında çıkarımı kesintiye uğratır.

Bu işlev çağrıldığında, bir iptal işareti doğru değerine ayarlanır. Çevirmen, Serbest çağrılar arasındaki işareti kontrol edin. true ise çevirmen durur. birkaç adım var. Çevirmen, açıkça "iptali iptal edilene" kadar iptal edilmiş durumda kalır - setCancelled(false)

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

Parametreler
iptal edildi Çıkarımı en iyi şekilde iptal etmek için true; false - devam eder.
Fırlatma
IllegalStateException Çevirmen iptal edilebilir Bu ayar varsayılan olarak devre dışıdır.