ฝึกโมเดลโดยใช้ผู้ปฏิบัติงานบนเว็บ

ในบทช่วยสอนนี้ คุณจะได้สำรวจตัวอย่างเว็บแอปพลิเคชันที่ใช้ พนักงานเว็บ เพื่อฝึก Recurrent Neural Network (RNN) ให้ทำการบวกจำนวนเต็ม แอปตัวอย่างไม่ได้กำหนดตัวดำเนินการบวกอย่างชัดเจน แต่จะฝึก RNN โดยใช้ผลรวมตัวอย่างแทน

แน่นอนว่านี่ไม่ใช่วิธีที่มีประสิทธิภาพที่สุดในการเพิ่มจำนวนเต็มสองตัว! แต่บทช่วยสอนสาธิตเทคนิคที่สำคัญใน ML ของเว็บ: วิธีดำเนินการคำนวณที่ใช้เวลานานโดยไม่ปิดกั้นเธรดหลัก ซึ่งจัดการตรรกะของ UI

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

โค้ดตัวอย่างมีอยู่ใน GitHub

(ไม่บังคับ) เรียกใช้ตัวอย่างในเครื่อง

ข้อกำหนดเบื้องต้น

หากต้องการเรียกใช้แอปตัวอย่างในเครื่อง คุณต้องติดตั้งสิ่งต่อไปนี้ในสภาพแวดล้อมการพัฒนาของคุณ:

ติดตั้งและเรียกใช้แอปตัวอย่าง

  1. โคลนหรือดาวน์โหลดพื้นที่เก็บ tfjs-examples
  2. เปลี่ยนเป็นไดเร็กทอรี addition-rnn-webworker :

    cd tfjs-examples/addition-rnn-webworker
    
  3. ติดตั้งการพึ่งพา:

    yarn
    
  4. เริ่มเซิร์ฟเวอร์การพัฒนา:

    yarn run watch
    

สำรวจตัวอย่าง

เปิดแอปตัวอย่าง (หรือหากคุณใช้งานตัวอย่างในเครื่อง ให้ไปที่ http://localhost:1234 ในเบราว์เซอร์ของคุณ)

คุณควรเห็นหน้าที่ชื่อ TensorFlow.js: Addition RNN ทำตามคำแนะนำเพื่อลองใช้แอป

เมื่อใช้เว็บฟอร์ม คุณสามารถอัปเดตพารามิเตอร์บางส่วนที่ใช้ในการฝึกโมเดลได้ รวมถึงสิ่งต่อไปนี้:

  • Digits : จำนวนหลักสูงสุดในเงื่อนไขที่จะบวก
  • ขนาดการฝึก : จำนวนตัวอย่างการฝึกที่จะสร้าง
  • ประเภท RNN : หนึ่งใน SimpleRNN , GRU หรือ LSTM
  • ขนาดเลเยอร์ที่ซ่อนอยู่ RNN : ขนาดของพื้นที่เอาต์พุต (ต้องเป็นจำนวนเต็มบวก)
  • ขนาดแบทช์ : จำนวนตัวอย่างต่อการอัพเดตการไล่ระดับสี
  • Train Iterations : จำนวนครั้งในการฝึกโมเดลโดยการเรียกใช้ model.fit()
  • # ของตัวอย่างการทดสอบ : จำนวนสตริงตัวอย่าง (เช่น 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 โปรดดู โมเดลการฝึก