آموزش یک مدل با استفاده از وب کارگر

در این آموزش، شما یک نمونه برنامه وب را بررسی خواهید کرد که از یک وب کارگر برای آموزش شبکه عصبی بازگشتی (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 را ببینید. دستورالعمل ها را دنبال کنید تا برنامه را امتحان کنید.

با استفاده از فرم وب، می توانید برخی از پارامترهای مورد استفاده برای آموزش مدل را به روز کنید، از جمله موارد زیر:

  • رقم : حداکثر تعداد ارقام در شرایطی که باید اضافه شود.
  • اندازه آموزش : تعداد نمونه های آموزشی برای تولید.
  • نوع RNN : یکی از SimpleRNN ، GRU ، یا LSTM .
  • اندازه لایه پنهان RNN : ابعاد فضای خروجی (باید یک عدد صحیح مثبت باشد).
  • اندازه دسته ای : تعداد نمونه در به روز رسانی گرادیان.
  • تکرارهای Train : تعداد دفعات آموزش مدل با فراخوانی model.fit()
  • # نمونه‌های آزمایشی : تعداد رشته‌های نمونه (مثلاً 27+41 ) برای تولید.

سعی کنید مدل را با پارامترهای مختلف آموزش دهید و ببینید آیا می‌توانید دقت پیش‌بینی‌ها را برای مجموعه‌های مختلف ارقام بهبود ببخشید. همچنین توجه کنید که چگونه زمان تناسب مدل تحت تأثیر پارامترهای مختلف قرار می گیرد.

کد را کاوش کنید

برنامه مثال برخی از پارامترهایی را که می توانید برای آموزش یک RNN پیکربندی کنید، نشان می دهد. همچنین استفاده از وب کارگر را برای آموزش یک مدل خارج از موضوع اصلی نشان می دهد. کارگران وب در وب ML مهم هستند زیرا به شما امکان می دهند وظایف آموزشی گران قیمت محاسباتی را بر روی یک رشته پس زمینه اجرا کنید، در نتیجه از مشکلات عملکرد بالقوه تأثیرگذار بر روی رشته اصلی جلوگیری می کنید. رشته های اصلی و کارگر از طریق رویدادهای پیام با یکدیگر ارتباط برقرار می کنند.

برای کسب اطلاعات بیشتر در مورد وب کارگران، Web Workers API و Using 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 را در صفحه قرار می دهد.

بعدش چی

این آموزش نمونه ای از استفاده از وب کارگر برای جلوگیری از مسدود شدن رشته رابط کاربری با یک فرآیند آموزشی طولانی مدت ارائه کرده است. برای کسب اطلاعات بیشتر در مورد مزایای انجام محاسبات گران قیمت در یک رشته پس زمینه، به استفاده از وب کارگران برای اجرای جاوا اسکریپت از رشته اصلی مرورگر مراجعه کنید.

برای کسب اطلاعات بیشتر در مورد آموزش مدل TensorFlow.js، به مدل‌های آموزشی مراجعه کنید.