جارٍ تحميل الدرس...
في نافذة الطباعة اختر «حفظ كملف PDF» كوجهة.
الشبكات العصبية - الدرس 8
الطبقات الالتفافية، أول شبكة CNN، وتضخيم البيانات
60,000 صورة ملونة بحجم 32×32 موزعة على 10 فئات، 6,000 صورة لكل فئة50,000 صورة تدريب، 10,000 صورة اختبار| الرقم | الفئة |
|---|---|
| 0 | طائرة (airplane) |
| 1 | سيارة (automobile) |
| 2 | طائر (bird) |
| 3 | قطة (cat) |
| 4 | غزال (deer) |
| 5 | كلب (dog) |
| 6 | ضفدع (frog) |
| 7 | حصان (horse) |
| 8 | سفينة (ship) |
| 9 | شاحنة (truck) |
from keras.datasets import cifar10
(x_train, y_train), (x_test, y_test) = cifar10.load_data()
# x_train shape: (50000, 32, 32, 3)categorical_crossentropy[0, 1]num_classes = 10
y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)
# y_train[444] -> [0,0,0,0,0,0,0,0,0,1] (class 9)
x_train = x_train.astype('float32') / 255
x_test = x_test.astype('float32') / 2559 تصير متجه one-hot بـ 1 في الموضع التاسع.Conv2DConv2Dkeras.layers.Conv2D(filters, kernel_size, strides=(1, 1), padding='valid', ...)filters: عدد المرشحات المستخدمة في كل موضع (عمق المخرج)kernel_size: أبعاد (الارتفاع، العرض) للمرشح المنزلقstrides: حجم الخطوة في كل بعد (افتراضيا (1,1))input_shape: مطلوب فقط في الطبقة الأولىMaxPooling2D وFlattenMaxPooling2Dkeras.layers.MaxPooling2D(pool_size=(2, 2), strides=None, padding='valid')pool_size: حجم نافذة التجميع؛ وتأخذ strides قيمة pool_size افتراضياFlattenالتفاف
32 مرشح، 5×5، خطوة 2
التفاف
32 مرشح، 5×5، خطوة 2
تجميع أقصى
2×2
Dropout
0.25
تسطيح
Dense
512
Dense
softmax
strides) بقيمة 2 في أول طبقتين التفافيتين تقلص الأبعاد المكانية بسرعةmodel_1 = Sequential()
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)))
model_1.add(Dropout(0.25))
model_1.add(Flatten())
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'))compile) بدالة الخسارة categorical_crossentropy (لأن التسميات one-hot) + محسن RMSprop + مقياس accuracymodel_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)Epoch 1/15 accuracy: 0.3136 val_accuracy: 0.4506
Epoch 8/15 accuracy: 0.5748 val_accuracy: 0.6114
Epoch 15/15 accuracy: 0.5731 val_accuracy: 0.5863تمرين
التفاف
التفاف
تجميع أقصى
التفاف
التفاف
تجميع أقصى
تسطيح
Dense
تصنيف
stride) بقيمة 1 لكل الطبقات الالتفافية هذه المرةepochs) وقارن زمن التدريب، الخسارة، والدقة (تدريب وتحقق)Data Augmentation)from tensorflow.keras.preprocessing.image import ImageDataGenerator
datagen = ImageDataGenerator(
rotation_range=20,
width_shift_range=0.1,
height_shift_range=0.1,
horizontal_flip=False,
shear_range=0.1,
zoom_range=0.1,
fill_mode='nearest'
)datagen.flow() بدلا من المصفوفات الخامmodel_1.fit(
datagen.flow(x_train, y_train, batch_size=batch_size),
epochs=15,
validation_data=(x_test, y_test)
)Epoch 1/15 accuracy: 0.3195 val_accuracy: 0.5205
Epoch 9/15 accuracy: 0.6074 val_accuracy: 0.6604
Epoch 15/15 accuracy: 0.6221 val_accuracy: 0.6285| بدون تضخيم | مع تضخيم | |
|---|---|---|
أعلى val_accuracy | ~61% | ~66% |
Conv2D ميزات مكانية عبر مرشحات متعلمة؛ وتقلل MaxPooling2D العينات؛ وتربط Flatten بطبقات Dense100 ألف معامل، خيارات البنية المعمارية (الخطوات، المرشحات) تتحكم مباشرة في حجم النموذجcategorical_crossentropy بتسميات مرمزة بأسلوب one-hot (مقابل sparse_categorical_crossentropy للتسميات الصحيحة)55 إلى 61% دقة تحقق، هذه نقطة بداية، لا سقف نهائيMahmoud Abas|بناء شبكة CNN لتصنيف الصور في مجموعة بيانات CIFAR-10