Bergabunglah dengan komunitas SIG TFX-Addons dan bantu menjadikan TFX lebih baik!

TFX untuk Seluler

pengantar

Panduan ini menunjukkan bagaimana Tensorflow Extended (TFX) dapat membuat dan mengevaluasi model pembelajaran mesin yang akan diterapkan di perangkat. TFX sekarang menyediakan dukungan asli untuk TFLite , yang memungkinkan dilakukannya inferensi yang sangat efisien pada perangkat seluler.

Panduan ini memandu Anda melalui perubahan yang dapat dilakukan pada pipeline mana pun untuk menghasilkan dan mengevaluasi model TFLite. Kami memberikan contoh lengkap di sini , mendemonstrasikan bagaimana TFX dapat melatih dan mengevaluasi model TFLite yang dilatih dari kumpulan data MNIST . Lebih lanjut, kami menunjukkan bagaimana pipeline yang sama dapat digunakan untuk secara bersamaan mengekspor baik SavedModel berbasis Keras maupun TFLite, yang memungkinkan pengguna membandingkan kualitas keduanya.

Kami menganggap Anda sudah familiar dengan TFX, komponen kami, dan pipeline kami. Jika tidak, silakan lihat tutorial ini.

Langkah

Hanya dua langkah yang diperlukan untuk membuat dan mengevaluasi model TFLite di TFX. Langkah pertama adalah memanggil rewriter TFLite dalam konteks TFX Trainer untuk mengonversi model TensorFlow yang dilatih menjadi model TFLite. Langkah kedua adalah mengkonfigurasi Service Checker untuk mengevaluasi model TFLite. Sekarang kita membahas masing-masing secara bergantian.

Memanggil rewriter TFLite di dalam Trainer.

Pelatih TFX mengharapkan run_fn ditentukan run_fn ditentukan dalam file modul. run_fn ini mendefinisikan model yang akan dilatih, melatihnya untuk jumlah iterasi yang ditentukan, dan mengekspor model yang dilatih.

Di sisa bagian ini, kami menyediakan potongan kode yang menunjukkan perubahan yang diperlukan untuk memanggil rewriter TFLite dan mengekspor model TFLite. Semua kode ini terletak di run_fn dari modul MNIST TFLite .

Seperti yang ditunjukkan pada kode di bawah ini, pertama-tama kita harus membuat tanda tangan yang menggunakan Tensor untuk setiap fitur sebagai input. Perhatikan bahwa ini adalah penyimpangan dari sebagian besar model yang ada di TFX, yang menggunakan serialized tf.Example protos sebagai input.

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

Kemudian model Keras disimpan sebagai SavedModel dengan cara yang sama seperti biasanya.

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

Terakhir, kami membuat instance dari TFLite rewriter ( tfrw ), dan memanggilnya di SavedModel untuk mendapatkan model TFLite. Kami menyimpan model TFLite ini di serving_model_dir disediakan oleh pemanggil run_fn . Dengan cara ini, model TFLite disimpan di lokasi di mana semua komponen TFX hilir akan mengharapkan untuk menemukan model tersebut.

  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)

Mengevaluasi model TFLite.

TFX Service Checker memberikan kemampuan untuk menganalisis model terlatih untuk memahami kualitasnya di berbagai metrik. Selain menganalisis SavedModels, TFX Evaluator sekarang juga dapat menganalisis model TFLite.

Potongan kode berikut (direproduksi dari pipa MNIST ), menunjukkan cara mengkonfigurasi Service Checker yang menganalisis model 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,
      instance_name='mnist_lite')

Seperti ditunjukkan di atas, satu-satunya perubahan yang perlu kita make adalah untuk mengatur model_type lapangan untuk tf_lite . Tidak ada perubahan konfigurasi lain yang diperlukan untuk menganalisis model TFLite. Terlepas dari apakah model TFLite atau SavedModel sebuah dianalisis, output dari Evaluator akan memiliki tepat struktur yang sama.