โมเดลที่ใช้ TensorFlow GraphDef (โดยทั่วไปจะสร้างผ่าน Python API) อาจถูกบันทึกในรูปแบบใดรูปแบบหนึ่งต่อไปนี้:
- TensorFlow ที่บันทึกไว้รุ่น
- โมเดลแช่แข็ง
- โมดูล Tensorflow Hub
รูปแบบทั้งหมดข้างต้นสามารถแปลงโดยตัว แปลง TensorFlow.js ให้อยู่ในรูปแบบที่สามารถโหลดลงใน TensorFlow.js ได้โดยตรงเพื่อการอนุมาน
(หมายเหตุ: TensorFlow เลิกใช้รูปแบบบันเดิลเซสชันแล้ว โปรดย้ายโมเดลของคุณไปยังรูปแบบ SavedModel)
ความต้องการ
ขั้นตอนการแปลงต้องใช้สภาพแวดล้อม Python คุณอาจต้องการเก็บแยกไว้โดยใช้ pipenv หรือ virtualenv ในการติดตั้งตัวแปลง ให้รันคำสั่งต่อไปนี้:
pip install tensorflowjs
การนำเข้าโมเดล TensorFlow ลงใน TensorFlow.js เป็นกระบวนการสองขั้นตอน ขั้นแรก แปลงโมเดลที่มีอยู่เป็นรูปแบบเว็บ TensorFlow.js แล้วโหลดลงใน TensorFlow.js
ขั้นตอนที่ 1 แปลงโมเดล TensorFlow ที่มีอยู่เป็นรูปแบบเว็บ TensorFlow.js
รันสคริปต์ตัวแปลงที่จัดเตรียมโดยแพ็คเกจ pip:
การใช้งาน: SavedModel ตัวอย่าง:
tensorflowjs_converter \
--input_format=tf_saved_model \
--output_node_names='MobilenetV1/Predictions/Reshape_1' \
--saved_model_tags=serve \
/mobilenet/saved_model \
/mobilenet/web_model
ตัวอย่างโมเดลแช่แข็ง:
tensorflowjs_converter \
--input_format=tf_frozen_model \
--output_node_names='MobilenetV1/Predictions/Reshape_1' \
/mobilenet/frozen_model.pb \
/mobilenet/web_model
ตัวอย่างโมดูล Tensorflow Hub:
tensorflowjs_converter \
--input_format=tf_hub \
'https://tfhub.dev/google/imagenet/mobilenet_v1_100_224/classification/1' \
/mobilenet/web_model
อาร์กิวเมนต์ตำแหน่ง | คำอธิบาย |
---|---|
input_path | พาธแบบเต็มของไดเร็กทอรีโมเดลที่บันทึกไว้ ไดเร็กทอรีบันเดิลเซสชัน ไฟล์โมเดลที่ตรึงไว้ หรือแฮนเดิลหรือพาธของโมดูล TensorFlow Hub |
output_path | พาธสำหรับอาร์ติแฟกต์เอาต์พุตทั้งหมด |
ตัวเลือก | คำอธิบาย |
---|---|
--input_format | รูปแบบของโมเดลอินพุต ใช้ tf_saved_model สำหรับ SavedModel, tf_frozen_model สำหรับโมเดลที่หยุดนิ่ง, tf_session_bundle สำหรับกลุ่มเซสชัน tf_hub สำหรับโมดูล TensorFlow Hub และ keras สำหรับ Keras HDF5 |
--output_node_names | ชื่อของโหนดเอาต์พุต คั่นด้วยเครื่องหมายจุลภาค |
--saved_model_tags | ใช้ได้กับการแปลง SavedModel เท่านั้น แท็กของ MetaGraphDef ที่จะโหลด ในรูปแบบคั่นด้วยเครื่องหมายจุลภาค ค่าเริ่มต้นที่จะ serve |
--signature_name | ใช้ได้กับการแปลงโมดูล TensorFlow Hub, ลายเซ็นที่จะโหลดเท่านั้น ค่าดีฟอลต์เป็นค่า default ดู https://www.tensorflow.org/hub/common_signatures/ |
ใช้คำสั่งต่อไปนี้เพื่อรับข้อความช่วยเหลือโดยละเอียด:
tensorflowjs_converter --help
แปลงไฟล์ที่สร้าง
สคริปต์การแปลงด้านบนสร้างไฟล์สองประเภท:
-
model.json
(กราฟกระแสข้อมูลและรายการน้ำหนัก) -
group1-shard\*of\*
(การรวบรวมไฟล์น้ำหนักไบนารี)
ตัวอย่างเช่น นี่คือผลลัพธ์จากการแปลง MobileNet v2:
output_directory/model.json
output_directory/group1-shard1of5
...
output_directory/group1-shard5of5
ขั้นตอนที่ 2: การโหลดและเรียกใช้ในเบราว์เซอร์
- ติดตั้งแพ็คเกจ tfjs-converter npm
yarn add @tensorflow/tfjs
หรือ npm install @tensorflow/tfjs
- สร้าง อินสแตนซ์คลาส FrozenModel และรันการอนุมาน
import * as tf from '@tensorflow/tfjs';
import {loadGraphModel} from '@tensorflow/tfjs-converter';
const MODEL_URL = 'model_directory/model.json';
const model = await loadGraphModel(MODEL_URL);
const cat = document.getElementById('cat');
model.execute(tf.browser.fromPixels(cat));
ตรวจสอบ การสาธิต MobileNet ของเรา
loadGraphModel
API ยอมรับพารามิเตอร์ LoadOptions
เพิ่มเติม ซึ่งสามารถใช้เพื่อส่งข้อมูลรับรองหรือส่วนหัวที่กำหนดเองพร้อมกับคำขอ โปรดดู เอกสาร loadGraphModel() สำหรับรายละเอียดเพิ่มเติม
การดำเนินงานที่รองรับ
ปัจจุบัน TensorFlow.js รองรับชุดปฏิบัติการ TensorFlow ที่จำกัด หากโมเดลของคุณใช้ op ที่ไม่ได้รับการสนับสนุน สคริปต์ tensorflowjs_converter
จะล้มเหลวและพิมพ์รายการของ ops ที่ไม่สนับสนุนในโมเดลของคุณ โปรด แจ้งปัญหา สำหรับแต่ละ op เพื่อแจ้งให้เราทราบว่าคุณต้องการความช่วยเหลือใด
โหลดเฉพาะตุ้มน้ำหนัก
หากคุณต้องการโหลดเฉพาะตุ้มน้ำหนัก คุณสามารถใช้ข้อมูลโค้ดต่อไปนี้
import * as tf from '@tensorflow/tfjs';
const weightManifestUrl = "https://example.org/model/weights_manifest.json";
const manifest = await fetch(weightManifestUrl);
this.weightManifest = await manifest.json();
const weightMap = await tf.io.loadWeights(
this.weightManifest, "https://example.org/model");