TFX สำหรับมือถือ

บทนำ

คู่มือนี้สาธิตวิธีที่ Tensorflow Extended (TFX) สามารถสร้างและประเมินโมเดลการเรียนรู้ของเครื่องที่จะปรับใช้บนอุปกรณ์ได้ ตอนนี้ TFX ให้การสนับสนุนดั้งเดิมสำหรับ TFLite ซึ่งทำให้สามารถอนุมานที่มีประสิทธิภาพสูงบนอุปกรณ์มือถือได้

คู่มือนี้จะแนะนำคุณเกี่ยวกับการเปลี่ยนแปลงที่สามารถทำได้กับไปป์ไลน์เพื่อสร้างและประเมินโมเดล TFLite เรามีตัวอย่างที่สมบูรณ์ ไว้ที่นี่ ซึ่งแสดงให้เห็นว่า TFX สามารถฝึกและประเมินแบบจำลอง TFLite ที่ได้รับการฝึกจากชุดข้อมูล MNIST ได้อย่างไร นอกจากนี้ เราแสดงให้เห็นว่าไปป์ไลน์เดียวกันสามารถนำมาใช้เพื่อส่งออกทั้ง SavedModel แบบ Keras แบบมาตรฐานและ TFLite ได้พร้อมกัน ซึ่งช่วยให้ผู้ใช้สามารถเปรียบเทียบคุณภาพของทั้งสองได้

เราคิดว่าคุณคุ้นเคยกับ TFX ส่วนประกอบของเรา และไปป์ไลน์ของเรา ถ้าไม่เช่นนั้น โปรดดูบทช่วย สอน นี้

ขั้นตอน

มีเพียงสองขั้นตอนเท่านั้นที่จำเป็นในการสร้างและประเมินแบบจำลอง TFLite ใน TFX ขั้นตอนแรกคือการเรียกใช้ตัวเขียนซ้ำ TFLite ภายในบริบทของ TFX Trainer เพื่อแปลงโมเดล TensorFlow ที่ได้รับการฝึกอบรมเป็น TFLite ขั้นตอนที่สองคือการกำหนดค่าตัวประเมินเพื่อประเมินโมเดล TFLite ตอนนี้เราคุยกันทีละเรื่อง

เรียกใช้ตัวเขียน TFLite ใหม่ภายใน Trainer

TFX Trainer คาดหวังให้ระบุ run_fn ที่ผู้ใช้กำหนดในไฟล์โมดูล run_fn นี้กำหนดโมเดลที่จะฝึก ฝึกโมเดลตามจำนวนที่ระบุ และเอ็กซ์พอร์ตโมเดลที่ฝึก

ในส่วนที่เหลือของส่วนนี้ เรามีข้อมูลโค้ดที่แสดงการเปลี่ยนแปลงที่จำเป็นในการเรียกใช้ตัวเขียนซ้ำ TFLite และส่งออกโมเดล TFLite รหัสทั้งหมดนี้อยู่ใน run_fn ของ โมดูล MNIST TFLite

ดังที่แสดงในโค้ดด้านล่าง ขั้นแรกเราต้องสร้างลายเซ็นที่รับ Tensor สำหรับทุกฟีเจอร์เป็นอินพุต โปรดทราบว่านี่เป็นการออกจากโมเดลที่มีอยู่ส่วนใหญ่ใน TFX ซึ่งใช้ tf.Example protos ที่เป็นอนุกรมเป็นอินพุต

 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 Evaluator ให้ความสามารถในการวิเคราะห์แบบจำลองที่ได้รับการฝึกอบรมเพื่อทำความเข้าใจคุณภาพในตัวชี้วัดที่หลากหลาย นอกจากการวิเคราะห์ SavedModels แล้ว TFX Evaluator ยังสามารถวิเคราะห์โมเดล 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']