Mobil Cihazlar için TFX

giriiş

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 TFLite için yerel destek sağlıyor ve bu da mobil cihazlarda yüksek verimli çıkarımların gerçekleştirilmesini mümkün kı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ğitilen TFLite modellerini nasıl eğitip değerlendirebileceğini gösteren eksiksiz bir örnek sunuyoruz. Ayrıca, aynı işlem hattının 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 işlem hatlarımıza aşina olduğunuzu varsayıyoruz. Değilse, lütfen bu eğitime 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 her birini sırayla tartışıyoruz.

Trainer'da TFLite yeniden yazıcısını çağırmak.

TFX Trainer, bir modül dosyasında kullanıcı tanımlı bir run_fn belirtilmesini bekler. Bu run_fn eğitilecek modeli tanımlar, onu belirtilen yineleme sayısı için eğitir ve eğitilen modeli dışarı aktarır.

Bu bölümün geri kalanında, TFLite yeniden yazıcısını çağırmak 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 dosyasında bulunur.

Aşağıdaki kodda gösterildiği gibi öncelikle her özellik için bir Tensor girdi olarak alan bir imza oluşturmalıyız. Bunun, serileştirilmiş tf.Example protokollerini girdi olarak alan TFX'teki mevcut modellerin çoğundan bir sapma olduğunu 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'))
  }

Daha sonra 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şturuyoruz ve TFLite modelini elde etmek için onu SavedModel üzerinde çağırıyoruz. Bu TFLite modelini run_fn çağıranı tarafından sağlanan serving_model_dir dosyasında saklıyoruz. Bu şekilde TFLite modeli, tüm aşağı akış TFX bileşenlerinin modeli bulmayı bekleyeceği konumda saklanı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 Değerlendiricisi, eğitimli modellerin kalitesini geniş bir ölçüm yelpazesinde anlamak için analiz etme yeteneği sağlar. TFX Evaluator, SavedModels'ı analiz etmenin yanı sıra artık TFLite modellerini de analiz edebiliyor.

Aşağıdaki kod parçacığı ( MNIST kanalından alınmıştır), 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 hiçbir konfigürasyon değişikliğine gerek yoktur. Bir TFLite modelinin mi yoksa SavedModel'in mi analiz edildiğ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çindeki tflite adlı bir dosyaya kaydedildiğini varsaydığını lütfen unutmayın.