دليل شامل لبناء Multilayer Perceptron (MLP) باستخدام Keras
دليل شامل لبناء Multi-Layer Perceptrons، تدريب النماذج وتقييمها باستخدام Keras
في هذا الدليل، سنتعلم كيفية بناء شبكة عصبية متعددة الطبقات (Multi-Layer Perceptron – MLP) باستخدام مكتبة Keras بلغة Python. تُعتبر MLP واحدة من الشبكات العصبية الأساسية في التعلم العميق وتتألف من عدة طبقات من الوحدات العصبية. سنستعرض خطوة بخطوة كيفية بناء النموذج، تدريبه على بيانات MNIST، وتقييم أدائه.
1. ما هو Multi-Layer Perceptron (MLP)؟
Multi-Layer Perceptron (MLP) هو نوع من الشبكات العصبية الاصطناعية يتكون من عدة طبقات متصلة من الوحدات العصبية (Neurons). تُرتب هذه الوحدات في:
- طبقة إدخال (Input Layer): تستقبل بيانات الإدخال.
- طبقات مخفية (Hidden Layers): تعالج المعلومات عن طريق استخراج الميزات الأساسية. تستخدم غالبًا دوال تفعيل غير خطية مثل
ReLU
. - طبقة إخراج (Output Layer): تقدم النتائج النهائية للتصنيف أو التنبؤ. في التصنيف متعدد الفئات، تُستخدم عادةً دالة التفعيل
softmax
.
يتم تدريب MLP باستخدام خوارزمية backpropagation، التي تقوم بتحديث الأوزان بناءً على الفرق بين النتيجة المتوقعة والنتيجة الفعلية، وذلك بهدف تقليل الخطأ في التنبؤ.
ما هي دالة التفعيل ReLU؟
ReLU
، أو Rectified Linear Unit، هي دالة غير خطية تُستخدم لتحسين الأداء من خلال السماح للنموذج بالتعلم من الأنماط غير الخطية في البيانات. تقوم بتحويل كل قيمة سلبية إلى صفر، وتبقي القيم الموجبة كما هي، مما يؤدي إلى تسريع عملية التدريب.
ما هي دالة softmax؟
softmax
تُستخدم في طبقة الإخراج في حالات التصنيف متعدد الفئات. تقوم بتحويل مخرجات النموذج إلى احتمالات بحيث يكون مجموعها 1. هذا يساعد النموذج على التنبؤ بالفئة الأكثر احتمالية.
2. مقدمة عن Keras
Keras هي مكتبة مفتوحة المصدر مصممة لتسهيل بناء وتدريب نماذج التعلم العميق. تعمل فوق مكتبات قوية مثل TensorFlow، وتوفر واجهة برمجة تطبيقات (API) بسيطة وسهلة الاستخدام. تدعم Keras الشبكات العصبية المتصلة بالكامل مثل MLP، وأيضًا الهياكل الأكثر تعقيدًا مثل الشبكات التلافيفية (CNN) والشبكات التكرارية (RNN).
3. تثبيت Keras وTensorFlow
للبدء في استخدام Keras، تحتاج إلى تثبيت TensorFlow الذي يعمل كالمحرك الأساسي خلف Keras. يمكنك تثبيتهما باستخدام pip
:
pip install tensorflow keras
بعد التثبيت، ستكون جاهزًا لبناء نماذج التعلم العميق باستخدام Keras.
4. بناء نموذج MLP باستخدام Keras
لنبدأ ببناء MLP بسيط يحتوي على:
- طبقة إدخال تستقبل متجه بحجم 784 (لأن كل صورة في بيانات MNIST هي 28×28 بكسل، وتحتاج إلى تحويلها إلى متجه مسطح).
- طبقتين مخفيتين تحتويان على وحدات عصبية مع دالة تفعيل
ReLU
. - طبقة إخراج تحتوي على 10 وحدات عصبية (واحدة لكل رقم من 0 إلى 9) باستخدام
softmax
للتصنيف متعدد الفئات.
from keras.models import Sequential
from keras.layers import Dense
# إنشاء النموذج
model = Sequential()
# الطبقة المخفية الأولى
model.add(Dense(128, activation='relu', input_shape=(784,)))
# الطبقة المخفية الثانية
model.add(Dense(64, activation='relu'))
# طبقة الإخراج
model.add(Dense(10, activation='softmax'))
شرح الكود:
- الطبقة الأولى: تحتوي على 128 وحدة عصبية وتستخدم
ReLU
كدالة التفعيل، مع شكل إدخال (784,). - الطبقة الثانية: تحتوي على 64 وحدة عصبية وتستخدم
ReLU
. - طبقة الإخراج: تحتوي على 10 وحدات عصبية تستخدم
softmax
للتصنيف إلى الفئات العشر.
5. تجميع النموذج
بعد بناء النموذج، نحتاج إلى تجميعه باستخدام optimizer
(محسن) مثل adam
، وloss function
(دالة الخسارة) مثل categorical_crossentropy
لأنها مناسبة للتصنيف متعدد الفئات. نحدد أيضًا accuracy
كمقياس لأداء النموذج.
# تجميع النموذج
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
# عرض ملخص النموذج
model.summary()
بعد التجميع، سيعرض model.summary()
ملخصًا للنموذج، يظهر عدد الوحدات العصبية في كل طبقة وعدد المعلمات القابلة للتدريب.
6. تجهيز بيانات التدريب
سنستخدم بيانات MNIST، وهي مجموعة بيانات تحتوي على صور مكتوبة بخط اليد للأرقام من 0 إلى 9. يجب أولاً تحويل الصور إلى متجهات مسطحة بحجم 784 عنصر، وتطبيع القيم لتكون بين 0 و1. بالإضافة إلى ذلك، سنقوم بتحويل التسميات إلى one-hot encoding
، حيث يتم تمثيل كل فئة بمصفوفة من 10 عناصر تحتوي على 1 في الموقع الذي يمثل الرقم الصحيح.
from keras.datasets import mnist
from keras.utils import to_categorical
# تحميل بيانات MNIST
(x_train, y_train), (x_test, y_test) = mnist.load_data()
# إعادة تشكيل البيانات إلى متجهات بحجم 784 وتطبيعها
x_train = x_train.reshape(60000, 784).astype('float32') / 255
x_test = x_test.reshape(10000, 784).astype('float32') / 255
# تحويل التسميات إلى صيغة one-hot encoding
y_train = to_categorical(y_train, 10)
y_test = to_categorical(y_test, 10)
ماذا يحدث هنا؟
يتم تحويل بيانات MNIST إلى متجهات مسطحة، كما يتم تطبيع قيم البكسل إلى النطاق [0, 1]. يتم تحويل التسميات إلى one-hot encoding
، بحيث يتم تمثيل كل رقم كمتجه يحتوي على 1 في المكان الذي يشير إلى تلك الفئة.
7. تدريب النموذج
الآن بعد تجهيز البيانات، يمكننا تدريب النموذج باستخدام دالة fit()
. سنقوم بتدريب النموذج لمدة 10 دورات (epochs) مع حجم دفعة (batch size) قدره 32. ستساعدنا بيانات التحقق في متابعة أداء النموذج على بيانات جديدة بعد كل دورة.
# تدريب النموذج
model.fit(x_train, y_train, epochs=10, batch_size=32, validation_data=(x_test, y_test))
تقوم هذه الدالة بتدريب النموذج على مجموعة بيانات التدريب x_train
وy_train
، وفي نهاية كل دورة (epoch)، يتم تقييم النموذج على بيانات الاختبار x_test
وy_test
.
8. تقييم النموذج
بعد اكتمال التدريب، يمكننا تقييم النموذج باستخدام model.evaluate()
لحساب الخسارة والدقة على بيانات الاختبار. هذا يعطينا فكرة عن مدى قدرة النموذج على التعميم على بيانات جديدة.
# تقييم النموذج
test_loss, test_acc = model.evaluate(x_test, y_test)
print(f'Test accuracy: {test_acc}')
سيتم طباعة دقة النموذج على بيانات الاختبار، مما يساعدنا على تقييم مدى فعالية النموذج عند التعامل مع بيانات جديدة.
9. نصائح لتحسين النموذج
لتحسين أداء نموذج MLP الخاص بك، يمكنك اتباع بعض النصائح:
- إضافة Dropout layers بين الطبقات لمنع الإفراط في التكيف (overfitting).
- استخدام Batch Normalization لتسريع عملية التدريب وتحسين الاستقرار.
- تجربة زيادة عدد الوحدات العصبية في الطبقات المخفية.
- تعديل عدد epochs وحجم batch size لتحديد القيم المثلى.
10. الخاتمة
في هذا الدليل، تعلمنا كيفية بناء شبكة عصبية متعددة الطبقات (MLP) باستخدام Keras. استعرضنا كيفية تجهيز البيانات، بناء النموذج، تدريبه، وتقييم أدائه. يمكن أن تكون هذه الخطوات أساسًا لبناء نماذج أكثر تعقيدًا مع إمكانية استخدام أساليب مثل Dropout وBatch Normalization لتحسين الأداء.
اترك تعليقاً