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