عامر ابراهيم نشر 22 سبتمبر 2021 أرسل تقرير نشر 22 سبتمبر 2021 عند استخدام الدالة model.summary ألاحظ أنه يتم كتابة non-trainable parameter و trainable parameter ما الفرق بينهما؟ وأرجو توضيحهما؟ 2 اقتباس
1 Ali Haidar Ahmad نشر 22 سبتمبر 2021 أرسل تقرير نشر 22 سبتمبر 2021 (معدل) المعلمات غير القابلة للتدريب " 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 مالم تحدد عكس ذلك (مالم تقوم بتجميد بعضها -الحالة الأولى في الأعلى-). هذا كل شيئ. تم التعديل في 22 سبتمبر 2021 بواسطة Ali Haidar Ahmad 1 اقتباس
1 Ahmed Sharshar نشر 22 سبتمبر 2021 أرسل تقرير نشر 22 سبتمبر 2021 (معدل) توجد 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 _________________________________________________________________ وعندما تريد أعادة بناء النموذج أو تدريبه مجددا ، يجب التركيز على تلك الأوزان التي لم يتم تدريبها بعد لتقوم بتدريبها على النموذج الخاص بك لتحسين النواتج. تم التعديل في 22 سبتمبر 2021 بواسطة Ahmed Sharshar اقتباس
السؤال
عامر ابراهيم
عند استخدام الدالة model.summary ألاحظ أنه يتم كتابة non-trainable parameter و trainable parameter ما الفرق بينهما؟ وأرجو توضيحهما؟
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.