Bilinen Dolaylı Alt Sınıflar |
Deneysel yöntemler hariç, TensorFlow Lite model yorumlayıcı arayüzü.
Bir InterpreterApi
örneği, 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 (InterpreterApi interpreter =
new InterpreterApi.create(file_of_a_tensorflowlite_model)) {
interpreter.run(input, output);
}
Bir model birden fazla girdi veya çıktı 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 (InterpreterApi interpreter =
new InterpreterApi.create(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 (InterpreterApi interpreter =
new InterpreterApi.create(file_of_a_tensorflowlite_model)) {
interpreter.runForMultipleInputsOutputs(input, output);
}
Girişlerin varsayılan şekilleri gibi, TensorFlow modeli Toco ile TensorFlowLite modeline dönüştürülürken giriş ve çıkış sıraları belirlenir.
Girdiler (çok boyutlu) diziler olarak sağlandığında, karşılık gelen girdi tensör(ler)i bu dizinin şekline göre örtük olarak yeniden boyutlandırılacaktır. Girişler Buffer
türleri olarak sağlandığında, örtük olarak yeniden boyutlandırma yapılmaz; arayan, Buffer
bayt boyutunun ya karşılık gelen tensörünkiyle eşleşmesini veya ilk önce tensörü resizeInput(int, int[])
aracılığıyla yeniden boyutlandırmasını sağlamalıdır. Tensör şekli ve türü bilgileri, getInputTensor(int)
ve getOutputTensor(int)
aracılığıyla sağlanan Tensor
sınıfı aracılığıyla elde edilebilir.
UYARI: InterpreterApi
örnekleri iş parçacığı için güvenli değildir .
UYARI: Bir InterpreterApi
örneği, close()
işlevi ç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 seviyeleri için çalışabilir, ancak garanti edilmez.
İç İçe Sınıflar
sınıf | InterpreterApi.Options | Çalışma zamanı yorumlayıcı davranışını denetlemek için bir seçenekler sınıfı. |
Genel Yöntemler
soyut boşluk | allocateTensors () Gerekirse, tüm tensörler için tahsisleri açıkça günceller. |
soyut boşluk | kapat () InterpreterApi örneğiyle ilişkili kaynakları serbest bırakın. |
statik YorumlayıcıApi | oluştur ( Dosya modelFile, InterpreterApi.Options seçenekleri) Belirtilen modeli ve seçenekleri kullanarak bir InterpreterApi örneği oluşturur. |
statik YorumlayıcıApi | oluştur ( ByteBuffer byteBuffer, InterpreterApi.Options seçenekleri) Belirtilen modeli ve seçenekleri kullanarak bir InterpreterApi örneği oluşturur. |
soyut int | |
soyut tensör | getInputTensor (int inputIndex) Sağlanan giriş dizini ile ilişkili Tensörü alır. |
soyut int | getInputTensorCount () Giriş tensörlerinin sayısını alır. |
soyut Uzun | getLastNativeInferenceSüresiNanosaniye () Yerel çıkarım zamanlamasını döndürür. |
soyut int | |
soyut tensör | getOutputTensor (int outputIndex) Sağlanan çıktı dizini ile ilişkili Tensörü alır. |
soyut int | getOutputTensorCount () Çıkış Tensörlerinin sayısını alır. |
soyut boşluk | resizeInput (int idx, int[] karartır, boolean katı) Yerel modelin idx-th girişini verilen karartmalara yeniden boyutlandırır. |
soyut boşluk | resizeInput (int idx, int[] karartır) Yerel modelin idx-th girişini verilen karartmalara yeniden boyutlandırır. |
soyut boşluk | |
soyut boşluk | runForMultipleInputsOutputs ( Object[] girişleri, Map < Integer , 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. |
Kalıtsal Yöntemler
Genel Yöntemler
public abstract void allocateTensors ()
Gerekirse, tüm tensörler için tahsisleri açıkça günceller.
Bu, verilen giriş tensör ş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ılmışsa, 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ünün şekillerini belirlemede 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ı grafikler dinamik olarak şekillendirilmiş çıktılara sahiptir, bu durumda çıktı şekli çıkarım yürütülene kadar tam olarak yayılmayabilir.
atar
IllegalStateException | grafiğin tensörleri başarıyla tahsis edilemediyse. |
---|
genel soyut boşluk kapat ()
InterpreterApi
örneğiyle ilişkili kaynakları serbest bırakın.
genel statik InterpreterApi oluşturma ( File modelFile, InterpreterApi.Options seçenekleri)
Belirtilen modeli ve seçenekleri kullanarak bir InterpreterApi
örneği oluşturur. Model bir dosyadan yüklenecektir.
parametreler
modelDosya | Önceden eğitilmiş bir TF Lite modeli içeren bir dosya. |
---|---|
seçenekler | Yorumlayıcı davranışını özelleştirmek için bir dizi seçenek. |
atar
IllegalArgumentException | modelFile geçerli bir TensorFlow Lite modelini kodlamazsa. |
---|
genel statik InterpreterApi oluşturma ( ByteBuffer byteBuffer, InterpreterApi.Options seçenekleri)
Belirtilen modeli ve seçenekleri kullanarak bir InterpreterApi
örneği oluşturur. Model bir ByteBuffer
okunacaktır.
parametreler
byteBuffer | İkili serileştirilmiş biçimde önceden eğitilmiş bir TF Lite modeli. ByteBuffer, InterpreterApi örneğinin oluşturulmasından sonra değiştirilmemelidir. ByteBuffer , bir model dosyasını bellekle eşleyen bir MappedByteBuffer veya bir modelin bayt içeriğini içeren nativeOrder() doğrudan bir ByteBuffer olabilir. |
---|---|
seçenekler | Yorumlayıcı davranışını özelleştirmek için bir dizi seçenek. |
atar
IllegalArgumentException | byteBuffer bir MappedByteBuffer veya nativeOrder'ın doğrudan ByteBuffer değilse. |
---|
public abstract int getInputIndex ( String opName)
Girdinin op adı verilen bir girdinin dizinini alır.
parametreler
opName |
---|
atar
IllegalArgumentException | opName , yorumlayıcıyı başlatmak için kullanılan modeldeki herhangi bir girdiyle eşleşmiyorsa. |
---|
genel soyut Tensör getInputTensor (int inputIndex)
Sağlanan giriş dizini ile ilişkili Tensörü alır.
parametreler
girdiIndex |
---|
atar
IllegalArgumentException | inputIndex negatifse veya model girişlerinin sayısından küçük değilse. |
---|
genel soyut int getInputTensorCount ()
Giriş tensörlerinin sayısını alır.
public abstract Uzun getLastNativeInferenceDurationNanosaniye ()
Yerel çıkarım zamanlamasını döndürür.
atar
IllegalArgumentException | model yorumlayıcı tarafından başlatılmazsa. |
---|
public abstract int getOutputIndex ( String opName)
Çıktının op adı verilen bir çıktının dizinini alır.
parametreler
opName |
---|
atar
IllegalArgumentException | opName, yorumlayıcıyı başlatmak için kullanılan modeldeki herhangi bir opName eşleşmiyorsa. |
---|
genel soyut Tensör getOutputTensor (int outputIndex)
Sağlanan çıktı dizini ile ilişkili Tensörü alır.
Not: Çıktı tensörü ayrıntıları (örn. şekil), çıkarım yürütülene kadar tam olarak doldurulmayabilir. Çıkarımı çalıştırmadan *önce* güncel 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), ayırmayı ve şekil yayılımını açıkça tetiklemek için allocateTensors()
öğesini kullanın. Girdi *değerlerine* bağlı çıktı şekillerine sahip grafikler için çıktı şeklinin, çıkarım yapılıncaya kadar tam olarak belirlenemeyebileceğini unutmayın.
parametreler
çıktıIndex |
---|
atar
IllegalArgumentException | outputIndex negatifse veya model çıktılarının sayısından küçük değilse. |
---|
genel soyut int getOutputTensorCount ()
Çıkış Tensörlerinin sayısını alır.
public abstract void resizeInput (int idx, int[] karartır, boolean katı)
Yerel modelin idx-th girişini verilen karartmalara 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
idx | |
---|---|
kararır | |
sıkı |
atar
IllegalArgumentException | idx negatifse veya model girdilerinin sayısından küçük değilse; veya idx-th girişi yeniden boyutlandırılırken hata oluşursa. Ek olarak, "katı" Doğru olduğunda, sabit boyutlara sahip bir tensörü yeniden boyutlandırmaya çalışırken hata oluşur. |
---|
public abstract void resizeInput (int idx, int[] karartır)
Yerel modelin idx-th girişini verilen karartmalara yeniden boyutlandırır.
parametreler
idx | |
---|---|
kararır |
atar
IllegalArgumentException | idx negatifse veya model girdilerinin sayısından küçük değilse; veya idx-th girişi yeniden boyutlandırılırken hata oluşursa. |
---|
genel soyut 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 verimlidir. Lütfen daha iyi performans için 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örleri ile uyumludur. -
IntBuffer
- int32 Tensörleri ile uyumludur. -
LongBuffer
- int64 Tensörleri ile uyumludur.
Buffer
s olarak desteklenmediğini veya skaler girişler 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 girdi verilerini geçirmenin 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ılıncaya kadar içeriği değişmeden kalmalı ve arayan, Buffer uygun okuma konumunda olduğundan emin olmalıdır. null bir değere yalnızca, arayan 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ğlıysa izin verilir. |
---|---|
çıktı | çok boyutlu bir çıktı verisi 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 yararlıdır, örneğin, 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 çıktı Tensor bağlıysa (ayrıca bkz. Interpreter.Options#setAllowBufferHandleOutput(boolean) ) veya grafiğin dinamik olarak şekillendirilmiş çıktıları varsa ve arayan kişinin çıkarım başlatıldıktan sonra çıktı Tensor şeklini sorgulaması gerekiyorsa, verileri doğrudan çıkış tensöründen alır ( Tensor.asReadOnlyBuffer() aracılığıyla). |
atar
IllegalArgumentException | input boşsa veya boşsa veya çıkarım çalıştırılırken bir hata oluşursa. |
---|---|
IllegalArgumentException | (DENEYSEL, değişebilir) çıkarım setCancelled(true) tarafından kesilirse. |
public abstract void runForMultipleInputsOutputs ( Object[] girişleri, Map < Integer , 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
s (tercihen doğrudan, ancak gerekli değil) kullanılırsa API daha verimlidir. Lütfen daha iyi performans için 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örleri ile uyumludur. -
IntBuffer
- int32 Tensörleri ile uyumludur. -
LongBuffer
- int64 Tensörleri ile uyumludur.
Buffer
s olarak desteklenmediğini veya skaler girişler olarak desteklendiğini unutmayın. Not: inputs
ve outputs
tek tek öğeleri için null
değerlere yalnızca, arayan kişi arabellek tutamacı birlikte çalışmasına izin veren bir Delegate
kullanıyorsa ve böyle bir arabellek karşılık gelen giriş veya çıkış Tensörlerine ( Tensor
) bağlıysa izin verilir.
parametreler
girdiler | bir dizi girdi verisi. Girdiler, modelin girdileriyle aynı sırada olmalıdır. Her girdi, bir dizi veya çok boyutlu dizi veya int, float, long ve byte dahil olmak üzere ilkel türlerden oluşan bir Buffer olabilir. Buffer , büyük girdi verilerini geçirmenin tercih edilen yoludur, oysa dize türleri (çok boyutlu) dizi giriş yolunun kullanılmasını gerektirir. Buffer kullanıldığında, model çıkarımı yapılıncaya kadar içeriği değişmeden kalmalı ve arayan, Buffer uygun okuma konumunda olduğundan emin olmalıdır. |
---|---|
çıktılar | çıktı indekslerinin çok boyutlu çıktı verisi dizilerine eşlenmesi veya int, float, long ve byte dahil olmak üzere ilkel türlerin Buffer s'si. 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. Çıkış tensörü verileri için arabellek tutamaçlarının kullanıldığı veya çıkışların dinamik olarak şekillendirildiği ve arayan kişinin çıkarım çağrıldıktan sonra çıkış Tensor şeklini sorgulaması ve verileri doğrudan çıkış tensöründen getirmesi gereken durumlar için harita boş olabilir ( Tensor.asReadOnlyBuffer() aracılığıyla). |
atar
IllegalArgumentException | inputs boş veya boşsa, outputs boşsa veya çıkarım çalıştırılırken bir hata oluşursa. |
---|