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.
Bu ML modeli operatörleri aralığında, dönüştürme süreci tarafından desteklenen 3 model türü bulunur:
- Yalnızca TensorFlow Lite yerleşik operatörü olan modeller. (Önerilen)
- Yerleşik operatörler içeren modeller ve belirli TensorFlow çekirdek operatörleri.
- 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