TensorFlow Lite ve TensorFlow operatör uyumluluğu

Modelinizde kullandığınız makine öğrenimi (ML) operatörleri, TensorFlow modelini TensorFlow Lite biçimine dönüştürme sürecini etkileyebilir. TensorFlow Lite dönüştürücü, ortak çıkarım modellerinde kullanılan sınırlı sayıda TensorFlow işlemini destekler. Bu, her modelin doğrudan dönüştürülebilir olmadığı anlamına gelir. Dönüştürücü aracı, ek operatörler eklemenize olanak tanır ancak bir modeli bu şekilde dönüştürmek, modelinizi yürütmek için kullandığınız TensorFlow Lite çalışma zamanı ortamını da değiştirmenizi gerektirir. Bu durum, Google Play Hizmetleri gibi standart çalışma zamanı dağıtım seçeneklerini kullanma becerinizi sınırlandırabilir.

TensorFlow Lite Converter, model yapısını analiz etmek ve doğrudan desteklenen operatörlerle uyumlu hale getirmek için optimizasyonları uygulamak üzere tasarlanmıştır. Örneğin, modelinizdeki ML operatörlerine bağlı olarak dönüştürücü, bu operatörleri TensorFlow Lite eşdeğerleriyle eşleştirmek için kaydırabilir veya birleştirebilir.

Desteklenen işlemlerde bile performans nedeniyle bazen belirli kullanım kalıpları yaşanabilir. TensorFlow Lite ile kullanılabilecek bir TensorFlow modeli oluşturmayı anlamanın en iyi yolu, işlemlerin nasıl dönüştürülüp optimize edildiğini ve bu işlemin getirdiği sınırlamaları dikkatlice düşünmektir.

Desteklenen operatörler

TensorFlow Lite yerleşik operatörleri, TensorFlow temel kitaplığının parçası olan operatörlerin bir alt kümesidir. TensorFlow modeliniz, kompozit operatörler veya sizin tanımladığınız yeni operatörler şeklinde özel operatörler de içerebilir. Aşağıdaki şemada bu operatörler arasındaki ilişkiler gösterilmektedir.

TensorFlow operatörleri

Bu ML modeli operatörleri aralığında, dönüştürme süreci tarafından desteklenen 3 model türü bulunur:

  1. Yalnızca TensorFlow Lite yerleşik operatörü olan modeller. (Önerilen)
  2. Yerleşik operatörler içeren modeller ve belirli TensorFlow çekirdek operatörleri.
  3. Yerleşik operatörler, TensorFlow temel operatörleri ve/veya özel operatörler içeren modeller.

Modeliniz yalnızca TensorFlow Lite tarafından yerel olarak desteklenen işlemler içeriyorsa modeli dönüştürmek için ek işaretlere ihtiyacınız yoktur. Bu model türü sorunsuz şekilde dönüştürüleceği ve varsayılan TensorFlow Lite çalışma zamanını kullanarak optimize edilmesi ve çalıştırılması daha basit olduğu için önerilen yol budur. Modeliniz için Google Play hizmetleri gibi daha fazla dağıtım seçeneğiniz de vardır. TensorFlow Lite dönüştürücü kılavuzu ile başlayabilirsiniz. Yerleşik operatörlerin listesi için TensorFlow Lite İşlemler sayfasına bakın.

Çekirdek kitaplıktan belirli TensorFlow işlemlerini eklemeniz gerekiyorsa bunu dönüşüm sırasında belirtmeli ve çalışma zamanınızın bu işlemleri içerdiğinden emin olmalısınız. Ayrıntılı adımlar için TensorFlow operatörlerini seçme konusuna bakın.

Mümkün olduğunda, dönüştürülen modelinize son olarak özel operatör eklemekten kaçının. Özel operatörler, birden fazla temel TensorFlow çekirdek operatörünün birleştirilmesiyle veya tamamen yeni bir operatör tanımlanarak oluşturulan operatörlerdir. Özel operatörler dönüştürüldüğünde, yerleşik TensorFlow Lite kitaplığının dışında bağımlılıklar oluşturarak genel modelin boyutunu artırabilir. Özel işlemler, mobil veya cihaz dağıtımı için özel olarak oluşturulmamışsa kaynak kısıtlamalı cihazlara dağıtıldığında sunucu ortamına kıyasla daha düşük performansa neden olabilir. Son olarak, tıpkı belirli TensorFlow temel operatörlerini dahil etmek gibi özel operatörler de model çalışma zamanı ortamını değiştirmenizi gerektirir. Bu değişiklik, Google Play hizmetleri gibi standart çalışma zamanı hizmetlerinden yararlanmanızı sınırlandırır.

Desteklenen türler

Çoğu TensorFlow Lite işlemi hem kayan nokta (float32) hem de ölçülmüş (uint8, int8) çıkarımını hedefler ancak birçok işlem henüz tf.float16 ve dizeler gibi diğer türler için hedeflemez.

İşlemlerin farklı sürümlerini kullanmanın yanı sıra, kayan nokta ve nicelenmiş modeller arasındaki diğer bir fark bunların dönüştürülme şeklidir. Nicelleştirilmiş dönüşüm için tensörler için dinamik aralık bilgisi gerekir. Bu özellik için model eğitimi sırasında "sahte ölçüm" yapılması, bir kalibrasyon veri kümesi aracılığıyla aralık bilgilerinin alınması veya "hareket halinde" aralık tahmini yapılması gerekir. Daha fazla bilgi için nicelleştirme bölümüne bakın.

Basit dönüşümler, sabit katlama ve birleştirme

Bir dizi TensorFlow işlemi, doğrudan bir eşdeğeri olmasa da TensorFlow Lite tarafından işlenebilir. Bu durum, grafikten basitçe kaldırılabilen (tf.identity), tensörlerle (tf.placeholder) değiştirilebilen veya daha karmaşık işlemlere dönüştürülebilen (tf.nn.bias_add) işlemler için geçerlidir. Desteklenen bazı işlemler bile bazen bu işlemlerin birinden kaldırılabilir.

Genellikle grafikten kaldırılan TensorFlow işlemlerinin olası her örneği içermeyen bir listesini burada bulabilirsiniz:

  • tf.add
  • tf.debugging.check_numerics
  • tf.constant
  • tf.div
  • tf.divide
  • tf.fake_quant_with_min_max_args
  • tf.fake_quant_with_min_max_vars
  • tf.identity
  • tf.maximum
  • tf.minimum
  • tf.multiply
  • tf.no_op
  • tf.placeholder
  • tf.placeholder_with_default
  • tf.realdiv
  • tf.reduce_max
  • tf.reduce_min
  • tf.reduce_sum
  • tf.rsqrt
  • tf.shape
  • tf.sqrt
  • tf.square
  • tf.subtract
  • tf.tile
  • tf.nn.batch_norm_with_global_normalization
  • tf.nn.bias_add
  • tf.nn.fused_batch_norm
  • tf.nn.relu
  • tf.nn.relu6

Deneysel İşlemler

Aşağıdaki TensorFlow Lite işlemleri mevcut ancak özel modeller için hazır değil:

  • CALL
  • CONCAT_EMBEDDINGS
  • CUSTOM
  • EMBEDDING_LOOKUP_SPARSE
  • HASHTABLE_LOOKUP
  • LSH_PROJECTION
  • SKIP_GRAM
  • SVDF