البرمجة

تعرّف الأرقام بتنسرفلو

مقدّمة معمّقة في بناء شبكة عصبية للتعرّف على الأرقام المكتوبة بخط اليد باستخدام ‎TensorFlow‎

ساهمت شبكات التعلّم العميق في تحقيق ثورة معرفية وعملية في مجالات الرؤية الحاسوبية، ويُعَدّ التعرّف الآلي على الأرقام المكتوبة بخط اليد (Handwritten Digit Recognition) أحد أشهر تطبيقاتها التعليمية والتجارية على السواء. في هذا المقال المطوَّل نستعرض — بأسلوب علمي تطبيقي ـ الخطوات العملية والنظرية لبناء شبكة عصبية بالتحديد عبر مكتبة ‎TensorFlow‎، بدءًا من المفاهيم الرياضية الأساسية وصولًا إلى تحسين الأداء وتنظيم الكود للإنتاج. يعكس الطرح هنا منهجية متكاملة تستند إلى أفضل الممارسات في هندسة البيانات، تصميم النماذج، الضبط الفائق (Hyper‑parameter Tuning)، ونشر النموذج.


1. خلفيّة رياضيّة موجزة: لماذا تعمل الشبكات العصبية؟

  1. فضاءات المتّجهات عالية الأبعاد

    تُحوِّل الطبقات العصبية البيانات الخام (صور رمادية 28×28 بكسل في حالة ‎MNIST‎) إلى تمثيلات متدرجة التجريد. كل طبقة تنفّذ تحوُّلًا خطيًّا y=Wx+by = Wx + b متبوعًا بدالة لاخطية كريلو (ReLU) أو سيجمويد من أجل إدخال اللاخطية اللازمة لتعلّم الحدود المعقّدة بين الفئات.

  2. انحدار عكسي

    خوارزمية الانتشار العكسي (Back‑Propagation) تحسب مشتقات دالة الخسارة بالنسبة للأوزان باستخدام قاعدة السلسلة؛ هذا يتيح تحديث الأوزان عبر خوارزمية الانحدار التدريجي العشوائي (SGD) أو محسنات متقدمة مثل Adam.

  3. الاحتمالية والتصنيف

    طبقة Softmax في النهاية تُحوّل ناتج الشبكة إلى توزيع احتمالي يختار الفئة التي تمتلك أعلى احتمال. تُستخدَم خسارة الانتروبي التبادلي (Cross‑Entropy) لقياس الفجوة المعلوماتية بين التوزيع المستهدف وتوزيع النموذج.


2. تجهيز البيئة البرمجية

العنصر الإصدار المقترح الغرض
Python ‎3.11‎ أو أحدث دعم خصائص الكتابة الحديثة وتحسين السرعة
TensorFlow ‎2.16‎ واجهة Keras مدمجة ومسرّعات GPU
CUDA & cuDNN متوافق مع إصدار ‎TensorFlow‎ الاستفادة من المعالجات الرسوميّة
JupyterLab ‎4.x‎ تسهيل التجارب التفاعلية وتوثيقها

نصيحة هندسية: ثبّت الإصدارات داخل بيئة ‎virtualenv‎ أو ‎conda‎ لضمان عزلة التبعيات وسهولة إعادة الإنتاج.


3. استيراد البيانات ومعالجتها

يُعَدّ ‎MNIST‎ قاعدة بيانات معيارية مكوَّنة من ‎60,000‎ صورة للتدريب و‎10,000‎ للاختبار. تسمح ‎TensorFlow Datasets‎ بتحميلها بسطر واحد:

python
import tensorflow as tf (ds_train, ds_test), ds_info = tf.keras.datasets.mnist.load_data()
  1. تطبيع القيم إلى المجال ‎[0,1]‎ بقسمة البكسلات على ‎255‎.

  2. توسيع البعد (‎expand_dims‎) لإضافة قناة واحدة للحفاظ على بُنية ‎(batch_size, 28, 28, 1)‎.

  3. التصنيف الفئوي عبر ترميز ‎one‑hot‎ أو الاعتماد على ‎sparse_categorical_crossentropy‎ مباشرة.


4. تصميم بنية النموذج

4.1 الشبكة متعددة الطبقات التقليدية (MLP)

python
model = tf.keras.Sequential([ tf.keras.layers.Flatten(input_shape=(28, 28)), tf.keras.layers.Dense(512, activation='relu'), tf.keras.layers.Dropout(0.2), tf.keras.layers.Dense(10, activation='softmax') ])
  • Flatten يحوّل الصورة إلى متجه بطول ‎784‎.

  • طبقة ‎Dropout‎ بنسبة ‎0.2‎ تساعد في مقاومة فرط التعلّم (Overfitting).

4.2 الشبكة الالتفافية القياسية (CNN)

python
inputs = tf.keras.Input(shape=(28,28,1)) x = tf.keras.layers.Conv2D(32, 3, activation='relu')(inputs) x = tf.keras.layers.MaxPooling2D()(x) x = tf.keras.layers.Conv2D(64, 3, activation='relu')(x) x = tf.keras.layers.MaxPooling2D()(x) x = tf.keras.layers.Flatten()(x) x = tf.keras.layers.Dense(128, activation='relu')(x) outputs = tf.keras.layers.Dense(10, activation='softmax')(x) model = tf.keras.Model(inputs, outputs)
نوع الطبقة حجم المرشِّحات عدد المعلمات الوظيفة الرئيسية
Conv2D 3×3 ‎(kernel + bias) × خرائط الميزة‎ استخراج الأنماط المحلية
MaxPooling 2×2 0 تصغير الأبعاد مع الاحتفاظ بالمعلومات المكانية
Dense مرتبطة بعدد العقد دمج الخصائص لاستخراج علاقات عالمية

5. التهيئة والتدريب

python
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) history = model.fit(ds_train, y_train, validation_split=0.1, epochs=20, batch_size=128, callbacks=[ tf.keras.callbacks.EarlyStopping(patience=3, restore_best_weights=True), tf.keras.callbacks.ReduceLROnPlateau(factor=0.5, patience=2) ])
  • EarlyStopping يقلل زمن التدريب ويمنع فرط الملاءمة.

  • ReduceLROnPlateau يضبط معدل التعلّم ديناميكيًّا لتحسين التقارب.


6. تقييم النموذج وتحليل الخطأ

بعد التدريب يُلاحظ عادةً دقّة تفوق ‎99%‎ على مجموعة الاختبار. مع ذلك، يُستَحسَن تفحّص مصفوفة الالتباس (Confusion Matrix) لتحديد الأرقام الأكثر إشكالية (مثل التمييز بين ‎‘4’‎ و ‎‘9’‎). يمكن رسمها باستخدام ‎sklearn.metrics‎.

الرقم الحقيقي \ الرقم المتوقّع 0 1 2 3 4 5 6 7 8 9
4 1323 7
9 6 1194

القراءة الكمية للمصفوفة تكشف عن أزواج الخلط وتوجّه جهود التحسين مثل جمع أمثلة إضافية أو تعديل بنية النموذج.


7. تحسين الأداء المتقدّم

  1. Augmentation

    تدوير الصور ±15°، قص عشوائي، أو تغيير الإضاءة يرفع القدرة على التعميم.

  2. Batch Normalization

    إدراج طبقات ‎BatchNorm‎ بعد الطبقات الالتفافية يسرّع التعلّم عبر تثبيت توزيع التنشيط.

  3. Regularization L2

    إضافة عقوبة ‎λ‖W‖²‎ إلى دالة الخسارة تُقلِّص الأوزان المبالغ فيها.

  4. ضبط فائق آليّ

    استخدام ‎KerasTuner‎ مع حجز موارد حوسبة أوتوماتيكية لاختيار أفضل: عدد الطبقات، حجم المرشحات، معدل الإسقاط Dropout.


8. حفظ النموذج وتصديره

python
model.save('digit_classifier.h5')
  • يُمكِن لاحقًا استيراد النموذج في تطبيقات ‎TensorFlow Lite‎ للهواتف أو ‎TensorFlow.js‎ للويب.

  • جرّب ‎post‑training quantization‎ لتقليل حجم الملف وتسريع الاستدلال على الأجهزة محدودة الموارد.


9. دمج النموذج في واجهة تطبيقية (API)

  1. Flask أو FastAPI: إنشاء نقطة نهاية ‎/predict‎ تستقبل صورة ‎Base64‎ وتُعيد النتيجة.

  2. Docker: تغليف البيئة لضمان الاتساق عبر أنظمة التشغيل.

  3. CI/CD: أتمتة الاختبارات ونشر الحاوية إلى ‎Kubernetes‎ أو ‎AWS SageMaker‎.


10. الأمن والأخلاقيات

  • هجمات الإرجاع المعاكس (Adversarial Attacks) قد تربك النموذج بصور مُعدّلة دقيقًا؛ يمكن دمج دفاعات مثل ‎Defensive Distillation‎ أو طبقات التصحيح.

  • الخصوصية: عند جمع بيانات جديدة تأكد من إزالة أي بيانات تعريف شخصية (PII) والتقيد بمعايير ‎GDPR‎ أو ما يعادلها محليًّا.


11. مسار التطوير المستقبلي

  • نقل النموذج إلى محوّلات الرؤية (Vision Transformers) لاستكشاف قدراته الأعلى في تمثيل العلاقات العالمية.

  • تطبيق التعلّم المستمر (Continual Learning) لتحديث الشبكة بأمثلة جديدة دون إعادة تدريب كامل.

  • اعتماد الشرح التفسيري (Explainability) عبر خريطة تدرّج الموشورة (Grad‑CAM) لتوضيح منطقة الصورة التي أدت إلى التنبؤ.


خاتمة تنفيذية

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


المصادر

  1. ‎LeCun, Y., Bottou, L., Bengio, Y., & Haffner, P.‎ (1998). Gradient‑based learning applied to document recognition. Proceedings of the IEEE, 86(11), 2278‑2324.

  2. TensorFlow Developers. “TensorFlow Core API Reference.” ‎https://www.tensorflow.org/api_docs‎.