جارٍ تحميل الدرس...
في نافذة الطباعة اختر «حفظ كملف PDF» كوجهة.
بناء البرمجيات - الدرس 9
الطبقات الالتفافية في Keras، بناء أول شبكة عصبية التفافية، ثم تحسينها بزيادة البيانات (Data Augmentation)
60,000 صورة ملونة بحجم 32×32 موزعة على 10 فئات، بواقع 6,000 صورة لكل فئة50,000 صورة تدريب، 10,000 صورة اختبارKeras الخاصة بالشبكات الالتفافية، بناء شبكة عصبية التفافية أولى، ثم بناء شبكة أعمق ومقارنة الأداءfrom keras.datasets import cifar10
(x_train, y_train), (x_test, y_test) = cifar10.load_data()
print('x_train shape:', x_train.shape) # (50000, 32, 32, 3)
# كل صورة عبارة عن مصفوفة 32×32×3 (الارتفاع، العرض، قنوات RGB)
x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
x_train /= 255 # تحجيم قيم البكسل إلى [0, 1]
x_test /= 255num_classes = 10
y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)
# بدلا من عدد صحيح من 0-9، يصبح كل تصنيف متجه ترميز أحادي (one-hot)
y_train[444]
# array([0., 0., 0., 0., 0., 0., 0., 0., 0., 1.])categorical_crossentropykeras.layers.Conv2D(filters, kernel_size, strides=(1, 1),
padding='valid', activation=None, ...)filterskernel_size(x, y) يحدد ارتفاع وعرض نواة الالتفاف (Convolution kernel)strides(x, y) يحدد الخطوة في كل بعد، الافتراضي (1, 1)input_shapekernel_size وstrideskeras.layers.MaxPooling2D(pool_size=(2, 2), strides=None, padding='valid')pool_size(x, y) التي يجمع عليهاstridespool_size افتراضيا إن لم تحددFlattenmodel_1 = Sequential()
# التفاف 5×5، خطوة 2، 32 مرشحا
model_1.add(Conv2D(32, kernel_size=(5, 5), strides=(2, 2),
padding='same', input_shape=x_train.shape[1:]))
model_1.add(Activation('relu'))
model_1.add(Conv2D(32, (5, 5), strides=(2, 2), activation="relu"))
model_1.add(MaxPooling2D(pool_size=(2, 2))) # يقلص إلى 3×3×32
model_1.add(Dropout(0.25))
model_1.add(Flatten()) # 3×3×32 -> 288×1
model_1.add(Dense(512))
model_1.add(Activation('relu'))
model_1.add(Dropout(0.5))
model_1.add(Dense(num_classes))
model_1.add(Activation('softmax'))Conv2D
5×5، خطوة 2، 32 مرشحا
Conv2D
5×5، خطوة 2، 32 مرشحا
MaxPooling2D
2×2 → 3×3×32
Dropout
0.25
Flatten
288×1
Dense
512
Dropout
0.5
Dense
10، Softmax
model_1.summary()conv2d (None, 16, 16, 32) 2,432
conv2d_1 (None, 6, 6, 32) 25,632
max_pooling2d (None, 3, 3, 32) 0
flatten (None, 288) 0
dense (None, 512) 147,968
dense_1 (None, 10) 5,130
Total params: 181,162 (707.66 KB)181,162 معامل، معظمها من طبقة Dense التي تلي Flattenmodel_1.compile(loss='categorical_crossentropy',
optimizer='rmsprop',
metrics=['accuracy'])
model_1.fit(x_train, y_train,
batch_size=32,
epochs=15,
validation_data=(x_test, y_test),
shuffle=True)57-58%، ودقة التحقق تتذبذب بين نحو 55-60% خلال 15 حقبة. الشبكة الالتفافية الضحلة لها قدرة محدودةتمرين
Conv
Conv
MaxPool
Conv
Conv
MaxPool
Flatten
Dense
التصنيف النهائي
1 لجميع الطبقات الالتفافية5 حقب وقارن وقت التدريب والخسارة والدقة (تدريب مقابل تحقق) مع النموذج الضحلfrom tensorflow.keras.preprocessing.image import ImageDataGenerator
datagen = ImageDataGenerator(
rotation_range=20, # دوران عشوائي، بالدرجات
width_shift_range=0.1, # إزاحة أفقية عشوائية (نسبة من العرض)
height_shift_range=0.1, # إزاحة رأسية عشوائية (نسبة من الارتفاع)
shear_range=0.1, # شدة القص (Shear)
zoom_range=0.1, # تكبير عشوائي
fill_mode='nearest' # طريقة ملء البكسلات الجديدة
)model_1.fit(
datagen.flow(x_train, y_train, batch_size=batch_size),
epochs=15,
validation_data=(x_test, y_test)
)62% دقة تدريب ونحو 63% دقة تحقق. تحسن ملموس مقارنة بالتدريب غير المعزز، رغم أن كل حقبة تستغرق وقتا أطولCIFAR-10 معيار تصنيف صور ملونة بحجم 32×32 عبر 10 فئات (50,000 صورة تدريب / 10,000 صورة اختبار)Conv2D تستخرج السمات المكانية عبر المرشحات والخطوات، MaxPooling2D تقلل العينة، Flatten تربط مخرج الطبقات الالتفافية بطبقات DenseDense واحدة) تملك بالفعل أكثر من 100 ألف معامل وتبلغ نحو 55-60% دقة تحقق على CIFAR-10Mahmoud Abas|بناء شبكة CNN لتصنيف الصور في مجموعة بيانات CIFAR-10