การนำเข้าโมเดล Keras ไปยัง TensorFlow.js

โมเดล Keras (โดยทั่วไปจะสร้างผ่าน Python API) อาจถูกบันทึกใน รูปแบบใดรูปแบบหนึ่ง รูปแบบ "ทั้งโมเดล" สามารถแปลงเป็นรูปแบบเลเยอร์ TensorFlow.js ซึ่งสามารถโหลดลงใน TensorFlow.js ได้โดยตรงเพื่อการอนุมานหรือสำหรับการฝึกอบรมเพิ่มเติม

รูปแบบเลเยอร์ TensorFlow.js เป้าหมายคือไดเรกทอรีที่มีไฟล์ model.json และชุดของไฟล์น้ำหนักที่แบ่งส่วนในรูปแบบไบนารี ไฟล์ model.json มีทั้งโทโพโลยีโมเดล (หรือที่เรียกว่า "สถาปัตยกรรม" หรือ "กราฟ": คำอธิบายเลเยอร์และวิธีการเชื่อมต่อเลเยอร์) และรายการไฟล์น้ำหนัก

ความต้องการ

ขั้นตอนการแปลงต้องใช้สภาพแวดล้อม Python คุณอาจต้องการแยกอันหนึ่งโดยใช้ pipenv หรือ virtualenv หากต้องการติดตั้งตัวแปลง ให้ใช้ pip install tensorflowjs

การนำเข้าโมเดล Keras ไปยัง TensorFlow.js เป็นกระบวนการสองขั้นตอน ขั้นแรก แปลงโมเดล Keras ที่มีอยู่เป็นรูปแบบเลเยอร์ TF.js จากนั้นโหลดลงใน TensorFlow.js

ขั้นตอนที่ 1 แปลงโมเดล Keras ที่มีอยู่เป็นรูปแบบ TF.js Layers

โดยทั่วไปโมเดล Keras จะถูกบันทึกผ่าน model.save(filepath) ซึ่งสร้างไฟล์ HDF5 (.h5) ไฟล์เดียวที่มีทั้งโทโพโลยีโมเดลและน้ำหนัก หากต้องการแปลงไฟล์ดังกล่าวเป็นรูปแบบ TF.js Layers ให้รันคำสั่งต่อไปนี้ โดยที่ path/to/my_model.h5 เป็นไฟล์ Keras .h5 ต้นทาง และ path/to/tfjs_target_dir เป็นไดเร็กทอรีเอาต์พุตเป้าหมายสำหรับไฟล์ TF.js:

# bash

tensorflowjs_converter --input_format keras \
                       path/to/my_model.h5 \
                       path/to/tfjs_target_dir

ทางเลือก: ใช้ Python API เพื่อส่งออกเป็นรูปแบบ TF.js Layers โดยตรง

หากคุณมีโมเดล Keras ใน Python คุณสามารถส่งออกเป็นรูปแบบเลเยอร์ TensorFlow.js ได้โดยตรงดังนี้:

# Python

import tensorflowjs as tfjs

def train(...):
    model = keras.models.Sequential()   # for example
    ...
    model.compile(...)
    model.fit(...)
    tfjs.converters.save_keras_model(model, tfjs_target_dir)

ขั้นตอนที่ 2: โหลดโมเดลลงใน TensorFlow.js

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

จากนั้นโหลดโมเดลลงใน TensorFlow.js โดยระบุ URL ไปยังไฟล์ model.json:

// JavaScript

import * as tf from '@tensorflow/tfjs';

const model = await tf.loadLayersModel('https://foo.bar/tfjs_artifacts/model.json');

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

// JavaScript

const example = tf.fromPixels(webcamElement);  // for example
const prediction = model.predict(example);

ตัวอย่าง TensorFlow.js จำนวนมากใช้วิธีการนี้ โดยใช้โมเดลที่ได้รับการฝึกล่วงหน้าซึ่งได้รับการแปลงและโฮสต์บน Google Cloud Storage

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

คุณสมบัติที่รองรับ

ปัจจุบัน TensorFlow.js Layers รองรับเฉพาะโมเดล Keras ที่ใช้โครงสร้าง Keras มาตรฐานเท่านั้น โมเดลที่ใช้ ops หรือเลเยอร์ที่ไม่รองรับ เช่น เลเยอร์แบบกำหนดเอง เลเยอร์ Lambda การสูญเสียแบบกำหนดเอง หรือตัววัดแบบกำหนดเอง จะไม่สามารถนำเข้าได้โดยอัตโนมัติ เนื่องจากต้องใช้โค้ด Python ที่ไม่สามารถแปลเป็น JavaScript ได้อย่างน่าเชื่อถือ