Meezo ML نشر 23 يوليو 2021 أرسل تقرير نشر 23 يوليو 2021 (معدل) توضيح دالة التنشيط sigmoid في كيراس وتنسرفلو؟ تم التعديل في 23 يوليو 2021 بواسطة Meezo ML اقتباس
1 Ali Haidar Ahmad نشر 23 يوليو 2021 أرسل تقرير نشر 23 يوليو 2021 يعتبر هذا التابع تابع لوجيستي "logistic function" وهو تابع غير خطي، الشكل الرياضي له: g=sigmoid(x) = 1 / (1 + exp(-x)). والشكل البياني لهذا التابع هو كالتالي: نلاحظ من الخط البياني للتابع أن قيمه تتراوح بين 0 و 1، حيث: عندما z=-∞ تكون قيمة التابع g=0 وعندما z=0 يكون g=0.5 وعندما z=+∞ يكون g=1. ومن الرسم البياني نلاحظ أنه يمكن استخدامه في تدريب النماذج (أقصد أنه يعطي قيماً مختلفة عن الصفر أي هناك تغيرات في ميل المماس)، وكما نلاحظ من الرسم (المنحني الأزرق) فإن المشتق تكون قيمه فعالة للتدريب عندما تكون قيم z قريبة من الصفر ولكن من أجل قيم كبيرة جداً أو صغيرة جداً فلن تكون فعالة في التدريب لأن المماس يكون شبه مستقيم وبالتالي قيمة المشتقة تكون صغيرة جداً، مما يؤدي الى بطء شديد في عملية التدريب وبالتالي مكلف من الناحية الحسابية. إن الاستخدام الشائع والأهم والأفضل لهذا التابع هو استخدامه كمصنف في آخر طبقة من نموذج عندما تكون المهمة مهمة تصنيف ثنائي حيث أن خرجه يكون قيمة احتمالية بين 0 و 1 وبالتالي خيار ممتاز لمهام التصنيف الثنائي. وفي كيراس وتنسرفلو له الشكل التالي: tf.keras.activations.sigmoid(x) مثال: a = tf.constant([-20, -1.0, 0.0, 1.0, 20], dtype = tf.float32) b = tf.keras.activations.sigmoid(a) b.numpy() # الخرج array([2.0611537e-09, 2.6894143e-01, 5.0000000e-01, 7.3105860e-01, 1.0000000e+00], dtype=float32) لاستخدامه في نماذجك، يمكنك استخدامه في أي طبقة، لكن كما ذكرت يفضل استخدامه فقط في آخر طبقة عندما تكون المهمة مهمة تصنيف ثنائي كما في المثال التالي: from keras.datasets import imdb from keras import preprocessing max_features = 10000 maxlen = 20 (x_train, y_train), (x_test, y_test) = imdb.load_data( num_words=max_features) x_train = preprocessing.sequence.pad_sequences(x_train, maxlen=maxlen) # هنا حددنا طول الكلمات ب 20 x_test = preprocessing.sequence.pad_sequences(x_test, maxlen=maxlen) # بناء نموذجك from keras.models import Sequential from keras.layers import Flatten, Dense model = Sequential() model.add(Embedding(10000, 8, input_length=maxlen)) model.add(Flatten()) model.add(Dense(1, activation='sigmoid')) # آخر طبقة model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['acc']) model.summary() # تدريبه history = model.fit(x_train, y_train, epochs=10, batch_size=32, validation_split=0.2) 2 اقتباس
0 Ahmed Sharshar نشر 25 يوليو 2021 أرسل تقرير نشر 25 يوليو 2021 تسمي دالة التنشيط sigmoid بهذا الاسم لانها مأخوذه من الدالة الشهيرة sigmoid function والتي يمكن التعبير عنها بالصيغة الرياضية الأتية: sigmoid(x) = 1 / (1 + exp(-x)). وهي دالة تتراوح قيمها بين سالب مالانهاية و موجب مالانهاية وتقطع محور الصادات عند 0.5 كما هو موضح بالشكل البياني الأتي: وتكمن أهميتها في اشتقاقها حيث تعمل على الحصول على ميل الدالة بسهولة وتاخذ مشتقة دالة sigmoid كالتالي: σ(x)=1/(1+e^(−x)) # مشتقة الدالة dσ(x)/d(x) = σ(x)⋅(1−σ(x)) نري من المشتقة انها تستخدم الدوال الأسية في تحسين النواتج انثاء عملية التدريب، بحيث انه اذا كانت القيمة بعيدة عن الناتج الحقيقي، فان قيمة المشتقة تصبح كبيرة وبالتالي يتم تعديل تلك القيمة بشكل كبير، اما اذا كانت القيمة أثناء التدريب قريبة للغاية من القيمة الحقيقية، فأن المماس (المشتقة) يكون شبة أفقي (مستقيم) وبالتالي لا يتم تعديل تلك القيمة بشكل كبير. وتتمثل أهميتها القصوى في كون القيم التي تخرج منها تترواح بين ال 0 و 1، وبالتالي هي مناسبة بشدة في التصنيف الثنائي binary classification كذلك في التصنيف الذي يعتمد على اصدار أحتمال لكل فئة probability of each class. كذلك فأنه ، وعلى عكس دالة التنشيط ReLU، فأن مشتقة الدالة معرفة على كل المجال، لذا فانه لا يوجد احتمال يمكن أن تعلق فيه الدالة او يحدث أي خطأ انثاء عملية التدريب. أما عن استخدامها في keras و tensorflow فانه لا داعي لاعادة تعريف الدالة ومشتقتها مرة أخري حيث انها معرفة بالفعل ويمكن استخدامها مباشرة كالتالي: from tensorflow.keras import layers from tensorflow.keras import activations model.add(layers.Dense(64)) model.add(layers.Activation(activations.sigmoid(x))) ويفضل استخدام دالة التنشيط sigmoid كأخر طبقة مباشرة قبل بدء عملية التدريب، ولكن يمكن استخدامها كذلك بعد أى طبقة layer. اقتباس
السؤال
Meezo ML
توضيح دالة التنشيط sigmoid في كيراس وتنسرفلو؟
تم التعديل في بواسطة Meezo ML2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.