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

บันทึกและโหลดโมเดล

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

บทช่วยสอนนี้จะเน้นไปที่การบันทึกและการโหลดโมเดล TensorFlow.js (ระบุได้ด้วยไฟล์ JSON) เรายังสามารถนำเข้าแบบจำลอง TensorFlow Python การโหลดโมเดลเหล่านี้ครอบคลุมอยู่ในบทช่วยสอนสองบทต่อไปนี้:

บันทึก tf รุ่น

tf.Model และ tf.Sequential มีฟังก์ชัน model.save ที่อนุญาตให้คุณบันทึก โทโพโลยี และ น้ำหนัก ของโมเดล

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

  • น้ำหนัก: ไฟล์เหล่านี้เป็นไฟล์ไบนารีที่เก็บน้ำหนักของโมเดลที่กำหนดในรูปแบบที่มีประสิทธิภาพ โดยทั่วไปจะถูกเก็บไว้ในโฟลเดอร์เดียวกับโทโพโลยี

มาดูกันว่าโค้ดสำหรับการบันทึกโมเดลมีลักษณะอย่างไร

const saveResult = await model.save('localstorage://my-model-1');

สิ่งที่ควรทราบ:

  • วิธีการ save ใช้อาร์กิวเมนต์สตริงเหมือน URL ที่เริ่มต้นด้วย โครงร่าง สิ่งนี้อธิบายประเภทของปลายทางที่เราพยายามบันทึกโมเดล ในตัวอย่างด้านบนโครงการคือ localstorage://
  • โครงร่างตามด้วย พา ธ ในตัวอย่างด้านบนเส้นทางคือ my-model-1
  • วิธีการ save เป็นแบบอะซิงโครนัส
  • ค่าที่ส่งคืนของ model.save คือออบเจ็กต์ JSON ที่มีข้อมูลเช่นขนาดไบต์ของโทโพโลยีและน้ำหนักของโมเดล
  • สภาพแวดล้อมที่ใช้ในการบันทึกโมเดลจะไม่ส่งผลกระทบต่อสภาพแวดล้อมที่สามารถโหลดโมเดลได้ การบันทึกโมเดลใน node.js ไม่ได้ป้องกันไม่ให้โหลดในเบราว์เซอร์

ด้านล่างเราจะตรวจสอบรูปแบบต่างๆที่มีให้

ที่เก็บข้อมูลในเครื่อง (เบราว์เซอร์เท่านั้น)

โครงการ: localstorage://

await model.save('localstorage://my-model');

ซึ่งจะบันทึกโมเดลภายใต้ชื่อ my-model ในที่ จัดเก็บข้อมูลภายใน ของเบราว์เซอร์ สิ่งนี้จะยังคงมีอยู่ระหว่างการรีเฟรชแม้ว่าผู้ใช้หรือเบราว์เซอร์จะสามารถล้างที่เก็บข้อมูลในเครื่องได้ เบราว์เซอร์แต่ละตัวยังกำหนดขีด จำกัด ของตัวเองว่าจะสามารถจัดเก็บข้อมูลในพื้นที่จัดเก็บข้อมูลภายในสำหรับโดเมนใดโดเมนหนึ่งได้

IndexedDB (เบราว์เซอร์เท่านั้น)

โครงการ: indexeddb://

await model.save('indexeddb://my-model');

ซึ่งจะบันทึกโมเดลลงในหน่วยเก็บข้อมูล IndexedDB ของเบราว์เซอร์ เช่นเดียวกับที่จัดเก็บข้อมูลภายในเครื่องยังคงมีอยู่ระหว่างการรีเฟรช แต่ก็มีแนวโน้มที่จะมีข้อ จำกัด ที่ใหญ่กว่าเกี่ยวกับขนาดของวัตถุที่จัดเก็บ

ดาวน์โหลดไฟล์ (เบราว์เซอร์เท่านั้น)

โครงการ: downloads://

await model.save('downloads://my-model');

สิ่งนี้จะทำให้เบราว์เซอร์ดาวน์โหลดไฟล์โมเดลไปยังเครื่องของผู้ใช้ จะมีการสร้างไฟล์สองไฟล์:

  1. ไฟล์ JSON ข้อความชื่อ [my-model].json ซึ่งมีโทโพโลยีและการอ้างอิงไปยังไฟล์น้ำหนักที่อธิบายไว้ด้านล่าง
  2. ไฟล์ไบนารีที่มีค่าน้ำหนักชื่อ [my-model].weights.bin

คุณสามารถเปลี่ยนชื่อ [my-model] เพื่อรับไฟล์ที่มีชื่ออื่น

เนื่องจากไฟล์. .json ชี้ไปที่ .bin โดยใช้พา ธ สัมพัทธ์ไฟล์ทั้งสองควรอยู่ในโฟลเดอร์เดียวกัน

คำขอ HTTP (S)

โครงการ: http:// หรือ https://

await model.save('http://model-server.domain/upload')

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

โมเดลจะถูกส่งไปยังเซิร์ฟเวอร์ HTTP ที่ระบุผ่านคำขอ POST เนื้อหาของ POST อยู่ใน multipart/form-data และประกอบด้วยสองไฟล์

  1. ไฟล์ JSON ข้อความชื่อ model.json ซึ่งมีโทโพโลยีและการอ้างอิงถึงไฟล์น้ำหนักที่อธิบายไว้ด้านล่าง
  2. ไฟล์ไบนารีที่มีค่าน้ำหนักชื่อ model.weights.bin

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

บ่อยครั้งคุณจะต้องส่งอาร์กิวเมนต์หรือส่วนหัวของคำขอไปยังเซิร์ฟเวอร์ HTTP ของคุณมากขึ้น (เช่นสำหรับการตรวจสอบสิทธิ์หรือหากคุณต้องการระบุโฟลเดอร์ที่ควรบันทึกโมเดล) คุณสามารถได้รับการควบคุมอย่างละเอียดในแง่มุมเหล่านี้ของคำขอจากการ save โดยการแทนที่อาร์กิวเมนต์สตริง URL ใน tf.io.browserHTTPRequest API นี้ช่วยเพิ่มความยืดหยุ่นในการควบคุมคำขอ HTTP

ตัวอย่างเช่น:

await model.save(tf.io.browserHTTPRequest(
    'http://model-server.domain/upload',
    {method: 'PUT', headers: {'header_key_1': 'header_value_1'} }));

Native File System (Node.js เท่านั้น)

โครงการ: file://

await model.save('file:///path/to/my-model');

เมื่อรันบน Node.js เรายังสามารถเข้าถึงระบบไฟล์ได้โดยตรงและสามารถบันทึกโมเดลได้ที่นั่น คำสั่งด้านบนจะบันทึกไฟล์สองไฟล์ไปยัง path ระบุโดยอ้างอิง scheme

  1. ไฟล์ JSON ข้อความชื่อ [model].json ซึ่งมีโทโพโลยีและการอ้างอิงไปยังไฟล์น้ำหนักที่อธิบายไว้ด้านล่าง
  2. ไฟล์ไบนารีที่มีค่าน้ำหนักชื่อ [model].weights.bin

โปรดทราบว่าชื่อของทั้งสองไฟล์จะตรงตามที่ระบุไว้ข้างต้นเสมอ (ชื่อนี้สร้างขึ้นในฟังก์ชัน)

กำลังโหลด tf

ด้วยโมเดลที่บันทึกโดยใช้วิธีใดวิธีหนึ่งข้างต้นเราสามารถโหลดได้โดยใช้ tf.loadLayersModel API

มาดูกันว่าโค้ดสำหรับการโหลดโมเดลมีลักษณะอย่างไร

const model = await tf.loadLayersModel('localstorage://my-model-1');

สิ่งที่ควรทราบ:

  • เช่นเดียวกับ model.save() ฟังก์ชัน loadLayersModel รับอาร์กิวเมนต์สตริง URL ที่เริ่มต้นด้วย แบบแผน ข้อมูลนี้อธิบายประเภทของปลายทางที่เราพยายามโหลดโมเดล
  • โครงร่างตามด้วย เส้นทาง ในตัวอย่างด้านบนเส้นทางคือ my-model-1
  • สตริงที่เหมือน URL สามารถถูกแทนที่ด้วยอ็อบเจ็กต์ที่ตรงกับอินเทอร์เฟซ IOHandler
  • tf.loadLayersModel() เป็นแบบอะซิงโครนัส
  • ค่าส่งคืนของ tf.loadLayersModel คือ tf.Model

ด้านล่างนี้เราจะตรวจสอบรูปแบบต่างๆที่มีให้

ที่จัดเก็บในตัวเครื่อง (เบราว์เซอร์เท่านั้น)

โครงการ: localstorage://

const model = await tf.loadLayersModel('localstorage://my-model');

สิ่งนี้จะโหลดโมเดลที่ชื่อว่า my-model จากที่ เก็บข้อมูลในเครื่อง ของเบราว์เซอร์

IndexedDB (เบราว์เซอร์เท่านั้น)

โครงการ: indexeddb://

const model = await tf.loadLayersModel('indexeddb://my-model');

สิ่งนี้จะโหลดโมเดลจากหน่วยเก็บข้อมูล IndexedDB ของเบราว์เซอร์

HTTP (S)

โครงการ: http:// หรือ https://

const model = await tf.loadLayersModel('http://model-server.domain/download/model.json');

สิ่งนี้โหลดโมเดลจากจุดสิ้นสุด http หลังจากโหลดไฟล์ json แล้วฟังก์ชันจะทำการร้องขอไฟล์ .bin เกี่ยวข้องซึ่งไฟล์ json อ้างอิง

Native File System (Node.js เท่านั้น)

โครงการ: file://

const model = await tf.loadLayersModel('file://path/to/my-model/model.json');

เมื่อรันบน Node.js เรายังสามารถเข้าถึงระบบไฟล์ได้โดยตรงและสามารถโหลดโมเดลจากที่นั่นได้ โปรดทราบว่าในการเรียกใช้ฟังก์ชันด้านบนเราอ้างอิงไฟล์ model.json เอง (ในขณะที่เมื่อบันทึกเราระบุโฟลเดอร์) ไฟล์ .bin เกี่ยวข้องควรอยู่ในโฟลเดอร์เดียวกับไฟล์ json

กำลังโหลดโมเดลด้วย IOHandlers

หากรูปแบบข้างต้นไม่เพียงพอสำหรับความต้องการของคุณคุณสามารถใช้พฤติกรรมการโหลดแบบกำหนดเองกับ IOHandler ได้ IOHandler หนึ่ง IOHandler ที่ TensorFlow.js มีให้คือ tf.io.browserFiles ซึ่งอนุญาตให้ผู้ใช้เบราว์เซอร์อัปโหลดไฟล์โมเดลในเบราว์เซอร์ ดู เอกสาร สำหรับข้อมูลเพิ่มเติม

การบันทึกและการโหลดโมเดลด้วย IOHandlers ที่กำหนดเอง

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

IOHandler เป็นวัตถุที่มีวิธี save และ load

ฟังก์ชัน save รับพารามิเตอร์หนึ่งตัวที่ตรงกับอินเทอร์เฟซ ModelArtifacts และควรส่งคืนสัญญาที่แก้ไขกับอ็อบเจ็กต์ SaveResult

ฟังก์ชัน load ไม่ใช้พารามิเตอร์และควรส่งคืนสัญญาที่แก้ไขกับอ็อบเจ็กต์ ModelArtifacts นี่คืออ็อบเจ็กต์เดียวกับที่ถูกส่งผ่านเพื่อ save

โปรดดู BrowserHTTPRequest สำหรับตัวอย่างวิธีการใช้งาน IOHandler