تدريب نموذج باستخدام عامل الويب

في هذا البرنامج التعليمي، ستستكشف مثالاً لتطبيق ويب يستخدم عامل ويب لتدريب شبكة عصبية متكررة (RNN) للقيام بعمليات جمع الأعداد الصحيحة. لا يحدد تطبيق المثال بشكل صريح عامل الإضافة. وبدلاً من ذلك، يقوم بتدريب RNN باستخدام أمثلة المجاميع.

بالطبع، هذه ليست الطريقة الأكثر فعالية لجمع عددين صحيحين! لكن البرنامج التعليمي يوضح تقنية مهمة في تعلم الآلة على الويب: كيفية إجراء عمليات حسابية طويلة الأمد دون حظر الخيط الرئيسي، الذي يتعامل مع منطق واجهة المستخدم.

التطبيق النموذجي لهذا البرنامج التعليمي متاح عبر الإنترنت ، لذلك لا تحتاج إلى تنزيل أي تعليمات برمجية أو إعداد بيئة تطوير. إذا كنت ترغب في تشغيل التعليمات البرمجية محليًا، فأكمل الخطوات الاختيارية في تشغيل المثال محليًا . إذا كنت لا ترغب في إعداد بيئة تطوير، فيمكنك التخطي إلى استكشاف المثال .

رمز المثال متاح على 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 : أبعاد مساحة الإخراج (يجب أن تكون عددًا صحيحًا موجبًا).
  • حجم الدفعة : عدد العينات لكل تحديث متدرج.
  • تكرارات التدريب : عدد مرات تدريب النموذج عن طريق استدعاء model.fit()
  • # أمثلة الاختبار : عدد سلاسل الأمثلة (على سبيل المثال، 27+41 ) المطلوب إنشاؤها.

حاول تدريب النموذج باستخدام معلمات مختلفة، ومعرفة ما إذا كان بإمكانك تحسين دقة التنبؤات لمجموعات مختلفة من الأرقام. لاحظ أيضًا كيف يتأثر وقت ملاءمة النموذج بمعلمات مختلفة.

استكشف الكود

يوضح مثال التطبيق بعض المعلمات التي يمكنك تكوينها لتدريب RNN. كما يوضح أيضًا استخدام عامل الويب لتدريب نموذج خارج الخيط الرئيسي. يعتبر عمال الويب مهمين في تعلم الآلة على الويب لأنهم يسمحون لك بتشغيل مهام تدريبية باهظة الثمن من الناحية الحسابية على سلسلة رسائل في الخلفية، وبالتالي تجنب مشكلات الأداء التي قد تؤثر على المستخدم في سلسلة الرسائل الرئيسية. تتواصل الخيوط الرئيسية والعاملة مع بعضها البعض من خلال أحداث الرسائل.

لمعرفة المزيد حول عمال الويب، راجع 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
});

عندما يتعامل مؤشر ترابط واجهة المستخدم ( index.js ) مع أحداث الرسالة، فإنه يتحقق من علامة isPredict لتحديد شكل البيانات التي يتم إرجاعها من العامل. إذا كانت قيمة isPredict صحيحة، فيجب أن تمثل البيانات تنبؤًا، ويقوم البرنامج النصي بتحديث الصفحة باستخدام tfjs-vis . إذا كانت isPredict خاطئة، فسيقوم البرنامج النصي بتشغيل كتلة من التعليمات البرمجية التي تفترض أن البيانات تمثل أمثلة. يقوم بتغليف البيانات بتنسيق HTML وإدراج HTML في الصفحة.

ماذا بعد

قدم هذا البرنامج التعليمي مثالاً لاستخدام عامل الويب لتجنب حظر سلسلة واجهة المستخدم من خلال عملية تدريب طويلة الأمد. لمعرفة المزيد حول فوائد إجراء عمليات حسابية باهظة الثمن على سلسلة محادثات في الخلفية، راجع استخدام العاملين على الويب لتشغيل JavaScript خارج سلسلة المحادثات الرئيسية في المتصفح .

لمعرفة المزيد حول تدريب نموذج TensorFlow.js، راجع نماذج التدريب .