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

خوارزمية التحسين Adam Optimization واستخدامها في Keras

Meezo ML

السؤال

Recommended Posts

  • 1

هو طريقة لتسريع خوارزمية GD وتخفيف التذبذب وهي فعالة من الناحية الحسابية وتأخذ ذاكرة قليلة ومناسبة للمشكلات الكبيرة في التعلم الآلي التي تكون فيها البيانات كبيرة أو عدد الأوزان في الشبكة كبير جداً، تعتمد على حساب متوسط الأوزان الأسية للمشتقات السابقة  وتخزينها في متحول v وكذلك حساب متوسط الأوزان الأسية لمربعات المشتقات السابقة ووضعها في متحول s و تقوم أيضاً بالخلط بين الطريقتين.
يتم حساب متوسط الأوزان الأسية للمشتقات السابقة عن طريق القوانين:

vdw = B1* vdw + (1-B1)*dw
vdb = B1*vdb + (1-B1)*db

حيث vdw هيي متوسط الأوزان اأاسي لجميع الأوزان في الشبكة.
و vdb متوسط الأوزان اأاسي لل bias في الشبكة.
و B1 يمثل معدل الاضمخلال الأسي.
يتم حساب متوسط الاوزان الاسية لمربعات المشتقات السابقة  عن طريق القوانين:

Sdw = B2*Sdw + (1-B2)*dw^2
Sdb = B2*Sdb + (1-B2)*db^2

حيث vdw هيي متوسط الأوزان الاسي لجميع الأوزان في الشبكة.
و vdb متوسط الأوزان الاسي لل bias في الشبكة.
و B2 معدل التضاؤل الأسي.
في كيراس يتم استيراده من خلال الموديول:

keras.optimizers

لاستخدامه في نموذج نمرره للدالة compile بإحدى الطريقتين:

model.compile(
	optimizer=Adam(learning_rate=0.001)
	...
)
# أو
model.compile(
	optimizer='adam'
	...
)
# لاحظ أنه في الطريقة الثانية سيستخدم معمل الخطوة الافتراضي
# لذا إذا أردت تغييرها استخدم الصيغة الأولى

مثال عن طريقه الاستخدام حيث يأخذ adam الوسيط learning_rate الذي يمثل معامل التعلم أو مقدار الخطوة.

# استدعاء المكتبات
from keras.models import Sequential
from keras import layers
from keras.datasets import mnist
from keras.optimizers import Adam
# تحميل الداتا
(X_train,y_train),(X_test,y_test)=mnist.load_data()
# تقييس الداتا وتغيير حجم الدخل منعنا لحدوث خطأ
X_train = X_train.reshape((60000, 28 * 28))/255.0
X_test = X_test.reshape((10000, 28 * 28))/255.0
بناء الشبكه العصبونيه بطبقه واحده وطبقة خرج ب 10 أصناف
model = Sequential()
model.add(layers.Flatten())
model.add(layers.Dense(512, activation='relu', input_shape=( 28*28,)))
model.add(layers.Dense(10, activation='softmax'))
#مع معامل تعلم 0.001 adam  استخدام 
model.compile(optimizer=Adam(learning_rate=0.001),
loss='sparse_categorical_crossentropy',metrics=['accuracy'])
# تدريب الموديل
model.fit(X_train,y_train)

 

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

  • 1

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

Adam هو من خوارزميات الإتزان البديلة لstochastic gradient descent وهو يعد من أفضل الخوارزميات و ذلك لسهولة تعامله مع البيانات الضخمة و معدل التعلم المتغير حسب ال

 

 

يمكن إستخدام Adam بإحدى طريقتين:

  1. بعد إستيراد المكتبات اللازمة، تم تعريف نموذج و إضافة عدد 2Layers الأولى تحتوي على شكل البيانات المدخلة و عدد الneurons الثانية تحتوي على دالة التنشيط activation function وهي المسؤولة عن إضافة non-linearity للنموذج. بعد ذلك عرفنا دالة الموانة Adam بإستخدام القيم الإفتراضية. ومن ثم نقوم بتعريف الoptimizer في model.compile.
    from tensorflow import keras
    from tensorflow.keras import layers
    
    model = keras.Sequential()
    model.add(layers.Dense(64, kernel_initializer='uniform', input_shape=(10,)))
    model.add(layers.Activation('softmax'))
    
    opt = keras.optimizers.Adam()
    model.compile(loss='categorical_crossentropy', optimizer=opt)
    تذكر أن model.compile تقوم بالأتي:
    اقتباس

    Compile defines the loss function, the optimizer and the metrics.

    بالتالي نحن نحتاج إلى عملية التجميع قبل أن نقوم بأي عملية تدريب للنموذج.
     
  2. يمكننا أن نقوم بتمرير الoptimizer إلى دالة التجميع مباشرة دون التعريف المسبق كالتالي:
    model.compile(loss='categorical_crossentropy', optimizer='Adam')

     

 

 

 

 

 

 

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

  • 1

لقد تحدثت عن خوارزميات التحسين و أهميتها للنموذج هنا، يمكنك مراجعة المقدمة لتتعرف على أهميتها. والان بعد أن قمت بفهم أهمية خوارزميات التحسين لنتحدث عن Adam optimizer بالتحديد.  Adam هو من خوارزميات الإتزان البديلة لstochastic gradient descent وهو يعد من أفضل الخوارزميات و ذلك لسهولة تعامله مع البيانات الضخمة و معدل التعلم المتغير حسب البيانات و بذلك فهو يصل لنتائج النماذج العميقة بصورة أسرع.  الشكل الإفتراضي لAdam optimizer:  tf.keras.optimizers.Adam(     learning_rate=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-07, amsgrad=False,name='Adam')  [إضغط و إسحب للتحريك]  والذي يحتوى على الparameters hالتالية:  learning_rate: هو المعدل الذي تتغير به الأوزان في النموذج.  beta_1: معدل التناقص التسارعي لمعدل التعلم (exponential decay) للمرة الأولى.  beta_2: معدل التناقص التسارعي لمعدل التعلم (exponential decay) للمرة الثانية.  epsilon: معامل حفظ توازن النموذج الرياضي (لمنع القيام بعمليات مثل القسمة على 0).  لابد أنك لاحظت وجود معدلين للتناقص التسارعي أو الأسي في الخوارزمية، و السبب يرجع لطريقة حساب الخوارزمية، فهي تحسب التغير في متوسط الأوزان و في متوسط مربعات الأوزان للتحكم في معدل التغير.  يمكن إستخدام Adam بإحدى طريقتين:      بعد إستيراد المكتبات اللازمة، تم تعريف نموذج و إضافة عدد 2Layers الأولى تحتوي على شكل البيانات المدخلة و عدد الneurons الثانية تحتوي على دالة التنشيط activation function وهي المسؤولة عن إضافة non-linearity للنموذج. بعد ذلك عرفنا دالة الموانة Adam بإستخدام القيم الإفتراضية. ومن ثم نقوم بتعريف الoptimizer في model.compile.      from tensorflow import keras     from tensorflow.keras import layers      model = keras.Sequential()     model.add(layers.Dense(64, kernel_initializer='uniform', input_shape=(10,)))     model.add(layers.Activation('softmax'))      opt = keras.optimizers.Adam()     model.compile(loss='categorical_crossentropy', optimizer=opt)      تذكر أن model.compile تقوم بالأتي:          Compile defines the loss function, the optimizer and the metrics.      بالتالي نحن نحتاج إلى عملية التجميع قبل أن نقوم بأي عملية تدريب للنموذج.      يمكننا أن نقوم بتمرير الoptimizer إلى دالة التجميع مباشرة دون التعريف المسبق كالتالي:      model.compile(loss='categorical_crossentropy', optimizer='Adam')      [إضغط و إسحب للتحريك]

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

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...