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 modelDosyası, Interpreter.Options seçenekleri)
Bir
Interpreter başlatır ve çevirmen davranışını özelleştirme seçeneklerini belirtir. |
|
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 | |
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 | |
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 | |
void |
runForMultipleInputsOutputs(Object[] girişleri, Map<Integer, Object> çıkışları)
Model birden fazla giriş alırsa veya birden fazla çıkış döndürürse model çıkarımı yapar.
|
void |
runSignature(Map<String, Object> girişleri, Map<String, Object> çı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 | |
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.
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)).Tensor Tensor.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.
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<Dize, Nesne> girişleri, Harita<Dize, Nesne> çı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<Dize, Nesne> girişleri, Harita<Dize, Nesne> çı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. |
---|