الشبكات العصبية هي مفهوم مهم في مجالات الذكاء الاصطناعي والتعلم الآلي. وهي تتكون من عقد مترابطة ، منظمة في طبقات ، وتحاكي كيفية عمل الدماغ البشري. تمثل العقد الخلايا العصبية في الدماغ البشري.
يمكنك إنشاء شبكتك العصبية البسيطة ذات التصنيف المتعدد الفئات. قم بتدريبه على تصنيف الأرقام المكتوبة بخط اليد باستخدام مجموعة بيانات MNIST. يمكنك بعد ذلك استخدام رؤية الكمبيوتر لتصنيف الأرقام المكتوبة بخط اليد.
ما هو التصنيف متعدد الفئات؟
التصنيف متعدد الفئات هو نوع من التعلم الآلي يمكنه تصنيف البيانات إلى أكثر من فئتين. تستخدم الشبكات العصبية مصنف softmax لتوزيع الاحتمالية على الفئات الممكنة.
يمكنك استخدام التصنيف متعدد الفئات لتصنيف الصور المكتوبة بخط اليد من مجموعة بيانات MNIST إلى 10 فئات. تتوافق هذه الفئات مع الأرقام من 0 إلى 9.
فهم مجموعة بيانات MNIST
مجموعة بيانات MNIST هي مجموعة بيانات مرجعية شائعة للتعلم الآلي وخوارزميات رؤية الكمبيوتر. يحتوي على 70000 صورة مكتوبة بخط اليد بتدرج الرمادي بحجم 28 × 28 بكسل. تقع الأرقام المكتوبة بخط اليد في النطاق من 0 إلى 9.
قبل إنشاء أي نموذج للتعلم الآلي ، من المهم أن تفهم ما تحتويه مجموعة البيانات الخاصة بك. سيمكنك فهم مجموعة البيانات من أداء معالجة أفضل للبيانات.
تحضير بيئتك
لمتابعة هذا البرنامج التعليمي ، يجب أن تكون على دراية بـ أساسيات لغة بايثون. يجب أن يكون لديك أيضًا ملف المعرفة الأساسية للتعلم الآلي. أخيرًا ، يجب أن تشعر بالراحة عند استخدام Jupyter Notebook أو Google Colab.
كود المصدر الكامل متاح في ملف مستودع جيثب.
أنشئ دفتر ملاحظات جديدًا من Jupyter أو سجّل الدخول إلى جوجل كولاب. قم بتشغيل هذا الأمر لتثبيت الحزم المطلوبة:
! نقطة تثبيت numpy matplotlib tensorflow opencv-python
ستستخدم:
- Matplotlib لتصور البيانات.
- NumPy لمعالجة المصفوفات.
- TensorFlow لإنشاء نموذجك وتدريبه.
- OpenCV لتغذية النموذج بالأرقام المكتوبة بخط اليد.
استيراد الوحدات الضرورية
قم باستيراد الحزم التي قمت بتثبيتها في بيئتك. سيسمح لك ذلك بالاتصال لاحقًا واستخدام وظائفها ووحداتها في التعليمات البرمجية الخاصة بك.
يستورد تينسورفلو مثل تف
من تينسورفلو يستورد كيراس
يستورد matplotlib.pyplot مثل PLT
٪ matplotlib مضمنة
يستورد حبيبي مثل np
يستورد السيرة الذاتية 2
يستورد السطر الثاني من التعليمات البرمجية وحدة Keras من ملف مكتبة Google TensorFlow. ستستخدم Keras لتدريب شبكتك العصبية العميقة باستخدام TensorFlow كخلفية.
تحميل وعرض مجموعة البيانات
تم تضمين مجموعة بيانات MNIST في Keras. قم بتحميل مجموعة بيانات MNIST وقسمها إلى مجموعات تدريب واختبار. ستستخدم مجموعة التدريب لتدريب نموذجك ومجموعة الاختبار لتقييم دقة نموذجك في تصنيف الصور الجديدة غير المرئية.
(X_train ، y_train) ، (X_test ، y_test) = keras.datasets.mnist.load_data ()
تحقق من طول مجموعات التدريب والاختبار. تحتوي مجموعة بيانات MNIST على 60.000 صورة للتدريب و 10000 صورة للاختبار.
لين (X_train)
لين (X_test)
تحقق من شكل الصورة الأولى في مجموعة بيانات MNIST والتي يجب أن تكون 28 × 28 بكسل. ثم قم بطباعة قيم البكسل الخاصة بها وتصورها باستخدام Matplotlib.
X_train [0].شكل
X_train [0]
plt.matshow (X_train [0])
y_train [0]
ناتج التصور كما يلي:
تُظهر الصورة المرئية أن الصورة الأولى في مجموعة البيانات تحتوي على الرقم خمسة.
معالجة البيانات
قبل استخدام البيانات الموجودة في مجموعة البيانات لتدريب النموذج واختباره ، تحتاج إلى معالجته مسبقًا. تعزز المعالجة المسبقة دقة النموذج من خلال توحيد البيانات.
تطبيع قيم البكسل
تطبيع قيم البكسل للصور في مجموعة البيانات بقسمة كل قيمة على 255. تتراوح قيم البكسل لمجموعة البيانات غير الطبيعية من 0 إلى 255 بحيث يكون الصفر أسودًا و 255 أبيض. يضمن قسمة قيمة كل بكسل على 255 أن كل بكسل يقع في النطاق بين 0 و 1. هذا يسهل على النموذج التعرف على الميزات والأنماط ذات الصلة في البيانات.
X_train = X_train / 255
X_test = X_test / 255
ثم اطبع قيم البكسل للصورة الأولى.
X_train [0]
لاحظ أنها تقع الآن في النطاق بين 0 و 1.
تحويل مصفوفات الصور إلى مصفوفة 1D
تتوقع طبقة الإدخال للشبكة العصبية عمومًا مدخلات 1D ، لذلك قم بإنشاء مصفوفة 1D لقيم البكسل في الصورة. للقيام بذلك ، استخدم وظيفة reshape () مع تعيين عدد الصور الأولية على عدد الصور في مجموعة البيانات.
X_train_flattened = X_train.reshape (لين (X_train) ، 28 * 28)
X_test_flattened = X_test.reshape (لين (X_test) ، 28 * 28)
X_train_flattened. شكل
X_train_flatted [0]
صورك جاهزة الآن للتدريب واختبار النموذج.
إنشاء نموذج الشبكة العصبية العميقة
قم بإنشاء نموذج تسلسلي باستخدام وحدة Keras الخاصة بـ Tensorflow باستخدام طبقة إدخال وطبقتين مخفيتين وطبقة إخراج. عيّن شكل الإدخال على 28 × 28 لأن هذا هو شكل الصور الأصلية في مجموعة البيانات. استخدم 128 عقدة للطبقات المخفية. يجب أن تحتوي طبقة الإخراج على 10 خلايا عصبية فقط لأنك تقوم فقط بتصنيف الأرقام من 0 إلى 9.
النموذج = keras. تسلسلي([
طبقات. تسطيح (input_shape = (28, 28)),طبقات. كثيف(128، التنشيط ="relu"),
طبقات. كثيف(128، التنشيط ="relu"),
طبقات. كثيف(10، التنشيط ="سوفت ماكس")
])
تجميع النموذج باستخدام آدم محسن متفرقة كدالة الخسارة ، والمقياس لتقييم أداء النموذج كما دقة. ثم أدخل بيانات التدريب في النموذج وحدد عدد الحقب على خمسة.
model.compile (محسن ="آدم",
خسارة ="متناثر_الفئات_الهجوم",
المقاييس = ['دقة'])
model.fit (X_train ، y_train ، عهود =5)
سيستغرق النموذج بضع دقائق للتدريب. بعد انتهاء تدريب النموذج ، قم بتقييم أدائه في مجموعة الاختبار.
تقييم النموذج (X_test ، y_test)
ستعيد وظيفة التقييم خسارة النموذج ودقته. ينتج النموذج دقة تصل إلى 98٪.
استخدام النموذج لتصنيف الأرقام المكتوبة بخط اليد
لتصنيف الأرقام المكتوبة بخط اليد ، تحتاج إلى تجهيز صورك لتطابق تلك الموجودة في مجموعة بيانات MNIST. سيؤدي عدم القيام بذلك إلى ضعف أداء النموذج الخاص بك.
لمعالجة الصور مسبقًا:
- قم بتحميل الصورة التي تحتوي على الرقم باستخدام OpenCV.
- قم بتحويله إلى تدرج رمادي وقم بتغيير حجمه إلى 28 × 28 بكسل.
- اقلب قيم البكسل وقم بتسويتها.
- أخيرًا ، قم بتسوية الصورة في مصفوفة 1D.
مرر الصورة المعالجة مسبقًا إلى النموذج للتنبؤ واطبع القيمة المتوقعة على الشاشة.
img = cv2.imread ("digit1.png"، cv2.IMREAD_GRAYSCALE)
img_resize = cv2.resize (img، (28, 28))
img_flip = cv2.bitwise_not (img_resize)
img_normalized = img_flip.astype ("تعويم 32") / 255.0# تسطيح الصورة في مجموعة 1D
input_data = img_normalized.flatten (). reshape ( 1,28,28)
# قم بعمل تنبؤ باستخدام النموذج
التنبؤ = model.predict (input_data)
مطبعة (و'التنبؤ: {np.argmax (توقع)}')
تمرير صورة مُعالجة تحتوي على رقم إلى النموذج.
خرج النموذج كالتالي:
كان النموذج قادرًا على تصنيف الرقم سبعة بشكل صحيح.
الشبكات العصبية في روبوتات المحادثة
انتشر استخدام الشبكات العصبية في السنوات القليلة الماضية. لقد تم استخدامها في الغالب في معالجة اللغة الطبيعية لترجمة اللغة والذكاء الاصطناعي التوليدي.
في الآونة الأخيرة ، كان هناك ارتفاع في عدد برامج الدردشة الآلية التي يمكنها التواصل بطريقة شبيهة بالبشر. يستخدمون نوعًا من الشبكات العصبية يُعرف باسم الشبكة العصبية المحولة. تفاعل مع بعضها واختبر قوة الشبكات العصبية.