ดูการสาธิต #MadeWithTFJS ใหม่ที่แสดงต่อไปของเราและบอกสดในวันที่ 1 ต.ค. 09:00 PT ดูบน YouTube

การแปลงโมเดล

TensorFlow.js มาพร้อมกับโมเดลที่ได้รับการฝึกฝนมาแล้วมากมายที่พร้อมใช้งานในเบราว์เซอร์ซึ่งสามารถพบได้ใน repo รุ่น ของเรา อย่างไรก็ตามคุณอาจพบหรือสร้างโมเดล TensorFlow ที่อื่นที่คุณต้องการใช้ในเว็บแอปพลิเคชันของคุณ TensorFlow.js มีตัว แปลง โมเดลสำหรับวัตถุประสงค์นี้ ตัวแปลง TensorFlow.js มีสององค์ประกอบ:

  1. ยูทิลิตี้บรรทัดคำสั่งที่แปลงโมเดล Keras และ TensorFlow เพื่อใช้ใน TensorFlow.js
  2. API สำหรับการโหลดและเรียกใช้โมเดลในเบราว์เซอร์ด้วย TensorFlow.js

แปลงโมเดลของคุณ

ตัวแปลง TensorFlow.js ทำงานร่วมกับรูปแบบโมเดลต่างๆ:

SavedModel : นี่คือรูปแบบเริ่มต้นที่บันทึกโมเดล TensorFlow รูปแบบ SavedModel ได้รับการบันทึกไว้ ที่นี่

Keras model : โดยทั่วไปแล้วโมเดล Keras จะถูกบันทึกเป็นไฟล์ HDF5 สามารถดูข้อมูลเพิ่มเติมเกี่ยวกับการประหยัด Keras ได้ ที่นี่

โมดูล TensorFlow Hub : เป็นโมเดลที่ได้รับการบรรจุสำหรับการแจกจ่ายบน TensorFlow Hub ซึ่งเป็นแพลตฟอร์มสำหรับการแบ่งปันและการค้นพบโมเดล ห้องสมุดแบบจำลองสามารถพบได้ ที่นี่

ขึ้นอยู่กับประเภทของโมเดลที่คุณกำลังพยายามจะแปลงคุณจะต้องส่งอาร์กิวเมนต์ที่แตกต่างกันไปยังตัวแปลง ตัวอย่างเช่นสมมติว่าคุณได้บันทึกโมเดล model.h5 ชื่อ model.h5 ลงใน tmp/ คุณ ในการแปลงโมเดลของคุณโดยใช้ตัวแปลง TensorFlow.js คุณสามารถรันคำสั่งต่อไปนี้:

$ tensorflowjs_converter --input_format=keras /tmp/model.h5 /tmp/tfjs_model

สิ่งนี้จะแปลงโมเดลที่ /tmp/model.h5 และส่งออกไฟล์ model.json พร้อมกับไฟล์ไบนารีน้ำหนักไปยัง tmp/tfjs_model/ คุณ

ดูรายละเอียดเพิ่มเติมเกี่ยวกับอาร์กิวเมนต์บรรทัดคำสั่งที่สอดคล้องกับรูปแบบโมเดลต่างๆได้ที่ตัวแปลง TensorFlow.js README

ในระหว่างกระบวนการแปลงเราสำรวจกราฟโมเดลและตรวจสอบว่าแต่ละการดำเนินการได้รับการสนับสนุนโดย TensorFlow.js ถ้าเป็นเช่นนั้นเราจะเขียนกราฟในรูปแบบที่เบราว์เซอร์สามารถใช้งานได้ เราพยายามเพิ่มประสิทธิภาพโมเดลสำหรับการแสดงผลบนเว็บโดยการแบ่งน้ำหนักเป็นไฟล์ 4MB ซึ่งทำให้เบราว์เซอร์สามารถแคชได้ นอกจากนี้เรายังพยายามทำให้กราฟแบบจำลองง่ายขึ้นโดยใช้โครงการ Grappler แบบ โอเพนซอร์ส การทำให้กราฟง่ายขึ้นรวมถึงการพับเข้าด้วยกันการดำเนินการที่อยู่ติดกันการกำจัดกราฟย่อยทั่วไป ฯลฯ การเปลี่ยนแปลงเหล่านี้ไม่มีผลกับเอาต์พุตของโมเดล สำหรับการปรับให้เหมาะสมเพิ่มเติมผู้ใช้สามารถส่งผ่านอาร์กิวเมนต์ที่สั่งให้ตัวแปลงกำหนดจำนวนโมเดลให้มีขนาดไบต์ที่กำหนด Quantization เป็นเทคนิคในการลดขนาดโมเดลโดยการแทนน้ำหนักด้วยจำนวนบิตน้อยลง ผู้ใช้ต้องระมัดระวังเพื่อให้แน่ใจว่าแบบจำลองของพวกเขารักษาระดับความแม่นยำที่ยอมรับได้หลังจากการวัดปริมาณ

หากเราพบการดำเนินการที่ไม่รองรับระหว่างการแปลงกระบวนการจะล้มเหลวและเราจะพิมพ์ชื่อของการดำเนินการให้กับผู้ใช้ อย่าลังเลที่จะส่งปัญหาใน GitHub ของเราเพื่อแจ้งให้เราทราบ - เราพยายามใช้การดำเนินการใหม่เพื่อตอบสนองความต้องการของผู้ใช้

ปฏิบัติที่ดีที่สุด

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

เรียกใช้โมเดลของคุณ

เมื่อแปลงแบบจำลองของคุณสำเร็จคุณจะพบกับชุดไฟล์น้ำหนักและไฟล์โทโพโลยีแบบจำลอง TensorFlow.js มี API การโหลดโมเดลที่คุณสามารถใช้เพื่อดึงข้อมูลโมเดลเหล่านี้และเรียกใช้การอนุมานในเบราว์เซอร์

นี่คือลักษณะของ API สำหรับโมดูล TensorFlow SavedModel หรือ TensorFlow Hub ที่แปลงแล้ว:

const model = await tf.loadGraphModel(‘path/to/model.json’);

และนี่คือลักษณะของโมเดล Keras ที่แปลงแล้ว:

const model = await tf.loadLayersModel(‘path/to/model.json’);

tf.loadGraphModel API ส่งคืน tf.FrozenModel ซึ่งหมายความว่าพารามิเตอร์ได้รับการแก้ไขและคุณจะไม่สามารถปรับแต่งโมเดลของคุณด้วยข้อมูลใหม่ได้ tf.loadLayersModel API ส่งคืน tf.Model ซึ่งสามารถฝึกฝนได้ สำหรับข้อมูลเกี่ยวกับวิธีการฝึก tf โมเดลโปรดดู คู่มือโมเดลรถไฟ

หลังจากการแปลงเป็นความคิดที่ดีที่จะเรียกใช้การอนุมานสองสามครั้งและเปรียบเทียบความเร็วของโมเดลของคุณ เรามีหน้าการเปรียบเทียบแบบสแตนด์อโลนที่สามารถใช้เพื่อจุดประสงค์นี้: https://tensorflow.github.io/tfjs/e2e/benchmarks/local-benchmark/index.html คุณอาจสังเกตเห็นว่าเรายกเลิกการวัดจากการวอร์มอัพครั้งแรก - เนื่องจาก (โดยทั่วไป) การอนุมานครั้งแรกของโมเดลของคุณจะช้ากว่าการอนุมานที่ตามมาหลายเท่าเนื่องจากค่าใช้จ่ายในการสร้างพื้นผิวและการรวบรวมเฉดสี