TFX برای موبایل

معرفی

این راهنما نشان می‌دهد که چگونه Tensorflow Extended (TFX) می‌تواند مدل‌های یادگیری ماشین را ایجاد و ارزیابی کند که روی دستگاه مستقر می‌شوند. TFX اکنون پشتیبانی بومی را برای TFLite فراهم می‌کند، که امکان استنتاج بسیار کارآمد را در دستگاه‌های تلفن همراه فراهم می‌کند.

این راهنما شما را از طریق تغییراتی که می‌توان در هر خط لوله برای تولید و ارزیابی مدل‌های TFLite ایجاد کرد، راهنمایی می‌کند. ما در اینجا یک مثال کامل ارائه می‌دهیم که نشان می‌دهد چگونه TFX می‌تواند مدل‌های TFLite را که از مجموعه داده‌های MNIST آموزش داده شده‌اند، آموزش و ارزیابی کند. علاوه بر این، نشان می‌دهیم که چگونه می‌توان از خط لوله مشابه برای صادرات همزمان SavedModel مبتنی بر Keras و همچنین TFLite استفاده کرد و به کاربران اجازه می‌دهد کیفیت این دو را با هم مقایسه کنند.

ما فرض می کنیم که شما با TFX، اجزای ما و خطوط لوله ما آشنا هستید. اگر نه، پس لطفا این آموزش را ببینید.

مراحل

برای ایجاد و ارزیابی مدل TFLite در TFX تنها دو مرحله لازم است. اولین گام، فراخوانی بازنویسی TFLite در زمینه TFX Trainer برای تبدیل مدل آموزش دیده TensorFlow به مدل TFLite است. مرحله دوم، پیکربندی Evaluator برای ارزیابی مدل‌های TFLite است. اکنون هر کدام را به نوبه خود بحث می کنیم.

فراخوانی بازنویس TFLite در Trainer.

TFX Trainer انتظار دارد که یک run_fn تعریف شده توسط کاربر در یک فایل ماژول مشخص شود. این run_fn مدلی را که باید آموزش داده شود تعریف می کند، آن را برای تعداد تکرار مشخص شده آموزش می دهد و مدل آموزش دیده را صادر می کند.

در ادامه این بخش، تکه‌های کدی را ارائه می‌کنیم که تغییرات مورد نیاز برای فراخوانی بازنویس TFLite و صادرات یک مدل TFLite را نشان می‌دهد. همه این کدها در run_fn ماژول MNIST TFLite قرار دارند.

همانطور که در کد زیر نشان داده شده است، ابتدا باید امضایی ایجاد کنیم که برای هر ویژگی یک Tensor به عنوان ورودی بگیرد. توجه داشته باشید که این یک انحراف از اکثر مدل های موجود در TFX است که پروتوهای سریالی tf.Example را به عنوان ورودی دریافت می کنند.

 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'))
  }

سپس مدل Keras به‌عنوان SavedModel به همان شکلی که در حالت عادی است ذخیره می‌شود.

  temp_saving_model_dir = os.path.join(fn_args.serving_model_dir, 'temp')
  model.save(temp_saving_model_dir, save_format='tf', signatures=signatures)

در نهایت، یک نمونه از بازنویسی TFLite ( tfrw ) ایجاد می کنیم و آن را در SavedModel فراخوانی می کنیم تا مدل TFLite را بدست آوریم. ما این مدل TFLite را در serving_model_dir ارائه شده توسط تماس گیرنده run_fn ذخیره می کنیم. به این ترتیب، مدل TFLite در مکانی ذخیره می شود که تمام اجزای پایین دستی TFX انتظار پیدا کردن مدل را دارند.

  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

ارزیاب TFX توانایی تجزیه و تحلیل مدل های آموزش دیده را برای درک کیفیت آنها در طیف وسیعی از معیارها فراهم می کند. علاوه بر تجزیه و تحلیل SavedModels، ارزیاب TFX اکنون قادر است مدل های TFLite را نیز تجزیه و تحلیل کند.

قطعه کد زیر (که از خط لوله MNIST بازتولید شده است)، نشان می دهد که چگونه می توان یک ارزیاب را پیکربندی کرد که مدل TFLite را تجزیه و تحلیل می کند.

  # 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')

همانطور که در بالا نشان داده شد، تنها تغییری که باید انجام دهیم این است که قسمت model_type را روی tf_lite قرار دهیم. هیچ تغییر پیکربندی دیگری برای تجزیه و تحلیل مدل TFLite لازم نیست. صرف نظر از اینکه مدل TFLite یا SavedModel تجزیه و تحلیل شود، خروجی Evaluator دقیقاً همان ساختار را خواهد داشت.

با این حال، لطفاً توجه داشته باشید که ارزیابی کننده فرض می‌کند که مدل TFLite در فایلی به نام tflite در trainer_lite.outputs['model'] ذخیره می‌شود.