اذهب إلى المحتوى
  • 0

طبقة (Recurrent Neural Network) SimpleRNN في Keras و TensorFlow 

Meezo ML

السؤال

Recommended Posts

  • 1

هذه الطبقة هي  تمثيل للشبكة العصبية المتكررة. وسأعطي لمحة عنها قبل أن أوضح لك كيفية استخدامها في كيراس وتنسرفلو. الشبكة العصبية المتكررة (RNN) هي نوع من الشبكات العصبية حيث يكون الخراج من الخطوة السابقة دخل إلى الخطوة الحالية. في الشبكات العصبية التقليدية، تكون جميع المدخلات والمخرجات مستقلة عن بعضها البعض، ولكن في حالات مثل عندما يكون مطلوباً التنبؤ بالكلمة التالية من الجملة، تكون الكلمات السابقة مطلوبة وبالتالي هناك حاجة لتذكر الكلمات السابقة. وهنا تكمن أهمية شبكات RNN، والتي حلت هذه المشكلة عن طريق استخدام مانسميه "Hidden state"، فهي الميزة الرئيسية والأكثر أهمية لـ RNN، والتي تتذكر بعض معلومات التسلسل. أي أنها تعالج التسلسلات "sequences" كالنصوص و السلاسل الزمنية (رغم أنها ليست ناجحة جداً مع السلاسل كما أشار فرانسوا كوليت).
إن مايميزها هو استخدام "ذاكرة" تتذكر جميع المعلومات حول ما تم حسابه في المراحل السابقة. وتستخدم نفس الأوزان لكل إدخال لأنه يؤدي نفس المهمة على جميع المدخلات أو الطبقات المخفية لإنتاج المخرجات. وهذا يقلل من تعقيد المعلمات، على عكس الشبكات العصبية الأخرى. وأيضاً إحدى المشكلات المتعلقة بالشبكات العصبية التقليدية (وكذلك شبكات CNN) هي أنها تعمل فقط بأحجام محددة مسبقاً، فهي تأخذ مدخلات ذات حجم ثابت وتنتج مخرجات ذات حجم ثابت. أما RNNs تتيح لنا تسلسلات متغيرة الطول كمدخلات ومخرجات. ولهذا فهي الخيار رقم 1 للتعامل مع النصوص ومعالجة اللغة الطبيعية NLP. إن الشيئ الذي يعطي هذه الشبكات الخاصية التكرارية هو أنها تستخدم نفس الأوزان لكل خطوة. وبالضبط فإنها تستخدم (بشكل قياسي) 3 مجموعات فقط من الأوزان لإجراء حساباتها:

Wxh:  بين الهيدين ستيت والدخل
Whh: بين الهيدين ستيت السابقة والحالية
Why: بين الهيدين ستيت والخرج
وأيضاً
bh: هي الانحراف ويضاف عندما نحسب الهيدين ستيت
by: يضاف عندما نحسب المخرجات

طبعاً هذه التفاصيل لست مضطراً للخوض بها وحسابها فكيراس وتنسرفلو هي من تقوم بكل شيئ، عن طريق الكلاس SimpleRNN:

tf.keras.layers.SimpleRNN(
    units,
    activation="tanh",
    use_bias=True,
    dropout=0.0,
    return_sequences=False,
)

حيث أن units هي عدد الخلايا أو الوحدات في الشبكة، أما الوسيط الثاني هو تابع التنشيط المستخدم، أما الثالث فيحدد فيما إذا كنت تريد إضافة الانحراف b الذي أشرنا له في الأعلى (دوماً true)، الوسيط الرابع هو وسيط ال dropout لتحديد نسبة الخلايا التي سيتم إسقاطها في الشبكة (بين 0 و 1) الوسيط الأخير لتحديد شكل الإخراج ففي حال قمت بضبطه على True سوف يكون الخرج 3D حيث يقوم بإعادة كامل التسلسل أما في الحالة الافتراضية أي False يقوم بإعادة الخرج الأخير من تسلسل الخرج. طبعاً لكي لاتقع في الأخطاء يجب أن نضع True إذا كانت الطبقة التالية هي طبقة تكرارية و False إذا كانت طبقة Dense فالطبقات التكرارية دخلها يجب أن يكون 3D بينما طبقات Dense دخلها يكون 2D. والدخل لهذه الطبقة يكون: [batch, timesteps, feature] والخرج: يكون إما 2D أو 3D كما أشرنا.
المثال التالي لاستخدام هذه الطبقة مع مجموعة بيانات imdb لتحليل المشاعر:

from keras.datasets import imdb
from keras.preprocessing import sequence
max_features = 10000
maxlen = 512
# تحميل البيانات
print('Loading data...')
(input_train, y_train), (input_test, y_test) = imdb.load_data(num_words=max_features)
print(len(input_train), 'train sequences')
print(len(input_test), 'test sequences')
print('Pad sequences (samples x time)')
# معالجة البيانات
input_train = sequence.pad_sequences(input_train, maxlen=maxlen) # حشو
input_test = sequence.pad_sequences(input_test, maxlen=maxlen) # حشو
print('input_train shape:', input_train.shape)
print('input_test shape:', input_test.shape)
# بناء النموذج
from keras.layers import Dense
model = Sequential()
model.add(Embedding(max_features, 64))
model.add(SimpleRNN(64))
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['acc'])
history = model.fit(input_train, y_train,
epochs=10,
batch_size=64,
validation_split=0.2)

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...