التعلم الموجه لتحليل الصور - الذكاء الاصطناعي - ثالث ثانوي
الجزء الأول
1. أساسيات الذكاء الاصطناعي
2. خوارزميات الذكاء الاصطناعي
3. معالجة اللغات الطبيعية
الجزء الثاني
4. التعرف على الصور
5. خوارزميات التحسين واتخاذ القرار
6. الذكاء الاصطناعي والمجتمع
.4 التعرّف على الصور 196 سيتعرف الطالب في هذه الوحدة على التعلم الموجه وغير الموجه، وكيفية توظيفهما للتعرف على الصور (Image Recognition عن طريق إنشاء نموذج وتدريبه؛ ليصبح قادرا على تصنيف صور لرؤوس الحيوانات أو تجميعها. وسيتعرف أيضًا على توليد الصور (Image Generation) وكيفية تغييرها، أو إكمال الأجزاء الناقصة فيها مع الحفاظ على واقعيتها. أهداف التعلم < بنهاية هذه الوحدة سيكون الطالب قادرًا على أن : يُعالج الصور معالجة أولية ويستخلص خصائصها. > يُدرِّب نموذج تعلَّم موجّه خاص بتصنيف الصور. V V V يُعرف هيكل الشبكة العصبية. يُدرب نموذج تعلم غير موجه خاص بتجميع الصور. يُولد صورًا بناءً على توجيه نصي. > يُكمل الأجزاء الناقصة في صورة مُعطاة بطريقة واقعية. الأدوات > مفكّرة جوبيتر (Jupyter Notebook) > قوقل كولاب Google Colab ) Ministry of Education 2024-1446
الدرس الأول التعلم الموجه لتحليل الصور رابط الدرس الرقمي www.ien.edu.sa التعلم الموجه في رؤية الحاسب Supervised Learning for Computer Vision تُعدُّ رؤية الحاسب ( Computer Vision) مجالًا فرعيًا من مجالات الذكاء الاصطناعي، والذي يُركّز على تعليم أجهزة الحاسب طريقة تفسير العالم المرئي وفهمه، ويتضمن استخدام الصور الرقمية ومقاطع الفيديو؛ لتدريب الآلات على التعرّف على المعلومات المرئية وتحليلها مثل الأشياء والأشخاص والمشاهد. ويتمثل الهدف النهائي الذي تسعى رؤية الحاسب إلى تحقيقه في تمكين الآلات من "رؤية" العالم كما يراه البشر ، واستخدام هذه المعلومات؛ لاتخاذ قرارات، أو للقيام بإجراءات. هناك مجموعة كبيرة من التطبيقات التي تُستخدم فيها رؤية الحاسب، مثل: • التصوير الطبي يمكن أن تساعد رؤية الحاسب الأطباء والمختصين في الرعاية الصحية على تشخيص الأمراض من خلال تحليل الصور الطبية مثل: الأشعة السينية، والتصوير بالرنين المغناطيسي، والأشعة المقطعية. المركبات ذاتية القيادة: تستخدم السيارات ذاتية القيادة والطائرات المُسيَّرة رؤية الحاسب للتعرف على إشارات المرور وأشكال الطرق العامة وطرق المشاة والعقبات في الطريق والجو، ولتمكينها من التنقل بأمان وكفاءة. ضبط الجودة: تُستخدم رؤية الحاسب لفحص المنتجات وتحديد عيوب التصنيع، وذلك في مختلف أنواع الصناعات، مثل: صناعة السيارات والإلكترونيات والمنسوجات. الروبوتية: تُستخدم رؤية الحاسب المساعدة الروبوتات على التنقل والتفاعل مع بيئتها عن طريق التعرّف على الأشياء والتعامل معها. يُعدُّ التعلُّم الموجه وغير الموجّه نوعين رئيسين من تعلم الآلة يُستخدمان بطريقة شائعة في تطبيقات رؤية الحاسب، ويتضمن كلا النوعين خوارزميات تدريب على مجموعات كبيرة من الصور أو مقاطع الفيديو؛ لكي تتمكن الآلات من التعرّف على المعلومات المرئية وتفسيرها. سبق أن تعرّفت على التعلَّم الموجه وغير الموجّه في الدرسين الأول والثاني من الوحدة الثالثة ، وكلاهما طبق في معالجة اللغات الطبيعية (NLP) وتوليد اللغات الطبيعية (NLG) ، وسيتم تطبيقهما في هذا الدرس على تحليل الصور. يتضمَّن التعلُّم غير الموجّه خوارزميات تدريب على مجموعات بيانات غير معنونة - أي لا توجد فيها عناوين أو فئات صريحة - ، ثم تتعلّم الخوارزمية تحديد الأنماط المتشابهة في البيانات دون أن تكون لديها أي معرفة مسبقة بالعناوين. على سبيل المثال: يمكن استخدام خوارزمية التعلُّم غير الموجّه لتجميع الصور المتشابهة معا بناءً على السمات المشتركة بينها مثل : اللون أو النقش (Texture) أو الشكل. وسيتم توضيح التعلُّم غير الموجّه بالتفصيل في الدرس الثاني. - صورة خام نموذج تصنيف تعلم الآلة المخرج المعنون %98% نمر عربي 1 تفاحة شكل :4.1: تصنيف الصور باستخدام رؤية الحاسب 1 سيارة 197 وزارة التعليم Ministry of Education 2024-1446
في المقابل، يتضمن التعلُّم الموجه تدريب الخوارزميات على مجموعات بيانات معنونة؛ حيث يُخصص عنوان أو فئة معينة لكل صورة أو مقطع فيديو، ثم تقوم الخوارزمية بعد ذلك بالتعرّف على أنماط وخصائص كل عنوان؛ لتتمكن من تصنيف الصور أو مقاطع الفيديو الجديدة بدقة. فعلى سبيل المثال: قد تُدرَّب خوارزمية التعلم الموجه على التعرّف على سلالات مختلفة من القطط بناءً على الصور المعنونة لكل سلالة ( انظر الشكل (4.1) ، وسيتم التركيز في هذا الدرس على التعلُّم الموجه. أثناء تشتمل عملية التعلُّم الموجه عادة على أربع خطوات رئيسة وهي: جمع البيانات، وعنونتها، والتدريب عليها، ثم الاختبار. جمع البيانات ووضع المسميات ، تُجمع الصور أو مقاطع الفيديو وتنظم في مجموعة بيانات، ثم تعنون كل صورة أو مقطع فيديو بعنوان صنف أو فئة ، مثل : eagle ) النسر) أو cat (القصّة ) . وتستخدِم خوارزمية تعلُّم الآلة أثناء مرحلة التدريب مجموعة البيانات المعنونة "لتتعلم" الأنماط والسمات المرتبطة بكل صنف أو فئة، وكلما زادت بيانات التدريب التي تُقدم للخوارزمية أصبحت أكثر دقة في التعرف على الفئات المختلفة في مجموعة البيانات، وبالتالي يتحسن أداؤها. وبمجرد أن يُدرَّب النموذج ، يتم اختباره على مجموعة منفصلة غير التي تم التدريب عليها من الصور أو مقاطع الفيديو؛ لتقييم أدائه، وتختلف مجموعة الاختبار عن مجموعة التدريب؛ للتأكد من قدرة النموذج على التعميم على البيانات الجديدة. فعلى سبيل المثال: تحتوي البيانات الخاصة بـ cat (القطة) على خصائص مثل: الوزن واللون والسلالة وما إلى ذلك، وتُقيّم دقة النموذج بناءً على مدى كفاءة أدائه في مجموعة الاختبار. تشبه العملية السابقة إلى حد كبير العملية المتبعة في مهام التعلُّم الموجه لأنواع مختلفة من البيانات مثل النصوص، ولكن البيانات المرئية عادة ما تُعدُّ أكثر صعوبة في التعامل معها من النصّ لأسباب متعددة كما هو موضح في الجدول 4.1. جدول 4.1 تحديات تصنيف البيانات المرئية الأبعاد البيانات المرئية عالية تحتوي الصور على كمية كبيرة من البيانات، مما يجعل معالجتها وتحليلها أكثر صعوبة من البيانات النصيَّة، ففي حين أن العناصر الأساسية للمستند النصي هي الكلمات، فإن عناصر الصورة هي وحدات البكسل، وسترى في هذا الفصل أن الصورة يمكن أن تتكون من آلاف وحدات البكسل، حتّى الصغيرة منها. البيانات المرئية تحتوي يمكن أن تتأثر الصور بالتفاصيل الكثيرة، والإضاءة ، والتشويش، وعوامل أخرى على تفاصيل كثيرة تجعل تصنيفها بدقة عملية صعبة. بالإضافة إلى ذلك، هناك مجموعة واسعة من ومتنوعة للغاية البيانات المرئية المتنوّعة ذات العديد من العناصر ، والمشاهد، والسياقات التي يصعب تصنيفها بدقة. البيانات المرئية لا تتبع يتبع النصّ بنية لغوية وقواعد نحوية عامة، بينما لا تخضع البيانات المرئية لقواعد ثابتة؛ مما يجعل عملية التحليل أكثر تعقيدًا وصعوبة وتكلفة. هيكلة محددة نتيجة لهذه التعقيدات يتطلب التصنيف الفعّال للبيانات المرئية أساليب متخصصة، وتتناول هذه الوحدة التقنيات التي تستخدم الخصائص الهندسية واللونية للصور، بالإضافة إلى أساليب تعلُّم الآلة المتقدمة القائمة على الشبكات العصبية. يوضّح الدرس الأول كيفية استخدام لغة البايثون (Python) في: • تحميل مجموعة بيانات من الصور المعنونة. تحويل الصور إلى صيغة رقمية يمكن أن تستخدمها خوارزميات رؤية الحاسب. البيانات الرقمية إلى مجموعات بيانات للتدريب، ومجموعات بيانات للاختبار. تقسيم وزارة التعليم Ministry of Education 2024-1446 198
199 وزارة التعليم Ministry of Education 2024-1446 • تحليل البيانات؛ لاستخراج أنماط وخصائص مفيدة. استخدام البيانات المستخلصة؛ لتدريب نماذج التصنيف التي يمكن استخدامها للتنبؤ بعناوين الصور الجديدة. تحتوي مجموعة البيانات التي ستستخدمها على ألف وسبعمئة وثلاثين (1,730) صورة لوجوه ستة عشر نوعا مختلفًا من الحيوانات، وبالتالي فهي مجموعة مثالية للتعلُّم الموجّه لتطبيق التقنيات المذكورة سابقًا. تحميل الصور ومعالجتها الأولية Loading and Preprocessing Images يستورد المقطع البرمجي التالي مجموعة من المكتبات التي تُستخدم لتحميل الصور من مجموعة بيانات HI-Animal-Faces (وجوه _الحيوانات) وتحويلها إلى صيغة رقمية: %%capture import matplotlib.pyplot as plt #used for visualization from os import listdir # used to list the contents of a directory !pip install scikit-image # used for image manipulation from skimage.io import imread # used to read a raw image file (e.g. png or jpg) from skimage.transform import resize # used to resize images # used to convert an image to the "unsigned byte" format from skimage import img_as_ubyte تتطلب خوارزميات التعلُّم الموجه أن تكون كل الصور في مجموعة البيانات لها الأبعاد نفسها، ولذلك فإن المقطع البرمجي التالي يقرأ الصور من input_folder (مجلد المدخلات) ويُغيّر حجم كل منها بحيث تكون لها أبعاد الطول والعرض نفسها : def resize_images(input_folder:str, width:int, height:int ): labels = [] # a list with the label for each image resized_images = [] # a list of resized images in np array format filenames = [ ] # a list of the original image file names for subfolder in listdir(input_folder): # for each sub folder print(subfolder) path = input_folder + '/' + subfolder for file in listdir(path): # for each image file in this subfolder image = imread(path + '/' + file) # reads the image resized = img_as_ubyte(resize(image, (width, height))) # resizes the image labels.append(subfolder[:-4]) # uses subfolder name without "Head" suffix resized_images.append(resized) # stores the resized image filenames.append(file) # stores the filename of this image return resized_images, labels, filenames
وزارة التعليم Ministry of Education 2024-1446 resized_images, labels, filenames = resize_images("AnimalFace/Image", width=100, height=100) #retrieves the images with their labels and resizes them to 100 × 100 BearHead CatHead ChickenHead CowHead Deer Head DuckHead EagleHead PigeonHead ElephantHead RabbitHead LionHead MonkeyHead SheepHead TigerHead Natural PandaHead WolfHead هذه هي أسماء المجلدات، وبدون المقطع اللاحق Head (رأس)، تُمثل هذه الأسماء عناوين للصور الموجودة داخلها. = تُنشئ دالة ()imread تنسيق ألوان للصورة يُعرف بـ "RGB" ، ويُستخدم هذا التنسيق على نطاق واسع؛ لأنه يسمح بتمثيل مجموعة واسعة من الألوان. وفي نظام الألوان RGB ، تعني الأحرف R و C و B احتواء التنسيق على ثلاثة مكونات رئيسة للألوان وهي اللون الأحمر (R) (Red) واللون الأخضر (G = Green) واللون الأزرق (B (Blue. يُمثَّل كل بكسل بثلاث قنوات وهي: (قناة للون الأحمر ، وقناة للون الأخضر ، وقناة للون الأزرق) ، كل قناة تحوي ثمانية بت (bit-) ، ويمكن أن يأخذ البكسل قيمة بين 0 و255. يُعرف التنسيق 2550 أيضًا باسم تنسيق البايت بدون إشارة (Unsigned Byte ) . = يتيح الجمع بين هذه القنوات الثلاث تمثيل مجموعة واسعة من 0 20- 40- 60- 80- 100- 120- 140- 160 0 25 50 75 100 125 150 شكل 4.2 صورة رأس أسد أصلية الألوان في البكسل، على سبيل المثال: البكسل ذو القيمة (0 ، 0 ، 255) سيكون لونه أحمر بالكامل، والبكسل ذو القيمة (0، 255 ، 0) سيكون لونه أخضر بالكامل، والبكسل ذو القيمة (255 ، 0 (0) سيكون لونه أزرق بالكامل، والبكسل ذو القيمة (255 ، 255 ، (255) سيكون لونه أبيض، والبكسل ذو القيمة ،0 ،0 ، 0) سيكون لونه أسود. في نظام الألوان RGB ، تُرتب قيم البكسل في شبكة ثنائية الأبعاد ، تحتوي على صفوف وأعمدة تُمثَّل إحداثيات x ول للبكسلات في الصورة، ويُشار إلى هذه الشبكة باسم مصفوفة الصور Image Matrix . على سبيل المثال، ضع في اعتبارك الصورة الموجودة في الشكل 4.2 والمقطع البرمجي المرتبط بها أدناه: # reads an image file, stores it in a variabe and #shows it to the user in a window image = imread('AnimalFace/Image/LionHead/lioni78.jpg') plt.imshow(image) image.shape (169, 169, 3) تكشف طباعة شكل الصورة عن مصفوفة 169 × 169، بإجمالي: ثمانية وعشرين ألفًا وخمسمئة وواحد وستين (28,561 بكسل، ويمثّل الرقم 3 في العمود الثالث القنوات الثلاث ( أحمر / أخضر / أزرق) لنظام الألوان RGB. على سبيل المثال، سيطبع المقطع البرمجي التالي قيمة الألوان للبكسل الأول من هذه الصورة: # the pixel at the first column of the first row print(image[0][0]) [102 68 66] 200
201 يؤدي تغيير الحجم إلى تحويل الصور من تنسيق RGB إلى تنسيق مُستند على عدد حقيقي (Float-Based) : resized = resize(image, (100, 100) ) print(resized. shape) print(resized[0][0]) (100, 100, 3) [0.40857161 0.27523827 0.26739514] على الرغم من أن الصورة قد غُيّر حجمها إلى مصفوفة ذات أبعاد 100 × 100، فإن قيم القنوات الثلاث RGB لكل بكسل تم تسويتها ( Normalized) لتكون ذات قيمة بين 0 و 1 ، ويمكن إعادة تحويلها مرة أخرى إلى تنسيق البايت بدون إشارة من خلال المقطع البرمجي التالي: resized = img_as_ubyte(resized) print(resized. shape) print(resized[0][0]) print(image[0][0]) 0 20 40 60 60 80 وزارة التعليـ Ministry of Education 2024-1446 (100, 100, 3) [104 70 68] [102 68 66] تختلف قيم الألوان RGB للبكسل الذي غُيّر حجمه اختلافًا بسيطًا عن القيم الموجودة في الصورة الأصلية، وهو من الآثار الشائعة الناتجة عن تغيير الحجم، وعند طباعة الصورة التي غيّر حجمها ، يتبين أنها أقل وضوحًا، كما يظهر في الشكل 4.3 ، وهذا ناتج عن ضغط المصفوفة 169 × 169 إلى تنسيق 100 × 100. # displays the resized image plt.imshow(resized); قبل بدء التدريب على خوارزميات التعلُّم الموجه، من الجيد التحقق 60 80 40 20 مما إذا كانت أي صورة من الصور الموجودة في مجموعة البيانات شكل 4.3 صورة رأس أسد غُيّر حجمها غير مطابقة للتنسيق (3، 100، 100). violations = [index for index in range(len(resized_images)) if resized_images [index].shape != (100,100,3)] violations [455, 1587] يكشف هذا المقطع البرمجي عن وجود صورتين غير مطابقتين لتلك الصيغة، وهذا غير متوقع؛ لأن دالة ( )resize_image تم تطبيقها على جميع الصور الموجودة في مجموعة البيانات. يقوم المقطعان البرمجيان التاليان بطباعة هاتين الصورتين، بالإضافة إلى أبعادهما واسمي ملفيهما:
Cow 0 pos1 = violations[0] 20 40 60- 80 0 20 40 60 80 8- شكل :4.4 صورة بالأحمر والأخضر والأزرق وألفا (RGBA) وزارة التعليم Ministry of Education 2024-1446 0 20 40 40 60- 80- 0 20 Tiger pos2 = violations[1] print(filenames[pos1]) print(resized_images [pos1].shape) plt.imshow(resized_images[pos1]) plt.title(labels[pos1]) cow1.gif (100, 100, 4) print(filenames[pos2]); print(resized_images[pos2].shape); plt.imshow(resized_images[pos2]); plt.title(labels[pos2]); tiger0000000168.jpg (100, 100) الصورة الأولى لها شكل ذو أبعاد (4، 100، 100) ، ويدلُّ الرقم 4 أنها بتنسيق RGBA بدلًا من تنسيق RGB، وهذا التنسيق يحتوي على قناة إضافية رابعة تدعى قناة ألفا (Alpha) التي تُمثّل شفافية كل بكسل. على سبيل المثال: - 0 20 40 60 80 شكل :4.5 صورة تبيّن التنسيق المضلل أصفر / أزرق 40 60 80 60 0 20 40 g. - 60 80 شكل 4.6 صورة بتدرج رمادي # prints the first pixel of the RGBA image # a value of 255 reveals that the pixel is not transparent at all. resized_images[pos1][0][0] array([135, 150, 84, 255], dtype=uint8) الصورة الثانية لها شكل ذو أبعاد (100، 100)، ويدلُّ غيــاب البعد الثالث على أن الصورة بتنسيق تدرج رمادي (Grayscale) وليست بتنسيق RGB والتنسيق المضلل أصفر/ أزرق (Misleading Yellow/Blue) المبين سابقا يعود إلى خريطة لونية تُطبقها الدالة imshow بشكل افتراضي على الصور ذات التدرج الرمادي، ويمكن إلغاؤه كما يلي: plt.imshow(resized_images[pos2], cmap = 'gray' ) 202
203 صور التدرج الرمادي لها قناة واحدة فقط ( بدلًا من قنوات RGB الثلاث، وقيمة كل بكسل عبارة عن رقم واحد يتراوح من 0 إلى 255، حيث تُمثَّل قيمة البكسل 0 اللون الأسود، بينما تُمثَّل قيمة البكسل 255 اللون الأبيض. على سبيل المثال: resized_images[pos2][0][0] 100 وكاختبار إضافي لجودة البيانات، يقوم المقطع البرمجي التالي بحساب تكرار عنوان كل صورة حيوان في مجموعة # used to count the frequency of each element in a list. from collections import Counter label_cnt = Counter(labels) label_cnt Counter({'Bear': 101, 'Cat': 160, هنا يمكنك رؤية القيمة المتطرفة وهي فئة Nature Nat أو الطبيعة) ، وتحتوي على ثمانية عناصر فقط مقارنة بالفئات الأخرى. 'Chicken': 100, 'Cow': 104, 'Deer': 103, 'Duck': 103, 'Eagle': 101, 'Elephant': 100, 'Lion': 102, 'Monkey': 100, 'Nat': 8, 'Panda: 119, 'Pigeon': 115, 'Rabbit': 100, 'Sheep': 100, 'Tiger': 114, 'Wolf': 100}) البيانات: تحتوي مجموعة البيانات على صور حيوانات وصور أخرى من الطبيعة؛ وذلك بهدف التعرف على الصور التي تشذ عن صور الحيوانات. يكشف Counter ( العداد) عن فئة صغيرة جدًا عنوانها Nat (الطبيعة) ، وتحتوي على ثماني صور فقط، وعندما تقوم بكشف سريع يتضح لك أن هذه الفئة ذات قيم متطرفة (Outlier) تحتوي على صور لمناظر طبيعية ولا يوجد بها أي وجه لأي حيوان. يقوم المقطع البرمجي التالي بإزالة صورة RGBA وصورة التدرج الرمادي، وكذلك كل الصور التي تنتمي لفئة Nat (الطبيعة) من قوائم أسماء الملفات، والعناوين، والصور التي غُيّر حجمها. وزارة التعليم Ministry of Education 2024-1446 N = len(labels) resized_images = [resized_images[i] for i in range(N) if i not in violations and labels[i] != "Nat"] filenames = [filenames[i] for i in range(N) if i not in violations and labels[i] != "Nat"] labels = [labels[i] for i in range(N) if i not in violations and labels[i] != "Nat"]
وزارة التعليم Ministry of Education 2024-1446 تتمثل الخطوة التالية في تحويل resized_images ( الصور - المعدَّل حجمها وقوائم العناوين إلى مصفوفات Numpy (نمباي حسب ما تتوقعه العديد من خوارزميات رؤية الحاسب. يستخدم المقطع البرمجي التالي أيضًا المتغيرات (X، (Y) التي تُستخدم في العادة لتمثيل البيانات والعناوين على التوالي في مهام التعلم الموجه: import numpy as np X = np.array(resized_images) Y = np.array(labels) X.shape (1720, 100, 100, 3) يوضّح شكل مجموعة بيانات X النهائية اشتمالها على ألف وسبعمئة وعشرين صورة بتنسيق RGB ، بناءً على عدد القنوات، وجميعها بأبعاد 100 × 100 ( أي عشرة آلاف بكسل . أخيرًا، يمكن استخدام دالة ( )train_test_split من مكتبة sklearn لتقسيم مجموعة البيانات إلى مجموعة تدريب ومجموعة اختبار from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split( X, ,لا ) test_size = 0.20, shuffle = True, random_state = 42, # uses 20% of the data for testing # to randomly shuffle the data. # to ensure that data is always shuffled in the same way نظرًا لأن مجلدات صور الحيوانات حمّلت مجدّدًا تلو الآخر، فإن الصور من كل مجلد جمعت معا في القوائم السابقة، وقد يؤدي ذلك إلى تضليل العديد من الخوارزميات، خاصة في مجال رؤية الحاسب ، وضبط shuffle = True ( تفعيل إعادة الترتيب في المقطع البرمجي السابق يحل هذه المشكلة، وبوجه عام، من الجيد إعادة ترتيب البيانات عشوائيا قبل إجراء أي تحليل. التنبؤ بدون هندسة الخصائص Prediction without Feature Engineering على الرغم من أن الخطوات المتّبعة في القسم السابق قد حولت البيانات إلى تنسيق رقمي، إلا أنه ليس بالتنسيق القياسي أحادي البعد الذي تتوقعه العديد من خوارزميات تعلم الآلة. على سبيل المثال، وصفت الوحدة الثالثة كيف يجب تحويل كل مستند إلى متَّجه رقمي أحادي البعد قبل استخدام البيانات في تدريب نماذج تعلم الآلة واختبارها ، بينما تحتوي كل نقطة بيانات في مجموعة البيانات المرئية هنا على تنسيق ثلاثي الأبعاد. X_train[0].shape (100, 100, 3) 204
205 وزارة التعليم Ministry of Education 2024-1446 لذلك يمكن استخدام المقطع البرمجي التالي لتسطيح ( Flatten) كل صورة في متَّجه أحادي البعد، فكل صورة الآن ممثلة كمتَّجه رقمي مسطح قيمته 3 × 100 × 100 = 30,000 قيمة. X_train_flat = np.array([img.flatten() for img in x_train]) X_test_flat = np.array([img.flatten() for img in X_test]) X_train_flat[0].shape (30000,) يمكن استخدام هذا التنسيق المسطح مع أي خوارزمية تصنيف قياسية دون بذل أي جهد إضافي لهندسة خصائص تنبؤية أخرى، وسيوضّح القسم التالي مثالاً على هندسة الخصائص لبيانات صورة، ويستخدم المقطع البرمجي التالي مصنف بايز الساذج ( Native الذي استخدم أيضًا لتصنيف البيانات النصية في الوحدة الثالثة: from sklearn.naive_bayes import Multinomial NB #imports the Naive Bayes Classifier model_MNB = MultinomialNB( ) model_MNB.fit(X_train_flat,y_train #fits the model on the flat training data MultinomialNB() from sklearn.metrics import accuracy_score # used to measure the accuracy pred = model_MNB.predict(x_test_flat) # gets the predictions for the flat test set accuracy_score(y_test,pred) 0.36046511627906974 يعرض المقطع البرمجي التالي مصفوفة الدقة Confusion Matrix) الخاصة بالنتائج لإعطاء رؤية إضافية: %%capture !pip install scikit-plot import scikitplot scikitplot.metrics.plot_confusion_matrix(y_test, #actual labels pred, #predicted labels title = "Confusion Matrix", cmap = "Purples", figsize = (10,10), x_tick_rotation = 90, normalize = True # to print percentages )
تساعد القيم المسوّاة (Normalized Values) على رؤية العناصر على هيئة نسب مئوية. True label Confusion Matrix Bear - 0.57 0.0 0.0 0.05 0.0 0.0 0.14 0.05 0.1 0.0 0.0 0.0 0.0 0.1 0.0 0.0 Cat - 0.03 0.21 0.0 0.0 0.18 0.03 0.05 0.08 0.05 0.03 0.0 0.13 0.08 0.05 0.03 0.05 - 0.8 Chicken 0.0 0.0 0.3 0.04 0.0 0.0 0.04 0.11 0.33 0.0 0.0 0.0 0.15 0.0 0.0 0.04 Cow 0.23 0.0 0.03 0.23 0.0 0.0 0.0 0.17 0.1 0.03 0.03 0.0 0.0 0.1 0.0 0.07 Deer 0.0 0.03 0.03 0.06 0.41 0.0 0.03 0.06 0.16 0.09 0.0 0.03 0.0 0.0 0.06 0.03 Duck 10.04 0.11 0.0 0.04 0.04 0.3 0.07 0.07 0.11 0.04 0.0 0.04 0.0 0.0 0.0 0.15 - 0.6 Eagle - 0.05 0.0 0.0 0.0 0.0 0.0 0.41 0.09 0.0 0.0 0.27 0.14 0.05 0.0 0.0 0.0 Elephant - 0.0 0.0 0.0 0.15 0.0 0.0 0.04 0.74 0.07 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Lion - 0.05 0.05 0.0 0.05 0.0 0.0 0.0 0.05 0.55 0.0 0.0 0.05 0.1 0.05 0.0 0.05 Monkey - 0.09 0.04 0.0 0.09 0.04 0.04 0.17 0.0 0.13 0.13 0.0 0.0 0.0 0.04 0.13 0.09 0.4 Panda - 0.0 0.0 Bear Cat Chicken - 8 8 8 8 8 8 Cow 0.0 0.0 0.0 0.0 0.04 0.0 0.0 0.0 0.96 0.0 0.0 0.0 0.0 0.0 Pigeon - 0.03 0.06 0.0 Rabbit - 0.04 0.07 0.0 Sheep - 0.14 0.05 0.0 0.05 0.09 0.05 0.0 0.09 0.05 0.0 0.0 0.0 0.05 0.45 0.0 0.0 ة ة ة ة Tiger - 0.09 0.04 0.0 0.0 0.0 0.04 0.13 0.09 0.13 0.0 0.0 0.2 0.0 0.0 0.13 0.3 0.04 Wolf - 0.09 0.12 0.0 0.09 0.0 0.06 0.06 0.09 0.0 0.06 0.0 0.12 0.03 0.03 0.0 0.22 0.0 0.03 0.0 0.19 0.23 0.03 0.03 0.0 0.13 0.1 0.16 0.0 0.0 0.0 0.07 0.04 0.11 0.3 0.07 0.07 0.0 0.04 0.04 0.15 0.0 0.0 Elephant Lion Monkey Panda Pigeon - 8 Rabbit Sheep Tiger - 8 0 Wolf. Predicted label 0.0 شكل :4.7: مصفوفة الدقة الخاصة بأداء خواز رمية MultinomialNB تُحقق خوارزمية بايز الساذجة متعددة الحدود (MultinomialNB) دقة خوارزمية بايز الساذجة متعددة تقارب 30 ، وعلى الرغم من أن هذه النسبة قد تبدو قليلة، إلا أن عليك الحدود (MultinomialNB Algorithm) : النظر إليها في ضوء أن مجموعة البيانات تتضمن عشرين عنوانًا مختلفا . هي خوارزمية تعلُّم آلة تُستخدم لتصنيف ويعني ذلك أنه لو افترض وجود مجموعة بيانات متوازنة نسبيًا يُغطي فيها النصوص أو البيانات الأخرى في فئات كل عنوان 20/1 من البيانات، فإن المصنّف العشوائي الذي يُخصص عنوانًا مختلفة، وتعتمد على خوارزمية بايز الساذج لكل نقطة اختبار بشكل عشوائي، سيحقق دقة تبلغ حوالي 5 ، ولذلك ستكون الدقة بنسبة 30% أعلى بست مرات من التخمين العشوائي. لحل مشكلات التصنيف. ومع ذلك، كما هو موضح في الأقسام التالية، يمكن تحسين هذه الدقة تحسينا ملحوظًا ، وتؤكد مصفوفة الدقة أيضًا أن هناك مجالا للتحسين. على سبيل خوارزمية مُصنف الانحدار التدرجي المثال، غالبًا ما يخطئ نموذج بايز الساذج ويصنف Pigeons (الحمام ) العشوائي ( SGDClassifier Algorithm) : على أنها Eagles (نسور) أو يصنف Wolves ( الذئاب) على أنها Cats هي ( Bayes) Nave as ) وهي طريقة بسيطة وفعالة خوارزمية تعلُّم آلة تُستخدم في تصنيف (قطط) . تكمن أسهل طريقة لمحاولة تحسين النتائج في ترك البيانات كما هي، والتجريب باستخدام مُصنّفات مختلفة، ومن النماذج التي ثبت أنها البيانات في فئات مختلفة أو مجموعات، وتعتمد ایک تعمل بشكل جيد مع بيانات الصورة المحولة إلى متَّجَهَات نموذج: مُصنِّف حيث الانحدار التدرجي العشوائي ( SGDClassifier) من مكتبة Sklearn يعمل نموذج SGDClassifier أثناء التدريب على ضبط أوزان النموذج بناءً على بيانات التدريب، والهدف من ذلك يتمثل في العثور على مجموعة الأوزان التي تقلل من دالة الخسارة ( Loss Function ، وهي الدالة التي تقيس Function)، الفرق بين العناوين المتوقعة والعناوين الحقيقية في بيانات التدريب. على أسلوب يسمى الانحدار التَّدرجي العشوائي . (Stochastic Gradient Descent - SGD) وهي طريقة فعّالة لتحسين الأنواع المتعددة للنماذج وتدريبها، بما فيها المصنفات. يستخدم المقطع البرمجي التالي مصنف SGDClassifier لتدريب نموذج على مجموعة بيانات مسطحة: وزارة التعليم Ministry of Education 2024-1446 206
207 وزارة التعليم Ministry of Education 2024-1446 from sklearn.linear_model import SGDClassifier model_sgd = SGDClassifier() model_sgd.fit(X_train_flat, y_train) pred=model_sgd.predict(X_test_flat) accuracy_score(y_test,pred) 0.46511627906976744 يُحقق مصنف SGDClassifier دقة أعلى بشكل ملحوظ تزيد عن %46، على الرغم من تدريبه على البيانات نفسها التي دُرِّب مُصنِّف MultinomialNB عليها ، ويدل ذلك على فائدة تجربة خوارزميات التحجيم القياسي : (Standard Scaling) تصنيف مختلفة؛ للعثور على أفضل خوارزمية تتناسب مع أي مجموعة هو تقنية معالجة أولية تُستخدم بيانات ،معطاة ، ومن المهم فهم نقاط القوة والضعف لكل خوارزمية، فعلى في تعلم الآلة لتحجيم خصائص سبيل المثال: من المعروف أن خوارزمية SGDClassifier تعمل بشكل مجموعة البيانات بحيث تكون أفضل عندما تُحجّم بيانات الإدخال وتوحد الخصائص؛ ولهذا السبب ذات متوسط حسابي صفري وتباين أحادي الوحدة. ستستخدم التحجيم القياسي في نموذجك. يستخدم المقطع البرمجي التالي أداة StandardScaler (الحجم القياسي من مكتبة sklearn لتحجيم البيانات: from sklearn.preprocessing import StandardScaler scaler = StandardScaler() X_train_flat_scaled = scaler.fit_transform(X_train_flat) x_test_flat_scaled = scaler.fit_transform(x_test_flat) print(X_train_flat[0]) # the values of the first image pre-scaling print(X_train_flat_scaled[0]) #the values of the first image post-scaling 75 80] 76 0.61190285 0.27468959 [144 142 151 ... [0.33463473 -0.26774175] ... -0.65170221 -0.62004162 يمكن الآن تدريب نموذج جديد واختباره باستخدام مجموعات البيانات التي تم تحجيمها: model_sgd = SGDClassifier() model_sgd.fit(X_train_flat_scaled, y_train) pred=model_sgd.predict(X_test_flat_scaled) accuracy_score (y_test, pred) 0.4906976744186046 تدل النتائج على وجود تحسن بعد التحجيم، ومن المحتمل أن يحدث تحسين إضافي بواسطة تجريب خوارزميات أخرى وضبط متغيّراتها حتّى تتناسب مع مجموعة البيانات بشكل أفضل.
التنبؤ بانتقاء الخصائص Prediction with Feature Selection ركَّز القسم السابق على تدريب النماذج عن طريق تسطيح البيانات، في حين سيصف هذا القسم كيفية تحويل البيانات الأصلية لهندسة الخصائص الذكية التي تلتقط الصفات الرئيسة لبيانات الصورة، المُخطَّطات التكرارية للتدرجات الموجهة وعلى وجه التحديد يوضّح القسم تقنية شائعة تسمى المخطّط التكراري للتدرجات الموجهة .(Histogram of Oriented Gradients -HOG) :(Histogram of Oriented Gradients -HOG) تقوم المُخطَّطات التكرارية للتدرجات الموجهة بتقسيم الصورة إلى أقسام صغيرة وتحلّل توزيع تغيرات الكثافة تتمثل الخطوة الأولى في هندسة المخططات في كل قسم حتى تحدّد وتفهم شكل الكائن في الصورة. التكرارية للتدرجات الموجّهة في تحويل الصور من تنسيق RGB إلى صور ذات تدرج رمادي، ويمكن القيام بذلك باستخدام الدالة ( ) rgb gray من مكتبة وزارة التعليم :sckit-image from skimage.color import rgb2gray #used to convert a multi-color (rgb) image to grayscale # converts the training data X_train_gray = np.array([rgb2gray(img) for img in X_train]) # converts the testing data X_test_gray = np.array([rgb2gray(img) for img in x_test]) Ministry of Education 2024-1446 plt.imshow(X_train_gray[0],cmap='gray' ); 0 20 40 60 80 20 40 60 80 0 20 20 40 60 plt.imshow(X_train[0]); 80- 20 40 60 80 شكل :4.8 صورة بالألوان الأساسية شكل :4.9 صورة ذات تدرج رمادي الشكل الجديد لكل صورة أصبح بتنسيق 100 × 100 ، بدلًا من التنسيق RGB المستند إلى 100 × 100×3: print(X_train_gray[0].shape) print(X_train[0].shape) (100, 100) (100, 100, 3) 208
209 تتمثل الخطوة التالية في إنشاء خصائص المُخطَّط التكراري للتدرجات الموجهة لكل صورة في البيانات، ويمكن تحقيق ذلك من خلال دالة ( )hog من مكتبة sckit-image ، ويوضّح المقطع البرمجي التالي مثالًا على الصورة الأولى في مجموعة بيانات التدريب: 0- 20 40 40 60 80 from skimage.feature import hog hog_vector, hog_img = hog( X_train_gray[0], visualize = True hog_vector.shape (8100,) و 80 40 60 60 20 20 hog_vector هو متَّجه أحادي البعد ذو ثمانية آلاف ومئة قيمـة عددية، ويمكن استخدامها لتمثيل الصورة، ويظهر التمثيل البصري شكل :4.10 مُخطَّط تكراري للتدرجات الموجهة لصورة plt.imshow(hog_img); لهذا المتجه باستخدام: يصوّر هذا التمثيل الجديد حدود الأشكال الأساسية في الصورة، ويحذف التفاصيل الأخرى ويُركّز على الأجزاء المفيدة التي يمكنها أن تساعد المصنِّف على أن يقوم بالتنبؤ، ويطبق المقطع البرمجي التالي هذا التغيير على كل الصور في كل من مجموعة التدريب ومجموعة الاختبار وزارة التعليم Ministry of Education 2024-1446 X_train_hog = np.array([hog(img) for img in X_train_gray]) X_test_hog = np.array([hog(img) for img in x_test_gray]) يمكن الآن تدريب SGDClassifier على هذا التمثيل الجديد #scales the new data scaler = StandardScaler() X_train_hog_scaled = scaler.fit_transform(X_train_hog) x_test_hog_scaled = scaler.fit_transform(X_test_hog) # trains a new model model_sgd = SGDClassifier() model_sgd.fit(X_train_hog_scaled, y_train) # tests the model pred = model_sgd.predict(x_test_hog_scaled) accuracy_score(y_test,pred) 0.7418604651162791
وزارة التعليم Ministry of Education 2024-1446 True label scikitplot.metrics.plot_confusion_matrix(y_test, # actual labels pred, #predicted labels title = "Confusion Matrix", # title to use cmap = "Purples", # color palette to use figsize = (10,10), #figure size x_tick_rotation = 90 ); Confusion Matrix Bear 12 0 0 0 0 0 1 0 3 2 2 0 0 0 0 1 Cat 0 31 1 0 0 0 0 0 0 0 2 1 1 0 2 0 25 Chicken 0 1 23 0 0 1 0 0 0 1 0 1 0 0 0 0 Cow 1 2 1 17 2 1 0 2 0 0 0 0 0 4 0 0 Deer 0 5 00 23 0 0 1 0 0 0 3 0 0 20 Duck 0 1 1 0 0 21 2 0 0 0 2 0 0 0 0 0 Eagle 0 0 1 0 0 1 17 0 0 0 1 2 0 0 0 0 Elephant 1 0 0 1 1 1 0 20 20 1 1 0 0 0 0 1 0 Lion 1 0 0 0 0 0 1 0 16 0 1 0 1 0 0 0 15 Monkey 3 0 1 0 0 0 00 2 15 0 1 0 0 1 0 Panda 0 0 0 0 0 0 0 0 0 0 27 1 0 0 0 0 Pigeon 0 0 1 0 0 2 5 0 0 0 0 23 0 0 0 0 - 10 Rabbit 0 1 2 T 1 5 0 0 0 0 0 1 15 1 0 0 Sheep 0 0 0 2 3 1 1 1 1 1 000 12 0 0 Tiger - 0 0 0 0 0 1 0 0 0 3 1 0 0 0 18 0 5 Wolf 6 1 0 1 1 0 0 0 1 0 0 0 0 0 0 222 T T Bear Cat Chicken Cow Deer Predicted label Duck Eagle Elephant Lion Monkey Panda Pigeon Rabbit Sheep Tiger Wolf شكل 4.11 مصفوفة الدقة لأداء خوارزمية SGDClassifier تكشف النتائج الجديدة عن تحسن هائل في الدقة التي قفزت لتصل إلى أكثر من 70 ، وتجاوزت بكثير الدقة التي حققها المصنّف نفسه على البيانات المسطحة دون القيام بأي هندسة للخصائص، ويتضح التحسن أيضًا في مصفوفة الدقة المحدَّثة التي تشمل عددًا أقل من الأخطاء ( التنبؤات الإيجابية الخاطئة)، ويوضّح ذلك أهمية استخدام تقنيات رؤية الحاسب لهندسة خصائص ذكية تلتقط الصفات المرئية المختلفة للبيانات. w 210 0 - 30
211 و التنبؤ باستخدام الشبكات العصبية Prediction Using Neural Networks يوضح هذا القسم كيفية استخدام الشبكات العصبية لتصميم مصنفات مخصصة لبيانات الصور، وكيف يمكنها في كثير من الأحيان أن تتفوّق على التقنيات عالية الفعالية مثل: عملية المخطّط التكراري للتدرجات الموجهة التي وصفت في القسم السابق، وتُستخدم مكتبة TensorFlow ومكتبة Keras الشهيرتان لهذا الغرض. مكتبة TensorFlow هي مكتبة منخفضة المستوى تُوفّر مجموعة واسعة من أدوات تعلُّم الآلة والذكاء الاصطناعي، وتسمح للمستخدمين بتعريف الحسابات العددية التي تتضمن متَّجَهات متعددة الأبعاد (Tensors) ومعالجتها، وهي مصفوفات متعددة الأبعاد من البيانات. من ناحية أخرى، تُعدُّ مكتبة Keras ذات مستوى أعلى وتُوفّر واجهة أبسط لبناء النماذج وتدريبها ، وهي مبنية باستخدام مكتبة TensorFlow ) أو مكتبات خلفية أخرى) وتُوفَّر مجموعة من الطبقات والنماذج المعرفة مسبقًا والتي يمكن تجميعها بسهولة لبناء نموذج تعلم عميق. وصمت مكتبة Keras لتكون صديقة للمستخدم وسهلة الاستخدام؛ مما يجعلها خيارًا رائعًا للممارسين. دوال التنشيط (Activation Functions) هي دوال رياضية تُطَبَّق على مُخرجات كل خلية عصبية في الشبكة العصبية، كما تتميز بأنها تضيف خصائص غير خطية (Non-linear) للنموذج وتسمح للشبكة بتعلم الأنماط المعقدة في البيانات، ويُعدُّ اختيار دالة التنشيط أمرًا مهمًا ويمكن أن يؤثر على أداء الشبكة، حيث تتلقى الخلايا العصبية المدخلات وتعالجها من خلال المدخلات متغيرات الأوزان والتحيزات وتنتج مخرجات بناء على دالة التنشيط كما يظهر في الشكل 4.12. تُنشأ الشبكات العصبية من خلال ربط العديد من الخلايا العصبية معًا في طبقات، وتُدرَّب على ضبط متغيرات الأوزان والتحيزات وتحسين أدائها بمرور الوقت. يُثبت المقطع البرمجي التالي مكتبة tensorflow keras متغيرات متغير التحيز دالة التنشيط الأوزان المخرج <---- 1 - W, ------- X, y <- fx ------ 1 W2 ------- 2 W ✗ n n --- شكل 4.12: دالة التنشيط %%capture !pip install tensorflow !pip install keras وزارة التعليم Ministry of Education 2024-1446 في الوحدة السابقة، تعرّفت على الخلايا العصبية الاصطناعية وعلى معماريات الشبكات العصبية، وعلى وجه التحديد تعرّفت على نموذج الكلمة إلى المتَّجه (Word2Vec) الذي يستخدم طبقة مخفية وطبقة مخرجات؛ ليتنبأ بسياق الكلمات لكلمة معطاة في جملة. وبعد ذلك تُستخدم مكتبة Keras لإنشاء معمارية عصبية مشابهة للصور أولا تُحوَّل العناوين في y_train إلى تنسيق أعداد صحيحة، طبقًا لمتطلبات مكتبة Keras. # gets the set of all distinct labels classes=list(set(y_train)) print(classes) print() # replaces each label with an integer (its index in the classes lists) for both the training and testing data y_train_num = np.array([classes.index(label) for label in y_train]) y_test_num = np.array([classes.index (label) for label in y_test]) print() # example: print(y_train[:5]) # first 5 labels print(y_train_num[:5]) # first 5 labels in integer format
وزارة التعليم Ministry of Education 2024-1446 , ['Elephant', 'Duck', 'Monkey', 'Cow', 'Sheep' 'Wolf', 'Tiger', 'Deer' 'Cat', 'Lion', 'Rabbit', 'Panda', 'Pigeon', 'Chicken', 'Eagle', 'Bear' ['Panda' 'Pigeon' 'Monkey' 'Panda' 'Sheep'] [11 12 2 11 4] ويمكن الآن استخدام أداة Sequential ) التتابع من مكتبة Keras لبناء شبكة عصبية في شكل طبقات متتابعة. from keras.models import Sequential # used to build neural networks as sequences of layers # every neuron in a dense layer is connected to every other neuron in the previous layer. from keras.layers import Dense # builds a sequential stack of layers model = Sequential() # adds a dense hidden layer with 200 neurons, and the ReLU activation function. model.add(Dense (200, input_shape = (X_train_hog.shape[1],), activation = 'relu')) model.add(Dense(200,input_shape activation='relu')) # adds a dense output layer and the softmax activation function. model.add(Dense(len(classes), activation='softmax' )) model.summary() Model: "sequential" Layer (type) dense (Dense) dense_1 (Dense) II II Total params: 1,623,416 Trainable params: 1,623,416 Non-trainable params: 0 Output Shape (None, 200) (None, 16) II II II II Param # 1620200 3216 عدد الخلايا العصبية في الطبقة المخفية يعتمد على الخيار الذي يتخذ عند التصميم، وعدد الفئات يحدد عدد الخلايا العصبية في طبقة المخرجات. يكشف ملخص النموذج عن العدد الإجمالي للمتغيّرات التي يجب أن يتعلّمها النموذج من خلال ضبطها على بيانات التدريب، وبما أن المدخلات تحتوي على ثمانية آلاف ومئة (8,100) مدخل، وهي أبعاد صور المخطّط التكراري للتدرجات الموجهة X_train_hog وتحتوي الطبقة المخفية على مئتي خلية عصبية، وهي طبقة كثيفة متصلة بالمدخلات اتصالا كاملًا، فإن المجموع 8,100 × 200 = 1,620,000 وصلة موزونة يجب تعلم أوزانها (متغيراتها). تمت إضافة مئتي متغير تحيز (Bias) إضافي، بواقع متغيّر لكل خلية عصبية في الطبقة المخفية، ومتغير التحيز هو قيمة تُضاف إلى مدخلات كل خلية عصبية في الشبكة العصبية، وتُستخدم لتوجيه دالة تنشيط الخلايا العصبية إلى الجانب السلبي أو الإيجابي، مما يسمح للشبكة بنمذجة علاقات أكثر تعقيدًا بين بيانات المدخلات وعناوين المخرجات. 212
وبما أن طبقة المخرجات تحتوي على ست عشرة خلية عصبية متصلة بالكامل بمئتي خلية عصبية موجودة في الطبقة المخفية، فإن مجموع الوصلات الموزونة يبلغ 16 × 200 = 3,200 . ويُضاف ستة عشر متغير تحيز إضافية، بواقع متغير واحد لكل خلية عصبية في طبقة المخرجات، ويُستخدم السطر البرمجي التالي لتجميع (Compile) النموذج: = # compiling the model model.compile(loss ['accuracy'], optimizer = 'sparse_categorical_crossentropy', metrics = 'adam') تُستخدم دالة إعداد النموذج الذكي في مكتبة Keras والمعروفة بالتجميع (()model.compile) في عملية تحديد الخصائص الأساسية للنموذج الذكي وإعداده للتدريب والتحقق والتنبؤ، وتتخذ ثلاثة معاملات رئيسة كما هو موضح في الجدول 4.2. جدول 4.2 معاملات طريقة التجميع الخسارة (loss) المقاييس (metrics) المحسن (optimizer) = هي الدالة التي تُستخدم لتقييم الخطأ في النموذج أثناء التدريب، وتقيس مدى تطابق تنبؤات النموذج مع العناوين الحقيقية لمجموعة معينة من بيانات المدخلات. الهدف من التدريب تقليل دالة الخسارة مما يتضمن في العادة تعديل أوزان النموذج ومقدار التحيز وفي هذه الحالة تكون دالة الخسارة هي: sparse_categorical_crossentropy وهي دالة خسارة مناسبة لمهام التصنيف متعددة الفئات؛ حيث تكون العناوين أعدادًا صحيحة كما في y_train_num. هي قائمة المقاييس المستخدمة لتقييم النموذج أثناء التدريب والاختبار، وتُحسب هذه المقاييس باستخدام مُخرجات النموذج والعناوين الحقيقية، ويمكن استخدامها لمراقبة أداء النموذج وتحديد المجالات التي يمكن تحسينه فيها. مقياس الدقة (Accuracy) هو مقياس شائع لمهام التصنيف يقيس نسبة التنبؤات الصحيحة التي قام بها النموذج. هو خوارزمية التحسين التي تُستخدم في ضبط أوزان النموذج ومقدار التحيز أثناء التدريب. ويستخدم المحسّن دالة الخسارة والمقاييس لإرشاد عملية التدريب، ويقوم بضبط متغيرات النموذج في محاولة لتقليل الخسارة وزيادة أداء النموذج إلى الحد الأقصى. وفي هذه الحالة فقد تم استخدام المحسن adam الذي يُعدُّ خوارزمية شائعة لتدريب الشبكات العصبية. ،وأخيرًا ، تُستخدم دالة () fit لتدريب النموذج على البيانات المتاحة. 213. وزارة التعليم Ministry of Education 2024-1446 model.fit(X_train_hog, # training data y_train_num, # labels in integer format batch_size = 80, #number of samples processed per batch epochs ) = 40, #number of iterations over the whole dataset
II II II II II II II II || II II II II II II || ] لا - I = ] - Os 15ms/step II II II II II II II II II :] ] - 0s 15ms/step 1s 16ms/step - loss: 2.2260 - - accuracy: 0.3333 loss: 1.1182 accuracy: 0.7256 - 0s 15ms/step loss: 0.7198 - accuracy: 0.8155 loss: 0.4978 accuracy: 0.9031 II II II II II II II II II || II II II II - 0s 16ms/step - loss: 0.3676 - accuracy: 0.9388 :] - Os 15ms/step ] I - - loss: 0.0085 - accuracy: 1.0000 0s 21ms/step - loss: 0.0080 - accuracy: 1.0000 - - 0s 15ms/step 0s 15ms/step - loss: 0.0073 - loss: 0.0076 - accuracy: 1.0000 - accuracy: 1.0000 ==] II II II II II II II ===] II || II II II II II II II II II II II II || II II II II II II || || II || II II II II II II II II II II II II II II || II II II II II II II II II || II || II II II II II II II II Epoch 1/40 17/17 [==== Epoch 2/40 17/17 [ Epoch 3/40 17/17 [==== Epoch 4/40 17/17 [==== Epoch 5/40 17/17 [ Epoch 36/40 17/17 [===== Epoch 37/40 17/17 [=== Epoch 38/40 17/17 [== Epoch 39/40 17/17 [==== Epoch 40/40 17/17 [=== II = ] :] - 0s 15ms/step - loss: 0.0071 - accuracy: 1.0000 تُستخدم دالة ( ) fit لتدريب نموذج على مجموعة معينة من بيانات الإدخال والعناوين، وتتخذ أربع معاملات لل رئيسة، كما هو موضح في الجدول 4.3. جدول 4.3: معاملات طريقة fit X_train_hog y_train_num batch_size epochs هو معامل بيانات الإدخال المستخدمة لتدريب النموذج، وتتكون من البيانات المحولة عن طريق المُخطَّط التكراري للتدرجات الموجهة التي استخدمت أيضًا لتدريب أحدث إصدار من خوارزمية SGDClassifier في القسم السابق. هو مُعامِل يتضمّن عنوانًا لكل صورة بتنسيق أعداد صحيحة. هو عدد العينات التي تمت معالجتها في كل دفعة أثناء التدريب، ويقوم النموذج الدفعة على بتحديث أوزانه ومقدار التحيز بعد كل دفعة، ويمكن أن يؤثر حجم سرعة عملية التدريب، واستقراراها ، كما يمكن أن تؤدي أحجام الدفعات الأكبر إلى تدريب أسرع، ولكنها قد تكون أكثر تكلفة من الناحية الحسابية وقد تؤدي إلى تدرجات أقل استقراراً. هو عدد المرات التي يتكرر فيها تدريب النموذج باستخدام مجموعة البيانات بأكملها، وتتكون الفترة (Epoch) من مرور واحد عبر مجموعة البيانات بأكملها. ويقوم النموذج بتحديث أوزانه ومقدار التحيز بعد كل دورة، كما يمكن أن يؤثر عدد الفترات على قدرة النموذج على التعلم والتعميم على البيانات الجديدة، والفترة متغيّر مهم يجب اختياره بعناية، وفي هذه الحالة يُدرَّب النموذج على أربعين فترة. وزارة التعليم Ministry of Education 2024-1446 214
215 وزارة التعليم Ministry of Education 2024-1446 ويمكن الآن استخدام نموذج التدريب للتنبؤ بعناوين الصور في مجموعة الاختبار. pred = model.predict(X_test_hog) pred[0] #prints the predictions for the first image 14/14 [ = ] - . 0s 2ms/step array([4.79123509e-03, 9.79321003e-01, 8.39506648e-03, 1.97884417e-03, 7.83501855e-06, 3.50346789e-04, 3.45465224e-07, 1.19854585e-05, 4.41945267e-05, 4.11721296e-04, 1.27362555e-05, 9.83431892e-06, 1.97038025e-04, 2.34744814e-03, 5.49758552e-04, 1.57057808e-03], dtype=float32) بينما تُظهر دالة ( )predict من مكتبة sklearn العنوان الأكثر احتمالا الذي يتنبأ به المصنف، تُظهر دالة ( )predict في مكتبة Keras احتمالات كل العناوين المرشَّحة. في هذه الحالة، يمكن استخدام دالة ( )np.argmax لإظهار مؤشر العنوان الأكثر احتمالا. # index of the class with the highest predicted probability. print(np.argmax(pred[0])) # name of this class print(classes[np.argmax(pred[0])]) # uses axis=1 to find the index of the max value per row accuracy_score(y_test_num,np.argmax(pred, axis=1)) 1 Duck 0.7529021558872305 تحقق هذه الشبكة العصبية البسيطة دقة تبلغ حوالي 75 ، وهي دقة مشابهة لدقة SGDClassifier، ولكن ميزة المعماريات العصبية تنبع من براعتها ، وهو ما يسمح لك بتجربة معماريات مختلفة للعثور على أفضل ما يناسب مجموعة بياناتك . تم تحقيق هذه الدقة من خلال معمارية بسيطة تضمنت طبقة مخفية واحدة تحتوي على مئتي خلية عصبية، وإضافة طبقات إضافية تجعل الشبكة أعمق، بينما تؤدي إضافة المزيد من الخلايا العصبية لكل طبقة إلى جعلها أوسع، ويُعدُّ اختيار عدد الطبقات وعدد الخلايا العصبية لكل طبقة عناصر مهمة لتصميم الشبكة العصبية، ولها تأثير كبير على أدائها، ولكنها ليست الطريقة الوحيدة لتحسين الأداء، وفي بعض الحالات قد يكون استخدام نوع مختلف من معمارية الشبكة العصبية أكثر فاعلية. التنبؤ باستخدام الشبكات العصبية الترشيحية Prediction Using Convolutional Neural Networks أحد هذه الأنواع من المعماريات التي تناسب تصنيف الصور بشكل جيّد يتمثل في الشبكة العصبية الترشيحية (Convolutional Neural Network - CNN) ، وبما أن الشبكة العصبية الترشيحية تعالج بيانات الإدخال، فإنها تقوم باستمرار بضبط متغيّرات الفلاتر المرشَّحة لاكتشاف الأنماط بناءً على البيانات التي تراها؛ حتى تتمكن بشكل أفضل من اكتشاف الخصائص المهمة، ثم تنقل مُخرجات كل طبقة إلى الطبقة التالية التي يكتشف فيها خصائص أكثر تعقيدًا إلى أن تُنتج المخرجات النهائية.
216 على الرغم من فوائد الشبكات العصبية المعقدة مثل: الشبكات العصبية الترشيحية إلا أنه من المهم ملاحظة الشبكة العصبية الترشيحية ما يلي: *(Convolutional Neural Network -CNN) هي شبكات عصبية عميقة تتعلّم تلقائيا تسلسل تكمن قوة الشبكات العصبية الترشيحية في قدرتها على أن تستخرج الخصائص المهمة ذات الصلة من الصور الخصائص من البيانات الخام مثل الصور، عن بشكل تلقائي، دون الحاجة إلى هندسة الخصائص طريق تطبيق سلسلة من الفلاتر الترشيحية على بيانات الإدخال، التي يتم تصميمها بحيث تكتشف اليدوية (Manual Feature Engineering). تحتوي المعماريات العصبية الأكثر تعقيدًا على المزيد من المتغيرات التي يجب تعلمها من البيانات أثناء أنماطًا أو خصائص محدّدة. التدريب، ويتطلب ذلك مجموعة بيانات تدريب أكبر قد لا تكون متاحة في بعض الحالات، وفي مثل هذه الحالات من غير المحتمل أن يكون إنشاء معمارية معقدة للغاية أمرًا فعالًا. • على الرغم من أن الشبكات العصبية قد حققت بالفعل نتائج مبهرة في معالجة الصور والمهام الأخرى، إلا أنها لا تضمن تقديم أفضل أداء لجميع المشكلات ومجموعات البيانات. حتى لو كانت معمارية الشبكة العصبية أفضل حل ممكن مُهمة محددة ، فقد يستغرق الأمر كثيرًا من الوقت والجهد والموارد الحاسوبية لتجربة خيارات مختلفة إلى أن يتم العثور على هذه المعمارية. لذلك من الأفضل البدء بنماذج أبسط (لكنها لا تزال فعّالة) ، مثل: نموذج SGDClassifier وغيره من النماذج الأخرى الكثيرة المتوفرة في المكتبات مثل: مكتبة learn ، وبمجرد حصولك على تنبؤ أفضل لمجموعة البيانات ووصولك إلى النقطة التي لا يمكن فيها تحسين هذه النماذج أكثر من ذلك، فإن التجريب على المعماريات العصبية الأخرى يُعدُّ خطوة ممتازة. المدخلات استخراج الخصائص يدويًا شكل 4.13 : شبكة عصبية ذات هندسة خصائص يدوية التعلم المخرجات معلومة من المزايا الأساسية للشبكات العصبية الترشيحية أنها جيدة جدًا في التعلم من كميات كبيرة من البيانات، ويمكنها في العادة أن تحقق مستويات عليا في دقة المهام مثل: تصنيف الصور دون الحاجة إلى هندسة الخصائص اليدوية مثل: المُخطَّط التكراري للتدرجات الموجهة. وزارة التعليم Ministry of Education 2024-1446
المدخلات استخراج الخصائص والتعلم المخرجات شكل 4.14: شبكة عصبية ترشيحية من دون هندسة الخصائص اليدوية التعلم المنقول Transfer Learning و لل التعلُّم المنقول هو عملية يُعاد فيها استخدام شبكة عصبية مدربة مسبقًا في حل مُهمَّة جديدة. في سياق الشبكات العصبية الترشيحية يتضمن التعلم المنقول أخذ نموذج مدرب مسبقًا على مجموعة بيانات كبيرة وتكييفـه علـى مجموعة بيانات أو مُهمَّة جديدة ، فبدلا من البدء من نقطة الصفر، يتيح التعلَّم المنقول استخدام النماذج المدربة مسبقًا، أي التي تعلّمت بالفعل خصائص مهمة مثل: الحواف، والأشكال، والنقوش من مجموعة بيانات التدريب. تحميل الشبكة إحلال الطبقات المدربة مسبقا تدريب الشبكة التنبؤ وتقييم نشر النتائج دقة الشبكة النهائية تحسين الشبكة تتم إضافة طبقات جديدة لكي تتعلّم الخصائص المحددة لبياناتك. شكل 4.15: إعادة استخدام الشبكة المدربة مسبقا 217. وزارة التعليم Ministry of Education 2024-1446
تمرينات ما تحديات تصنيف البيانات المرئية؟ لديك مصفوفتا قيم Numpy ، وهما مصفوفة X_train ومصفوفة train_ كل صف في مصفوفة X_train شكله (100،3، (100) يمثّل صورة بأبعاد 100x100 وبتنسيق RGB . والصف n في المصفوفة Y_train يمثل تسمية صورة n في مصفوفة .X_train . أكمل المقطع البرمجي التالي، بحيث يُسطّح X_train ثم يُدرب النموذج MultinomialNB على مجموعة البيانات هذه: وزارة التعليم Ministry of Education 2024-1446 from sklearn.naive_bayes import Multinomial NB #imports the Naive Bayes Classifier from sklearn X_train_flat = np.array( model_MNB = MultinomialNB( ) # new Naive Bayes model model_MNB.fit( ) # fits model on the flat training data صف باختصار طريقة عمل الشبكات العصبية الترشيحية وإحدى مميزاتها الرئيسة. 1 2 3 218
219 لديك مصفوفتا قيم ،Numpy ، وهما مصفوفة X_train ومصفوفة train_ كل صف في مصفوفة X_train شكله (100،100،3) يمثّل صورة بأبعاد 100x100 وبتنسيق .RGB . والصف n في المصفوفة Y_train يمثل تسمية صورة n في مصفوفة .X_train . أكمل المقطع البرمجي التالي، بحيث يطبق تحويلات المخطط التكراري للتدرجات الموجهة ثم يستخدم البيانات المحولة في تدريب نموذج: from skimage.color import from sklearn. # used to convert a multi-color (rgb) image to grayscale import StandardScaler # used to scale the data from sklearn.naive_bayes import MultinomialNB #imports the Naive Bayes Classifier from sklearn X_train_gray = np.array([ X_train_hog = scaler = StandardScaler() X_train_hog_scaled = model_MNB = MultinomialNB( ) model_MNB.fit(X_train_flat_scaled, (img) for img in X_train]) # converts training data .fit_transform(X_train_hog) وزارة التعليم Ministry of Education 2024-1446 اذكر بعض عيوب الشبكات العصبية الترشيحية 4 5