Tanıtım
Bu kılavuz, Tensorflow Extended'ın (TFX) cihazda dağıtılacak makine öğrenimi modellerini nasıl oluşturup değerlendirebileceğini gösterir. TFX artık mobil cihazlarda yüksek verimli çıkarım gerçekleştirmeyi mümkün kılan TFLite için yerel destek sağlıyor.
Bu kılavuz, TFLite modellerini oluşturmak ve değerlendirmek için herhangi bir işlem hattında yapılabilecek değişiklikler konusunda size yol gösterir. Burada , TFX'in MNIST veri kümesinden eğitilmiş TFLite modellerini nasıl eğitebileceğini ve değerlendirebileceğini gösteren eksiksiz bir örnek sunuyoruz. Ayrıca, aynı ardışık düzenin hem standart Keras tabanlı SavedModel'i hem de TFLite'ı eşzamanlı olarak dışa aktarmak için nasıl kullanılabileceğini göstererek kullanıcıların ikisinin kalitesini karşılaştırmasına olanak tanıyoruz.
TFX'e, bileşenlerimize ve boru hatlarımıza aşina olduğunuzu varsayıyoruz. Değilse, lütfen bu eğiticiye bakın.
adımlar
TFX'te bir TFLite modeli oluşturmak ve değerlendirmek için yalnızca iki adım gereklidir. İlk adım, eğitilmiş TensorFlow modelini bir TFLite modeline dönüştürmek için TFX Trainer bağlamında TFLite yeniden yazıcısını çağırmaktır. İkinci adım, Değerlendiriciyi TFLite modellerini değerlendirecek şekilde yapılandırmaktır. Şimdi sırayla her birini tartışıyoruz.
Eğitmen içinde TFLite yeniden yazıcısını çağırma.
TFX Trainer, bir modül dosyasında kullanıcı tanımlı bir run_fn
belirtilmesini bekler. Bu run_fn
, eğitilecek modeli tanımlar, belirtilen yineleme sayısı için eğitir ve eğitilen modeli dışa aktarır.
Bu bölümün geri kalanında, TFLite yeniden yazıcısını başlatmak ve bir TFLite modelini dışa aktarmak için gereken değişiklikleri gösteren kod parçacıkları sağlıyoruz. Bu kodun tamamı, MNIST TFLite modülünün run_fn'sinde bulunur run_fn
Aşağıdaki kodda gösterildiği gibi, önce her özellik için bir Tensor
girdi olarak alan bir imza oluşturmalıyız. Bunun, girdi olarak serileştirilmiş tf.Örnek protokolleri alan TFX'teki mevcut modellerin çoğundan ayrıldığını unutmayın.
signatures = {
'serving_default':
_get_serve_tf_examples_fn(
model, tf_transform_output).get_concrete_function(
tf.TensorSpec(
shape=[None, 784],
dtype=tf.float32,
name='image_floats'))
}
Ardından Keras modeli, normalde olduğu gibi SavedModel olarak kaydedilir.
temp_saving_model_dir = os.path.join(fn_args.serving_model_dir, 'temp')
model.save(temp_saving_model_dir, save_format='tf', signatures=signatures)
Son olarak, TFLite yeniden yazıcısının ( tfrw
) bir örneğini oluştururuz ve TFLite modelini elde etmek için SavedModel'de onu çağırırız. Bu TFLite modelini, serving_model_dir
çağıranı tarafından sağlanan run_fn
içinde saklarız. Bu şekilde, TFLite modeli, tüm aşağı akış TFX bileşenlerinin modeli bulmayı bekleyeceği yerde depolanır.
tfrw = rewriter_factory.create_rewriter(
rewriter_factory.TFLITE_REWRITER, name='tflite_rewriter')
converters.rewrite_saved_model(temp_saving_model_dir,
fn_args.serving_model_dir,
tfrw,
rewriter.ModelType.TFLITE_MODEL)
TFLite modelinin değerlendirilmesi.
TFX Evaluator , çok çeşitli metriklerde kalitelerini anlamak için eğitilmiş modelleri analiz etme yeteneği sağlar. TFX Evaluator, SavedModel'leri analiz etmenin yanı sıra artık TFLite modellerini de analiz edebiliyor.
Aşağıdaki kod parçacığı ( MNIST işlem hattından yeniden üretilmiştir), bir TFLite modelini analiz eden bir Değerlendiricinin nasıl yapılandırılacağını gösterir.
# Informs the evaluator that the model is a TFLite model.
eval_config_lite.model_specs[0].model_type = 'tf_lite'
...
# Uses TFMA to compute the evaluation statistics over features of a TFLite
# model.
model_analyzer_lite = Evaluator(
examples=example_gen.outputs['examples'],
model=trainer_lite.outputs['model'],
eval_config=eval_config_lite,
).with_id('mnist_lite')
Yukarıda gösterildiği gibi, yapmamız gereken tek değişiklik model_type
alanını tf_lite
olarak ayarlamaktır. TFLite modelini analiz etmek için başka bir yapılandırma değişikliği gerekmez. Bir TFLite modelinin veya bir SavedModel'in analiz edilip edilmediğine bakılmaksızın, Evaluator
çıktısı tamamen aynı yapıya sahip olacaktır.
Ancak, Değerlendiricinin, TFLite modelinin trainer_lite.outputs['model'] içinde tflite
adlı bir dosyaya kaydedildiğini varsaydığını lütfen unutmayın.