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

Ahmed Sharshar

الأعضاء
  • المساهمات

    348
  • تاريخ الانضمام

  • تاريخ آخر زيارة

كل منشورات العضو Ahmed Sharshar

  1. عند تحديث tensorflow ، لم تعد تلك الخاصية موجودة، بمعني أدق لم تعد في حاجة لها، فقد تم استبدالها، في التحديثات الأقدم، كان يتم كتابتها كالتالي: from tensorflow import set_random_seed set_random_seed(x) أما الان فقط عليك أن تقوم باستبداله بالكود الاتى: import tensorflow tensorflow.random.set_seed(x)
  2. يتم إنشاء أي مستودع جديد باستخدام الفرع الرئيسي الافتراضي وليس الرئيسي (default branch main, not master)، ويمكنك إعادة تسمية الفرع الافتراضي للمستودع الحالي من السيد إلى رئيسي (default branch from master to main). احد الحلول باستخدام الأمر git push -f origin master أما اذا قمت بعمل push لاي أوامر جديدة، يمكنك استخدام الامر التالي: git pull --rebase origin main git push origin main
  3. تحدث هذة المشكلة اذا حاولت القيام بأكثر من عملية في نفس الوقت أو اذا كانت هناك ملف مخزن الغلق index.lock، لذا حاول ان تتخلص من هذا الملف عن طريق تشغيل الكود الاتي اذا كنت تعمل بنظام لينكس او ماك ، قد تعمل في ويندوز كذلك: rm -f .git/index.lock اذا لاحظت وجود أي خطأ في حالة استخدام الكود السابق على ويندوز، جرب هذا الكود: del -f .git/index.lock يمكنك كذلك أن تقوم بعملها بطريقة يدوية عن طريق فتح github والذهاب الي git ، ستجد الملف index.lock، فقط احذفه وستحل المشكلة.
  4. تحدث هذة المشكلة عادة بسبب فقر المتصفح الي media player او عدم السماح له بالوصول للموقع، يمكنك السماح له من خلال شعار القفل بجانب عنوان الموقع او اتبع الخطوات الاتية: 1) في أعلى يسار الصفحة، انقر على رمز المزيد واختار الإعدادات. 2) ضمنَ "الخصوصية والأمان"، انقر على إعدادات الموقع الإلكتروني. 3) انقر على JavaScript وفعِّل السماح به (مُوصى به). 4) ارجع إلى الموقع الإلكتروني الذي يتضمّن الفيديو . في أعلى يمين الصفحة، انقر على رمز إعادة التحميل . كذلك يمكنك مسح ملفات الارتباط (الكوكيز) وذلك أيضا من علامة القفل ذاتها. يمكنك عمل اعادة ضبط للمتصفح عن طريق الاتي: 1) في أعلى يسار الصفحة، انقر على رمز المزيد ثم اختر الإعدادات. 2) ضمن قسم "إعادة الضبط"، انقر على إعادة ضبط. 3) أكِّد بالنقر على إعادة ضبط. 4) ارجع إلى الموقع الإلكتروني الذي يتضمّن الفيديو . في أعلى يمين الصفحة، انقر على رمز إعادة التحميل. يمكنك كذلك عمل تحديث للمتصفح قد تكون هذة المشكلة. اذا كان الموقع نفسه يعمل او أي مواقع اخري، فان الاتصال بالانترنت سليم ولا حاجة لمعالجة الراوتر، هي فقط مشكلة في المتصفح. اذا لم يفلح اي من هذا حاول تجربة chrome او firefox وأظنه سيعمل.
  5. قد يحدث هذا لعدة اسباب: 1) بطئ الانترنت: حاول عمل اعادة تحميل للصفحة باستخدام ctrl + F5 او من زر اعادة التحميل اعلي يسار الصفحة. 2) المتصفح لا يدعم بعض التنسيقات أو أنه يحتاج لعمل update، حاول استخدام متصفح chrome او firefox أو أي متصفح مبني علي قاعدة chromium. 3) حاول أن تحذف الكوكيز او تفرغ بعض المساحة من خلال مسح تاريخ التصفح history، ستجد هذا في خيارات واعدادات المتصفح أعلى يمين الصفحة.
  6. تعتبر verbose ادى الميزات التي تقدمها keras في مكتبتها، وعلى الرغم انها ليست اساسية في عملية التعلم، الا انها توفر ميزه هامة للغاية وهي متابعة حالة التعلم، حيث ان وضع verbose =1 يسمح بمتابعة حالة التعلم بعد كل دورة epoch: Train on 186219 samples, validate on 20691 samples Epoch 1/2 186219/186219 [==============================] - 85s 455us/step - loss: 0.5815 - acc: 0.7728 - val_loss: 0.4917 - val_acc: 0.8029 Train on 186219 samples, validate on 20691 samples Epoch 2/2 186219/186219 [==============================] - 84s 451us/step - loss: 0.4921 - acc: 0.8071 - val_loss: 0.4617 - val_acc: 0.8168 اما اذا وضعت verbose =0 فانها لا تظهر حالة التعلم ، فقط تظهر الناتج النهائي بعد اتمام التعلم كاملا. اما اذا وضعت verbose = 2 فانها ستظهر فقط رقم الدورة epoch دون اظهار دقة التمرين في هذة الدورة كما هو واضحفي الصورة التالية:
  7. الحلقات التكرارية سهلة في تطبيقها، فهي بشكل افتراضي تقوم باضافة 1 في كل دوره، يمكنك كذلك أن تقوم بظبط القيمة التي تضيفها في كل دورة. #هنا نعمل حلقة تكرارية تبدأ من 1 وتنتهي عند 10 وتزيد بمقدار 2 كل مرة for i in range(1,11,2): عند استخدام in range فان القيمة التي يبدأ بها هي اول قيمة مكتوبة وهي 1، و اخر قيمه يصل اليها التكرار هي الرقم المكتوب ثانيا -1 وهو في المثال السابق 11-1 = 10. اما عن الكود الذي تسأل عنه فهو بسيط ويمكن كتابته بلغة بايثون كالتالي: for i in range(1,11,1): # حلقة تكرارية تبدأ من 1 وتنتهي عند 10 بزيادة مقدارها 1 في كل خطوة print(i) # نطبع الرقم في كل دورة if i == 10: # نتأكد عند وصول الرقم الي 10 print(" الصلاة و السلام على سيدنا محمد") # نطبع الجملة عند وصول الرقم الي 10 break
  8. الحصول على الخرج الخاص بكل طبقة في النموذج مهم لمتابعة حالة التعلم في كل مرحلة، ولحسن الحظ فان تلك المتابعة ليست صعبة في keras ، حيث يمكن استخدام model.layers[index].output فقط تمرر ال index الخاص بالطبقة التي تريد الحصول على الخرج الخاص بها، فمثلا الطبقة الاولي هي رقم 0 والثانية 1 وهكذا، الكود بسيط للغاية وهو كالتالي: from keras import backend as K inp = model.input # الطبقة التي يدخل منها البيانات outputs = [layer.output for layer in model.layers] # الخارج من كل الطبقات functor = K.function([inp, K.learning_phase()], outputs ) # الدالة التي تعطينا الخرج بدلالة الطبقة التي تدخل منها البيانات والتي نريد الخرج منها # نجرب اخراج طبقة من الطبقات test = np.random.random(input_shape)[np.newaxis,...] #اختيار طبقة بشكل عشوائي layer_outs = functor([test, 1.]) print (layer_outs) #طباعة الخرج مثال أخر اكثر وضوحا: from keras import backend as K # with a Sequential model # الحصول على مخرجات الطبقة الثالثة بدلالة المدخلات من الطبقة الاولي get_3rd_layer_output = K.function([model.layers[0].input], [model.layers[3].output]) layer_output = get_3rd_layer_output([x])[0] اما بالنسبة للطبقات التي لا يتم فيها التعلم او تعديل اي قيم فيها (لا يحدث فيها تعديل لل parameters مثل طبقة ال dropout او ال regularization ، فاننا نستخدم learning_phase =1 في layer_outs، او استخدم learning_phase =0 في غير ذلك.
  9. تسمي دالة التنشيط 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.
  10. تسمي دالة التنشيط Rectified Linear Unit (ReLU) وتعني الدالة الخطية المعدلة، وذلك لانها ليست خطية بالكامل ، بل انها تكون خطية من 0 وحتي لانهاية اما قبل ال 0 (أي في الجزء السالب) فانها تساوي 0 كما هو موضح بالشكل البياني : ويمكن كتابتها كدالة بالشكل التالي: f(x) = max(0,x) وتستخدم دوال التنشيط عموما في تصحيح الاخطاء الناتجة عن التوقع أثناء التعلم، ويمكن عمل ذلك عن طريق اخذ التفاضل لتلك الدالة وقارنتها بالناتج الاصلي، فعند أخذ التفاضل لدالة ال ReLU تكون كالتالي: f`(x) = { 1 if x < 0 0 if x > 0} وهذا يعني انه اذا كانت القيم موجبة (أي صحيحة) فانه لا يتم احداث أي تغيير على القيمة، أما اذا كانت سالبة (أي خطأ) فانه يتم تعديلها بأقصي قيمة ممكنة وبالتالي فانه يقوم بتعديل القيم أثناء التدريب حتي تقترب من كونها صحيحة.أما اذا كانت القيمة تساوي صفرا تماما (وهو شئ نادر أن يحدث) فأن الدالة تصبح غير معرفة وهذا قد يخلق مشكلة، وتعتبر هذة احدى مشكلات دالة ال ReLU. وتعتبر ReLU احدى اكثر الدوال المستخدمة كدوال تنشيط، خصوصا في عملية ال backpropagation، وذلك لعدة اسباب منها: 1) سهلة في تطبيقها حيث انها تختار فقط القيمة الاكبر بين القيم المدخلة والصفر. 2) بسبب كونها دالة خطية فانها تصبح ملائمة اكثر في عملية التحسين optimization 3) سريعة في استخدامها وتأخذ وقتها موارد أقل من غيرها. أما عن كيفية استخدامها في keras و tensorflow فلا حاجه لاعادة تعريف الدالة ومشتقتها من جديد ، حيث انه معرفة سابقا داخل keras كالتالي: tf.keras.activations.relu(x, alpha=0.0, max_value=None, threshold=0) # X هي البيانات المدخلة في هيئة متغير # alpha ميل القيم الاقل من الصفر وهي افتراضيا none # max_value هي اقصي قيمة تقوم الدالة بارجاعها # threshold هي الحد الفاصل بين القيم الصحيحة والخطأ وهي افتراضيا 0 كما وضحنا سابقا ويمكن استخدامها بسهولة وتضاف الاسطر السابقة بين أي طبقتين من طبقات التعلم (layers) كالتالي: from tensorflow.keras import layers from tensorflow.keras import activations model.add(layers.Dense(64)) model.add(layers.Activation(activations.relu))
  11. يوجد اكثر من طريقة لتقسيم مصفوفة في numpy: 1) اذا كانت المصفوفة احادية الابعاد 1-D: لو عندنا مصفوفة احادية كالتالي: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) يمكن تقسيمها الي 5 مصفوفات متساوية باستخدام الكود: import numpy as np np.split(x, 5) ويكون الناتج: [array([0, 1]), array([2, 3]), array([4, 5]), array([6, 7]), array([8, 9])] 2) تقسيم مصفوفة في ثناية الابعاد 2-D: في السؤال المطروح، اذا كان لدينا المصفوفة : [[1,2,3,4], [5,6,7,8]] يمكن تقسيمه عن طريق الكود التالي: X = np.array([[1,2,3,4], [5,6,7,8]]) X_new = np.split(a,2,axis=1) يمكن كذلك تقسيمها لعدد من المصفوفات غير متساوية الحجم اذا اردنا عن طريق استخدام ال indices: np.split(X, [2,3,3]) هذا سوف يقسمهم الي 3 مصفوفات، اولهما تحتوي على عنصرين والثانيه والثالثة تحتوي كل منهما على ثلاث عناصر كالتالي: [array([1, 2]), array([3, 4, 5]), array([6, 7, 8])] هذا يوفر امكانية التقسيم حتى لقطع غير متساوية وبشكل عام يمكن استخدام np.split كالتالي: numpy.split(arary, indices, axis=0) >>>array: ادخال المصفوفة المارد تقسيمها >>>indices: عدد المصفوفات المراد القسيم اليها، يمكن ايضا ادخال عدد من الارقام (كما في المثال السابق) لتقسيمها لقطع غير متساوية >>>axis: المحور الذي يراد التقيم عليه، افتراضيا 0 وهو يمثل الصفوف او 1 وهو يمثل الاعمدة
×
×
  • أضف...