امنع الإفراط في التجهيز وعزز دقة نموذج التعلم الآلي الخاص بك من خلال تنفيذ أساليب زيادة البيانات في TensorFlow.
زيادة البيانات هي عملية تطبيق التحولات المختلفة على بيانات التدريب. يساعد على زيادة تنوع مجموعة البيانات ويمنع فرط التجهيز. يحدث التجاوز في الغالب عندما يكون لديك بيانات محدودة لتدريب نموذجك.
هنا ، سوف تتعلم كيفية استخدام وحدة زيادة البيانات في TensorFlow لتنويع مجموعة البيانات الخاصة بك. سيؤدي هذا إلى منع فرط التخصيص عن طريق إنشاء نقاط بيانات جديدة تختلف قليلاً عن البيانات الأصلية.
عينة مجموعة البيانات التي ستستخدمها
ستستخدم مجموعة بيانات القطط والكلاب من Kaggle. تحتوي مجموعة البيانات هذه على ما يقرب من 3000 صورة للقطط والكلاب. يتم تقسيم هذه الصور إلى مجموعات تدريب واختبار والتحقق من الصحة.
يمثل التصنيف 1.0 كلبًا بينما يمثل التصنيف 0.0 قطة.
الكود المصدري الكامل لتطبيق تقنيات زيادة البيانات والذي لا يتوفر في ملف مستودع جيثب.
تركيب واستيراد TensorFlow
للمتابعة ، يجب أن يكون لديك ملف الفهم الأساسي لبايثون. يجب أن يكون لديك أيضًا معرفة أساسية بالتعلم الآلي. إذا كنت بحاجة إلى تجديد معلومات ، فقد ترغب في اتباع بعض دروس حول التعلم الآلي.
يفتح جوجل كولاب. قم بتغيير نوع وقت التشغيل إلى GPU. بعد ذلك ، قم بتنفيذ الأمر السحري التالي على خلية التعليمات البرمجية الأولى لتثبيت TensorFlow في بيئتك.
! نقطة تثبيت tensorflow
استيراد TensorFlow والوحدات والفئات ذات الصلة.
يستورد تينسورفلو مثل تف
من tensorflow.keras.preprocessing.image يستورد ImageDataGenerator
من tensorflow.keras.models يستورد تسلسلي
من tensorflow.keras.layers يستورد Conv2D ، MaxPooling2D ، تسطيح ، كثيفة ، تسرب
ال tensorflow.keras.preprocessing.image سيمكنك من إجراء زيادة البيانات على مجموعة البيانات الخاصة بك.
إنشاء مثيلات لفئة ImageDataGenerator
قم بإنشاء مثيل لـ ImageDataGenerator فئة لبيانات القطار. سوف تستخدم هذا الكائن للمعالجة المسبقة لبيانات التدريب. سينشئ دفعات من بيانات الصورة المعززة في الوقت الفعلي أثناء تدريب النموذج.
في مهمة تصنيف ما إذا كانت الصورة قطة أو كلبًا ، يمكنك استخدام تقنيات التقليب والعرض العشوائي والارتفاع العشوائي والسطوع العشوائي والتكبير / التصغير. ستولد هذه التقنيات بيانات جديدة تحتوي على أشكال مختلفة من البيانات الأصلية التي تمثل سيناريوهات العالم الحقيقي.
# تحديد مولد بيانات الصورة للتدريب
train_datagen = ImageDataGenerator (إعادة البيع =1./255,
أفقي_قلب =حقيقي,
width_shift_range =0.2,
height_shift_range =0.2,
نطاق السطوع = [0.2,1.0],
zoom_range =0.2)
قم بإنشاء مثيل آخر لملف ImageDataGenerator فئة لبيانات الاختبار. سوف تحتاج إلى إعادة البيع معامل. سيعمل على تطبيع قيم البكسل لصور الاختبار لتتناسب مع التنسيق المستخدم أثناء التدريب.
# تحديد مولد بيانات الصورة للاختبار
test_datagen = ImageDataGenerator (إعادة البيع =1./255)
قم بإنشاء مثيل أخير لملف ImageDataGenerator فئة لبيانات التحقق من الصحة. أعد قياس بيانات التحقق بنفس طريقة بيانات الاختبار.
# تحديد مولد بيانات الصورة للتحقق من صحتها
Validation_datagen = ImageDataGenerator (إعادة البيع =1./255)
لست بحاجة إلى تطبيق تقنيات التعزيز الأخرى على بيانات الاختبار والتحقق من الصحة. وذلك لأن النموذج يستخدم بيانات الاختبار والتحقق من الصحة لأغراض التقييم فقط. يجب أن تعكس توزيع البيانات الأصلي.
تحميل بياناتك
إنشاء DirectoryIterator كائن من دليل التدريب. سيولد دفعات من الصور المعززة. ثم حدد الدليل الذي يخزن بيانات التدريب. تغيير حجم الصور إلى حجم ثابت من 64 × 64 بكسل. حدد عدد الصور التي ستستخدمها كل دفعة. أخيرًا ، حدد نوع التصنيف المطلوب الثنائية (أي قطة أو كلب).
# تحديد دليل التدريب
train_data = train_datagen.flow_from_directory (الدليل =r '/ content / drive / MyDrive / cats_and_dogs_filtered / قطار',
target_size = (64, 64),
حجم_الدفعة =32,
class_mode ='الثنائية')
إنشاء آخر DirectoryIterator كائن من دليل الاختبار. اضبط المعلمات على نفس القيم مثل تلك الخاصة ببيانات التدريب.
# تحديد دليل الاختبار
test_data = test_datagen.flow_from_directory (الدليل ="/ content / drive / MyDrive / cats_and_dogs_filtered / test",
target_size = (64, 64),
حجم_الدفعة =32,
class_mode ='الثنائية')
إنشاء نهائي DirectoryIterator كائن من دليل التحقق. تظل المعلمات كما هي في بيانات التدريب والاختبار.
# تحديد دليل التحقق من الصحة
Validation_data = validation_datagen.flow_from_directory (دليل ="/ content / drive / MyDrive / cats_and_dogs_filtered / validation",
target_size = (64, 64),
حجم_الدفعة =32,
class_mode ='الثنائية')
لا تعمل مكررات الدليل على زيادة مجموعات بيانات التحقق من الصحة والاختبار.
تحديد النموذج الخاص بك
حدد بنية شبكتك العصبية. إستخدم الشبكة العصبية التلافيفية (سي إن إن). تم تصميم شبكات CNN للتعرف على الأنماط والميزات في الصور.
النموذج = تسلسلي ()
# طبقة تلافيفية بها 32 فلتر مقاس 3x3
model.add (Conv2D (32, (3, 3) ، التنشيط ="relu"، شكل الإدخال = (64, 64, 3)))# الحد الأقصى لطبقة التجميع مع حجم حمام السباحة 2x2
model.add (MaxPooling2D (pool_size = (2, 2)))# طبقة تلافيفية بها 64 فلتر مقاس 3x3
model.add (Conv2D (64, (3, 3) ، التنشيط ="relu"))# الحد الأقصى لطبقة التجميع مع حجم حمام السباحة 2x2
model.add (MaxPooling2D (pool_size = (2, 2)))# تسطيح الناتج من الطبقات التلافيفية والتجميع
model.add (تسطيح ())# طبقة متصلة بالكامل مع 128 وحدة وتنشيط ReLU
model.add (كثيف (128، التنشيط ="relu"))# قم بإسقاط 50٪ من الوحدات بشكل عشوائي لمنع فرط التجهيز
model.add (التسرب (0.5))
# طبقة الإخراج مع التنشيط السيني (التصنيف الثنائي)
model.add (كثيف (1، التنشيط ="السيني"))
قم بتجميع النموذج باستخدام الثنائي عبر الانتروبيا فقدان وظيفة. يشيع استخدام مشاكل التصنيف الثنائي. للمحسن ، استخدم ملف محسن آدم. إنها خوارزمية تحسين معدل التعلم التكيفي. أخيرًا ، قم بتقييم النموذج من حيث الدقة.
model.compile (خسارة ="binary_crossentropy"، محسن ="آدم"، المقاييس = ['دقة'])
اطبع ملخصًا لبنية النموذج على وحدة التحكم.
ملخص نموذج()
تُظهر لقطة الشاشة التالية تصور بنية النموذج.
يمنحك هذا نظرة عامة على شكل تصميم النموذج الخاص بك.
تدريب النموذج الخاص بك
تدريب النموذج باستخدام ملائم() طريقة. قم بتعيين عدد الخطوات لكل حقبة ليكون عدد عينات التدريب مقسومًا على حجم الدفعة. قم أيضًا بتعيين بيانات التحقق وعدد خطوات التحقق من الصحة.
# تدريب النموذج على بيانات التدريب
history = model.fit (train_data ،
steps_per_epoch = train_data.n // train_data.batch_size ،
عهود =50,
Validation_data = validation_data ،
validation_steps = validation_data.n // validation_data.batch_size)
ال ImageDataGenerator يطبق الفصل زيادة البيانات على بيانات التدريب في الوقت الفعلي. هذا يجعل عملية تدريب النموذج أبطأ.
تقييم النموذج الخاص بك
قم بتقييم أداء النموذج الخاص بك على بيانات الاختبار باستخدام يقيم() طريقة. قم أيضًا بطباعة فقد الاختبار والدقة على وحدة التحكم.
test_loss ، test_acc = model.evaluate (test_data ،
الخطوات = test_data.n // test_data.batch_size)
مطبعة(f'Test الخسارة: {test_loss}')
مطبعة(دقة f'Test: {test_acc}')
تُظهر لقطة الشاشة التالية أداء النموذج.
يعمل النموذج جيدًا بشكل معقول على البيانات التي لم يسبق رؤيتها.
عند تشغيل كود لا يطبق تقنيات زيادة البيانات ، تكون دقة تدريب النموذج 1. مما يعني أنها تتسع. كما أنه يعمل بشكل سيء على البيانات التي لم يسبق لها مثيل من قبل. هذا لأنه يتعلم خصائص مجموعة البيانات.
متى تكون زيادة البيانات غير مفيدة؟
- عندما تكون مجموعة البيانات متنوعة وكبيرة بالفعل: تؤدي زيادة البيانات إلى زيادة حجم مجموعة البيانات وتنوعها. إذا كانت مجموعة البيانات كبيرة ومتنوعة بالفعل ، فلن تكون زيادة البيانات مفيدة.
- عندما تكون مجموعة البيانات صغيرة جدًا: لا يمكن لزيادة البيانات إنشاء ميزات جديدة غير موجودة في مجموعة البيانات الأصلية. لذلك ، لا يمكن أن تعوض مجموعة البيانات الصغيرة التي تفتقر إلى معظم الميزات التي يحتاجها النموذج للتعلم.
- عندما يكون نوع زيادة البيانات غير مناسب: على سبيل المثال ، قد لا يكون تدوير الصور مفيدًا حيث يكون اتجاه الكائنات مهمًا.
ما هو TensorFlow قادر على
TensorFlow مكتبة متنوعة وقوية. إنه قادر على تدريب نماذج التعلم العميق المعقدة ويمكن تشغيله على مجموعة من الأجهزة من الهواتف الذكية إلى مجموعات من الخوادم. لقد ساعد في تشغيل أجهزة الحوسبة المتطورة التي تستخدم التعلم الآلي.