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

الفرق بين المعلمات الغير قابلة للتدريب "non-trainable" و القابلة للتدريب "trainable" في كيراس Keras وتنسرفلو Tensorflow

عامر ابراهيم

السؤال

Recommended Posts

  • 1

المعلمات غير القابلة للتدريب " non-trainable parameter " هي عدد الأوزان التي لن يتم تحديثها أثناء التدريب باستخدام خوارزمية ال Gradient descent الانتشار العكسي backpropagation. 
وهناك نوعان رئيسيان للأوزان / المعلمات غير القابلة للتدريب:
أوزان wights نريد جعلها ثابتة لاتتغير قيمتها خلال عملية التدريب. هذا يعني أن keras لن تقوم بتحديث هذه الأوزان من خلال خواررزمية GD أثناء التدريب على الإطلاق (على سبيل المثال عندما نقوم باستخدام نماذج نقل التعلم مثل VGG أو Inception أو Res .. إلخ) فإننا نقوم بعملية تجميد لهذه الأوزان المدربة (فتغييرها  من خلال خواررزمية GD يلغي فكرة نقل التعلم كلها فنحن نريد هذه الأوزان المدربة لذا نحتاج إلى تجميدها freez لكي لاتتغير).  أو مثلاً عندما نستخدم شبكات تلاففية CNN فكما نعلم فإن هذه الشبكات تعتمد على تطبيق مرشحات لكشف سمات الصورة مثل الحواف من خلال مرشح سوبل مثلاُ الذي يعتمد على مشتقات الدرجة الأولى. وكما نعلم فإن قيم المرشح ستتغير من خلال عملية الانتشار الخلفي. لكن لو قمنا بتثبيت قيمها (قمنا بتثبيت قيم مرشح سوبل -قيم المرشحات تعتبر أوزان-) فقد يؤدي ذلك إلى أداء أفضل.
النوع الثاني ليس أوزان وإنما معلمات كتلك التي نستفيد منها للقيام بعمليات أشبه بالعمليات الإحصائية عندما نستخدم فكرة ال  BatchNormalization في نماذجنا.  وبالرغم من أنه قد يتم تحديث بعضها خلال التدريب إلى أنه لايتم تعديلهم من خلال ال backpropagation. لاحظ عندما نستخدم ال BatchNormalization:

model.add(BatchNormalization())
model.summary()
"""_________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense_1 (Dense)              (None, 10)                1010      
_________________________________________________________________
batch_normalization_1 (Batch (None, 10)                40        
=================================================================
Total params: 1,050 # العدد الكلي للمعلمات والأوزان
Trainable params: 1,030  # قابلة للتدريب
Non-trainable params: 20 # معلمات غير قابلة للتدريب
_________________________________________________________________
"""

ويمكنك مثلاً جعل أوزان طبقة ما ثابتة باستخدام الواصفة trainable حيث نقوم بضبطها على False:

model.get_layer(layerName).trainable = False 

كما يمكن التحكم بها من خلال الوسيط trainable  لكن فقط أثناء بناء النموذج. مثال:

model.add(Dense(32, trainable=False,..))  # هنا جعلنا كل الخلايا غير قابلة للتدريب في هذه الطبقة


أما ال  trainable parameter فهي الأوزان وال bias التي يتم تحديث قيمهم خلال عملية التدريب من خلال خوارزمية ال GD أي أنها  الأوزان الموجودة داخل الشبكة والتي  يتم  تعديلها للحصول على ما نريد (حل مشكلة معينة).حيث يتم تعديل قيمهم من خلال خوارزمية الانتشار العكسي بحيث يتم تقليل قيمة ال loss إلى أقل مايمكن. وبشكل افتراضي ، يمكن تدريب جميع الأوزان في نموذج keras مالم تحدد عكس ذلك (مالم تقوم بتجميد بعضها -الحالة الأولى في الأعلى-).
هذا كل شيئ.

تم التعديل في بواسطة Ali Haidar Ahmad
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1

توجد trainable و non-trainable parameters في عملية أعداة التعليم او transfer learning، وتعرف كالتالي:

non-trainable parameters : هي التي لم يتم تدريبها باستخدام gradient descent أو بمعني أخر هي الأوزان التي لم يتم تحسينها أثناء عملية ال backpropagation

بينما على النقيض trainable parameters: هي الأوزان التي تم تدريبها سابقا وتحسينها وجاهزة للاستخدام مباشرة.

ويمكنك التعرف عليها عن طريق بناء النموذج وعمل model.summary:

from keras.layers import *
from keras.models import *
model = Sequential()
model.add(Dense(10, trainable=False, input_shape=(100,)))
model.summary()

تظهر كالتالي هنا لاننا لم نقم بتدريب النموذج حتى الأن:

_________________________________________________________________    
Layer (type)                 Output Shape              Param #   
=================================================================
dense_1 (Dense)              (None, 10)                1010      
=================================================================
Total params: 1,010
Trainable params: 0
Non-trainable params: 1,010

 

ويمكننا التغيير بين اذا كانت الأوزان قابلة لاعادة التدريب ام لا كالتالي:

model.layers[0].trainable = True

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense_1 (Dense)              (None, 10)                1010      
=================================================================
Total params: 1,010
Trainable params: 1,010
Non-trainable params: 0
_________________________________________________________________

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

تم التعديل في بواسطة Ahmed Sharshar
رابط هذا التعليق
شارك على الشبكات الإجتماعية

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...