بناء النموذج في TensorFlow.js
بعد جمع البيانات وتنظيفها، تأتي مرحلة مهمة جدًا في أي مشروع
TensorFlow.js، وهي مرحلة
بناء النموذج. في هذه المرحلة يتم تحويل البيانات
إلى الشكل المناسب للحساب، ثم تجهيزها للتعلم، ثم إنشاء
النموذج العصبي الذي سيحاول اكتشاف العلاقة بين المدخلات والمخرجات.
الصفحة الأصلية تركز على 3 أجزاء مترابطة:
- تحويل البيانات إلى Tensors
- تطبيع البيانات Normalization
- إنشاء نموذج TensorFlow ثم تجميعه Compile
تحويل البيانات إلى Tensors
توضح الصفحة أن TensorFlow لا يعمل مباشرة على المصفوفات العادية،
بل يجب أولًا تحويل البيانات إلى Tensor Data.
ولهذا يتم أخذ قيم الإدخال وقيم الإخراج من البيانات الجاهزة،
ثم تحويلها إلى 2D Tensors.
في هذا الجزء:
- inputs تحتوي على قيم الإدخال x
- labels تحتوي على القيم الصحيحة y
- tf.tensor2d() يحول هذه القيم إلى Tensor ثنائي الأبعاد
واستخدام الشكل
[inputs.length, 1]
يعني أن لدينا عددًا من الصفوف يساوي عدد القيم، وكل صف يحتوي
على قيمة واحدة فقط.
لماذا نستخدم Tensor ثنائي الأبعاد؟
السبب أن النموذج في هذا المثال يتعامل مع
مدخل واحد فقط لكل عينة،
وهو قيمة x.
ولهذا يجب أن تكون البيانات في شكل يناسب الطبقات العصبية،
أي صفوف تمثل العينات وأعمدة تمثل الخصائص.
وبما أن لدينا خاصية واحدة فقط، يكون عدد الأعمدة = 1.
تطبيع البيانات Data Normalization
بعد تحويل البيانات إلى Tensors، توضح الصفحة خطوة أساسية جدًا
قبل إدخال البيانات إلى الشبكة العصبية، وهي
تطبيع البيانات.
وتذكر الصفحة أن البيانات يجب أن تُطبّع قبل استخدامها
في الشبكة العصبية، وأن المجال
من 0 إلى 1 باستخدام
Min-Max Normalization
يكون غالبًا الأفضل للبيانات العددية.
في هذا المثال:
- يتم استخراج أقل وأعلى قيمة من بيانات الإدخال
- يتم استخراج أقل وأعلى قيمة من بيانات الإخراج
- ثم يتم تحويل كل القيم إلى نطاق يبدأ من 0 وينتهي عند 1
هذا يجعل التدريب أكثر استقرارًا، ويساعد النموذج على التعلّم
بشكل أفضل بدلًا من التعامل مع قيم متباعدة جدًا في مداها.
لماذا التطبيع مهم؟
إذا دخلت البيانات إلى النموذج بأحجام مختلفة جدًا،
قد يصبح التعلم أبطأ أو أقل استقرارًا.
أما عندما تتحول القيم إلى نفس النطاق تقريبًا،
فإن الشبكة العصبية تصبح أكثر قدرة على تعديل الأوزان
بطريقة منتظمة أثناء التدريب.
ولهذا تُعد خطوة التطبيع من أهم الخطوات قبل التدريب الفعلي،
خصوصًا في الأمثلة التعليمية الأولى.
ما هو TensorFlow Model؟
بعد تجهيز البيانات، تنتقل الصفحة إلى تعريف النموذج نفسه.
وتوضح أن Machine Learning Model
هو خوارزمية تنتج Output من Input.
أي أن النموذج يتعلم كيف يحول المدخلات إلى نتائج،
بعد أن يرى أمثلة كافية أثناء التدريب.
إنشاء نموذج TensorFlow
توضح الصفحة أن هذا المثال يستخدم
3 أسطر فقط لتعريف نموذج تعلم آلة بسيط:
وهذا النموذج يتكون من:
- نموذج متسلسل Sequential Model
- طبقتين من نوع dense
النموذج المتسلسل Sequential Model
تشرح الصفحة أن:
يقوم بإنشاء Sequential ML Model.
وفي هذا النوع من النماذج تتدفق البيانات من الإدخال
إلى الإخراج بشكل مباشر عبر الطبقات.
كما توضح الصفحة أن هذا النوع هو
أسهل نوع من نماذج تعلم الآلة،
لأنه يُبنى طبقة بعد طبقة، بحيث ترتبط الأوزان
في كل طبقة بما يليها.
طبقات TensorFlow
بعد ذلك توضح الصفحة أن:
تُستخدم لإضافة الطبقات إلى النموذج.
وفي المثال الحالي تتم إضافة طبقتين.
أما نوع الطبقة المستخدمة فهو:
وتشرح الصفحة أن طبقة
dense
هي نوع مناسب في معظم الحالات،
وأنها تعمل من خلال ضرب المدخلات في
مصفوفة أوزان ثم إضافة
قيمة انحياز Bias إلى الناتج.
Shapes and Units
توضح الصفحة معنى القيم المستخدمة في تعريف الطبقة الأولى:
- inputShape: [1] لأن لدينا مدخلًا واحدًا فقط وهو x
- units: 1 لأن حجم مصفوفة الأوزان هنا يعتمد على وجود وزن واحد لكل إدخال
بمعنى آخر: هذا النموذج مصمم لتعلم علاقة بسيطة
بين متغير إدخال واحد ومتغير إخراج واحد.
تجميع النموذج Compiling a Model
بعد بناء النموذج وإضافة طبقاته، تأتي خطوة
Compile.
وفي هذه المرحلة يتم تحديد:
- خوارزمية التحسين optimizer
- دالة الخسارة loss function
في هذا السطر:
- sgd هي اختصار Stochastic Gradient Descent
- meanSquaredError هي الدالة المستخدمة لمقارنة توقعات النموذج بالقيم الصحيحة
وتذكر الصفحة أن optimizer من نوع
sgd
بسيط في الاستخدام وفعّال في هذا النوع من الأمثلة.
دور دالة الخسارة
دالة الخسارة أو loss function
هي الطريقة التي يقيس بها النموذج مدى جودة توقعاته.
فكلما كانت قيمة الخطأ أقل، كان النموذج أقرب
إلى فهم العلاقة الصحيحة بين x وy.
وفي هذا المثال يتم استخدام
meanSquaredError
لأنها مناسبة في مسائل الانحدار البسيطة.
دور الـ Optimizer
أما optimizer فهو المسؤول عن تحديث الأوزان
بطريقة تقلل الخطأ تدريجيًا أثناء التدريب.
وبالتالي فهو جزء أساسي في عملية التعلم نفسها،
لأنه يحدد كيف يتحرك النموذج من تخمينات ضعيفة
إلى نتائج أفضل بمرور الوقت.
ما الذي توضحه هذه الصفحة فعليًا؟
هذا الدرس مهم لأنه يمثل الجسر بين
البيانات والتدريب.
فهو لا يدخل بعد في تفاصيل fit أو predict،
لكنه يشرح بدقة المرحلة التي تسبق ذلك:
- تحويل البيانات إلى Tensors
- تطبيعها لتصبح مناسبة للشبكة العصبية
- بناء نموذج متسلسل
- إضافة طبقات dense
- تجميع النموذج باستخدام loss وoptimizer
وبدون هذه الخطوات، لا يمكن الانتقال بشكل صحيح
إلى مرحلة التدريب الفعلي.
الخلاصة
يوضح هذا الدرس أن بناء النموذج في TensorFlow.js
يبدأ بتحويل البيانات إلى Tensors،
ثم تطبيعها بين 0 و1 باستخدام
Min-Max Normalization.
بعد ذلك يتم إنشاء نموذج
Sequential وإضافة طبقتين من نوع
dense، ثم تجميع النموذج باستخدام
meanSquaredError وsgd.
وهكذا تضع الصفحة الأساس المباشر للانتقال لاحقًا
إلى مرحلة تدريب النموذج على البيانات.
