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

ข้อมูลโค้ดต่อไปนี้ (ทำซ้ำจาก ไปป์ไลน์ MNIST ) จะแสดงวิธีกำหนดค่า Evaluator ที่วิเคราะห์โมเดล 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']