بناء النماذج التسلسلية
كدّس طبقات Dense، وطبّق دوال التنشيط، ثم جمّع النموذج باستخدام دالة الخسارة والمُحسِّن
بناء النماذج التسلسلية درس مجاني في R Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في R Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة R Academy 4 دروس في المجموع.
النموذج التسلسلي
النموذج التسلسلي هو تكديس خطي للطبقات، بحيث يكون لكل طبقة موتر إدخال واحد وموتر إخراج واحد بالضبط. وهو أبسط أنواع نماذج Keras، ويغطي غالبية حالات الاستخدام العملية: المصنفات ذات التغذية الأمامية، ونماذج الانحدار، ونماذج CNN وRNN الأساسية.
library(keras)
# An empty sequential model
model <- keras_model_sequential()
print(model)
# Or specify the input shape upfront
model <- keras_model_sequential(input_shape = c(20))
print(model)layer_dense() — الطبقة كاملة الاتصال
تضيف layer_dense(units, activation) طبقة كاملة الاتصال (كثيفة)، حيث تتصل كل خلية عصبية في الإدخال بكل خلية عصبية في الإخراج. وتحدد الوسيطة units أبعاد الإخراج. بينما تطبق activation لاخطية؛ وتُعد 'relu' الخيار المعتاد للطبقات المخفية.
library(keras)
model <- keras_model_sequential(input_shape = c(30)) |>
layer_dense(units = 128, activation = 'relu') |>
layer_dense(units = 64, activation = 'relu') |>
layer_dense(units = 1, activation = 'sigmoid')
# Print architecture
summary(model)دوال تنشيط طبقة الإخراج
يعتمد تنشيط الطبقة النهائية على المهمة:
'sigmoid': التصنيف الثنائي (يُخرج احتمالًا بين 0 و1)'softmax': التصنيف متعدد الفئات (يُخرج احتمالات مجموعها يساوي 1)'linear'أو عدم استخدام تنشيط: الانحدار (يُخرج تنبؤات ذات قيم حقيقية)
# Binary classification
binary_model <- keras_model_sequential(input_shape = c(20)) |>
layer_dense(64, activation = 'relu') |>
layer_dense(1, activation = 'sigmoid') # P(class=1)
# Multi-class (10 classes)
multi_model <- keras_model_sequential(input_shape = c(20)) |>
layer_dense(64, activation = 'relu') |>
layer_dense(10, activation = 'softmax') # P per class
# Regression
reg_model <- keras_model_sequential(input_shape = c(20)) |>
layer_dense(64, activation = 'relu') |>
layer_dense(1, activation = 'linear') # raw valuecompile() — الخسارة والمُحسِّن والمقاييس
تضبط compile(loss, optimizer, metrics) عملية التعلم. ومن التركيبات الشائعة:
- ثنائي:
loss = 'binary_crossentropy'،metrics = 'accuracy' - متعدد الفئات:
loss = 'categorical_crossentropy' - انحدار:
loss = 'mse'،metrics = 'mae'
model |> compile(
loss = 'binary_crossentropy',
optimizer = optimizer_adam(learning_rate = 0.001),
metrics = c('accuracy')
)
# Check configuration
model$loss
model$optimizer$get_config()optimizer_adam()
يُعد Adam (التقدير التكيفي للعزوم) المُحسِّن الافتراضي لمعظم مهام التعلم العميق. فهو يكيّف معدل التعلم لكل معلمة باستخدام تقديرات العزمين الأول والثاني للتدرجات. ويُعد معدل التعلم الافتراضي 0.001 نقطة بداية جيدة لمعظم المسائل.
# Adam with default settings
model |> compile(
optimizer = 'adam',
loss = 'binary_crossentropy',
metrics = 'accuracy'
)
# Customised Adam
model |> compile(
optimizer = optimizer_adam(
learning_rate = 0.0005,
beta_1 = 0.9,
beta_2 = 0.999,
epsilon = 1e-7
),
loss = 'binary_crossentropy',
metrics = 'accuracy'
)fit() — تدريب النموذج
تدرّب fit(model, x, y, epochs, batch_size, validation_split) النموذج. والعصر هو مرور كامل واحد عبر بيانات التدريب. ويحدد حجم الدفعة عدد العينات التي تُعالج قبل كل تحديث للأوزان. وتعيد الدالة كائن سجل التدريب.
# Prepare example data
x_train <- matrix(rnorm(1000 * 20), nrow = 1000)
y_train <- sample(c(0, 1), 1000, replace = TRUE)
history <- model |> fit(
x = x_train,
y = y_train,
epochs = 20,
batch_size = 32,
validation_split = 0.2, # reserve 20% for validation
verbose = 1
)
plot(history)تنظيم الطبقات — Dropout
تضبط layer_dropout(rate) عشوائيًا جزءًا من وحدات الإدخال يساوي rate إلى 0 أثناء التدريب. ويمنع ذلك تكيف الخلايا العصبية معًا بشكل مفرط، مما يجعله منظمًا قويًا. ولا يكون Dropout نشطًا إلا أثناء التدريب، وليس أثناء الاستدلال.
model <- keras_model_sequential(input_shape = c(784)) |>
layer_dense(512, activation = 'relu') |>
layer_dropout(rate = 0.4) |>
layer_dense(256, activation = 'relu') |>
layer_dropout(rate = 0.3) |>
layer_dense(10, activation = 'softmax')
summary(model)تنظيم الأوزان باستخدام L1 وL2
نظّموا الطبقات الفردية باستخدام kernel_regularizer لفرض عقوبة على الأوزان الكبيرة. تفرض L2 (ridge) عقوبة على مجموع مربعات الأوزان، بينما تفرض L1 (lasso) عقوبة على القيم المطلقة وتُحدث تناثرًا. ويتوفر كلاهما عبر regularizer_l2() وregularizer_l1().
model <- keras_model_sequential(input_shape = c(100)) |>
layer_dense(
units = 64,
activation = 'relu',
kernel_regularizer = regularizer_l2(l = 0.01)
) |>
layer_dense(
units = 32,
activation = 'relu',
kernel_regularizer = regularizer_l1_l2(l1 = 1e-4, l2 = 1e-3)
) |>
layer_dense(1, activation = 'sigmoid')
summary(model)تطبيع الدفعات
تطبّع layer_batch_normalization() تنشيطات الطبقة السابقة لكل دفعة صغيرة. ويعمل ذلك على استقرار التدريب، ويسمح باستخدام معدلات تعلم أعلى، ويؤدي دور منظم خفيف. ضعوها بعد layer_dense() وقبل دالة التنشيط، أو بعد التنشيط — فكلا الأسلوبين مستخدم عمليًا.
model <- keras_model_sequential(input_shape = c(100)) |>
layer_dense(256, use_bias = FALSE) |>
layer_batch_normalization() |>
layer_activation('relu') |>
layer_dense(128, use_bias = FALSE) |>
layer_batch_normalization() |>
layer_activation('relu') |>
layer_dense(1, activation = 'sigmoid')
summary(model)evaluate() و predict()
تحسب evaluate(model, x_test, y_test) الخسارة والمقاييس على بيانات الاختبار. وتُنشئ predict(model, x_new) التنبؤات الخام — أي الاحتمالات في حالة التصنيف. تقبل الدالتان مصفوفات رقمية وتعيدان قيماً متسقة بصيغة R الأصلية.
x_test <- matrix(rnorm(200 * 20), nrow = 200)
y_test <- sample(c(0, 1), 200, replace = TRUE)
# Evaluate on test set
test_metrics <- model |> evaluate(x_test, y_test, verbose = 0)
cat('Test Loss:', test_metrics['loss'])
cat('Test Accuracy:', test_metrics['accuracy'])
# Generate predictions
prob_preds <- model |> predict(x_test)
class_preds <- ifelse(prob_preds > 0.5, 1, 0)
table(class_preds, y_test)حفظ النماذج وتحميلها
احفظ النموذج المُجمَّع والمُدرَّب باستخدام save_model_tf(model, 'path') (بتنسيق TF SavedModel، وهو التنسيق الموصى به) أو save_model_hdf5(model, 'model.h5'). وأعِد تحميله باستخدام load_model_tf() أو load_model_hdf5(). يحتفظ النموذج المُحمَّل بإعدادات التجميع، ويمكنه التنبؤ فوراً أو متابعة التدريب.
# Save in TensorFlow SavedModel format (recommended)
save_model_tf(model, '/tmp/my_dense_model')
# Reload
loaded <- load_model_tf('/tmp/my_dense_model')
# Confirm predictions match
new_preds <- loaded |> predict(x_test)
all.equal(prob_preds, new_preds) # TRUEتحقق سريع
عند إنشاء نموذج تسلسلي لمسألة تصنيف مكوّنة من 5 فئات، ما دالة التنشيط وعدد الوحدات اللذان ينبغي أن تستخدمهما طبقة الإخراج؟
مراجعة النماذج التسلسلية
أهم النقاط من درس إنشاء النماذج التسلسلية:
- تنشئ
keras_model_sequential()تتابعاً خطياً من الطبقات. - تُعد
layer_dense(units, activation)طبقة أساسية متصلة بالكامل. - تنشيط الإخراج:
'sigmoid'(ثنائي)، و'softmax'(متعدد الفئات)، و'linear'(الانحدار). - تضبط
compile(loss, optimizer, metrics)عملية التعلّم. - تدرّب
fit(model, x, y, epochs, batch_size, validation_split)النموذج. - التنظيم:
layer_dropout(rate)وregularizer_l2()وlayer_batch_normalization(). - احفظ النموذج باستخدام
save_model_tf()وحمّله باستخدامload_model_tf().
library(keras)
model <- keras_model_sequential(input_shape = c(30)) |>
layer_dense(128, activation = 'relu') |>
layer_dropout(0.4) |>
layer_dense(64, activation = 'relu') |>
layer_dropout(0.3) |>
layer_dense(1, activation = 'sigmoid')
model |> compile(
optimizer = optimizer_adam(0.001),
loss = 'binary_crossentropy',
metrics = 'accuracy'
)
history <- model |> fit(
x_train, y_train,
epochs = 30, batch_size = 64,
validation_split = 0.2, verbose = 0
)
plot(history)الأسئلة الشائعة
هل درس «بناء النماذج التسلسلية» مجاني؟
نعم — نص درس «بناء النماذج التسلسلية» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة R Academy، انتقل إلى CoddyKit PRO. تتضمن دورة R Academy 4 دروس في المجموع.
ماذا ستتعلم في «بناء النماذج التسلسلية»؟
كدّس طبقات Dense، وطبّق دوال التنشيط، ثم جمّع النموذج باستخدام دالة الخسارة والمُحسِّن تتمرن على R Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ R Academy؟
لا تُشترط خبرة سابقة. R Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «بناء النماذج التسلسلية»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس R Academy هذا؟
نعم. كل درس في R Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- إعداد Keras وTensorFlow في R
- بناء النماذج التسلسلية
- أساسيات الشبكات العصبية الالتفافية
- التدريب والتحقق ومنع فرط التكيّف