TF Lite Interpreter, mobil ve gömülü cihazlarda .tflite modellerini çalıştırmaktan sorumlu TensorFlow Lite'ın önemli bir bileşenidir. Yorumlayıcı, modelin FlatBuffers temsilini yükler, giriş ve çıkış verileri için tensörleri tahsis eder, hesaplama grafiğini yürütür ve sonucu döndürür. TensorFlow Lite API Referansı, 2025'e göre, Yorumlayıcı Android için Java ve C++, iOS için Swift ve Objective-C ve test için Python bağlamaları aracılığıyla kullanılabilir. TF Lite Interpreter, GPU, NNAPI ve Core ML aracılığıyla donanım hızlandırma için temsilcileri destekler.
Önemli Noktalar
TF Lite Interpreter, sunucu altyapısı olmadan cihaz üzerinde makine öğrenimi modelini çalıştıran minimalist bir çalışma zamanıdır. Yorumlayıcı eğitimi desteklemez — yalnızca çıkarım yapar. Bu onu hafif yapar: Android'de temel yorumlayıcının ikili boyutu yaklaşık 300 KB'dir.
Yorumlayıcı, FlatBuffers tabanlı .tflite biçimindeki modellerle çalışır. Oluşturulduğunda, yorumlayıcı modeli mmap aracılığıyla belleğe yükler ve kopyalama olmadan verilere doğrudan erişim sağlar. Ardından yorumlayıcı, model açıklamasına göre tensörleri tahsis eder ve yürütmeye hazır hale gelir.
Her yorumlayıcı örneği iş parçacığı güvenli değildir. Aynı modeli birden çok iş parçacığında paralel olarak yürütmek için, modelin ayrı kopyalarıyla ayrı yorumlayıcı örnekleri oluşturun. Tek bir iş parçacığında sıralı çağrılar için bir yorumlayıcı örneği yeniden kullanılabilir.
Android'de yorumlayıcı, org.tensorflow.lite.Interpreter paketindeki Java API'si aracılığıyla kullanılabilir. Ana yöntem, çok boyutlu dizileri veya ByteBuffer'ı kabul eden run(Object input, Object output) yöntemidir. Daha ince kontrol için runForMultipleInputsOutputs() ve resizeInput() yöntemlerini kullanın.
iOS'ta yorumlayıcı, TensorFlowLite modülündeki Swift API'si aracılığıyla kullanılabilir. Temel arayüz Android'e benzer: Interpreter.init(modelPath:) ile başlatma, allocateTensors() ile tensör tahsisi, invoke() ile yürütme. Swift API, giriş veri türleri olarak Data ve MLMultiTensor'ı destekler.
| Platform | Dil | Sınıf | Çıkarım Yöntemi |
|---|---|---|---|
| Android | Java / Kotlin | Interpreter | run(), runForMultipleInputsOutputs() |
| Android (yerel) | C++ | Interpreter | Invoke() |
| iOS | Swift / Obj-C | Interpreter | invoke() |
| Linux / Python | Python | Interpreter | get_tensor(), invoke() |
Temsilciler, işlem yürütmeyi özel donanıma aktaran bileşenlerdir. GPU Temsilcisi, grafik işlemlerini hızlandırmak için OpenGL ES (Android) ve Metal (iOS) kullanır. NNAPI Temsilcisi, Android Neural Networks API aracılığıyla yürütmeyi NPU, DSP veya GPU'ya aktarır.
Core ML Temsilcisi iOS'ta kullanılabilir ve TFLite işlemlerini Core ML biçimine dönüştürür. Apple ML Benchmarking'e göre, iPhone 15 Pro'da Core ML Temsilcisi kullanmak, CPU'ya kıyasla çıkarımı 4 kata kadar hızlandırır. Temsilci, FP32 ve FP16 işlemlerini destekler.
XNNPACK Temsilcisi, ARM CPU için mobil işlemcilere optimize edilmiş evrensel bir çözümdür. Özel donanım gerektirmez ve INT8, FP16 ve FP32'yi destekler. Tüm cihazlarda etkinleşen temel temsilci olarak önerilir.
Yorumlayıcı, allocateTensors() çağrıldığında tahsis edilen bir bellek havuzu aracılığıyla tensörleri yönetir. Havuz boyutu, .tflite dosyasındaki model açıklamasına göre belirlenir. Tahsis sonrasında yorumlayıcı, çıkarım sırasında ek bellek tahsis etmez.
Dinamik giriş boyutlarına sahip modeller için resizeInput() kullanın. Bu yöntem, giriş tensörleri için belleği yeni boyuta göre yeniden tahsis eder. Bir giriş tensörünün boyutunu değiştirdikten sonra allocateTensors() aracılığıyla yeniden tahsis gerekebilir.
Birden çok modellerle çalışırken close() aracılığıyla kaynakları serbest bırakmak önemlidir. Serbest bırakılmayan yorumlayıcılar, özellikle sınırlı RAM'e sahip cihazlarda bellek sızıntılarına neden olabilir. iOS için otomatik referans sayımı ARC'yi, Android için try-with-resources veya açık close() çağrısını kullanın.
Yorumlayıcı ile çalışırken en yaygın hatalar tensör boyut uyuşmazlıklarıdır. Giriş verileri beklenen şekille eşleşmezse, yorumlayıcı Android'de IllegalArgumentException veya iOS'ta çalışma zamanı hatası fırlatır. inputTensorAt() ve outputTensorAt() aracılığıyla boyutları kontrol edin.
İkinci yaygın sorun, bir temsilci kullanırken desteklenmeyen operatörlerdir. Bir temsilci bir operatörü desteklemiyorsa, yorumlayıcı bu operatör için otomatik olarak CPU'ya geri döner. Bu tür durumları belirlemek için setCancelled() aracılığıyla günlüğü etkinleştirin veya TFLite günlüklerini kontrol edin.
TFLite, profil oluşturma için bir Benchmark Aracı sağlar: her operatörün yürütme süresini, bellek tüketimini, temsilci karşılaştırmasını ölçer. Benchmark Aracı, TFLite Destek Kütüphanesi'nin bir parçası olarak kullanılabilir ve doğrudan cihazda çalıştırılabilir.
GPU Temsilcisi kullanarak Android'de Java API'si ile bir model çalıştırma örneği. Yorumlayıcı, GPU temsilcisini içeren seçeneklerle oluşturulur. Çıkarımdan sonra sonuç, çıkış tensöründen okunur:
import org.tensorflow.lite.Interpreter;
import org.tensorflow.lite.gpu.GpuDelegate;
import java.nio.MappedByteBuffer;
MappedByteBuffer model = loadModelFile(context);
GpuDelegate gpu = new GpuDelegate();
Interpreter.Options opts = new Interpreter.Options().addDelegate(gpu);
Interpreter interpreter = new Interpreter.create(model, opts);
float[][] input = preprocessImage(bitmap);
float[][] output = new float[1][1000];
interpreter.run(input, output);
int bestClass = argmax(output[0]);
Log.d("TFLite", "En üst sınıf: " + bestClass);
gpu.close();
interpreter.close();
Dağıtımdan önce test için Python'da çalıştırma örneği. TFLite Python API'si, .tflite yüklemeye, çıkarım yapmaya ve sonucu çıkarmaya olanak tanır. Hata ayıklama ve model doğruluğunu doğrulama için kullanılır:
import tensorflow as tf
import numpy as np
# TFLite modelini dosyadan yükle
interpreter = tf.lite.Interpreter(model_path="model.tflite")
interpreter.allocate_tensors()
# Giriş ve çıkış tensör ayrıntılarını al
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()
# Test için rastgele giriş verileri hazırla
input_data = np.random.randn(
*input_details[0]["shape"]
).astype(np.float32)
interpreter.set_tensor(input_details[0]["index"], input_data)
interpreter.invoke()
output_data = interpreter.get_tensor(output_details[0]["index"])
print("Çıkış şekli:", output_data.shape)
Sıkça Sorulan Sorular
Android için temel yorumlayıcı yaklaşık 300 KB yer kaplar. Ek bellek, model tensörleri için tahsis edilir ve giriş verisi boyutuna, operatör sayısına ve niceleme moduna bağlıdır.
Tek bir yorumlayıcı örneği iş parçacığı güvenli değildir. Paralel yürütme için, modelin ayrı kopyalarıyla birden çok örnek oluşturun. Her örnek, tensörler için kendi belleğini kullanır.
TFLite Destek Kütüphanesi'ni — DelegatesApi sınıfını kullanın. Belirli bir cihazda mevcut temsilcilerin listesini almak için DelegatesApi.getAvailableDelegates()'i çağırın.
tf.lite.experimental.Analyzer aracılığıyla .tflite dosya bütünlüğünü kontrol edin. Modelin doğru TFLite sürümü için dönüştürüldüğünden ve hedef cihazda mevcut işlemleri desteklediğinden emin olun.
Java API'sinde resizeInput(int idx, int[] dims) yöntemini veya Swift'te resizeInput(at:to:) yöntemini kullanın. Boyutu değiştirdikten sonra, belleği yeniden tahsis etmek için allocateTensors()'ı çağırın.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun