TFX untuk Seluler

Perkenalan

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

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

Kami berasumsi Anda sudah familiar dengan TFX, komponen kami, dan saluran pipa kami. Jika belum, silakan lihat tutorial ini.

Tangga

Hanya dua langkah yang diperlukan untuk membuat dan mengevaluasi model TFLite di TFX. Langkah pertama adalah memanggil penulis ulang TFLite dalam konteks Pelatih TFX untuk mengonversi model TensorFlow yang dilatih menjadi model TFLite. Langkah kedua adalah mengonfigurasi Evaluator untuk mengevaluasi model TFLite. Kami sekarang membahas masing-masing secara bergantian.

Memanggil penulis ulang TFLite di dalam Pelatih.

Pelatih TFX mengharapkan run_fn yang ditentukan pengguna 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 cuplikan kode yang menunjukkan perubahan yang diperlukan untuk memanggil penulis ulang TFLite dan mengekspor model TFLite. Semua kode ini terletak di run_fn modul MNIST TFLite .

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

 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 penulis ulang TFLite ( tfrw ), dan memanggilnya di SavedModel untuk mendapatkan model TFLite. Kami menyimpan model TFLite ini di serving_model_dir yang disediakan oleh pemanggil run_fn . Dengan cara ini, model TFLite disimpan di lokasi di mana semua komponen TFX hilir diharapkan 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 Evaluator memberikan kemampuan untuk menganalisis model terlatih guna memahami kualitasnya di berbagai metrik. Selain menganalisis SavedModels, TFX Evaluator kini juga dapat menganalisis model TFLite.

Cuplikan kode berikut (direproduksi dari alur MNIST ), menunjukkan cara mengonfigurasi Evaluator 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,
  ).with_id('mnist_lite')

Seperti yang ditunjukkan di atas, satu-satunya perubahan yang perlu kita lakukan adalah menyetel kolom model_type ke tf_lite . Tidak ada perubahan konfigurasi lain yang diperlukan untuk menganalisis model TFLite. Terlepas dari apakah model TFLite atau SavedModel dianalisis, output dari Evaluator akan memiliki struktur yang persis sama.

Namun, perlu diketahui bahwa Evaluator berasumsi bahwa model TFLite disimpan dalam file bernama tflite di dalam trainer_lite.outputs['model'].