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, Tercüman.Seçenekler seçenekleri) Bir Interpreter başlatır ve yorumlayıcı davranışını özelleştirmek için seçenekleri belirtir. | |
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 | |
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 | |
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 | |
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 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.
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.
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. |
---|