Bantuan melindungi Great Barrier Reef dengan TensorFlow pada Kaggle Bergabung Tantangan

TFX untuk Seluler

pengantar

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

Panduan ini memandu Anda melalui perubahan yang dapat dilakukan pada saluran apa pun untuk menghasilkan dan mengevaluasi model TFLite. Kami menyediakan contoh lengkap di sini , menunjukkan bagaimana TFX dapat melatih dan mengevaluasi model TFLite yang dilatih off dari MNIST dataset. Selanjutnya, kami menunjukkan bagaimana pipa yang sama dapat digunakan untuk simulataneously mengekspor kedua standar berbasis Keras SavedModel serta TFLite satu, yang memungkinkan pengguna untuk membandingkan kualitas kedua.

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

Langkah

Hanya dua langkah yang diperlukan untuk membuat dan mengevaluasi model TFLite di TFX. Langkah pertama adalah menyerukan rewriter TFLite dalam konteks TFX Trainer untuk mengkonversi Model TensorFlow yang dilatih menjadi satu TFLite. Langkah kedua adalah mengkonfigurasi Evaluator untuk mengevaluasi model TFLite. Kami sekarang membahas masing-masing secara bergantian.

Memanggil penulis ulang TFLite dalam Pelatih.

The TFX Trainer mengharapkan ditetapkan pengguna run_fn akan ditentukan dalam file modul. Ini run_fn mendefinisikan model yang akan dilatih, kereta api itu untuk jumlah tertentu dari iterasi, dan ekspor model terlatih.

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 dari modul MNIST TFLite .

Seperti ditunjukkan dalam kode di bawah, pertama kita harus membuat tanda tangan yang mengambil Tensor untuk setiap fitur sebagai masukan. Perhatikan bahwa ini adalah keberangkatan dari kebanyakan model yang ada di TFX, yang mengambil serial tf.Example protos 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)

Akhirnya, kita membuat sebuah instance dari rewriter TFLite ( tfrw ), dan memohon itu di SavedModel untuk mendapatkan model TFLite. Kami menyimpan Model TFLite ini di serving_model_dir disediakan oleh pemanggil dari run_fn . Dengan cara ini, model TFLite disimpan di lokasi di mana semua komponen TFX hilir diharapkan 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.

The TFX Evaluator menyediakan kemampuan untuk menganalisis model dilatih untuk memahami kualitas mereka di berbagai metrik. Selain menganalisis SavedModels, Evaluator TFX sekarang juga dapat menganalisis model TFLite.

Potongan kode berikut (direproduksi dari pipa MNIST ), menunjukkan bagaimana mengkonfigurasi 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,
      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.

Namun, perlu dicatat bahwa Evaluator mengasumsikan bahwa model TFLite disimpan dalam sebuah file bernama tflite dalam trainer_lite.outputs [ 'model'].