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

لوحة المتصدرين

  1. Ali Haidar Ahmad

    Ali Haidar Ahmad

    الأعضاء


    • نقاط

      16

    • المساهمات

      1068


  2. Mohamed Elnemr

    Mohamed Elnemr

    الأعضاء


    • نقاط

      8

    • المساهمات

      54


  3. Hassan Hedr

    Hassan Hedr

    الأعضاء


    • نقاط

      6

    • المساهمات

      2851


  4. سامح أشرف

    سامح أشرف

    الأعضاء


    • نقاط

      4

    • المساهمات

      2934


المحتوى الأكثر حصولًا على سمعة جيدة

المحتوى الأعلى تقييمًا في 08/22/21 في كل الموقع

  1. لدي بيانات على شكل dataframe في pandas، وهناك بعض الأعمدة التي أود تحويل قيمها كلها الى قيم عددية بدلا من خليط من الأعداد الحروف، كالمثال التالي: s = pd.Series(["8", 6, "7.5", 3, "0.9"]) # خليط من الأرقام والحروف كيف يمكنني جعلها كلها قيماً عددية؟
    3 نقاط
  2. لدي تلك البيانات على شكل dataframe Fruit Date Name Number Mangos 10/6/2016 Ahmed 7 Mangos 10/6/2016 Ahmed 8 Mangos 10/6/2016 Mike 9 Mangos 10/7/2016 Steven 10 Mangos 10/7/2016 Ahmed 1 Banana 10/7/2016 Ahmed 2 Banana 10/6/2016 Tom 15 Banana 10/6/2016 Mike 57 Banana 10/6/2016 Ahmed 65 Banana 10/7/2016 Tony 1 pineapple 10/7/2016 Ahmed 1 pineapple 10/7/2016 Tom 87 pineapple 10/7/2016 Ahmed 22 pineapple 10/7/2016 Ahmed 12 pineapple 10/7/2016 Tony 15 وأود تجميع تلك البيانات بالإسم name وكذلك الفاكهة Fruit، كالمثال التالي: Bob,Mangos,16 #( على سبيل المثال ) كيف يمكنني عمل ذلك؟
    2 نقاط
  3. لدي بيانات علي شكل dataframe في pandas: a = [['a', '1.2', '4.2'], ['b', '70', '0.03'], ['x', '5', '0']] df = pd.DataFrame(a) وأود أن أقوم بتحويل نوع بعض الأعمدة من نوع الى أخر، مثلا من string إلى int64 أو الى float، كيف يمكنني فعل ذلك؟
    2 نقاط
  4. الإصدار 1.0.0

    116573 تنزيل

    سطع نجم لغة البرمجة بايثون في الآونة الأخيرة حتى بدأت تزاحم أقوى لغات البرمجة في الصدارة وذاك لمزايا هذه اللغة التي لا تنحصر أولها سهولة كتابة وقراءة شيفراتها حتى أصبحت الخيار الأول بين يدي المؤسسات الأكاديمية والتدريبية لتدريسها للطلاب الجدد الراغبين في الدخول إلى مجال علوم الحاسوب والبرمجة. أضف إلى ذلك أن بايثون لغةً متعدَّدة الأغراض والاستخدامات، لذا فهي دومًا الخيار الأول في شتى مجالات علوم الحاسوب الصاعدة مثل الذكاء الصنعي وتعلم الآلة وعلوم البيانات وغيرها، كما أنَّها مطلوبة بشدة في سوق العمل وتعتمدها كبرى الشركات التقنية. دورة تطوير التطبيقات باستخدام لغة Python احترف تطوير التطبيقات مع أكاديمية حسوب والتحق بسوق العمل فور انتهائك من الدورة اشترك الآن بني هذا العمل على كتاب «How to code in Python» لصاحبته ليزا تاغليفيري (Lisa Tagliaferri) وترجمه إلى العربية محمد بغات وعبد اللطيف ايمش، وحرره جميل بيلوني، ويأتي شارحًا المفاهيم البرمجية الأساسية بلغة بايثون، ونأمل في أكاديمية حسوب أن يكون إضافةً نافعةً للمكتبة العربيَّة وأن يفيد القارئ العربي في أن يكون منطلقًا للدخول إلى عالم البرمجة من أوسع أبوابه. رُبط هذا الكتاب مع توثيق لغة بايثون في موسوعة حسوب لتسهيل عملية الاطلاع على أي جزء من اللغة مباشرة وقراءة التفاصيل باللغة العربية. هذا الكتاب مرخص بموجب رخصة المشاع الإبداعي Creative Commons «نسب المُصنَّف - غير تجاري - الترخيص بالمثل 4.0». يمكنك قراءة فصول الكتاب على شكل مقالات من هذه الصفحة، «المرجع الشامل إلى تعلم لغة بايثون»، أو مباشرةً من الآتي: المقال الأول: دليل تعلم بايثون اعتبارات عملية للاختيار ما بين بايثون 2 و بايثون 3 المقال الثاني: تثبيت بايثون 3 وإعداد بيئتها البرمجية المقال الثالث: كيف تكتب أول برنامج لك المقال الرابع: كيفية استخدام سطر أوامر بايثون التفاعلي المقال الخامس: كيفية كتابة التعليقات المقال السادس: فهم أنواع البيانات المقال السابع: مدخل إلى التعامل مع السلاسل النصية المقال الثامن: كيفية تنسيق النصوص المقال التاسع: مقدمة إلى دوال التعامل مع السلاسل النصية المقال العاشر: آلية فهرسة السلاسل النصية وطريقة تقسيمها المقال الحادي عشر: كيفية التحويل بين أنواع البيانات المقال الثاني عشر: كيفية استخدام المتغيرات المقال الثالث عشر: كيفية استخدام آلية تنسيق السلاسل النصية المقال الرابع عشر: كيفية إجراء العمليات الحسابية المقال الخامس عشر: الدوال الرياضية المضمنة المقال السادس عشر: فهم العمليات المنطقية المقال السابع عشر: مدخل إلى القوائم المقال الثامن عشر: كيفية استخدام توابع القوائم المقال التاسع عشر: فهم كيفية استعمال List Comprehensions المقال العشرون: فهم نوع البيانات Tuples المقال الحادي والعشرين: فهم القواميس المقال الثاني والعشرين: كيفية استيراد الوحدات المقال الثالث والعشرين: كيفية كتابة الوحدات المقال الرابع والعشرين: كيفية كتابة التعليمات الشرطية المقال الخامس والعشرين: كيفية إنشاء حلقات تكرار while المقال السادس والعشرين: كيفية إنشاء حلقات تكرار for المقال السابع والعشرين: كيفية استخدام تعابير break وcontinue وpass عند التعامل مع حلقات التكرار المقال الثامن والعشرين: كيفية تعريف الدوال المقال التاسع والعشرين: كيفية استخدام *args و**kwargs المقال الثلاثين: كيفية إنشاء الأصناف وتعريف الكائنات المقال الحادي والثلاثين: فهم متغيرات الأصناف والنسخ المقال الثاني والثلاثين: وراثة الأصناف المقال الثالث والثلاثين: كيفية تطبيق التعددية الشكلية (Polymorphism) على الأصناف المقال الرابع والثلاثين: كيف تستخدم منقح بايثون المقال الخامس والثلاثين: كيفية تنقيح شيفرات بايثون من سطر الأوامر التفاعلي المقال السادس والثلاثين: كيف تستخدم التسجيل Logging المقال السابع والثلاثين: كيفية ترحيل شيفرة بايثون 2 إلى بايثون 3
    1 نقطة
  5. واجهتنئ هده المشكلة في Failed to resolve: androidx.navigation:navigation-ui:2.4.0-rc01 <a href="open.dependency.in.project.structure"> الاعتماديات dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'androidx.appcompat:appcompat:1.3.1' implementation 'androidx.constraintlayout:constraintlayout:2.1.0' implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'com.google.android.material:material:1.4.0' implementation 'androidx.vectordrawable:vectordrawable:1.1.0' implementation 'com.google.android.gms:play-services-maps:17.0.1' implementation 'androidx.navigation:navigation-fragment:2.3.5' implementation 'androidx.navigation:navigation-ui:2.3.5' implementation 'androidx.recyclerview:recyclerview:1.2.1' test Implementation 'junit:junit:4.12' androidTest Implementation 'androidx.test:runner:1.4.0' androidTest Implementation 'androidx.test.espresso:espresso-core:3.4.0' //ui implementation 'de.hdodenhof:circleimageview:2.2.0' implementation 'me.relex:circleindicator:1.2.1 @aar' implementation 'com.github.mukeshsolanki:android-otpview-pinview:2.0.3' implementation "roidx.navigation:navigation-fragment:2.4.0-rc01" implementation 'com.github.joielechong:countrycodepicker:2.4.1' implementation "androidx.navigation:navigation-ui:2.4.0-rc01" //maps implementation 'com.github.aarsy.googlemapsanimations:googlemapsanimations:1.0.5' implementation 'com.google.android.gms:play-services-location:18.0.0' implementation 'com.github.MrBin99:LaravelEchoAndroid:1.0.2' implementation 'com.google.maps.android:android-maps-utils:0.5+' //extensions implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' //room database implementation 'androidx.room:room-runtime:2.3.0' annotationProcessor 'androidx.room:room-compiler:2.3.0' //retrofit implementation 'com.squareup.retrofit2:retrofit:2.3.0' implementation 'com.squareup.retrofit2:converter-gson:2.3.0' //gson implementation 'com.google.code.gson:gson:2.8.5' //SectionedRecyclerViewAdapter implementation 'io.github.luizgrp.sectionedrecyclerviewadapter:sectionedrecyclerviewadapter:1.2.0' implementation "androidx.lifecycle:lifecycle-extensions:2.2.0" implementation platform('com.google.firebase:firebase-bom:28.3.1') }
    1 نقطة
  6. ما معنى هيدر ؟؟ ما شرح هده الهيدرز ؟ export const headersClient = { 'Content-Type': 'application/x-www-form-urlencoded', 'x-requested-api': 'ocapi', 'x-requested-with': 'XMLHttpRequest', Accept: 'application/json', };
    1 نقطة
  7. السلام عليكم ورحمة الله وبركاته أنا أعرف ما هي الخوارزميات وأعرف متي يجب تعلمها وما فائدتها وأعرف هلي هي ضرورية أن لا في هذا السؤال أريد معرفة ما هي الخوارزميات التي يجب أن أتعلمها أو بمعني ما هو المنهج الذي سوف أمشي عليه اذا كنت MERN Stack developer يعني استخدامي في الباك اند والفرونت اند جافا سكريبت وأريد أن أعرف المصادر التي يمككني التعلم منها الخوارزميات علي لغة جافا سكريبت في هذا المجال تحديدا
    1 نقطة
  8. حياكم الله جميعا ما هي الطريقة الاسرع للحصول على تنبيهات الرسائل الواردة و استفسارات اصحاب المشاريع في مستقل . قمت بتفعيل التنبيهات الواردة من الايميل لكنها لا تعمل الا عند فتح التطبيق.
    1 نقطة
  9. أود ان اعرف ما معنى persistStore, persistReducer ولمادا يفضل ان استخدمهم وما فائدة المكتبة redux-persist import {persistStore, persistReducer} from 'redux-persist';
    1 نقطة
  10. أواجه صعوبة في إنشاء تطبيق لرفع الملفات في جانغو Django. لم أتمكن من العثور على أي أمثلة حديثة لكيفية عمل نظام MVT لرفع الملفات إلى الخادم بأي طريقة. كيف يمكن رفع الملفات بطريقة صحيحة ، هل يمكن لأي أحد شرح مثال بسيط للقيام بهذا الأمر؟ أستخدم الإصدار 3.0 من جانغو Django مع بايثون 3.7
    1 نقطة
  11. السلام عليكم في البرنامج التالي يتم ارسال رسالة لقاعدة البيانات ربما تحتوي معها صورة ويتم عرض الصورة قبل رفعها <img class="img-thumbnail" id="viewimg" style="display:none;"> بعد الارسال يتم تفريغ حقل النص $('#messages_form_groups')[0].reset(); المشكلة ان الصورة المعروضة تظل عالقة ولا تختفي الا بعد اعادة تحميل الصفحة كيف يمكن ازالة عرضالصورة بعد الارسال كما حدث للنص فى منطقة textarea <img class="img-thumbnail" id="viewimg" style="display:none;"> <form id="messages_form_groups" enctype="multipart/form-data" class="form_msgs"> <label for="file" title="صورة"> <img src="images/photo_upload.png" /> </label> <input name="picname" id="putname" type="hidden"> <textarea class="textarea_msgs_groups" name="message" id="message" maxlength="350" placeholder="اكتب رسالة ...."> </textarea> <div class="myButton" title="ارسال"> <INPUT type="submit" name="submit_profile" value=""> </div> <script> $("#messages_form_groups").on('submit', function(e) { e.preventDefault(); $.ajax ({ type: 'POST', url: 'send_pages/send_messages_form_groups.php', data: new FormData(this), dataType: 'json', contentType: false, cache: false, processData:false, success: function(response) { if(response.status == 1) { $('#messages_form_groups')[0].reset(); } } }); }); }); </script>
    1 نقطة
  12. لدي تلك البيانات على شكل dataframe import pandas as pd data = [{'a':1, 'b':2}, {'a':3,'b':4}, {'a':5,'b':6}] df = pd.DataFrame(data) أريد أن أقوم بعمل حلقة تكرارية بإستخدام for للصفوف بداخل ال dataframe، حاولت بأكثر من طريقة ولم تفلح، كيف يمكنني أن أقوم بفعلها؟
    1 نقطة
  13. مالفرق بين 'SAME' و 'VALID' في الطبقة tf.nn.max_pool في تنسرفلو؟ tf.nn.max_pool( input, ksize, strides, padding, data_format=None, name=None )
    1 نقطة
  14. عندما أحاول تثبيت تنسرفلو يظهر لي هذا الخطأ : Could not find a version that satisfies the requirement TensorFlow (from versions: ) No matching distribution found for TensorFlow. علماً أنه لدي نسخة بايثون (3.7.4 32-bit) و نسخة PyCharm (2017.3.3 64-bit).
    1 نقطة
  15. يمكنك أن تقوم تحويل محتوى أي ملف من خلال bytearray كالتالي: >>> path = "C:\\Users\\sameh\\OneDrive\\Desktop\\image.png" # مسار أي ملف >>> file = open(path, mode='rb') >>> content = file.read() >>> allBytes = bytearray(content) >>> eightBytes = [ allBytes[i:i+8] for i in range(0, len(allBytes), 8) ] >>> binaryList = [] >>> for chunk in eightBytes: ... eightBytesChunk = '' ... for i in chunk: ... eightBytesChunk += bin(i)[2:].zfill(8) ... binaryList.append(eightBytesChunk) >>> binaryList ['1000100101010000010011100100011100001101000010100001101000001010', '0000000000000000000000000000110101001001010010000100010001010010', '0000000000000000000000111000010000000000000000000000001001010001', '0000100000000110000000000000000000000000000111011100101001111001', '0001001100000000000000001000000000000000010010010100010001000001', '0101010001111000110110101110110010111101100001110111101100011011', '1101100101110101111111101111111111111101011001110111111010001001' .... ] لاحظ أنه يجب قراءة الملف بوضع rb (read binary) في الدالة open ولإعادة كتابة كود الـ binary إلى ملف جديد يمكنك أن تقوم بالتالي: >>> # نقوم بتقسيم كل أكواد Binary إلى Bytes >>> finalBinary = [] >>> lst = [] >>> for i in binaryList: ... lst.append([ i[x:x+8] for x in range(0, len(i), 8) ]) ... >>> for i in lst: ... for j in i: ... finalBinary.append(j) ... >>> finalBinary[0] '10001001' >>> # الدالة التالية تقوم بكتابة أرقم الـ Binary في ملف جديد >>> def writer(stuff): ... blob = int(stuff, 2).to_bytes(1, byteorder='big') ... with open("C:\\Users\\sameh\\OneDrive\\Desktop\\image2.png", "a+b") as file: ... file.write(blob) ... >>> for strings in finalBinary: ... writer(strings) >>> بالطبع هذه الطريقة ليست عملية في نسخ الملفات لأنها تستغرق الكثير من الوقت، وفي الحالات العادية نستخدم المكتبات مجهزة مسبقًا لنسخ الملفات مثل دالة copyfile في حزمة shutil
    1 نقطة
  16. السلام عليكم اريد ارسال بريد الكتروني للمشتركين عبر laravel job queues في المشروع الذي اعمل به اضفت صفحة خاصة بالبريد الالكتروني تحتوي على حقلين ادخال (واحدة للعنوان و الثانية للنص) اريد ان اخزن ال data في هذين الحقلين بالطبع يجب عليي ان استخدم المتحكم حتى اقوم بهذه العملية انا كنت قد انشأت model خاص للبريد الالكتروني و اضفت فيه حقل واحد و هو email لكي ارسل البريد الالكتروني يجب علي اضافة حقلين اثنين title و message لكن استفساري هو انني مستخدم الدالة store() في هذا المتحكم , فيجب علي ان اقوم بانشاء دالة جديدة تأخذ متغير request$ صحيح؟؟ و ايضا اضع المتغيرات title$ و message$ (حقلين الادخال) داخل صفحة ال HTML التي اريد ان ارسلها اليس كذلك ؟؟
    1 نقطة
  17. يمكنك الاستفادة من انشاء Seeder مجهز بالبيانات التي تريد انشاءها او تعديلها وتنفيذه على المخدم ايضا عن طريق اوامر artisan
    1 نقطة
  18. نعم لان عند تشغيل التطبيق على المنصة كل ال data التي قمت بانشائها تختفي اي اريد مثلا من جعل ال role من 2 الى 1 اي يصبح المستخدم مدير
    1 نقطة
  19. هل الاوامر التي تريد تنفيذها متعلقة بعمل التطبيق ؟ اذا كان كذلك يفضل انشاء Console Commands خاصة داخل مشروعك وتنفيذها من سطر الاوامر مثل اوامر artisan
    1 نقطة
  20. اخي انا اريد ان أقرأ ملف فيديو مثلا ثم وعمل مصفوفة كل خانة 8 byte مثل هذا ['111001011111110101001010101110011101010010101010100110010101010101001', '110110011111110101001010101110011101010010101010100110010101010101001', '110010011111110101001010101110011101010010101010100110010101010101001'] ثم اعيد تحويل هذه المصفوفة الي ملف فيديو يحمل اسم اخر يكن نسخة من الاول هل يمكن ان تساعدني في هذا
    1 نقطة
  21. يمكنك أيضاً استخدام DataFrame.apply كالتالي: import pandas as pd df = pd.DataFrame({ 'c1': [1, 2, '6', '8']}) print(df.dtypes) """ c1 object dtype: object """ # التحويل df['c1'] = df['c1'].apply(pd.to_numeric) print(df.dtypes) """ c1 int64 dtype: object """ # pandas.to_datetime نمط البيانات apply ويمكنك أن تمرر للدالة #pandas.to_timedeltaيمكنك أيضاً تمرير كما يمكنك استخدام DataFrame.infer_objects حيث تحاول هذه الطريقة إجراء تحويل بسيط عن طريق استنتاج نوع بيانات الأعمدة من النوع "object". ويتم ترك الأعمدة non-object وغير القابلة للتحويل دون تغيير.: import pandas as pd df = pd.DataFrame({ 'A': [1, 2, 3, 4, 5], 'B': ['a', 'b', 'c', 'd', 'e'], 'C': [1.1, 2.1, 3.0, 4.1, 5.1] }, dtype ='object') print(df.dtypes) """ A object B object C object dtype: object """ # التحويل df = df.infer_objects() print(df.dtypes) """ A int64 B object C float64 dtype: object """ كما ويمكنك أن تستخدم الدالة apply لتغيير نمط بيانات عمود واحد أو عدة أعمدة أو كامل الداتافريم: import pandas as pd df = pd.DataFrame({ 'c1': [4, 5], 'c2': ['k', 'b'], 'c3': [9.1, '7.7'] }) # استخدام قاموس لتحديد الأنماط الجديدة للأعمدة التي نريدها فقط _dict = {'c1': int, 'c3': float } df = df.astype(_dict) print(df.dtypes) """ c1 int64 c2 object c3 float64 dtype: object """ مثال إضافي على هذه الدالة: d = {'c1': [1, 2], 'c2': [3, 4]} df = pd.DataFrame(data=d) """ df.dtypes c1 int64 c2 int64 dtype: object """ # تغيير النمط df.astype('int32').dtypes """ c1 int32 c2 int32 dtype: object """
    1 نقطة
  22. يمكن تقسيم المصفوفة بعد عملية التحويل إلى 8 Byte كالتالي: _8_bytes = [binary_list[x:x+8] for x in range(0, len(binary_list), 8)] أو يمكن تقسيم النص من البداية إلى قائمة list من النصوص والمرور على كل جزء على حدى كالتالي: >>> string = 'hello world' >>> list_of_string = [ string[i:i+8] for i in range(0, len(string), 8) ] >>> list_of_string ['hello wo', 'rld'] >>> for item in list_of_string: ... print([format(ord(x), 'b') for x in item]) ... ['1101000', '1100101', '1101100', '1101100', '1101111', '100000', '1110111', '1101111'] ['1110010', '1101100', '1100100'] بعد ذلك يمكنك أن تقوم بجمع عناصر القائمة الناتجة في النهاية لتكون على شكل نص، كالتالي: >>> string = 'hello world' >>> list_of_string = [ string[i:i+8] for i in range(0, len(string), 8) ] >>> list_of_string ['hello wo', 'rld'] >>> for item in list_of_string: ... print("".join([format(ord(x), 'b') for x in item])) ... 1101000110010111011001101100110111110000011101111101111 111001011011001100100
    1 نقطة
  23. إذًا مسؤولية هذا المتحكم هو ادارة المشتركين في النشرة البريدية صحيح يجب انشاء متحكم جديد مسؤوليته ارسال البريد الالكتروني واستخدام الدالة store الخاصة به نعم يجب اضافة الحقول الجديدة message - title الى Email model واضافتها الى المصفوفة fillable وانشاء تهجير جديد لاضافة الحقول الى الجدول اذا كنت تريد تخزين البيانات ضمن قاعدة البيانات
    1 نقطة
  24. في pandas توجد الدالة astype() والتي تقوم بالتحويل الى أي نوع من البيانات تريد، ويمكنها تحويل البيانات سواء كانت على الشكل dataframe أو series. الأكواد التالية توضح بعض الأمثلة لهذا: # التحويل الي int df = df.astype(int) # تحويل العمود a اليint والعمود b الي complex df = df.astype({"a": int, "b": complex}) # التحويل الي float64 s = s.astype(np.float16) # التحويل الي string s = s.astype(str) لكن يجب أن تحذر أثناء استخدامك لها لانها قد تؤدي في بعض الأحيان الى تحويل خاطئ: >>> s = pd.Series([1, 5, -11]) >>> s 0 1 1 5 2 -11 dtype: int64 لاحظ ماذا يحدث عند التحويل: >>> s.astype(np.uint8) 0 1 1 5 2 245 dtype: uint8 لأن القيمة -7 صغيرة، قام بعمل خطأ أثناء تحويلها الى uint8 وذلك لان القيم السالبة خارج نطاق uint8 ، لكنه لم يقم باظهار خطأ وانما قام بعمل حساب خاطئ، لذا يجب أن تعرف ما الذي تقوم بتحويله وهل هو مناسب أم لا.
    1 نقطة
  25. يمكن تحويل النص إلى قائمة من أرقام Binary من خلال تحويل كل حرف إلى رقم ascii عبر دالة ord وإستخدام دالة format لتحويل هذا الرقم إلى كود ثنائي Binary كالتالي: >>> string = "hello world" >>> binary_list = [format(ord(x), 'b') for x in string] >>> binary_list ['1101000', '1100101', '1101100', '1101100', '1101111', '100000', '1110111', '1101111', '1110010', '1101100', '1100100'] ولإعادة تحويل القائمة السابقة إلى نص مرة أخرى يمكن أن تقوم بالتالي: >>> ascii_string = "" # هنا سيتم تخزين النص النهائي >>> for binary_value in binary_list: ... an_integer = int(binary_value, 2) # تحويل كود Binary إلى النظام العشري (ascii code) ... ascii_character = chr(an_integer) # تحويل الحرف من ascii code إلى حرف نصي string ... ascii_string += ascii_character # إضافة الحرف إلى المتغير الأساسي ... >>> print(ascii_string) hello world
    1 نقطة
  26. في هذه الحالة يجب ان تنشئ متحكم جديد يتم فيه استخراج العنوان ومحتوى البريد الالكتروني والتحضير والارسال لكن يجب انت تسأل نفسك ما مسؤولية المتحكم الحالي المختلفة عن المتحكم الجديد، قد تجد انه بجب استخدام متحكم واحد مسؤول عن ارسال البريد الالكتروني ويعمل بطريقتين اما ترسل اليه المحتوى فقط (كما هو حاليا) واما ترسل معه العنوان ايضا اختياريًا (وهي الحالة الجديدة التي تريدها) قد تحتاج لحذف الخاصية email حيث انها نفسها الخاصية message
    1 نقطة
  27. المطلوب هو إرسال محتوى البريد الالكتروني (العنوان - الرسالة) من حقلين كالتالي Title: <input name="title"/> Message: <input name="message"/> إذا اردت إرسال البيانات عن طريق طلب POST أي ستكون البيانات في جسم الطلب تقوم بتحديد نوع الطلب والوجهة على العنصر form <form action="/path/to/email/send" method="POST"> @csrf <!-- لادخال حقل الحماية من الطلبات من مواقع خارجية --> Title: <input name="title"/> Message: <input name="message"/> <button type="submit">Send Email</button> </form> عند ارسال الطلب سيصل الى المتحكم الذي عينته في ملف ال web.php داخل المتحكم في الدالة store تقوم باستخراج القيمتين من متحول الطلب، وتحضير بريد الكتروني جديد (من model ال Email) وإتمام عملية الإرسال public function store(Request $request) { $title = $request->title; $message = $request->message; // تحضير وارسال الإيميل عن طريق القيم المستخرجة من الطلب ... }
    1 نقطة
  28. لدي مجموعة بيانات صغيرة لصور (حوالي 2000 عينة فقط)، وأعرف أن هناك تكنيك يسمى Data Augmentation يسمح لنا بزيادة حجم البيانات عن طريق التلاعب بها، لذا هل هناك طريقة للقيام بذلك في تنسرفلو Tensorflow؟
    1 نقطة
  29. لا يؤدي تغيير خاصية src إلى "إلغاء تحميل" مورد الصورة - بل سيزيل فقط ارتباطها بعنصر <img /> هذا . أي أن التغييرات لن تظهر مباشرة , بل ستظهر في حالة إعادة تحميل عنصر الصورة مجددا . لأن إعادة التحميل ليس شيئًا يمكنك تحقيقه بالصور ، و في الغالب أنك لا تريد حقًا "تفريغه". بل تحاول إخفاءه أو إزالته أو ربما إعادة تحميله ، ولكن عليك الاحتفاظ به لأسباب معينة . و لذلك سيتبقى حل أن تقوم بحذف الصورة كليا ثم إعادة تضمين صورة جديدة بعد عرضها و إرسال طلب الأجاكس . و لذلك سيكون الكود الخاص بالعملية كاملة مشابها للتالي : <!-- لنتأكد من تعريف الصورة --> <img class="img-thumbnail" id="viewimg" style="display:none;"> <form id="messages_form_groups" enctype="multipart/form-data" class="form_msgs"> <label for="file" title="صورة"> <img src="images/photo_upload.png" /> </label> <input name="picname" id="putname" type="hidden"> <textarea class="textarea_msgs_groups" name="message" id="message" maxlength="350" placeholder="اكتب رسالة ...."> </textarea> <div class="myButton" title="ارسال"> <input type="submit" name="submit_profile" value=""> </div> <script> $("#messages_form_groups") .on('submit', function(e) { e.preventDefault(); $.ajax({ type: 'POST', url: 'send_pages/send_messages_form_groups.php', data: new FormData(this), dataType: 'json', contentType: false, cache: false, processData: false, success: function(response) { if (response.status == 1) { $('#messages_form_groups')[0].reset(); // إزالة العنصر كاملا $('#viewimg').remove(); // صورة جديدة فارغة var newEmptyImg = '<img class="img-thumbnail" id="viewimg" style="display:none;">'; // وضعها مكان السابقة $('#messages_form_groups').insertBefore(newEmptyImg); } } }); }); }); </script>
    1 نقطة
  30. السلام عليكم. لا اعرف ما هو قسم سؤالي بالظبط ولكننه اظن يختص بالبرمجة والطباعة. عندي موقع لإدارة الطلاب بالمدرسة. يتسلم الطلاب كل عام كتاب. كل طالب له كتاب واحد فقط. اريد تخصيص لكل كتاب qrcode مطبوع على الكتاب. حيث سيتم عمل scan للqrcode هذا فيما بعد وربط هذا الكتاب بالطالب الموجود بقاعدة البيانات. الكتب تتم من خلال المطابع الخاصة بنا فكيف ادمج بين البرمجة التي تخلق qrcode وارساله للطابعة مع الكتاب بكل نسخة من الكتاب؟ مع العلم ثانيةً انني اريد لكل كتاب qrcode مختلف عن الاخر ولا يوجد كتابين متشابهين استخدم laravel 8 والطباعة تطبع على غلاف الكتاب.
    1 نقطة
  31. يمكنك استخداك الدالة apply كما أشار أحمد وبطرق عديدة، أولاً في حالة كان التابع الخاص بك يمرر له أكثر من قيمة أو كنت تحتاج لتطبيق تابع يستخدم قيم الأعمدة الأخرى لإنشاء عمود جديد، فيمكنك استخدام lambda مع Apply كالتالي: # Import pandas package import pandas as pd # تعريف تابع # هذا التابع نمرر له عددين ويقوم بجمعهما def add(v1, v2): return v1 + v2 # تعريف داتافريم data = { 'c1':[1, 2, 3], 'c2':[4, 5, 6] } df = pd.DataFrame(data) # طباعته print("Original DataFrame:\n", df) # تطبيق التابع السابق على كل سطر من أسطر الداتا، بحيث يقوم بجمع كل قيمتين متقابلتين من أعمدة الداتا ويخزنهما في عمود جديد #lambda قمنا باستخدام الدالة df['add'] = df.apply(lambda row : add(row['c1'],row['c2']), axis = 1) print('\nAfter Applying Function: ') # النتيجة print(df) """ Original DataFrame: c1 c2 0 1 4 1 2 5 2 3 6 After Applying Function: c1 c2 add 0 1 4 5 1 2 5 7 2 3 6 9 """ #sumكما أنه كان بإمكانك استخدام الدالة df['add'] = df.apply(np.sum, axis = 1) كما يمكنك استخدام الدالة np.vectorize وهي سريعة جداً وأسرع بكثير من الدالة السابقة ويمكنك استخدامها بالشكل الذي تريده بدون الحاجة ل lambda: # Import pandas package import pandas as pd import numpy as np # تعريف تابع def add(v1,v2): return v1 + v2 # تعريف داتافريم data = { 'c1':[1, 2, 3], 'c2':[4, 5, 6] } df = pd.DataFrame(data) print("Original DataFrame:\n", df) df['add'] = np.vectorize(add)(df['c1'], df['c2']) print('\nAfter Applying Function: ') print(df) """ Original DataFrame: c1 c2 0 1 4 1 2 5 2 3 6 After Applying Function: c1 c2 add 0 1 4 5 1 2 5 7 2 3 6 9 """
    1 نقطة
  32. يمكنك أيضاً بدلاً من تعطيل القيد الخاص بك، قم بتعديله بشكل دائم إلى ON DELETE SET NULL. سيؤدي ذلك إلى تحقيق شيء مماثل ولن تضطر إلى تشغيل التحقق من المفاتيح وإيقاف تشغيله: //تخلص من القيود الحالية ALTER TABLE t1 DROP FOREIGN KEY fk_name1; ALTER TABLE t2 DROP FOREIGN KEY fk_name2; ALTER TABLE t1 //أضف القيد ADD FOREIGN KEY (table2_id) REFERENCES table2(id) ON DELETE SET NULL ALTER TABLE t2 ADD FOREIGN KEY (table1_id) REFERENCES table1(id) ON DELETE SET NULL //إضافة قيود أخرى
    1 نقطة
  33. لإيقاف تشغيل قيد مفتاح foreign key بشكل عام، يمكن القيام بالتالي: SET FOREIGN_KEY_CHECKS=0; ولإعادة تشغيله، كل ما عليك فعله هو تغير القيمة إلى 1، لتصبح الجملة كالتالي: SET FOREIGN_KEY_CHECKS=1; لاحظ أن هذا التغير يؤثر فقط على الجلسة الحالية session ولا يؤثر على MySQL بشكل عام، ولتغير هذا الأمر يمكنك أن تضيف كلمة GLOBAL بعد كلمة SET وسوف يتم تطبيق هذا التغير على الجلسة الحالية وكل الجلسات المستقبلية. ملاحظة هامة: يجب عليك القيام بذلك فقط عندما تقوم بوضع صيانة maintenance mode. لأنه قد يؤدي إلى عدم تناسق البيانات، وبالتالي ظهور أخطاء عند زيارة الموقع في وضع الإطلاق deployment mode.
    1 نقطة
  34. يمكنك تجربة الطريقة التالية التي تحتفظ بجميع التوابع لمجموعات الاستعلامات "querysets": #أو عمليات مشابهة order_by هذه الطريقة ممتازة في حال أردت القيام ب matches = pages | articles | posts #من نموذجين مختلفين querysets لكن هذه الطريقة لاتعمل في حال كما يمكنك استخدام QuerySet.union: qs = qs1.union(qs2, qs3) لكن إذا أردت تطبيق order_by : qs = qs1.union(qs2.select_related("foreignModel"), qs3.select_related("foreignModel")) qs.order_by("foreignModel__prop1")
    1 نقطة
  35. يمكنك استخدام itertools.chain حيث يعتبر أسرع من تكرار كل قائمة وإلحاق العناصر واحدة تلو الأخرى . كما أنها تستهلك ذاكرة أقل من تحويل كل مجموعة استعلام إلى قائمة قبل التسلسل. from itertools import chain result_list = list(chain(page_list, post_list)) من الممكن الآن فرز القائمة الناتجة على سبيل المثال حسب التاريخ باستخدام الدالة Sorted , تقبل الدالة Sorted () generator وترجع قائمة كالتالي result_list = sorted( chain(page_list, post_list), key=lambda instance: instance.date_created) إذا كنت تستخدم Python 2.4 أو إصدارًا أحدث ، فيمكنك استخدام Attrgetter بدلاً من lambda ولكن لا يوجد فرق كبير بينهما from operator import attrgetter result_list = sorted( chain(page_list, article_list, post_list), key=attrgetter('date_created'))
    1 نقطة
  36. هناك 3 طرق:الأولى استخدام Q() objects مع معامل النفي ~: from django.db.models import Q r = QuerySet.filter(~Q(a=True), x=5) والثانية استخدام exclude مع filter: r = Model.objects.exclude(a=True).filter(x=5) والثالثة هي إنشاء custom lookup لكن أولاً عليك إنشاء lookup بنفسك: from django.db.models import Lookup class check(Lookup): #lookup اسم ال lookup_name = 'ne' def as_sql(self, compiler, connection): lhs, lhs_params = self.process_lhs(compiler, connection) rhs, rhs_params = self.process_rhs(compiler, connection) params = lhs_params + rhs_params return '%s <> %s' % (lhs, rhs), params # ثم نقوم بتسجيله from django.db.models import Field Field.register_lookup(check) #في استعلامك __ne lookup الآن يمكنك استخدام results = Model.objects.exclude(a=True, x__ne=5)
    1 نقطة
  37. يمكنك استخدام كائنات Q لهذا الشيء, يمكن نفيها باستخدام عامل التشغيل ~ ودمجها تمام from django.db.models import Q object_list = QuerySet.filter(x=True, ~Q(y=10)) أو هناك طريقة أخرى وهي استخدام filter بدلا من exclude كالتالي results = Model.objects.exclude(x=True).filter(y=10)
    1 نقطة
  38. null = True يعين NULL (مقابل NOT NULL) في العمود في قاعدة البيانات الخاصة بك. سيتم تخزين القيم الفارغة لأنواع حقول Django مثل DateTimeField أو ForeignKey على أنها NULL في قاعدة البيانات. يحدد blank ما إذا كان الحقل مطلوباً في النماذج. وهذا يشمل ال admin والنماذج المخصصة الخاصة بك "custom forms". إذا كانت blank = True، فلن يكون الحقل مطلوباً (أي سيقبل القيم الفارغة blank values)، بينما إذا كان False فلا يمكن أن يكون الحقل فارغاً. يكون الجمع بين الاثنين متكرراً جداً لأنه عادةً إذا كنت ستسمح لأحد الحقول بأن يكون فارغاً في النموذج الخاص بك، فستحتاج أيضاً إلى أن تجعل قاعدة البيانات الخاصة بك تسمح بقيم NULL لهذا الحقل. الاستثناء هو CharFields و TextFields، والتي لا يتم حفظها في Django على أنها NULL. يتم تخزين القيم الفارغة في قاعدة البيانات كسلسلة فارغة (""). أمثلة: #يعطي خطأ IntegrityError if blank models.DateTimeField(blank=True) #مسموحة NULL قيم models.DateTimeField(null=True) # ولكن يجب تعبئتها في نموذج من الواضح أن هذين الخيارين ليس لهما معنى منطقي للاستخدام (على الرغم من أنه قد يكون هناك حالة استخدام لـ null = True ، blank = False إذا كنت تريد أن يكون الحقل مطلوباً دائماً في النماذج، وهو اختياري عند التعامل مع كائن من خلال شيء مثل ال shell): models.CharField(blank=True) #"" سيتم تخزين القيم الفارغة ك #مسموحة NULL قيم models.CharField(null=True) #NULL ولكن لن يتم تعيينها على أنها لا يتم حفظ أنواع CHAR و TEXT كـ NULL بواسطة Django ، لذا فإن null = True غير ضروري. ومع ذلك ، يمكنك تعيين أحد هذه الحقول يدوياً إلى None لفرض تعيينه على أنه NULL. إذا كنت تحتاج لذلك لسبب ما.
    1 نقطة
  39. أنت بحاجة إلى إصدار 64 بت من Python وفي حالتك تستخدم إصدار 32 بت. اعتباراً من الآن ، يدعم Tensorflow إصدارات 64 بت من Python 3.5.x و 3.8.x على Windows. لحل مشكلتك: في حال كنت تستخدم Windows (8, 8.1, 10) قم بتثبيتها كالتالي: python3 -m pip install --upgrade https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-1.12.0-py3-none-any.whl بالنسبة ل mac ولينوكس قم بتبديل python3 إلى python حسب التكوين الخاص بك، وقم بتغيير py3 إلى py2 في عنوان url إذا كنت تستخدم Python 2.x.
    1 نقطة
  40. الأمر كله يتعلق بال CPU، أولاُ يجب أن تعلم أن لكل معالج مجموعة تعليمات منخفضة المستوى Low-Level هذه التعليمات نسميها ISA، مجموعة التعليمات هذه هي قائمة بجميع الأوامر المتاحة بمختلف أشكالها التي يمكن لمعالج ما تنفيذها، وتتضمن هذه التعليمات: تعليمات حسابية ومنطقية مثل الجمع المنطقي والضرب المنطقي والنفي المنطقي ووووو.. طريقة تعريف هذه التعليمات وتحقيقها يلعب دوراً كبيراً جداً في سرعة المعالج وأدائه. هناك مجموعات تعليمات أساسية تدعمها كل المعالجات الحديثة وهناك توسعات كثيرة لها "Instruction Set Extensions" مثل SSE2, SSE4, AVX 2,AVX ..إلخ هذه التوسعات أو الإضافات أو الامتدادات تعطي الحاسب سرعة وأداء إضافي كبيرة. إن هذه الرسالة التي تظهر لك مفادها أن معالجك يدعم مجموعة تعليمات AVX لكن تنسرفلو لاتستفيد منها، هذه التعليمات تنفذ عمليات تسمى fused multiply-accumulate (FMA) وفائدتها في أنها تسرع من تنفيذ عمليات الجبر الخطي وضرب المصفوفات والجداء النقطي "dot-product" وعمليات الالتفاف على المصفوفات "convolution"، وكما نعرف جميعنا فإن هذه العمليات هي 90% من العمليات الداخلية التي تنفذ في التعلم الآلي. وبالتالي فإن تسريع حسابها يزيد سرعة الأداء بشكل كبير جداً بنسبة تصل ل 300٪. حسناً لماذا لاتستفيد منها وتستخدمها؟ السبب هو أن التوزيع الافتراضي لـ tensorflow تم إنشاؤه بدون امتدادات وحدة المعالجة المركزية ، مثل SSE4.1 و SSE4.2 و AVX و AVX2 و FMA وما إلى ذلك ، حيث أن التصميمات الافتراضية تهدف إلى أن تكون متوافقة مع أكبر عدد ممكن من وحدات المعالجة المركزية. سبب آخر هو أنه حتى مع هذه الإضافات ، تعد وحدة المعالجة المركزية أبطأ بكثير من وحدة معالجة الرسومات GPU ، ومن المتوقع أن يتم تنفيذ تدريب التعلم الآلي على نطاق متوسط وكبير على وحدة معالجة الرسومات GPU. إذاً ما الحل؟ إذا كان لديك GPU ، فلا يجب أن تهتم بدعم AVX ، وبالتالي يمكنك ببساطة تجاهل هذا التحذير عن طريق (منعه من الظهور): import os os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' أو إذا أردت استخدام تعليمات AVX فهناك تحديثات خاصة لتنسرفلو لكي تدعم هذه التعليمات بأنواعها المختلفة SSE4.1 و SSE4.2 و AVX و AVX2 و FMA إلخ.، وهي موجودة على gitHub في الرابط التالي: https://reposhub.com/python/deep-learning/lakshayg-tensorflow-build.html بعد أن تقوم بتحميل النسخة التي تريدها فقط ادخل لل cmd: pip install --ignore-installed --upgrade /path/to/binary.whl --user حيث تمرر له المسار الذي يتواجد فيه الملف الذي تم تنزيلها، أو يمكنك تحميلها مباشرة من gitHub: pip install --ignore-installed --upgrade "Download URL" --user حيث فقط تمرر له رابط النسخة التي نريدها (هناك عشرين نسخة أو أكثر وكل منها لنظام مختلف وتوسعات مختلفة). هذا كل شيئ..
    1 نقطة
  41. input_shape يمثل شكل البيانات التي ستدخل إلى طبقة معينة من نموذجك وبالتالي يجب أن تكون متوافقة مع حجم بياناتك، حيث أن كل طبقة من طبقات النموذج ستتلقى دخلأ بأبعاد معينة، لكننا لانحتاج لتحديد ذلك سوى لأول طبقة (لأن الطبقات التالية يتم استنتاج الأبعاد فيها لأنها تنتج من اختزال أبعاد الدخل على حجم الخلايا في الطبقة). وبما أن أول طبقة هي Dense فهي تتوقع منك مصفوفة (أو بمعنى أدق tensor) ثنائية الأبعاد تمثل حجم الباتش وعدد الفيتشرز features: model = models.Sequential() model.add(layers.Dense(64, activation='relu', input_shape=(10000,))) model.add(keras.layers.LayerNormalization()) input_shape=(10000,) تعني أن الدخل سيكون لديه 10 آلاف features (ال axis=0 لانحدده وبالتالي سيتم قبول أي قيمة لحجم الباتش).
    1 نقطة
  42. يظهر هذا الخطأ عندما تكون بيانات التدريب والاختبار غير متوافقة، أقصد بذلك عندما تكون الأبعاد غير متوافقة، أي بمعنى أوضح إذا كانت:: # في حالة كانت بياناتك هي بيانات تصنيف ثنائي # x أبعاد الدخل shape : (samples,features) #سمها كما شئت y أو label أو ال target فيجب أن تكون أبعاد بيانات الهدف Shape: (samples,) # أي مثلاً X_Shape:(1000,521) --> يجب أن يكون --> y_shape:(1000,) #label أي بمعنى آخر يجب أن يكون لكل عينة من بياناتك قيمة تمثل الهدف أو # في حالة كانت بياناتك بيانات تصنيف متعدد X_Shape : (samples,features) y_shape: (samples,عدد الفئات) # أي في مثالك فإن أبعاد الدخل هي X_Shape : 7982, 10000) # ولدينا 46 فئة وبالتالي أبعاد الهدف تكون (7982, 46) وهنا يخبرك كيراس أن عدد ال samples في بياناتك هو 7982 بينما ال label هو 8982 لذا يظهر خطأ. الحل: x_val = x_train[:1000] partial_x_train = x_train[1000:] # هنا y_val = one_hot_train_labels[:1000] partial_y_train = one_hot_train_labels[1000:] # الآن: partial_x_train.shape # (7982, 10000) partial_y_train.shape # (7982, 46) ... ... . . #fit تدريب النموذج من خلال الدالة history = model.fit(tf.convert_to_tensor(partial_x_train, np.float32), partial_y_train, epochs=6, batch_size=512, validation_data=(x_val, y_val),max_queue_size=10) حيث أنك قمت باقتطاع جزء من بيانات التدريب لديك لتكون بيانات validation لكنك نسيت أن تقوم باقتطاع بيانات الهدف أيضاً.
    1 نقطة
  43. تقوم هذه الدالة يتدريب نموذجك (تدريب الأوزان على المشكلة المعطاة)، ولها الشكل التالي: Model.fit( x=None, y=None, batch_size=None, epochs=1, verbose="auto", callbacks=None, validation_split=0.0, validation_data=None, shuffle=True, class_weight=None, sample_weight=None, initial_epoch=0, steps_per_epoch=None, validation_steps=None, validation_batch_size=None, validation_freq=1, max_queue_size=10, workers=1, use_multiprocessing=False, ) 1. أول وسيط يشير إلى بيانات الدخل، ويجب أن يكون مصفوفة نمباي (أو نوع آخر يشابهها)، أو قائمة من المصفوفات "list of arrays" (في حالة كان نموذجك متعدد الدخل multiple inputs). أو يمكن أن تكون مصفوفة تنسر "TensorFlow tensor" أو قائمة من التنسر "list of tensors" (في حالة كان نموذجك متعدد الدخل multiple inputs). أو قاموس يربط اسم بمصفوفة أو تنسر في حال كان لمصفوفات الدخل أسماء. أو tf.data مجموعة بيانات مكونة من خلال تنسرفلو، بحيث تكون من الشكل (inputs, targets) أو (inputs, targets, sample_weights).أو مولد generator أو تسلسل keras.utils.Sequence بحيث يعيد (inputs, targets) أو (inputs, targets, sample_weights). 2. ثاني وسيطة هي بيانات الهدف أو ال Target أو ال label، وبشكل مشابه لبيانات الدخل x يجب أن تكون Numpy array(s) أو TensorFlow tensor(s)، ويجب أن تكوم متسقة مع x، أي بمعنى إذا كانت x تحوي 400 عينة فهذا يعني أنه يجب أن يكون لدينا 400 target، و لايجب أن يكون x نمباي و y تنسر أو العكس. وفي حالة كانت بيانات الإدخال x من النوع dataset, generator, أو keras.utils.Sequence فلا تقم بتمرير قيم ال y لأنهم يحصلون علبها بشكل تلقائي من خلال x. 3. الوسيط الثالث هو ال batch_size وهو يمثل حجم دفعة البيانات، وهو عدد صحيح يشير إلى عدد العيانات التي سيتم تطبيق خوارزمية الانتشار الأمامي والخلفي عليها في المرة الواحدة. أي مثلاً لو كان لديل 100 عينة وكان حجم الباتش 10 هذا يعني أن هسيكون لديك 10 باتشات وكل باتش يحوي 10 عينات وبالتالي سيتم تطبيق خوارزمية الانتشار الأمامي ثم الخلفي (تحديث الأوزان) على أول باتش ثم ينتقل للباتش الثاني وهكذا.. أيضاً في حالة كانت بيانات الإدخال x من النوع dataset, generator, أو keras.utils.Sequence فلاتقم بتحديد هذا الوسيط لأنهم في الأساس يقومون بتوليد باتشات. وأيضاً في حالة لم تقوم بتعيين قيمة للباتش "None" فسأخذ القيمة الافتراضية 32. 4. الوسيط الرابع epochs عدد الحقب التي تريدها لتدريب النموذج، كل حقبة تقابل مرور على كامل مجموعة البيانات. 5. الوسيط الخامس هو ال verbose لعرض تفاصيل عملية التدريب في حال ضبطه على 0 لن يظهر لك تفاصيل عملية التدريب "أي الوضع الصامت"، أما في حالة ضبطه على 1 فهذا يعني أنك تريد أن تظهر لك تفاصيل التديب (الكل يريد هذا طبعاً). 6. الوسيط السادس callbacks قائمة من keras.callbacks.Callback وهي قائمة الاسترجاعات المطلوب تقديمها أثناء التدريب. 7. الوسيط السابع validation_split هو عدد حقيقي بين 0 و ال 1، يحدد نسبة يتم اقتطاعها من بيانات التدريب ليتم استخدامها كعينات تطوير Validaton set، وهذه الخاصية غير مدعومة في حالة كانت بيانات الإدخال x من النوع dataset, generator, أو keras.utils.Sequence. 8. الوسيط الثامن validation_data هو البيانات التي تريد استخدامها كعينات تطوير Validaton set أي لن يستخدمها في عملية التدريب وإنما سيختبر عليها دقة النموذج بعد كل حقبة (تماماً كما في الوسيط السابق)، ويجب أن تكون tuble من الشكل (x_val, y_val) كما يجب أن تكون من نمط البيانات tensors أو مصفوفات نمباي، أو tf.data.Dataset أو generator أو keras.utils.Sequence تعيد (inputs, targets) أو (inputs, targets, sample_weights). 9. الوسيط التاسع shuffle يأخذ قيمة بوليانية لتحديد فيما إذا كنت تريد القيام بعملية خلط للبيانات قبل كل حقبة أو يأخذ str في حالة كنت تريد الخلط قبل كل باتش ونمرر له في هذه الحالة "batch". وفي حالة كانت بياناتك هي مولدات أو tf.data.Dataset سيتم تجاهل هذا الوسيط. ملاحظة: "batch" هي خيار خاص للتعامل مع قيود بيانات HDF5، يخلط في أجزاء chunks بحجم الدُفعة batch-sized chunks. ويكون له تأثير عندما تكون None= steps_per_epoch . أما الوسيط العاشر 10. فهو ال class_weight وهي عبارة عن قاموس (اختياري) يربط فهارس الفئة (أعداد صحيحة) بوزن (قيمة float) لتوزين دالة التكلفة (خلال فترة التدريب فقط) ويكون استخدامه مفيداً لإخبار النموذج "بإيلاء المزيد من الاهتمام" لفئات الأقلية في حال كانت البيانات غير متوازنة (مثلاً عدد صور القطط 1000 وعدد صور الكلب 4000). 11. الوسيط sample_weight هو مصفوفة أوزان (اختياري) لعينات التدريب وتستخدم أيضاً لتوزين دالة التكلفة.ويمكنك إما تمرير مصفوفة Numpy مسطحة (1D) بنفس طول عينات الإدخال (ربط 1: 1 بين الأوزان والعينات). أو في حالة البيانات الزمنية ، يمكنك تمرير مصفوفة ثنائية الأبعاد ذات شكل (عينات ، طول التسلسل) ، لتطبيق وزن مختلف لكل خطوة زمنية لكل عينة. وهذه الخاصية غير مدعومة في حالة كانت بيانات الإدخال x من النوع dataset, generator, أو keras.utils.Sequence.. الوسيط 12. هو initial_epoch عدد صحيح. الحقبة التي تبدأ فيها التدريب (مفيدة لاستئناف دورة تدريبية سابقة). 13. steps_per_epoch عدد صحيح أو None إجمالي عدد الخطوات (مجموعات العينات) قبل الإعلان عن انتهاء حقبة واحدة وبدء المرحلة التالية. عند التدريب باستخدام موترات الإدخال مثل TensorFlow data tensors ، فإن القيمة الافتراضيةNone تساوي عدد العينات في مجموعة البيانات الخاصة بك مقسوماً على حجم الباتش، أو 1 إذا تعذر تحديد ذلك. إذا كانت x عبارة عن tf.data ، وكانت "steps_per_epoch=" None ، فسيتم تشغيل الحقبة حتى يتم استنفاد مجموعة بيانات الإدخال. وهذه الوسيطة غير مدعومة عندما تكون مدخلاتك هي مصفوفات. 14. validation_steps: تعمل فقط إذا تم توفير validation_data وكانت عبارة عن tf.data. وهي إجمالي عدد الخطوات (باتش من العينات batches of samples) المطلوب سحبها قبل التوقف عند إجراء ال validation في نهاية كل حقبة. إذا كانت "validation_steps" هي None ، فسيتم تشغيل ال validation حتى يتم استنفاد مجموعة بيانات validation_data. أما إذا تم تحديد "Validation_steps" فسيتم استخدام جزء فقط من مجموعة البيانات ، وسيبدأ التقييم من بداية مجموعة البيانات في كل حقبة. وهذا يعني استخدام نفس عينات التحقق في كل مرة. 15. validation_batch_size: عدد العينات لكل دفعة validation. إذا لم يتم تحديدها ، فسيتم تعيينها افتراضياً إلى batch_size. لا تحدد validation_batch_size إذا كانت بياناتك في شكل dataset, generator, أو keras.utils.Sequence.. (لأنها تولد باتشات). 16. validation_freq: تعمل فقط إذا تم توفير validation_data وهي عبارة عن عدد صحيح أو collections.abc.Container (مثل list ، tuple ، إلخ). إذا كان عدداً صحيحاً ، فإنه يحدد عدد حقب التدريب التي سيتم تشغيلها قبل إجراء عملية تحقق جديدة، على سبيل المثال validation_freq = 2 يتم تشغيل ال validation كل حقبتين. إذا كانت Container ، فإنها تحدد الحفب التي سيتم فيها تشغيل ال validation ، على سبيل المثال Validation_freq = [1 ، 2 ، 10] أي تشغيل ال validation في نهاية الحقبة الأولى والثانية والعاشرة. 17. max_queue_size: عدد صحيح ، و يستخدم للمولد generator أو keras.utils.Sequence فقط. ويمثل الحجم الأقصى لرتل المولد. إذا لم يتم تحديدها ، فسيتم تعيين max_queue_size افتراضياً على 10. 18. use_multiprocessing: قيمة بوليانية لتحديد فيما إذا كنت تريد استخدام المعالجة المتعددة أم لا وهو مدعوم فقط في حالة generator أو keras.utils.Sequence. الآن سأعطيك مثال لاستخدامه في تدريب نموذج: from keras.datasets import reuters import keras import tensorflow as tf (train_data, train_labels), (test_data, test_labels) = reuters.load_data( num_words=10000) import numpy as np def vectorize_sequences(sequences, dimension=10000): results = np.zeros((len(sequences), dimension)) for i, sequence in enumerate(sequences): results[i, sequence] = 1. return results x_train = vectorize_sequences(train_data) x_test = vectorize_sequences(test_data) from keras.utils.np_utils import to_categorical one_hot_train_labels = to_categorical(train_labels) one_hot_test_labels = to_categorical(test_labels) x_val = x_train[:1000] partial_x_train = x_train[1000:] y_val = one_hot_train_labels[:1000] partial_y_train = one_hot_train_labels[1000:] from keras import models from keras import layers model = models.Sequential() model.add(layers.Dense(64, activation='relu', input_shape=(10000,))) model.add(keras.layers.LayerNormalization()) model.add(layers.Dense(64, activation='relu')) model.add(keras.layers.LayerNormalization()) model.add(layers.Dense(46, activation='softmax')) model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['CategoricalAccuracy']) #fit تدريب النموذج من خلال الدالة history = model.fit(tf.convert_to_tensor(partial_x_train, np.float32), partial_y_train, epochs=6, batch_size=512, validation_data=(x_val, y_val)) """ Epoch 1/6 16/16 [==============================] - 2s 75ms/step - loss: 1.7822 - categorical_accuracy: 0.6134 - val_loss: 1.1558 - val_categorical_accuracy: 0.7510 ... ... Epoch 6/6 16/16 [==============================] - 1s 56ms/step - loss: 0.1659 - categorical_accuracy: 0.9535 - val_loss: 0.9125 - val_categorical_accuracy: 0.8080 """ كما وترد هذه الدالة كائن History يحوي قيم ال loss وال accuracy لنموذجك في كل حقبة "epoch". حيث يمكننا الوصول إليهم من خلال الواصفة history من هذا الكائن أي كالتالي History.history: history.history """ {'categorical_accuracy': [0.6207717657089233, 0.8475319743156433, 0.9155600070953369, 0.9433726072311401, 0.9516412019729614, 0.9551491141319275], 'loss': [1.70294189453125, 0.7281545996665955, 0.43800199031829834, 0.2743467688560486, 0.2031983882188797, 0.1586201786994934], 'val_categorical_accuracy': [0.753000020980835, 0.7839999794960022, 0.7940000295639038, 0.796999990940094, 0.7900000214576721, 0.7860000133514404], 'val_loss': [1.115304946899414, 0.9754453897476196, 0.9541780948638916, 0.9103594422340393, 0.9673216342926025, 0.9509721994400024]} """
    1 نقطة
  44. أولاً هذه الطبقة تمكننا من إضافة دالة التنشيط التي نريدها إلى نموذجنا تماماً كما في الشكل الذي أضفته، أما بالنسبة للفرق بين الطريقتين فلايوجد فرق من حيث المبدأ لكن الفرق يكون من حيث الاستخدام والهدف، فعندما تريد مثلاً تطبيق ال Bachnormlaization أو ال Layer Normlaization على قيم z فهنا أنت بحاجة لفصل التنشيط عن قيم ال z التي تنتجها الخلايا، لاحظ المثال التالي: model = models.Sequential() model.add(layers.Dense(64,input_shape=(10000,))) model.add(keras.layers.LayerNormalization()) model.add(layers.Activation("relu")) model.add(layers.Dense(64)) model.add(keras.layers.LayerNormalization()) model.add(layers.Activation("relu")) model.add(layers.Dense(46, activation='softmax')) وهنا أيضاً: AlexNet.add(Conv2D(filters=256, kernel_size=(3,3), strides=(1,1), padding='same')) AlexNet.add(BatchNormalization()) # هنا AlexNet.add(Activation('relu')) AlexNet.add(MaxPooling2D(pool_size=(2,2), strides=(2,2), padding='same'))
    1 نقطة
  45. السبب في قيامك بالخلط مابين Keras API و tensorflow.keras، فهما منفصلتين، فالأولى هي إطار العمل كيراس أما الثانية فهي كيراس نفسها لكن بعد أن تم دمجها كموديول في تنسرفلو عملية الدمج هذه قد تنتج أخطاءاً تتعلق بالتوافق في بعض الأحيان عندما تقوم باستخدامهما في نموذجك معاً، حيث قمت هنا بتهيئة معمارية sequential من tensorflow.keras وإضافة طبقات لها من Keras API لذا استخدم إما Keras API أو tensorflow.keras. وبالتالي يكون : from tensorflow.keras.layers import Conv2D,MaxPooling2D from tensorflow.keras.datasets import mnist from tensorflow.keras.models import Sequential import tensorflow.keras from tensorflow.keras.layers import Dense, Dropout, Flatten model = Sequential() model.add(Conv2D(30,(3,3),padding="valid",kernel_initializer="glorot_uniform", activation="tanh", input_shape=(28, 28, 1) )) model.add(Conv2D(30,(3,3), activation="tanh")) model.add(MaxPooling2D((2,2)) model.add(Dropout(0.4)) model.add(Flatten()) model.add(Dense(100, activation='relu')) model.add(Dropout(0.4)) model.add(Dense(10, activation='softmax'))
    1 نقطة
  46. إذا لم تكن على دراية بهذا المفهوم فيجب أولاً أن تقوم بقراءة الإجابة عن هذا السؤال، فهو مرتبط به تماماً، حيث أن ال Layer Normalization هي تعديل على ال batch normalization: في batch normalization كنا نقوم بحساب المتوسط mean وال variance اعتماداً على حجم ال batch أما هنا فنقوم بحسابه اعتماداً على عدد الخلايا في الطبقة أي أن هذه المعملات الإحصائية يتم حسابها بشكل مستقل عن الباتش. وهذا هو الفرق بينهما. وسبب ظهورها هو أن ال batch normalization لاينفع مع مع شبكات RNNs (وهذا هو السبب الرئيسي). حيث أنه في هذا النوع من الشبكات يكون لدينا بيانات متسلسلة "sequential data" فالجمل تكون بأطوال مختلفة وبالتالي الاعتماد على الاحصائيات التي نحصل عليها بالنسبة لحجم الباتش يكون أمراً غير دقيق بالمرة. لذا أتت هذه الفكرة وهي حساب هذه المعاملات الإحصائية بالنبسة لكل عينة من البيانات أي عملياً (لكل جملة في حالة ال sequential data). في كيراس له الشكل التالي: tf.keras.layers.LayerNormalization( axis=-1, epsilon=0.001, center=True, scale=True, beta_initializer="zeros", gamma_initializer="ones", beta_regularizer=None, gamma_regularizer=None, beta_constraint=None, gamma_constraint=None, ) هذه الوسطاء هي نفسها في ال batch normlaization (يمكنك العودة إلى الرابط الذي قدمته في الأعلى). وفي المثال التالي أبين لك كيف يمكنك استخدامه مع الشبكة العصبية (بشكل مشابه لل batch norm): model = tf.keras.models.Sequential([ tf.keras.layers.Reshape((28,28,1), input_shape=(28,28)), tf.keras.layers.Conv2D(filters=16, kernel_size=(3,3),data_format="channels_last"), # LayerNorm Layer لإضافة طبة tf.keras.layers.LayerNormalization(axis=3 , center=True , scale=True), tf.keras.layers.Flatten(), tf.keras.layers.Dense(128, activation='relu'), tf.keras.layers.Dropout(0.2), tf.keras.layers.Dense(10, activation='softmax') ]) حيث قمنا بتطبيق Layernormalization بعد طبقة Conv2D واستخدام مقياس وعامل إزاحة. مثال آخر لاستخدامه مع نموذج لتحليل مراجعات الأفلام IMDB: from keras.datasets import reuters import keras (train_data, train_labels), (test_data, test_labels) = reuters.load_data( num_words=10000) import numpy as np def vectorize_sequences(sequences, dimension=10000): results = np.zeros((len(sequences), dimension)) for i, sequence in enumerate(sequences): results[i, sequence] = 1. return results x_train = vectorize_sequences(train_data) x_test = vectorize_sequences(test_data) from keras.utils.np_utils import to_categorical one_hot_train_labels = to_categorical(train_labels) one_hot_test_labels = to_categorical(test_labels) x_val = x_train[:1000] partial_x_train = x_train[1000:] y_val = one_hot_train_labels[:1000] partial_y_train = one_hot_train_labels[1000:] from keras import models from keras import layers model = models.Sequential() model.add(layers.Dense(64, activation='relu', input_shape=(10000,))) model.add(keras.layers.LayerNormalization()) model.add(layers.Dense(64, activation='relu')) model.add(keras.layers.LayerNormalization()) model.add(layers.Dense(46, activation='softmax')) model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['CategoricalAccuracy']) history = model.fit(partial_x_train, partial_y_train, epochs=6, batch_size=512, validation_data=(x_val, y_val)) ########################## أو يمكنك تطبيقها قبل استخدام دالة التنشيط ######################### model = models.Sequential() model.add(layers.Dense(64,input_shape=(10000,))) model.add(keras.layers.LayerNormalization()) model.add(layers.Activation("relu")) model.add(layers.Dense(64)) model.add(keras.layers.LayerNormalization()) model.add(layers.Activation("relu")) model.add(layers.Dense(46, activation='softmax'))
    1 نقطة
  47. كما هو معروف فإن البيانات تقسم إلى ٣ أقسام . بيانات تدريب training set وبيانات نقيس عليها تقدمنا خلال عملية التدريب validation set وبيانات نختبر عليها النموذج النهائي test set. وكما نعلم فإن بيانات التدريب هي بيانات مرئية أي أن النموذج يتدرب عليها ويعرف نتيجة كل عينة من البيانات. أما بيانات التحقق وبيانات الاختبار فلايعرف النموذج نتائجها أي أنها بيانات غير مرئية. والهدف من كونها غير مرئية هو قياس كفاءة النموذج الحقيقية. الآن دعنا نعود إلى بيانات ال Validation ... عندما نقوم بتدريب نموذج في التعلم الآلي (مثلاً نموذج لتصنيف الصور) فإن أهم شيئ نحتاجه هو تحديد بروتوكول لقياس عملية التقدم خلال عملية التدربب (تحديد طريقة تمكننا من معرفة سلوك عملية التدريب بغية تجنب ال overfitting وبغية ضبط معاملات النموذج العليا مثل عدد الطبقات أو الخلايا أو نوع الطبقات أو حجم الباتش ..الخ). وهناك عدة بروتوكولات أشهرها ال Cross Validation وتعتمد على أخذ عينة جزئية من بيانات التدريب وقياس دقة النموذج accuracy عليها بعد كل فترة (epoch) من عملية التدريب وهذه القيمة هي مايشار لها ب val_acc أما ال acc فهي دقة النموذج على بيانات التدريب. نحن بحاجة دوما لمراقبة هاتين القيمتين خلال تدريب النموذج ؟ لماذا؟ كما قلت لكي نقيس سلامة التقدم.. فخلال التدريب فإن الشيئ المؤكد دوماً هو أن ال acc ستزداد وتتحسن وهذا يكون إشارة إلى أن النموذج يتعلم من البيانات. لكن هذا قد يجعل النموذج يقع في ال OF وهذا ما لانريده بالطبع ..حسناً إذن كيف سنعرف متى يحدث ال OF منأجل أن نوقف علية التدريب؟ الجواب هو من خلال ال val_acc فطالما أنها تزداد مع ازدياد ال acc فهذا يعني أن النموذج مازال يتعلم ويسلك سلوك صحيح أي أن النموذج قادر على تعميم Generlaization ماتعلمه على بيانات جيدة لم يراها من قبل. أما عندما يستمر ال acc بالتحسن وتبدأ ال val_acc بالانهيار (بالانخفاض) فهذا يعني أن نموذجك لم يعد قادراً على التعلم أكثر من البيانات وبدأ يحفظها (حالة OF ) وهنا ينبغي أن نوقف عملية التدريب لأن النموذج لن يكون قادرا على تعميم مايتعلمه. ولهذا السبب نحن بحاجة لها. أما بابنسبة لل loss فهي قيمة التكلفة على بيانات التدربب و المحسوبة من دالة التكلفة التي حددتها للنموذج. أما val_loss فهي الخاصة ببيانات ال validation.
    1 نقطة
×
×
  • أضف...