
تشبه المعرفة بالتعلم الآلي ومكتبة TensorFlow الدروس الأولى في مدرسة لتعليم قيادة السيارات ، عندما تعاني من مواقف متوازية ، حاول تبديل الترس في الوقت المناسب ولا تخلط بين المرايا ، تذكر تذكر تسلسل الإجراءات ، بينما ترتع قدمك بعصبية على دواسات الغاز. هذا تمرين صعب ولكنه ضروري. لذلك في التعلم الآلي: قبل استخدام أنظمة التعرف على الوجوه الحديثة أو خوارزميات التنبؤ في سوق الأوراق المالية ، سيكون عليك التعامل مع الأدوات المناسبة ومجموعة من التعليمات من أجل إنشاء أنظمةك الخاصة دون مشاكل.
سيقدر المبتدئين في التعلم الآلي التوجه المطبق لهذا الكتاب ، لأن الغرض منه هو تقديم الأساسيات ، ثم الوصول بسرعة إلى حل المشكلات الحقيقية. من مراجعة مفاهيم التعلم الآلي ومبادئ العمل مع TensorFlow ، ستنتقل إلى الخوارزميات الأساسية ، وتدرس الشبكات العصبية وتكون قادرًا على حل مشكلات التصنيف والتجميع والانحدار والتنبؤ بشكل مستقل.
مقتطفات. الشبكات العصبية التلافيفية
التسوق في المتاجر بعد يوم صعب هو مهمة شاقة للغاية. هاجمت عيني الكثير من المعلومات. المبيعات ، الكوبونات ، مجموعة متنوعة من الألوان ، الأطفال الصغار ، الأضواء الوامضة والممرات المليئة بالناس - هذه مجرد أمثلة قليلة على جميع الإشارات التي يتم إرسالها إلى القشرة البصرية للعقل ، بغض النظر عما إذا كنت أريد أو لا أريد الانتباه إليها. النظام البصري يمتص وفرة من المعلومات.
من المؤكد أنك تعرف عبارة "من الأفضل رؤية مرة واحدة من سماع مائة مرة". قد يكون هذا صحيحًا لك ولأجلي (أي للأشخاص) ، ولكن هل يمكن للجهاز أن يجد معنى في الصور؟ تحدد مستقبلات الضوء المرئية أطوال موجات الضوء ، لكن هذه المعلومات ، على ما يبدو ، لا تمتد إلى وعينا. في النهاية ، لا يمكنني تحديد بالضبط أطوال موجات الضوء التي أشاهدها. بنفس الطريقة ، تستقبل الكاميرا بكسلات الصور. لكننا نريد بدلاً من ذلك أن نتلقى شيئًا من مستوى أعلى ، على سبيل المثال أسماء أو مواقع الكائنات. كيف نحصل على المعلومات المتصورة على المستوى الإنساني من البكسل؟
للحصول على معنى معين من البيانات المصدر ، سيكون من الضروري تصميم نموذج شبكة عصبية. في الفصول السابقة ، تم تقديم عدة أنواع من نماذج الشبكات العصبية ، مثل النماذج المتصلة بالكامل (الفصل 8) والتشفير التلقائي (الفصل 7). في هذا الفصل ، سوف نقدم نوعًا آخر من النماذج يسمى الشبكة العصبية التلافيفية (CNN). يعمل هذا النموذج بشكل رائع مع الصور والبيانات الحسية الأخرى مثل الصوت. على سبيل المثال ، يمكن أن يصنف نموذج CNN بشكل موثوق أي كائن معروض في الصورة.
سيتم تدريب نموذج CNN ، الذي سيتم مناقشته في هذا الفصل ، لتصنيف الصور إلى واحدة من 10 فئات ممكنة. في هذه الحالة ، "الصورة أفضل من كلمة واحدة فقط" ، نظرًا لأن لدينا 10 خيارات ممكنة فقط. هذه خطوة صغيرة نحو الإدراك على المستوى الإنساني ، لكن علينا أن نبدأ بشيء ، أليس كذلك؟
9.1. عيوب الشبكات العصبية
التعلم الآلي هو صراع أبدي لتطوير نموذج من شأنه أن يكون لديه ما يكفي من التعبيرية لتقديم البيانات ، ولكن في الوقت نفسه لا يكون عالمياً لدرجة أنه يتعلق بإعادة تدريب وحفظ الأنماط. يتم تقديم الشبكات العصبية كوسيلة لزيادة التعبير. على الرغم من أنه ، كما تعتقد ، فإنهم يعانون كثيرًا من مصائد إعادة التدريب.
ملاحظة: يحدث إعادة التدريب عندما يكون النموذج المدرب دقيقًا بشكل استثنائي على مجموعة بيانات التدريب وسيئة على مجموعة بيانات التحقق من الصحة. من المحتمل أن يكون هذا النموذج عالميًا بشكل مفرط بالنسبة للكمية الصغيرة من البيانات المتاحة ، وفي النهاية يتذكر فقط بيانات التدريب.
لمقارنة تنوع نموذجي التعلم الآلي ، يمكنك استخدام خوارزمية إرشادية سريعة وفاتنة لحساب عدد المعلمات التي يجب تحديدها كنتيجة للتدريب. كما هو مبين في التين. 9.1 ، سيكون لشبكة عصبية متصلة بالكامل تلتقط صورة 256 × 256 وتعيينها على طبقة من 10 خلايا عصبية 256 × 256 × 10 = 655،360 معلمة! قارنه بنموذج يحتوي على خمسة معلمات فقط. يمكن افتراض أن الشبكة العصبية المتصلة بالكامل قد تقدم بيانات أكثر تعقيدًا من نموذج مكون من خمسة معلمات.
يناقش القسم التالي الشبكات العصبية التلافيفية ، وهي طريقة معقولة لتقليل عدد المعلمات. بدلاً من التعامل مع الشبكات المتصلة بالكامل ، تعيد CNN استخدام نفس المعلمات بشكل متكرر.
9.2. الشبكات العصبية التلافيفية
الفكرة الأساسية الكامنة وراء الشبكات العصبية التلافيفية هي أن الفهم المحلي للصورة يكفي. تتمثل الميزة العملية للشبكات العصبية التلافيفية في أنه مع وجود العديد من المعلمات ، يمكن تقليل وقت التدريب بشكل كبير ، وكذلك كمية البيانات اللازمة لتدريب النموذج.
بدلاً من الشبكات المتصلة تمامًا مع الأوزان من كل بكسل ، تحتوي شبكة CNN على عدد كافٍ من الأوزان اللازمة لعرض جزء صغير من الصورة. يشبه قراءة كتاب مع عدسة مكبرة: في النهاية ، يمكنك قراءة الصفحة بأكملها ، ولكن في أي وقت معين ، لا تنظر إلا إلى جزء صغير منه.
تخيل صورة 256 × 256. بدلاً من استخدام رمز TensorFlow الذي يعالج الصورة بأكملها في وقت واحد ، يمكنك مسح جزء الصورة بواسطة جزء ، على سبيل المثال ، نافذة 5 × 5. نافذة 5 × 5 تنزلق فوق الصورة (عادة من اليسار إلى اليمين ومن أعلى إلى أسفل) ، مثل كما هو موضح في الشكل. 9.2. كيف "سريع" الشرائح يسمى طول الخطوة. على سبيل المثال ، يعني طول الخطوة 2 أن نافذة منزلقة 5 × 5 تنقل 2 بكسل في كل مرة حتى تنتهي الصورة بأكملها. في TensorFlow ، كما سيظهر قريبًا ، يمكنك ضبط طول الخطوة وحجم النافذة باستخدام مكتبة الوظائف المدمجة.
تحتوي هذه النافذة 5 × 5 على مصفوفة وزن 5 × 5 مرتبطة بها.
التعريف الإلتواء عبارة عن تجميع موزون لقيم شدة البكسل في الصورة أثناء مرور النافذة عبر الصورة بأكملها. اتضح أن عملية الالتواء هذه مع مصفوفة الأوزان تخلق صورة أخرى (من نفس الحجم ، والتي تعتمد على الطي). التخثر هو عملية تطبيق الإلتواء.
تحدث جميع عمليات التلاعب بالنافذة المنزلقة في الطبقة التلافيفية للشبكة العصبية. تحتوي الشبكة العصبية التلافيفية النموذجية على عدة طبقات تلافيفية. كل طبقة تلافيفية عادة ما تخلق العديد من التلفيفات الإضافية ، وبالتالي فإن مصفوفة الترجيح هي موتر 5 × 5 × ن ، حيث n هو عدد التلافيف.
على سبيل المثال ، دع الصورة تمر عبر طبقة تلافيفية مع مصفوفة وزن بأبعاد 5 × 5 × 64. وهذا يخلق 64 ملف مع نافذة انزلاق 5 × 5. وبالتالي ، فإن النموذج المقابل يحتوي على 5 × 5 × 64 = 1600 معلمة ، وهو أقل بكثير من عدد معلمات شبكة متصلة بالكامل : 256 × 256 = 65،536.
إن جاذبية الشبكات العصبية التلافيفية (CNN) هي أن عدد المعلمات التي يستخدمها النموذج لا يعتمد على حجم الصورة الأصلية. يمكنك تشغيل نفس الشبكة العصبية التلافيفية على 300 × 300 صورة ، ولن يتغير عدد المعلمات في الطبقة التلافيفية!
9.3. تحضير الصور
قبل البدء في استخدام نموذج CNN مع TensorFlow ، قم بإعداد بعض الصور. ستساعدك القوائم الموجودة في هذا القسم في إعداد مجموعة بيانات تدريب للفترة المتبقية من الفصل.
بادئ ذي بدء ، قم بتنزيل
مجموعة بيانات CIFAR-10 من
www.cs.toronto.edu/~kriz/cifar-10- python.tar.gz. تحتوي هذه المجموعة على 60000 صورة موزعة بشكل موحد على 10 فئات ، وهو مورد كبير إلى حد ما لمهام التصنيف. ثم يجب وضع ملف الصورة في دليل العمل. في التين. يوضح الشكل 9.3 أمثلة على الصور من مجموعة البيانات هذه.
لقد استخدمنا بالفعل مجموعة بيانات CIFAR-10 في الفصل السابق على أجهزة التشفير التلقائي ، وننظر الآن في هذا الرمز مرة أخرى. القائمة التالية مأخوذة مباشرة من وثائق CIFAR-10 الموجودة على
www.cs.toronto.edu/~kriz/cifar.html . ضع الكود في ملف cifar_tools.py.
القائمة 9.1. تحميل الصور من ملف CIFAR-10 في Python
import pickle def unpickle(file): fo = open(file, 'rb') dict = pickle.load(fo, encoding='latin1') fo.close() return dict
الشبكات العصبية عرضة لإعادة التدريب ، لذلك من المهم أن تفعل كل ما هو ممكن لتقليل هذا الخطأ. للقيام بذلك ، لا تنس تنظيف البيانات قبل معالجتها.
تنظيف البيانات هو العملية الرئيسية لخط أنابيب التعلم الآلي. يستخدم الكود الموجود في القائمة 9.2 الخطوات الثلاث التالية لتنظيف مجموعة صور:
1. إذا كان لديك صورة ملونة ، فحاول تحويلها إلى ظلال رمادية لتقليل أبعاد بيانات الإدخال ، وبالتالي تقليل عدد المعلمات.
2. فكر في اقتصاص الصورة في المنتصف ، لأن حواف الصورة لا توفر أي معلومات مفيدة.
3. قم بتطبيع الإدخال عن طريق طرح الوسط وتقسيمه على الانحراف المعياري لكل عينة بيانات حتى لا تتغير التدرجات بشكل حاد للغاية أثناء الانتشار الخلفي.
توضح القائمة التالية كيفية مسح مجموعة بيانات باستخدام هذه الطرق.
احفظ جميع الصور من مجموعة بيانات CIFAR-10 وقم بتشغيل وظيفة التنظيف. تحدد القائمة التالية طريقة ملائمة لقراءة البيانات وتنظيفها وهيكلة استخدامها في TensorFlow. هناك ، يجب عليك تضمين الكود من ملف cifar_tools.py.
القائمة 9.3. تجهيز جميع ملفات CIFAR-10
def read_data(directory): names = unpickle('{}/batches.meta'.format(directory))['label_names'] print('names', names) data, labels = [], [] for i in range(1, 6): filename = '{}/data_batch_{}'.format(directory, i) batch_data = unpickle(filename) if len(data) > 0: data = np.vstack((data, batch_data['data'])) labels = np.hstack((labels, batch_data['labels'])) else: data = batch_data['data'] labels = batch_data['labels'] print(np.shape(data), np.shape(labels)) data = clean(data) data = data.astype(np.float32) return names, data, labels
في ملف using_cifar.py ، يمكنك استخدام الطريقة عن طريق استيراد cifar_tools لهذا الغرض. توضح القائمتان 9.4 و 9.5 كيفية جلب صور متعددة من مجموعة بيانات وتصورها.
القائمة 9.4. باستخدام وظيفة المساعد cifar_tools
import cifar_tools names, data, labels = \ cifar_tools.read_data('your/location/to/cifar-10-batches-py')
يمكنك تحديد صور متعددة بشكل تعسفي ورسمها وفقًا للتسمية. القائمة التالية تفعل ذلك بالضبط ، حتى تتمكن من فهم نوع البيانات التي ستتعامل معها بشكل أفضل.
عن طريق تشغيل هذا الرمز ، ستقوم بإنشاء ملف cifar_examples.png ، والذي سيبدو في الشكل. 9.3.
»يمكن الاطلاع على مزيد من المعلومات حول الكتاب على
موقع الناشر»
المحتويات»
مقتطفات20 ٪ من القسيمة للباعة المتجولين -
التعلم الآلي