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

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

  1. Ali Haidar Ahmad

    Ali Haidar Ahmad

    الأعضاء


    • نقاط

      13

    • المساهمات

      1068


  2. Wael Aljamal

    Wael Aljamal

    الأعضاء


    • نقاط

      4

    • المساهمات

      6975


  3. Tamim Fahed

    Tamim Fahed

    الأعضاء


    • نقاط

      4

    • المساهمات

      124


  4. Fahmy Mostafa

    Fahmy Mostafa

    الأعضاء


    • نقاط

      4

    • المساهمات

      91


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

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

  1. لدي قائمة تحتوي على أربعة أرقام وأريد أن أقوم بتمرير كل القيم من هذه القائمة إلى دالة تقبل أربعة مدخلات كالتالي: def echo(a, b, c, d): print(a, b, c, d) myLits = [1, 2, 3, 4] أريد تمرير محتوى myList إلى دالة echo، في لغات أخرى مثل JavaScript يمكنني أن أستخدم المعامل "..." كالتالي: echo( ...myList ) كيف أقوم بهذا الأمر في بايثون؟
    2 نقاط
  2. باستخدام الأوامر على المجموعة كـ bulk في mongodb لاحظت وجود تابعين متشابهين هما: updateOne , replaceOne. ولكن حسب التوثيق كل منهما يقوم بتعديل المستندات التي يتم الاستعلام عنها بنفس الطريقة. هل من الممكن أن يكون updateOne شاملاً أكثر بحيث يمكنني استخدامه دائماً بدلاً من replaceOne ؟ أو ما الفرق تحديداً بين كل منهما ومتى يجب استخدام كل واحدة؟
    2 نقاط
  3. يجب إضافة طبقة Flatten قبل أول طبقة Dense. إن المرحلة الأخيرة من الشبكة العصبية التلافيفية (CNN) هي المصنف. يطلق عليه طبقة/طبقات Dense، وهي مجرد مصنف شبكة عصبية اصطناعية (ANN). ويحتاج مصنف ANN إلى ميزات فردية "individual features" ، تماماً مثل أي مصنف آخر. هذا يعني أنه يحتاج إلى "feature vector". لذلك، تحتاج إلى تحويل خرج الجزء التلافيفي من CNNs إلى Vector1D، ليتم استخدامه بواسطة جزء ANN. هذه العملية تسمى التسطيح "Flatten ". # write your model here, we prefer that you call it model2 to make comparisions easier later: model2 = keras.Sequential() model2.add(layers.Conv2D(filters=6, kernel_size=(3, 3), activation='relu', input_shape=(150,150,3))) model2.add(layers.AveragePooling2D()) model2.add(layers.Conv2D(filters=16, kernel_size=(3, 3), activation='relu')) model2.add(layers.AveragePooling2D()) model2.add(layers.Flatten()) # هنا model2.add(layers.Dense(units=120, activation='tanh')) model2.add(layers.Dense(units=84, activation='tanh')) model2.add(layers.Dense(units=6, activation = 'softmax')) model2.compile(optimizer = 'adam', loss = 'sparse_categorical_crossentropy', metrics=['accuracy']) model2.fit(train_images, train_labels, batch_size=32, epochs=1, validation_split = 0.2)
    2 نقاط
  4. الخطأ هو أن keras.engine.Network لم تعد موجودة في إصدار كيراس الاحدث حتى أنها أصبحت في الوحدة keras.engine.network.Network و بعدها لم تعد موجودة هي كذلك في الإصدار، لينوب عنها keras.Model: import keras from keras import backend from keras.models import Sequential from keras import layers from keras.datasets import mnist model = Sequential() model.add(layers.Flatten()) model.add(layers.Dense(512, activation='relu', input_shape=( 28*28,))) model.add(layers.Dense(10, activation='softmax')) model.compile(optimizer='Adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) # لتصحيح الكود وضع # keras.Model مكان keras.engine.Network def init(model): session = backend.get_session() for layer in model.layers: if isinstance(layer, keras.Model): init(layer) init(model)
    2 نقاط
  5. لدي مجلد يحتوي على عدد من ملفات بايثون كالتالي: foo/ ├── dir/ | ├── file.py | └── boo.py └── helpers.py أريد أن أقوم بإستدعاء ملف helpers.py داخل الملف file.py، كيف أقوم بهذا الأمر بإستخدام جملة import؟
    1 نقطة
  6. السلام عليكم لدي كود يرسل نص للقاعدة <textarea name="content_txt" id="contentText"></textarea> والكود كالتالي <script type="text/javascript"> $(document).ready(function() { //##### Add record when Add Record Button is click ######### $("#content-form").submit(function (e) { e.preventDefault(); if($("#contentText").val()==='') { alert("Please enter some text!"); return false; } var myData = 'content_txt='+ $("#contentText").val(); //build a post data structure jQuery.ajax({ type: "POST", // Post / Get method url: "response.php", //Where form data is sent on submission dataType:"text", // Data type, HTML, json etc. data:myData, //Form variables success:function(response){ $("#responds").append(response); $('#contentText').val("") }, error:function (xhr, ajaxOptions, thrownError){ alert(thrownError); } }); }); }); </script> اريد ان اضيف للفورم حقلين اخرين <input type="text" name="my_name" id="myname"> <input type="text" name="my_email" id="myemail"> كيف يمكن اضافة حقل الاسم والايميل بالكود بالاعلى
    1 نقطة
  7. سمعت عن مصطلح memoization من فترة قصيرة ولم أفهم الغرض منه، أعلم أنه يستخدم لتسريع البرامج لكن كيف يتم هذا الأمر؟ ولماذا لا تستعمله كل البرمجيات؟ حاولت البحث عن إجابة لهذه الأسئلة لكن لم أجد مصادر عربية تفيد في هذا الأمر.
    1 نقطة
  8. هل لاب توب ابل ماك افضل جهاز للبرمجه؟
    1 نقطة
  9. Memoization هي طريقة تستخدم لتخزين نتائج استدعاءات الدوال functions السابقة لتسريع العمليات الحسابية المستقبلية. إذا تم إجراء استدعاءات دالة متكررة باستخدام نفس المُدخلات ، فيمكننا تخزين القيم السابقة بدلاً من تكرار العمليات الحسابية غير الضرورية. يمكنك التفكير به ك cache لنتائج الدوال ولهذا فائدة كبيرة جداً حيث ينتج عن هذا تسريع كبير في العمليات الحسابية. وهناك عدة حالات لإستخدام Memoization فعلى سبيل المثال لتسريع دالة المعامل كما هو مبين في الكود factorial_memo = {} def factorial(k): if k < 2: return 1 if k not in factorial_memo: factorial_memo[k] = k * factorial(k-1) return factorial_memo[k]
    1 نقطة
  10. ممكن معرفة الأدوات الازمة (SDK &tools) لتصميم تطبيقات تستخدم تقنية GPS أواجه نقص في الادوات لم أعرفه . أمر أخر على اي مستوى تدعم منصة حسوب دورات البرمجة المجانيه
    1 نقطة
  11. شرح لتعليمة joinفي ال threading واللغه هي سي شارب
    1 نقطة
  12. تقوم بإيقاف جميع التعليمات التي تأتي بعدها ضمن الكود حتى يتم تنفيذ ال thread الذي يقوم بالاستدعاء، لفهم ذلك : في البداية و كما نعلم أن ال thread هو طريق إلى وحدة المعالج، ففي حال لدينا كود ما كبير وكان هنالك إمكانية للتفريع، و قمنا بإنشاء عدد من ال Threads، فإن كل thread منها يصل إلى نواة من أموية المعالج، وبالتالي كل نواة تنفذ جزء من الكود، و بالتالي تنفيذ الكود يكون بشكل متساير ( متوازي) مما يؤدي لتسريع تنفيذ الكود. إذن مجال التنفيذ سيكون متداخل، فلو أخذنا المثال البسيط التالي (سنقتصر على ذكر الأفكار اللازمة لفهم الطريقة join() فقط) : ( الصف Helper يحوي الطريقتين printA تقوم بطباعة A مئة مرة، printB تقوم بطباعة B مئة مرة). Class Helper { Public void PrintA(){ for ( int i=0 ; i<100 ; i++ ) { console.WriteLine("A"); } } Public void PrintB(){ for ( int i=0 ; i<100 ; i++ ) { console.WriteLine("B"); } } } ( في ال main class أخذنا غرض من الصف Helper واستدعينا طرائقه ، ثم أنشئنا لكل طريقة thread خاص ، لا ننسى أن ال التابع main() عبارة عن thread أساسي يتم تنفيذه). Class program { Public static void main() { Helper h = new Helper (); Thread th1 = new Thread (h.printA()); Thread th2 = new Thread (h.printB()); Th1.start(); Th2.start (); for ( int i =0 ; i < 100; i++ ) { console.WriteLine ( "C" ); } } } الآن أصبح لدينا ثلاثة نياسب (th1 يطبع A مئة مرة، th2يطبع B مئة مرة، thread mainيطبع C مئة مرة). التنفيذ متداخل و يكون الخرج هنا بعد التنفيذ: ( طباعة A مئة مرة و B مئة مرة و C مئة مرة ) بشكل متداخل. الآن الجزء المهم لمعرفة وظيفة الطريقة join(): ماذا نفعل اذا أردنا أن نطبع A مئة ثم طباعة B مئة مرة ثم طباعة C مئة مرة ؟ الجواب نستخدم التعليمة join() بالشكل : th1.start(); th1.join(); th2.start(); th2.join(); for(int i=0;i<100;++i){ onsole.WriteLine("C"); } سؤال بطريقة أخرى لفهم join() ، ماهو الخرج في حال كانت التعليمات بالشكل : th1.start(); th2.start(); th1.join(); th2.join(); for(int i=0;i<100;++i){ onsole.WriteLine("C"); } الخرج : طباعة C مئة مرة بعد طباعة كل من A,B بشكل متداخل ، بشكل مفصل: التعليمة th1.join() تقوم بإيقاف ال main(طباعة C)حتى يتم طباعة A مئة مرة. (إلى هنا يكون المتوقع حتى الآن طباعة A و B بشكل متداخل وعندما تتم طباعة A مئة مرة يبدأ تنفيذ النيسب main بالتالي بدئ طباعة C بشكل متداخل مع B إن لم تكن منتهية ) لكن لدينا التعليمة التالية وهي th2.join()تقوم بإيقاف ال main(طباعة C)حتى يتم طباعة B مئة مرة .. بالتالي أصبح الخرج المتوقع (طباعة Aمئة مرة و B مئة مرة ) بشكل متداخل ومن ثم طباعة C مئة مرة .
    1 نقطة
  13. في البرمجة المتوازية (التفرعية) parallel programming يقوم بالمبرمج بإنشاء عدة مسالك thread لكي يضمن عمل البرنامج بشكل أفضل مستغلا بنية المعالجات التي تحوي عدة مسالك، في نفس الوقت ربما هنالك أحد هذه المسالك يعتمد على نتيجة مسلك آخر أي عليه أن ينتظر إنتهاء تنفيذه ليتابع التنفيذ عمله، أو تحديد نقطة في الشيفرة لتجميع نتائجعدة مسالك مختلفة ومن ثم تجميع هذه النتائج بالطريقة المناسبة. تدعم #C عدة أنواع من الدالة join: أحدها بدون وسطاء ويقوم بعملية انتظار لتمام انتهاء المسلك من عمله والثاني يأخذ وسيط رقم صحيح مقدراً بواحدة ميلي ثانية حيث ينتظر إما لانتهاء (يتصرف كمهلة انتظار) هذه المدة أو انتهاء المسلك بالشكل العادي // انتظار لمدة ثانية millisecondsTimeout thread.Join(1000); مثال عام: // إنشاء مسلكين Thread thr1 = new Thread(new ThreadStart(obj.mythread)); Thread thr2 = new Thread(new ThreadStart(obj.mythread1)); // تشغيل المسلك الأول thr1.Start(); // انتظار انتهاء المسلك الأول thr1.Join(); // تشغيل المسلك الثاني thr2.Start();
    1 نقطة
  14. يوجد خطأن الأول في dropout هو فقط ضع مكان السطر model.add(Dropout(0,45)) السطر التالي: model.add(Dropout(0.45)) والثاني أنه في مجموعة التحقق validation_data في السطر التالي: model.fit(x_train, y_train, epochs=5,validation_data=[x_vaild, y_vaild], batch_size=batch_size) يأخذ tuple و ليس مصفوفة أي يصبح السطر هكذا: model.fit(x_train, y_train, epochs=5,validation_data=(x_vaild, y_vaild), batch_size=batch_size)
    1 نقطة
  15. في الاحصاء الرياضي، فإن تباعد كولباك - ليبلير ‏ هو مقياس لمدى اختلاف توزيع احتمالي p عن توزيع احتمالي مرجعي آخر q، وهو مجرد تعديل طفيف لمعادلة الإنتروبيا، ويستخدم في تعلم الآلة كمقياس لأداء نموذج، عن طريق مقارنة اختلاف y_pred (التوزيع الاحتمالي الذي أنتجته الخوارزمية) ب y_true (توزيع احتمالي مرجعي). يمكنك استخدامه عبر الموديول:tf.keras.losses tensorflow.keras.losses مثال: import tensorflow as tf y_true = [[0, 1], [1, 0]] y_pred = [[0.2, 0.8], [0.9, 0.1]] kl = tf.keras.losses.KLDivergence() kl(y_true, y_pred).numpy() #0.16425064 لاستخدامه في نموذجك، قم بتمريره إلى دالة compile كالتالي: model.compile( loss=tf.keras.losses.KLDivergence() ... ) # أو model.compile( loss='KLDivergence' ... ) مثال على مجموعة بيانات راوترز (تصنيف متعدد 46 فئة): للتنويه: لاستخدامه يجب أن تقوم بترميز بيانات ال target لديك بترميز فئوي One-Hot، ويمكنك استخدام الدالة to_categorical كما في المثال للقيام بالأمر. # تحميل الداتا from keras.datasets import reuters import tensorflow as tf (train_data, train_labels), (test_data, test_labels) = reuters.load_data( num_words=1000) #ترميز الفئات المختلفة للبيانات #كما أشرنا One-Hot-Enoding طبعاً يجب أن نستخدم الترميز from keras.utils.np_utils import to_categorical # One-Hot-Enoding one_hot_train_labels = to_categorical(train_labels) one_hot_test_labels = to_categorical(test_labels) #أي الفئات target انتهينا من ترميز قيم ال # الآن لنقم بترميز بيانات التدريب import numpy as np #One-Hot قمت بإنشاء تابع يقوم بتحويل بياناتي إلى الترميز # بإمكانك أيضاً استخدام تابع تحويل جاهز def vectorize_sequences(sequences, dimension=1000): 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 import models from keras import layers model = models.Sequential() model.add(layers.Dense(64, activation='relu', input_shape=(1000,))) model.add(layers.Dense(64, activation='relu')) model.add(layers.Dense(46, activation='softmax')) # تجميع النموذج model.compile(optimizer='rmsprop', loss=tf.keras.losses.KLDivergence(), metrics=['accuracy']) # لاحظ كيف قمنا بتمرير دالة التكلفة إلى النموذج # التدريب history = model.fit(x_train, one_hot_train_labels, epochs=8, batch_size=512, validation_split=0.2) -------------------------------------------------------------------------- Epoch 1/8 15/15 [==============================] - 1s 31ms/step - loss: 3.2545 - accuracy: 0.2897 - val_loss: 2.0523 - val_accuracy: 0.5704 Epoch 2/8 15/15 [==============================] - 0s 14ms/step - loss: 1.9090 - accuracy: 0.5904 - val_loss: 1.6599 - val_accuracy: 0.6210 Epoch 3/8 15/15 [==============================] - 0s 14ms/step - loss: 1.5475 - accuracy: 0.6557 - val_loss: 1.4534 - val_accuracy: 0.6772 Epoch 4/8 15/15 [==============================] - 0s 20ms/step - loss: 1.3430 - accuracy: 0.7036 - val_loss: 1.3452 - val_accuracy: 0.6962 Epoch 5/8 15/15 [==============================] - 0s 34ms/step - loss: 1.2310 - accuracy: 0.7298 - val_loss: 1.2695 - val_accuracy: 0.7151 Epoch 6/8 15/15 [==============================] - 0s 14ms/step - loss: 1.1037 - accuracy: 0.7569 - val_loss: 1.1704 - val_accuracy: 0.7446 Epoch 7/8 15/15 [==============================] - 0s 17ms/step - loss: 1.0003 - accuracy: 0.7809 - val_loss: 1.1225 - val_accuracy: 0.7607 Epoch 8/8 15/15 [==============================] - 0s 15ms/step - loss: 0.9435 - accuracy: 0.7911 - val_loss: 1.0866 - val_accuracy: 0.7590
    1 نقطة
  16. لقد تحدثت عن خوارزميات التحسين و أهميتها للنموذج هنا، يمكنك مراجعة المقدمة لتتعرف على أهميتها. والان بعد أن قمت بفهم أهمية خوارزميات التحسين لنتحدث عن 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') [إضغط و إسحب للتحريك]
    1 نقطة
  17. انا اصمم صور مصغرة منذ سنة والى الان لم تأتني اي مبيعة مع العلم ان الصور المصغرة التي اصممها احترافية
    1 نقطة
  18. السلام عليكم انا كنت قد انهيت مشروع instagram الموجود في دورة php لكن هنالك مشكلة محيرة بالنسبة لي وهي ان عندما اقوم بفتح ال app من المستودع github لا تظهر البيانات التي قمت ببذرها و لكننها تظهر محليا على desktop في هذا المسار D:\hasoub\instagram_project\Instagram\storage\app\public\uploads بينما لا تظهر في المستودع البعيد الذي هو على github اي ان المشكلة في رفع البيانات هل يوجد تفسير و حل لها؟
    1 نقطة
  19. شكرا لك حتى ال data faker يتم اهمالهم؟ اي انني اريد رفع 50 مستخدم عبر ال seed و factory
    1 نقطة
  20. السلام عليكم ورحمة الله وبركاته انا لما اجي اعمل run على برنامج codeblock مش بيرضى يعمل run وببيقول ان فيه مشكلة في GNU GCC Compiler
    1 نقطة
  21. السلام عليكم .. اود رفع تطبيقى Expo الى جوجل ستور واريد ان ارفعه انا ستطيع ان احوله الى APK بسهولة ولكن عندما احوله الى APk يظهر لى اختيارين وهما كما فى الصورة ومالفرق بينهما انا قرات المكتوب ولكنى لم افهم بشكل افضل .. رجاءا ماذا اختار حتى انتج تطبيق apk واقوم برفعه ل google store ؟؟
    1 نقطة
  22. لدي عدد كبير من المستندات ضمن مجموعة (users) بهذا الشكل: { date: '2020-12-12', username: 'test1', email: 'test@test.com' } .... كيف يمكنني إخراج مجموعة من هؤلاء المستخدمين (السجلات) إلى collection أخرى ضمن نفس قاعدة البيانات؟
    1 نقطة
  23. قمت بتحميل mongodb على الخادم بنظام CentOS وقمت بإنشاء الإعدادات ضمن ملف mongod.conf كالتالي: logpath=/var/log/mongo/mongod.log port=27017 dbpath=/var/lib/mongo وقمت بتشغيلها من خلال الأوامر: service mongod start mongo لكن بعد بضعة أيام ظهر الخطأ التالي: [initandlisten] ERROR: Insufficient free space for journal files [initandlisten] Please make at least 3379MB available in /var/lib/mongo/journal or use --smallfiles [initandlisten] [initandlisten] exception in initAndListen: 15926 Insufficient free space for journals, terminating dbexit: [initandlisten] shutdown: going to close listening sockets... [initandlisten] shutdown: going to flush diaglog... [initandlisten] shutdown: going to close sockets... [initandlisten] shutdown: waiting for fs preallocator... [initandlisten] shutdown: lock for final commit... [initandlisten] shutdown: final commit... [initandlisten] shutdown: closing all files... [initandlisten] closeAllFiles() finished [initandlisten] journalCleanup... [initandlisten] removeJournalFiles [initandlisten] shutdown: removing fs lock... dbexit: really exiting now ثم عندما أقوم بتنفيذ الأمر التالي: service mongod status تظهر هذه الرسالة: mongod dead but subsys locked كيف يمكنني معالجة مشاكل mongod dead but subsys locked و Insufficient free space for journals, terminating ؟
    1 نقطة
  24. يمكنك إضافة ما يلي إلى ملف التكوين المقدم عند تشغيل mongod --config mongod.conf لآخر إصدار من MongoDB storage: mmapv1: smallFiles:true لإصدار 2.6 storage: smallFiles:true لإصدار 2.4 و الإصدارات التي أقل : smallFiles:true ثم قم فقط بتنفيذ mongod لقبول ملف التكوين الخاص بك , ويفترض أن يكون موقع ملف التكوين هو /etc/mongodb.conf أو يمكنك تشغيل mongod باستخدام الأمر التالي mongod --dbpath /data/db --smallfiles
    1 نقطة
  25. لتشكيل مصفوفة جديدة بطريقة تسمح لك بتحديد الخطوة وال shape، تمنحك Numpy طريقتين رئيسيتين لبناء منظار جديد "new view" لمخزن الذاكرة المؤقت "memory buffer" ، وذلك عن طريق تحديد سمات المصفوفة الأساسية مثل الخطوات "strides" بشكل مباشرة، هاتين الطريقتين هما: as_strided و ndarray. بشكل عام كلاهما يعتبران طرق خطيرة للاستخدام داخل الكود لأنه قد تنتج (((الكثير))) من الأخطاء أثناء استخدامه حتى ولو كنت مبرمجاً محترفاً، لذا لاينصح أبداً بهما إلا للضرورة القصوى. مثلاً في بعض المسائل الصعبة التي قد يسهل حلها عند التلاعب بشكل المصفوفة بهذه الطرق. قبل البدء ماهي ال strides؟ هو مقدار الخطوة، أو هو عدد البايتات اللازمة للانتقال إلى العنصر الثاني من المصفوفة.(ويشار له أيضاً بال axis) طبعاً في حالة المصوفوفة الثنائية نحدد الخطوة الأفقية والخطوة العمودية فمثلاً(16,4) تعني: array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]]) # جهازي بخزن كل قيمة ب4 بايت هذا يعني أنه للانتقال من العنصر 1 إلى 2 نحتاج إلى 4 بايت وللانتقال من بداية البعد الأول [ 0, 1, 2, 3] في المصفوفة إلى البعد الثاني [ 4, 5, 6, 7] نحتاج إلى خطوة مقدارها 16 أي 4*4 أي عدد الأعمدة بحجم كل خطوة as_strided : في اللمثال التالي نقوم بإنشاء view باستخدام هذه الطريقة بشكل مكافئ تماماً ل reshape، ثم سأقوم بإنشاء مايكافئ x.reshape # أنشأنا عرضًا جديدًا لمخزن الذاكرة #x.reshape(3, 4) مايلي يكافئ import numpy as np from numpy.lib.stride_tricks import as_strided x = np.arange(12) #array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]) print(x.strides) # أي نحتاج 8 بايتات للانتقال في الذاكرة من العنصر1 إلى 2 as_strided(x, shape=(3, 4), strides=(16, 4))# 16=x.strides*4 '''array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]])''' #x.reshape(3, 4) مايلي يكافئ as_strided(x, shape=(3, 4), strides=(4, 16)) # لاحظ كيف أنه من خلال التلاعب بالخطوات يمكنني الحصول على ما أريد القدرات والفائدة الأساسية من as_strided تتجاوز ذلك، فالاستخدام الشائع منها هي ال “sliding window” وهو ما أشرت إليه بسؤالك "إنشاء مصفوفة من x بأبعاد (5,3)" إذاً ماهو ال strides المناسب للقيام بذلك؟ أولاً بالنسبة للأسطر، فالانتقال من عنصر لعنصر يتطلب x.strides أي 4 بايت على جهازي. ثانياً القفز على الأعمدة ( أي للنزول ) كم نحتاج؟ لو ان القيم في الأعمدة متتالية لكنا نحتاج فقط 4 بايت، مثلاً: array([[0, 1, 2, 3, 4], [1, 2, 3, 4, 5], [2, 3, 4, 5, 6]]) # ولو كان بالشكل التالي سنحتاج 4*2 array([[0, 1, 2, 3, 4], [2, 3, 4, 5, 6], [4, 5, 6, 7, 8]]) ولو كان بالشكل التالي لحتجنا 4*3 array([[ 0, 1, 2, 3, 4], [ 3, 4, 5, 6, 7], [ 6, 7, 8, 9, 10]]) #لمعرفتها x.strides حجم الخطوة يختلف من جهاز لآخر اسخدم التعليمة x = np.arange(1,12) as_strided(x, shape=(3, 5), strides=(x.strides*3, x.strides)) """ array([[ 1, 2, 3, 4, 5], [ 4, 5, 6, 7, 8], [ 7, 8, 9, 10, 11]]) """ إن الشيء الرائع فيها هو إنه يمكنك تشكيل مصفوفة أكبر حجماً من المصفوفة x ذاتها بدوم أن يتم استهلاك ذاكرة إضافية، أي أننا هنا احتجنا لتمثيل x في الذاكرة 11*4 =44 bytes ثم شكلنا مصفوفة جديدة منها بأبعاد 4,3 أي قد تظن أن الحجم التخزيني سيكون 4*3*4 لكن أنت مخطئ، سيكون 44 بايت أيضاً!! وذلك لأنها تتشارك البيانات. الآن يمكنك تشكيل تابع يعطيك الخرج بالحالة العامة، حيث نمرر له المصفوفة والطول والعرض: def strided_app(a, L, S ): nrows = ((a.size-L)//S)+1 n = a.strides[0] x=np.lib.stride_tricks.as_strided(a, shape=(nrows,L), strides=(S*n,n)) return x strided_app(x,5,3) """ array([[ 0, 1, 2, 3, 4], [ 3, 4, 5, 6, 7], [ 6, 7, 8, 9, 10]]) """ ndarray: يمكنك استخدامها بطريقة مشابهة كالتالي: np.ndarray(buffer=x.data, shape=(3, 5), strides=(12,4), dtype=int) كما يمكنك استخدام طرق عادية لتشكيل المطلوب باستخدام مفهوم ال broadcasting: def broadcasting_app(a, L, S ): nrows = ((a.size-L)//S)+1 x=a[S*np.arange(nrows)[:,None] + np.arange(L)] return x
    1 نقطة
  26. السبب هو تحويل النموذج من keras.applications module إلى keras.applications.vgg16، يمكنك أيضاً إستدعاء النموذج مباشرة دون الحاجة لتعريفه بداية البرنامج كالتالي: VGG16_MODEL=tf.keras.applications.VGG16(input_shape=IMG_SHAPE, include_top=False) بذلك يمكنك تمرير شكل الصور للتدريب بإلاضافة لتحديد ما إذا كنت تريد ضبط خاص لأخر طبقة layer في النموذج حسب عدد الأصناف في برنامجك. وذلك بإستخدام include_top، إن كانت خاظئة فكل النموذج يتم إستدعائه ما عدا طبقة التصنيف الأخيرة.
    1 نقطة
  27. ما هو سبب إختيار المصفوفة [4, 5, 6 ,7, 8] ضمن المصفوفات الفرعية؟ العناصر 4و5و7و8 مشتركة بين المصفوفتين الأخريتين،، و لتجد المصفوفات الفرعية المكونة للمصفوفة الرئيسية بإستخدام reshape تحتاج أن يكون عدد الأعمدة * عدد الصفوف = طول المصفوفة و بهذا ستولد المصفوفات المكونة للمصفوفة الرئيسية بدون تكرار في القيم، أما إن كان عدد الأعمدة * عدد الصفوف لا يساوي طول المصفوفة فالدالة ستولد خطأ. ما يمكنني إقتراحه في هذه الحالة هو إستخدام دالة permutation بتحديد القوائم ذات الطول 5 (عدد الأعمدة). import itertools import numpy as np x = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]) arr = np.array(list(itertools.permutations(set(x),5))) final = [] semifinal = [] for i in arr: semifinal.append(np.array(sorted(i))) final = np.unique(np.array(semifinal),axis=0) بعد إيجاد كل التباديل الممكنة، نقوم بترتيب المصفوفات الداخلية ليسهل عملية إختيار المصفوفات غير المكررة بإستخدام الدالة unique بذلك نكون قد حصلنا على جميع المصفوفات ذات الطول 5 و التي يمكن إيجادها من المصفوفة x.
    1 نقطة
  28. الطريقة الأولى والتي تعتبر أكثر كفائة بإستخدام NumPy strides كالآتي def strided_app(a, L, S ): nrows = ((a.size-L)//S)+1 n = a.strides[0] return np.lib.stride_tricks.as_strided(a, shape=(nrows,L), strides=(S*n,n)) والطريقة الأخرى عبر إستخدام broadcasting def broadcasting_app(a, L, S ): nrows = ((a.size-L)//S)+1 return a[S*np.arange(nrows)[:,None] + np.arange(L)]
    1 نقطة
  29. ملاحظات. إن كان الاستعلام أكثر من سطر نحيط شيفرة SQL بثلاث علامات اقتباس فردية ''' sql ''' corser.excute(''' sql query1 sql query1 ''') إن كان الاستعلام يعدل على قاعدة البيانات insert - delete - update عليك تثبيت التعديلات بعد عمل الاستعلام: db.commit() أي بعد عبارة corser.excute نقوم ب commit
    1 نقطة
  30. يمكنك فعل ذلك عن طريق Broadcasting ويمكنك فعل ذلك كالتالي def broadcasting_app(a, L, S ): numOfRows = ((a.size-L)//S)+1 return a[S*np.arange(numOfRows)[:,None] + np.arange(L)] حيث ان المعامل a هو المصفوفة التي سوف تمررها والمعامل L هو عدد الأعمدة والمعامل S هو عدد الأسطر
    1 نقطة
  31. يمكن استخدام الدالة reshape لإعادة تشكيل المصفوفة: تحجيم المصفوفة للحجم المطلوب، ثم تغيير الأبعاد import numpy as np x = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]) n = 3 m = 5 x = np.resize(x, n*m) x = x.reshape(n, m) print(x) حيث يمثل الوسيط الأول عدد الأسطر و الثاني عدد الأعمدة وهو المطلوب
    1 نقطة
  32. لنحاول تبسيط المشكلة، نلاحظ أن لكل سطر بداية و نهاية أي مثل مجال start - end حيث أن بداية كل مجال تزيد ب1 عن سابقه والنهائية تزيد ب2، يمكن عمل عدادين بشكل متزايد ضمن حلقة و كل مرة نطبع المجال بيتنهما.. // تهئية int start = 1; int finish = 1; // شرط التوقف اختياري while (start <= 4) { // طباعة المجال for (int i=start; i<= finish; i++) { cout << i; } // سطر جديد cout << endl; // زيادة العدادت start += 1; finish += 2; }
    1 نقطة
  33. #include <iostream> using namespace std; int main() { for(int i=1; i<=4; i++){ for (int j = i; j <= i+i-1; j++) { cout<<j; } cout<<endl; } }
    1 نقطة
  34. المشكلة تحدث عند محاولة إدخال خرج طبقة ال RNN الأولى إلى طبقة RNN الثانية. إليك مايلي: طبقات ال RNN بأنواعها المختلفة تعمل في وضعين: الأول يرد كامل الخرج كسلسلة متتابعة من ال timestep وبالتالي يكون الخرج هو مصفوفة tensor ثلاثية الأبعاد (batch_size, timesteps, output_features). أما الوضع الثاني فيرد فقط آخر خرج لكل سلسلة إدخال، وبالتالي يكون الخرج ثنائي الأبعاد (batch_size, output_features). ويتم التحكم بنمط الإخراج باستخدام الوسيط return_sequences الذي يأخذ قيمة بوليانية، في حالة True فيكون الخرج هو الوضع الأول وفي حالة False يكون الوضع الثاني، وافتراضياً يكون False ، أي الوضع الثاني. وكما نعلم أن طبقات الRNN تحتاج كدخل (batch_size, sequence_length, features) وأنت تقوم بتكديس طبقتي RNN وبالتالي خرج الأولى سيكون دخل الثانية لذلك يجب أن يكون خرج الأولى 3D أي يجب أن يكون الوضع الأول. لكن أنت تشغل الوضع الأول وبالتالي سيعطي خطأ، لأنها تحتاج 3D وتعتطيها 2D، لذا لحل المشكلة يجب أن نضبط return_sequences على True. from keras.layers import Dense,Embedding,SimpleRNN from keras.datasets import imdb from keras.preprocessing import sequence from keras.models import Sequential max_features = 1000 maxlen = 20 batch_size = 64 print('Loading data...') (input_train, y_train), (input_test, y_test) = imdb.load_data( num_words=max_features) print(len(input_train), 'train sequences') print(len(input_test), 'test sequences') print('Pad sequences (samples x time)') input_train = sequence.pad_sequences(input_train, maxlen=maxlen) input_test = sequence.pad_sequences(input_test, maxlen=maxlen) print('input_train shape:', input_train.shape) model = Sequential() model.add(Embedding(max_features, 16)) model.add(SimpleRNN(16, return_sequences=True)) model.add(SimpleRNN(16)) model.add(Dense(1, activation='sigmoid')) model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['acc']) history = model.fit(input_train, y_train, epochs=2, batch_size=128, validation_split=0.2) ''' Loading data... 25000 train sequences 25000 test sequences Pad sequences (samples x time) input_train shape: (25000, 20) Epoch 1/2 157/157 [==============================] - 4s 14ms/step - loss: 0.6751 - acc: 0.5501 - val_loss: 0.5692 - val_acc: 0.7026 Epoch 2/2 157/157 [==============================] - 2s 10ms/step - loss: 0.5229 - acc: 0.7427 - val_loss: 0.5801 - val_acc: 0.6912 '''
    1 نقطة
  35. بما أن الموقع تم إنشاؤه لحماية حقوق كل من البائع والمشتري، من الطبيعي أخذ إجراءات لتجنب أي عملية احتيال أو خداع .. يوجد الكثير من المشترين الذين لا يمكلون أدنى فكرة عمّا يقومون بشرائه، فقط يعلمون أنهم بحاجة إلى هذه الخدمة ويضعون كامل ثقتهم في البائع. تخيل لو أنك مشتري طلبت من أحد البائعين إنشاء موقع الكتروني خاص بك .. ثم قمت بتفقده وأعجبك التصميم والموقع بشكل عام واستلمت المشروع .. لكن بعد عشرة أيام واستخدام الزوار المتكرر له، تتلقى شكوى بعدم عمل قسم كامل في الموقع، من الطبيعي أن تتكلم مع البائع لكي يقوم بإصلاح المشكلة، لكن الطامة الكبرى هي رفض البائع أن يقوم بإصلاح ما قصّر فيه! بالطبع حقوقك محمية تحت سياسة موقع حسوب، ستتواصل مع المنصة وسيقومون بتجميد أرباحه حتى يقوم بإصلاح المشكلة ورضاك عن الإصلاح .. هذا هو الهدف من الإبقاء على الأرباح 14 يوم .. ضمان حقوقك كمشتري عزيزي.
    1 نقطة
  36. classmethod@ تجعل التابع تابع صنف أي"class method" وبالتالي تمكننا من الوصول إلى الصنف الذي تم فيه تعريف التابع. التابع الذي يتم تعريفه على أنه تابع صف، يستقبل كمعامل أول الصف الخاص به ويعبر عن ذلك ب cls، أي بشكل مشابه لما كنا نفعله في التوابع العادية حينما كنا نمرر للتابع العادي نسخة instance أي (self). إذن هي توابع مرتبطة بالصف وليس بال object. التوابع المعرفة بهذه الطريقة يكون لديها سماحية "access to the state of the class" أي النفاذ إلى حالة الصف (نحن مررنا لها cls أي أنها تشير إلى الصف نفسه وليس نسخة منه) ويمكنها التعديل عليها أيضاً وهذا التعديل ينتقل إلى كل ال object. Static Method@: وهي مشابهة لتلك الموجودة في Java أو C‎+‎+‎. الدالة التي نعرفها على أنها ساكة يمكننا الوصول لها من الكلاس نفسه (أي يمكن الوصول لها مباشرة من خلال اسم الكلاس). أو من خلال ال object المأخوذة من الكلاس. عندما يتم إستدعاء التوابع الساكنة من كائن من هذا الكلاس, فإنه لا تتم معاملته بشكل خاص بالنسبة للكائن بل سيبقى كأنك تستدعيها بشكل مباشر من الكلاس. وهذا هو السبب في كونها لاتقبل الوسيط self. التوابع من هذا النوع لاتملك السماحية "access to the state of the class" أي لايمكنها التعديل على حالة الصف. أي أنها لاتعرف شيئ عن حالة الصف class state ولاتستطيع تعديلها أما classmethod يمكنها ذلك. بشكل عام تستخدم class method كنوع من ال factory method (دوال تعيد object (بشكل مشابه لل constructor ) من أجل استخدام معين أنت تريده) أما ال static فتستخدم كأداة للقيام بعمليات معينة. إذا لم يكن لديك معرفة عن factory method يمكنك أن تجدها في هذا المقال: https://wiki.hsoub.com/Design_Patterns/factory_method from datetime import date class Person: def __init__(self, name, age): self.name = name self.age = age # دالة ساكنة لاختبار فيما إذا كان مسناً أم لا @staticmethod def old(age): print("old") return age > 55 #person كلاس ميثود لإنشاء كائن من الصف @classmethod def create(cls, name, year): return cls(name, date.today().year - year) print (Person.old(22)) # True obj=Person.create('km',24) print(obj) # <__main__.Person object at 0x000001C7DC405708> obj.age # 1997
    1 نقطة
  37. يمكنك تعريف أي class بالطريقة التالية، حيث نكتب أولاً الكلمة class ثم اسم الكلاس ثم : ثم نعرف بداخله التابع __init__ الذي يمثل الباني للكلاس، ثم يمكننا تعريف أي تابع آخر نريده class Person: def __init__(self, name,age): self.name = name self.age = age def get_age(self): return self.age p = Person("Ali", 24) print(p.name) print(p.age) print(p.get_age())
    1 نقطة
  38. يمكنك ذلك بعدة طرق أسهلها استخدام الدالة join كالتالي: def convert(lst): return (" ".join(lst)) # اختبار التابع l = ['Hsoub', 'Mostaql'] print(convert(l)) # Output: Hsoub Mostaql حيث " " هي التي ستفصل بين الكلمات ويمكنك تغييرها. #تعديل: طريقة أخرى إذا أحببت بدون توابع جاهزة: # تابع التحويل def convert(lst): string=lst[0] # نضع أول كلمة من القائمة في السلسة for word in lst[1:]: # نضيف باقي الكلمات إلى السلسلة string +=' '+ word return string # اختبار التابع l = ['Hsoub', 'Mostaql'] print(convert(l))
    1 نقطة
  39. يمكن ذلك باستخدام مكتبة ctime في سي بلس بلس حيث يوجد الداله time تعطي الوقت بعد أعطائها القيمه 0 وبعدها نقول بتحويل الزمن لانه يكون بالثواني إلى يوم والشهر والدقائق والسنه باستخدام الداله ctime #include <iostream> #include <ctime> using namespace std; int main() { // الوقت الحالي time_t now = time(0); // تحويل الوقت الحالي إلى سترنغ char* dt = ctime(&now); cout << "The local date and time is: " << dt << endl; }
    1 نقطة
×
×
  • أضف...