TF Lite Interpreter — temel kavramlar, arayüz ve model çıkarımı

Yazar: IT Sectr Yayınlanma: 2026-07-18 Okuma süresi: 6 dk

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 — mobil ve gömülü cihazlarda .tflite modellerini çalıştırmak için bir çalışma zamanı.
  • Yorumlayıcı modeli yükler, tensörleri tahsis eder ve hesaplama grafiğini operatör operatör yürütür.
  • API farklı platformlar için Java, C++, Swift, Objective-C ve Python dillerinde kullanılabilir.
  • GPU, NNAPI ve Core ML temsilcileri, CPU'ya kıyasla çıkarımı 5 kata kadar hızlandırır.
  • Birden çok yorumlayıcı, tek bir uygulamada birden çok modelin paralel olarak çalıştırılmasına olanak tanır.

TF Lite Interpreter'ın Temel Kavramları

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 ve iOS'ta Yorumlayıcı API'si

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.

Platforma Göre API Karşılaştırması

PlatformDilSınıfÇıkarım Yöntemi
AndroidJava / KotlinInterpreterrun(), runForMultipleInputsOutputs()
Android (yerel)C++InterpreterInvoke()
iOSSwift / Obj-CInterpreterinvoke()
Linux / PythonPythonInterpreterget_tensor(), invoke()

Donanım Hızlandırma için Temsilcileri Yapılandırma

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.

Bellek ve Tensör Yönetimi

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.

Hata Yönetimi ve Hata Ayıklama

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.

Yorumlayıcı ile Çıkarım Örnekleri

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:

java
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:

python
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

TF Lite Interpreter ne kadar bellek tüketir?

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.

Yorumlayıcı birden çok iş parçacığında kullanılabilir mi?

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.

Cihazda hangi temsilcilerin mevcut olduğunu nasıl kontrol ederim?

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.

Yorumlayıcı model yüklerken hata fırlatırsa ne yapmalıyım?

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.

Yorumlayıcıyı oluşturduktan sonra giriş tensörünün boyutunu nasıl değiştiririm?

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

  • TF Lite Interpreter — mobil cihazlarda .tflite modellerini çalıştırmak için minimalist bir çalışma zamanı.
  • Yorumlayıcı modeli mmap aracılığıyla yükler, tensörleri tahsis eder ve hesaplama grafiğini yürütür.
  • API, birleşik bir arayüzle Java, C++, Swift, Objective-C ve Python dillerinde kullanılabilir.
  • GPU, NNAPI ve Core ML temsilcileri, CPU'ya kıyasla çıkarımı 5 kata kadar hızlandırır.
  • Dinamik giriş verisi boyutlarına sahip modeller için resizeInput() kullanın.
  • Bellek sızıntılarını önlemek için yorumlayıcıyı close() ile kapatın.
  • Benchmark Aracı, gerçek cihazlarda performans profili oluşturmaya yardımcı olur.

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.

Projeyi tartış

Ayrıca okuyun