معاينة مختبر آمنة
تصنيف MNIST باستخدام إطار العمل الخاص بنا
هذي معاينة منقّحة للقراءة فقط؛ ما فيه أي شيء يشتغل داخل الصفحة.
تعليمات المختبر
تصنيف MNIST باستخدام إطار العمل الخاص بنا
طبّقوا مفاهيم الدرس في هالمختبر الموجّه.
المطلوب
حلّوا مسألة التصنيف لأرقام MNIST المكتوبة بخط اليد باستخدام بيرسيبترون من 1، ثم 2، ثم 3 طبقات. استخدموا إطار الشبكات العصبية اللي طوّرناه بالدرس.
دفتر البداية
ابدؤوا المختبر بفتح MyFW_MNIST.ipynb.
أسئلة
بعد ما تخلصون المختبر، حاولوا تجاوبون عن هالأسئلة:
- هل دالة التنشيط بين الطبقات تأثّر على أداء الشبكة؟
- هل نحتاج شبكة من 2 أو 3 طبقات لهالمهمة؟
- هل واجهتكم مشاكل في تدريب الشبكة، خصوصًا يوم زاد عدد الطبقات؟
- وشلون تتصرّف أوزان الشبكة أثناء التدريب؟ تقدرون ترسمون أكبر قيمة مطلقة للأوزان مقابل حقبة التدريب (epoch) عشان تفهمون العلاقة.
قراءة فقط
معاينة الدفتر
My FW_MNIST
> **ملاحظة بيئة التشغيل المدمجة:** هالمعاينة تستخدم عيّنة صغيرة وثابتة وآمنة من ناحية الحقوق عشان تكون النتايج قابلة للتكرار. النتايج بالحجم الكامل تحتاج مجموعة البيانات أو النموذج الموثّق بالدرس داخل بيئة خارجية معتمدة.
# تصنيف أرقام MNIST باستخدام إطار العمل الخاص بنا
هالتكليف جزء من منهج AI for Beginners، وموضوعه التصنيف لأرقام MNIST.
### استخدام عيّنة الأرقام المدمجة
> تستخدم هالنسخة عيّنة الأرقام المكتوبة بخط اليد المدمجة مع scikit-learn، وتكبّر صورها من 8×8 إلى 28×28 بطريقة ثابتة. العيّنة أصغر من MNIST وما تحتاج اتصال بالشبكة؛ لذلك تختلف أعداد العينات والنتائج عن تمرين MNIST الأصلي.
import numpy as np
from sklearn.datasets import load_digits
from types import SimpleNamespace
_course_digits = load_digits()
_course_images = np.kron(_course_digits.images.astype(np.float32) / 16.0, np.ones((3, 3), dtype=np.float32))
_course_images = np.pad(_course_images, ((0, 0), (2, 2), (2, 2)))
mnist = SimpleNamespace(
data=(_course_images.reshape(len(_course_images), -1) * 255.0).astype(np.float32),
target=np.asarray(_course_digits.target, dtype=np.int64),
)all_features = np.asarray(mnist.data, dtype=np.float32)
all_labels = np.asarray(mnist.target, dtype=np.int64)
train_size = int(0.8 * len(all_features))
MNIST = {
"Train": {
"Features": all_features[:train_size],
"Labels": all_labels[:train_size],
},
"Test": {
"Features": all_features[train_size:],
"Labels": all_labels[train_size:],
},
}labels = MNIST['Train']['Labels']
data = MNIST['Train']['Features']خلّونا نشوف أبعاد البيانات اللي عندنا:
data.shape### تقسيم البيانات
بنستخدم مكتبة Scikit Learn عشان نقسّم مجموعة البيانات إلى مجموعتَي تدريب واختبار:
from sklearn.model_selection import train_test_split
features_train, features_test, labels_train, labels_test = train_test_split(data,labels,test_size=0.2)
print(f"Train samples: {len(features_train)}, test samples: {len(features_test)}")### التعليمات
1. خذوا كود إطار العمل من الدرس والصقوه في هالدفتر، أو — وهذا أفضل — حطّوه في وحدة Python مستقلة.
1. عرّفوا بيرسيبترون (Perceptron) بطبقة وحدة ودرّبوه، وراقبوا دقة التدريب والتحقّق أثناء التدريب.
1. حاولوا تحدّدون هل صار **فرط تكيّف** (overfitting)، وعدّلوا معاملات الطبقة لتحسين الدقة.
1. كرّروا الخطوات مع بيرسيبترون من 2 ثم 3 طبقات، وجرّبوا دوال تنشيط مختلفة بين الطبقات.
1. حاولوا تجاوبون عن هالأسئلة:
- هل دالة التنشيط بين الطبقات تأثّر على أداء الشبكة؟
- هل نحتاج شبكة من 2 أو 3 طبقات لهالمهمة؟
- هل واجهتكم مشاكل في تدريب الشبكة، خصوصًا يوم زاد عدد الطبقات؟
- وشلون تتصرّف أوزان الشبكة أثناء التدريب؟ تقدرون ترسمون أكبر قيمة مطلقة للأوزان مقابل حقبة التدريب (epoch) عشان تفهمون العلاقة.
حذفنا المخرجات وعدّادات التشغيل والودجات والمحتوى النشط وقت الاستيراد. شغّل الدفاتر بس في بيئة خارجية تثق فيها.
سجّل تطبيقك
التسجيل اختياري، يفيدك تتذكر وش طبّقت، ولا يمنع إكمال الدورة.