ในบทช่วยสอนนี้ คุณจะได้สำรวจตัวอย่างเว็บแอปพลิเคชันที่ใช้ พนักงานเว็บ เพื่อฝึก Recurrent Neural Network (RNN) ให้ทำการบวกจำนวนเต็ม แอปตัวอย่างไม่ได้กำหนดตัวดำเนินการบวกอย่างชัดเจน แต่จะฝึก RNN โดยใช้ผลรวมตัวอย่างแทน
แน่นอนว่านี่ไม่ใช่วิธีที่มีประสิทธิภาพที่สุดในการเพิ่มจำนวนเต็มสองตัว! แต่บทช่วยสอนสาธิตเทคนิคที่สำคัญใน ML ของเว็บ: วิธีดำเนินการคำนวณที่ใช้เวลานานโดยไม่ปิดกั้นเธรดหลัก ซึ่งจัดการตรรกะของ UI
แอปพลิเคชันตัวอย่างสำหรับบทช่วยสอนนี้มี ให้ใช้งานออนไลน์ ดังนั้นคุณไม่จำเป็นต้องดาวน์โหลดโค้ดใดๆ หรือตั้งค่าสภาพแวดล้อมการพัฒนา หากคุณต้องการเรียกใช้โค้ดในเครื่อง ให้ทำตามขั้นตอนเสริมใน เรียกใช้ตัวอย่างในเครื่อง หากคุณไม่ต้องการตั้งค่าสภาพแวดล้อมการพัฒนา คุณสามารถข้ามไปที่ สำรวจตัวอย่าง ได้
โค้ดตัวอย่างมีอยู่ใน GitHub
(ไม่บังคับ) เรียกใช้ตัวอย่างในเครื่อง
ข้อกำหนดเบื้องต้น
หากต้องการเรียกใช้แอปตัวอย่างในเครื่อง คุณต้องติดตั้งสิ่งต่อไปนี้ในสภาพแวดล้อมการพัฒนาของคุณ:
ติดตั้งและเรียกใช้แอปตัวอย่าง
- โคลนหรือดาวน์โหลดพื้นที่เก็บ
tfjs-examples
เปลี่ยนเป็นไดเร็กทอรี
addition-rnn-webworker
:cd tfjs-examples/addition-rnn-webworker
ติดตั้งการพึ่งพา:
yarn
เริ่มเซิร์ฟเวอร์การพัฒนา:
yarn run watch
สำรวจตัวอย่าง
เปิดแอปตัวอย่าง (หรือหากคุณใช้งานตัวอย่างในเครื่อง ให้ไปที่ http://localhost:1234
ในเบราว์เซอร์ของคุณ)
คุณควรเห็นหน้าที่ชื่อ TensorFlow.js: Addition RNN ทำตามคำแนะนำเพื่อลองใช้แอป
เมื่อใช้เว็บฟอร์ม คุณสามารถอัปเดตพารามิเตอร์บางส่วนที่ใช้ในการฝึกโมเดลได้ รวมถึงสิ่งต่อไปนี้:
- Digits : จำนวนหลักสูงสุดในเงื่อนไขที่จะบวก
- ขนาดการฝึก : จำนวนตัวอย่างการฝึกที่จะสร้าง
- ประเภท RNN : หนึ่งใน SimpleRNN , GRU หรือ LSTM
- ขนาดเลเยอร์ที่ซ่อนอยู่ RNN : ขนาดของพื้นที่เอาต์พุต (ต้องเป็นจำนวนเต็มบวก)
- ขนาดแบทช์ : จำนวนตัวอย่างต่อการอัพเดตการไล่ระดับสี
- Train Iterations : จำนวนครั้งในการฝึกโมเดลโดยการเรียกใช้
model.fit()
- # of test examples : จำนวนสตริงตัวอย่าง (เช่น
27+41
) ที่จะสร้าง
ลองฝึกโมเดลด้วยพารามิเตอร์ที่แตกต่างกัน และดูว่าคุณสามารถปรับปรุงความแม่นยำของการคาดคะเนสำหรับชุดตัวเลขต่างๆ ได้หรือไม่ นอกจากนี้ ให้สังเกตด้วยว่าเวลาพอดีกับโมเดลได้รับผลกระทบจากพารามิเตอร์ต่างๆ อย่างไร
สำรวจรหัส
แอปตัวอย่างสาธิตพารามิเตอร์บางอย่างที่คุณสามารถกำหนดค่าสำหรับการฝึก RNN นอกจากนี้ยังสาธิตการใช้ผู้ปฏิบัติงานเว็บเพื่อฝึกโมเดลจากเธรดหลัก พนักงานเว็บมีความสำคัญใน ML ของเว็บ เนื่องจากช่วยให้คุณรันงานการฝึกอบรมที่มีราคาแพงในการคำนวณบนเธรดเบื้องหลังได้ จึงหลีกเลี่ยงปัญหาด้านประสิทธิภาพที่อาจส่งผลกระทบต่อผู้ใช้ในเธรดหลัก เธรดหลักและเธรดผู้ปฏิบัติงานสื่อสารกันผ่านเหตุการณ์ข้อความ
หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับ Web Workers โปรดดู Web Workers API และ การใช้ Web Workers
โมดูลหลักสำหรับแอปตัวอย่างคือ index.js
สคริปต์ index.js
สร้างพนักงานเว็บ ที่รันโมดูล worker.js
:
const worker =
new Worker(new URL('./worker.js', import.meta.url), {type: 'module'});
index.js
ส่วนใหญ่ประกอบด้วยฟังก์ชันเดียวคือ runAdditionRNNDemo
ซึ่งจัดการการส่งแบบฟอร์ม ประมวลผลข้อมูลแบบฟอร์ม ส่งข้อมูลแบบฟอร์มไปยังผู้ปฏิบัติงาน รอให้ผู้ปฏิบัติงานฝึกโมเดลและส่งคืนผลลัพธ์ จากนั้นจึงแสดงผลลัพธ์บนเพจ .
ในการส่งข้อมูลแบบฟอร์มไปยังผู้ปฏิบัติงาน สคริปต์ จะเรียกใช้ postMessage
บนผู้ปฏิบัติงาน:
worker.postMessage({
digits,
trainingSize,
rnnType,
layers,
hiddenSize,
trainIterations,
batchSize,
numTestExamples
});
ผู้ปฏิบัติงาน รับฟังข้อความนี้ และส่งข้อมูลแบบฟอร์มไปยังฟังก์ชันที่เตรียมข้อมูลและเริ่มการฝึกอบรม:
self.addEventListener('message', async (e) => {
const { digits, trainingSize, rnnType, layers, hiddenSize, trainIterations, batchSize, numTestExamples } = e.data;
const demo = new AdditionRNNDemo(digits, trainingSize, rnnType, layers, hiddenSize);
await demo.train(trainIterations, batchSize, numTestExamples);
})
ในระหว่างการฝึกอบรม ผู้ปฏิบัติงานสามารถส่งข้อความสองประเภทที่แตกต่างกัน โดย ประเภทหนึ่ง ตั้งค่า isPredict
เป็น true
self.postMessage({
isPredict: true,
i, iterations, modelFitTime,
lossValues, accuracyValues,
});
และ อีกอัน ที่มี isPredict
ตั้งค่าเป็น false
self.postMessage({
isPredict: false,
isCorrect, examples
});
เมื่อเธรด UI ( index.js
) จัดการเหตุการณ์ข้อความ จะ ตรวจสอบ แฟล็ก isPredict
เพื่อกำหนดรูปร่างของข้อมูลที่ส่งคืนจากผู้ปฏิบัติงาน หาก isPredict
เป็นจริง ข้อมูลควรแสดงถึงการคาดการณ์ และสคริปต์ จะอัปเดตเพจ โดยใช้ tfjs-vis
หาก isPredict
เป็นเท็จ สคริปต์จะเรียกใช้ บล็อกโค้ด ที่ถือว่าข้อมูลดังกล่าวแสดงถึงตัวอย่าง มันล้อมรอบข้อมูลในรูปแบบ HTML และแทรก HTML ลงในหน้า
อะไรต่อไป
บทช่วยสอนนี้ได้จัดเตรียมตัวอย่างการใช้พนักงานเว็บเพื่อหลีกเลี่ยงการบล็อกเธรด UI ด้วยกระบวนการฝึกอบรมที่ใช้เวลานาน หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับประโยชน์ของการคำนวณราคาแพงบนเธรดพื้นหลัง โปรดดู ที่ ใช้พนักงานเว็บเพื่อเรียกใช้ JavaScript จากเธรดหลักของเบราว์เซอร์
หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับการฝึกโมเดล TensorFlow.js โปรดดู โมเดลการฝึก