كيفية بناء واستخدام الشبكات العصبية العميقة المتكررة (DRNNs) باستخدام Keras

Amine
05/09/2024

1. مقدمة حول DRNNs

الشبكات العصبية العميقة المتكررة (DRNNs) هي نوع من الشبكات العصبية المتكررة (RNNs) التي تتكون من عدة طبقات متكررة يتم تكديسها فوق بعضها البعض. يتيح هذا التنظيم العميق للنموذج القدرة على تعلم الأنماط الزمنية المعقدة بشكل أكثر دقة. يتم استخدام DRNNs في التطبيقات التي تتعامل مع البيانات المتسلسلة مثل التنبؤ بالسلاسل الزمنية، ترجمة النصوص، وتحليل الفيديو.

في هذا الدليل، سنقوم ببناء نموذج DRNN باستخدام مكتبة Keras التي تتيح لنا استخدام طبقات مثل **LSTM** و **GRU** لإنشاء طبقات متكررة عميقة.

2. إعداد بيئة العمل

قبل الشروع في بناء النموذج، نحتاج إلى إعداد بيئة العمل الخاصة بنا. يمكن تثبيت المكتبات المطلوبة مثل TensorFlow و Keras باستخدام الأمر التالي:

pip install tensorflow keras numpy

3. بناء نموذج DRNN باستخدام Keras

لبناء نموذج DRNN، يمكننا استخدام طبقات متكررة مثل **LSTM** أو **GRU**. في هذا المثال، سنستخدم **LSTM** (Long Short-Term Memory)، وهي طبقة شائعة للتعامل مع السلاسل الزمنية، ويمكننا تكديس عدة طبقات LSTM للحصول على نموذج DRNN.

سنبدأ بإنشاء نموذج يحتوي على ثلاث طبقات LSTM، مع تفعيل حالة إعادة التكرار return_sequences=True في الطبقات المتكررة لتغذية الطبقات العليا بالمخرجات.

from keras.models import Sequential
from keras.layers import LSTM, Dense, Dropout

# بناء نموذج DRNN باستخدام Keras
def build_drnn(input_shape):
    model = Sequential()
    
    # الطبقة الأولى LSTM
    model.add(LSTM(128, return_sequences=True, input_shape=input_shape))
    model.add(Dropout(0.2))  # إضافة Dropout لتجنب الإفراط في التكيف
    
    # الطبقة الثانية LSTM
    model.add(LSTM(128, return_sequences=True))
    model.add(Dropout(0.2))
    
    # الطبقة الثالثة LSTM
    model.add(LSTM(128, return_sequences=False))  # لا نعيد المخرجات لأن هذه هي الطبقة الأخيرة
    
    # طبقة Dense النهائية للتنبؤ
    model.add(Dense(1, activation='linear'))  # افترضنا أننا نقوم بتنبؤ عدد مستمر
    
    model.compile(optimizer='adam', loss='mean_squared_error')
    return model

# تحديد شكل الإدخال: (الزمن × عدد الخصائص)
input_shape = (60, 1)  # افترضنا أن لدينا 60 خطوة زمنية مع ميزة واحدة فقط
model = build_drnn(input_shape)
model.summary()

في هذا النموذج، استخدمنا ثلاث طبقات LSTM مع طبقة **Dropout** بعد كل طبقة لتجنب الإفراط في التكيف (Overfitting). الطبقة الأخيرة هي **Dense** لتوليد التنبؤ النهائي بناءً على مخرجات الطبقات السابقة.

4. تدريب نموذج DRNN

بعد بناء النموذج، نحتاج إلى تدريبه على مجموعة من البيانات الزمنية. في هذا المثال، سنفترض أن لدينا بيانات تدريبية تحتوي على سلاسل زمنية (X_train) ونتائجها المستهدفة (y_train).

سنقوم بتقسيم البيانات إلى مجموعات تدريبية واختبارية، ثم نقوم بتدريب النموذج باستخدام بيانات التدريب.

import numpy as np
from sklearn.model_selection import train_test_split

# إنشاء بيانات عشوائية كمثال
X = np.random.rand(1000, 60, 1)  # 1000 عينة، كل عينة تحتوي على 60 خطوة زمنية وميزة واحدة
y = np.random.rand(1000, 1)  # 1000 نتيجة مستهدفة

# تقسيم البيانات إلى تدريب واختبار
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

# تدريب النموذج
history = model.fit(X_train, y_train, epochs=50, batch_size=32, validation_data=(X_test, y_test))

# عرض تاريخ التدريب
import matplotlib.pyplot as plt
plt.plot(history.history['loss'], label='Training Loss')
plt.plot(history.history['val_loss'], label='Validation Loss')
plt.title('Loss over epochs')
plt.xlabel('Epochs')
plt.ylabel('Loss')
plt.legend()
plt.show()

في هذا المثال، قمنا بتوليد بيانات عشوائية للتدريب كبديل عن البيانات الفعلية. بعد تدريب النموذج، يمكنك عرض منحنى الخسارة لمراقبة أداء النموذج على بيانات التدريب والاختبار.

5. اختبار النموذج على بيانات جديدة

بعد تدريب النموذج، يمكننا اختباره على بيانات جديدة لم نستخدمها في التدريب. نقوم بتمرير البيانات الجديدة إلى النموذج للحصول على التنبؤات.

# اختبار النموذج على بيانات جديدة
new_data = np.random.rand(1, 60, 1)  # مثال لبيانات جديدة
prediction = model.predict(new_data)

print(f'The model predicts: {prediction[0][0]}')

هنا قمنا بتوليد بيانات جديدة واستخدمنا النموذج المدرب لتوليد تنبؤ. يمكنك استخدام البيانات الفعلية للتطبيقات العملية.

6. الخاتمة

في هذا الدليل، تعلمنا كيفية بناء شبكة عصبية متكررة عميقة (DRNN) باستخدام Keras. الشبكات المتكررة العميقة تمكننا من التعامل مع السلاسل الزمنية المعقدة وتحليل البيانات المتسلسلة مثل النصوص، التنبؤات الزمنية، وتحليل الفيديو. يمكنك تحسين النموذج بزيادة عدد الطبقات أو ضبط المعلمات للحصول على أداء أفضل.

التعليقات

اترك تعليقاً