جارٍ تحميل الدرس...
في نافذة الطباعة اختر «حفظ كملف PDF» كوجهة.
الشبكات العصبية - الدرس 9
خمس استراتيجيات لإعادة استخدام DenseNet121 المدربة مسبقا على CIFAR-10، مقارنة وجها لوجه
DenseNet121 الأساسي المدرب مسبقاfine-tune)N طبقة، ودرب الباقيCNN مخصصة صغيرة من الصفرimport tensorflow as tf
from tensorflow.keras import layers, models
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.cifar10.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
y_train = tf.keras.utils.to_categorical(y_train, 10)
y_test = tf.keras.utils.to_categorical(y_test, 10)CIFAR-10 وتطبيعها إلى النطاق [0, 1]DenseNet121 مدربة مسبقا على ImageNet، بدون طبقة التصنيف العلويةdef build_tl_model(base_cls):
base = base_cls(include_top=False, weights='imagenet', input_shape=(32, 32, 3))
base.trainable = False
return models.Sequential([
base,
layers.GlobalAveragePooling2D(),
layers.Dense(128, activation='relu'),
layers.Dense(10, activation='softmax')
])
model_fe = build_tl_model(tf.keras.applications.DenseNet121)base.trainable = False، فقط الرأس الجديد قابل للتدريب7,169,994 معامل إجمالي، منها 132,490 قابلة للتدريب فقط (معاملات القاعدة الـ7,037,504 مجمدة)5 حقب: دقة تدريب 0.694، ودقة تحقق 0.644model_ft = model_fe
for layer in model_ft.layers:
layer.trainable = True
model_ft.compile(
optimizer=tf.keras.optimizers.Adam(1e-5), # note: 100x smaller LR
loss='categorical_crossentropy',
metrics=['accuracy']
)
history_ft = model_ft.fit(x_train, y_train, epochs=5, validation_data=(x_test, y_test))100 مرة من استراتيجية 10.527 إلى 0.717 بحلول الحقبة الخامسة، قفزة كبيرة مقارنة بالتدريب المجمدmodel_nf = build_tl_model(tf.keras.applications.DenseNet121)
model_nf.trainable = True
model_nf.compile(optimizer=tf.keras.optimizers.Adam(1e-4),
loss='categorical_crossentropy', metrics=['accuracy'])
history_nf = model_nf.fit(x_train, y_train, epochs=5, validation_data=(x_test, y_test))DenseNet121 قابل للتدريب بالكامل من اللحظة الأولى، بلا تجميد سابق0.631 بعد 5 حقب، أسوأ من نهج التجميد ثم الضبط الدقيق على مرحلتين100 طبقة فقط (ميزات عامة منخفضة المستوى)، ودرب الباقيbase = tf.keras.applications.DenseNet121(include_top=False, weights="imagenet",
input_shape=(32, 32, 3))
for layer in base.layers[:100]:
layer.trainable = False
for layer in base.layers[100:]:
layer.trainable = True
model_cf = models.Sequential([base, layers.GlobalAveragePooling2D(),
layers.Dense(128, activation='relu'),
layers.Dense(10, activation='softmax')])
model_cf.compile(optimizer=tf.keras.optimizers.Adam(1e-4),
loss="categorical_crossentropy", metrics=["accuracy"])100 طبقة مجمدة، والباقي قابل للتدريب331 من أصل 431 طبقة قابلة للتدريبCNN مدمجة مدربة بحتا على CIFAR-10scratch = models.Sequential([
layers.Input((32, 32, 3)),
layers.Conv2D(32, 3, activation='relu', padding='same'), layers.MaxPool2D(),
layers.Conv2D(64, 3, activation='relu', padding='same'), layers.MaxPool2D(),
layers.GlobalAveragePooling2D(),
layers.Dropout(0.2),
layers.Dense(10, activation='softmax')
])
scratch.compile('adam', loss="categorical_crossentropy", metrics=["accuracy"])
history_s = scratch.fit(x_train, y_train, epochs=10, validation_data=(x_test, y_test))0.518 فقط بعد 10 حقب، متأخرة كثيرا عن كل استراتيجيات التعلم بالنقلplt.plot(history_fe.history['val_accuracy'], 'o-', label='Freeze+TrainHead')
plt.plot(history_ft.history['val_accuracy'], 'o-', label='Unfreeze+FineTune')
plt.plot(history_nf.history['val_accuracy'], 'o-', label='No Freeze->Fine-tuneAll')
plt.plot(history_cf.history['val_accuracy'], 'o-', label='Custom-Freeze')
plt.plot(history_s.history['val_accuracy'], 'o-', label='Scratch CNN')
plt.title("Validation Accuracy Comparison")
plt.legend()| الترتيب | الاستراتيجية | دقة التحقق (5 حقب) |
|---|---|---|
| 1 | التجميد المخصص | 0.81 |
| 2 | إلغاء التجميد ثم الضبط الدقيق | 0.72 |
| 3 | التجميد ثم تدريب الرأس فقط | 0.64 |
| 4 | الضبط الدقيق من الصفر (بلا تجميد) | 0.63 |
| 5 | CNN من الصفر (10 حقب) | 0.52 |
10 آلاف صورة)، والفئات تشبه ImageNet10 آلاف إلى 100 ألف)، ودقة التحقق تستقر أثناء تدريب الرأس فقط100 ألف فأكثر)، والبيانات مختلفة جدا عن ImageNet (مثل الصور الطبية)10 إلى 50 ألفا)، مع رغبة في تقليل الحوسبة مقارنة بالضبط الدقيق الكاملالطبقات الالتفافية الأولى
مجمدة: حواف، تكتلات ألوان، ملامس عامة
الطبقات الأعمق
قابلة للتدريب: ميزات دلالية عالية المستوى خاصة بالمهمة
DenseNet121 بـ EfficientNetB0 أو VGG16 أو XceptionEfficientNetB0/VGG16 يتوقعان 224×224، وXception يحتاج 71×71 على الأقل) عبر tf.image.resize5 حقب، ثم اضبطه دقيقا لـ 10 حقب بمعدل تعلم منخفض (1e-5)ImageNet: بيانات أكثر أو اختلاف أكبر → ألغ تجميدا أكثرMahmoud Abas|الدرس 08