-
المساهمات
14237 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
380
آخر يوم ربح فيه Mustafa Suleiman هو فبراير 4
Mustafa Suleiman حاصل على أكثر محتوى إعجابًا!
آخر الزوار
لوحة آخر الزوار معطلة ولن تظهر للأعضاء
إنجازات Mustafa Suleiman
-
لنبدأ بالترتيب من حيث البنية البسيطة إلى التعقيد والميزات المتقدمة. في بداية تعلمك لتطوير الويب، تتعلم اللغات الأساسية المبني عليها جميع التقنيات الأخرى، وهم HTML , CSS, JS. ومن خلالها تقوم ببناء مواقع ويب ثابتة Static أي محتواها ثابت لا يتغير، مثلاً صفحة هبوط لمنتج ما سيظل محتواها ثابت ولن يتغير، وذلك يسمى موقع إلكتروني. أما تطبيقات الويب هي أكثر ديناميكية وتفاعلية من المواقع الإلكترونية، فالغرض الرئيسي لتطبيقات الويب هو تمكين المستخدم من القيام بمهام محددة أو تحقيق أهداف معينة من خلال الإنترنت، وهي أشبه بالبرامج الحاسوبية التقليدية ولكنها تعمل داخل متصفح الويب. بالتالي المواقع الثابتة لا يتم تغيير محتواها، بينما الديناميكية يتغير محتواها، من خلال إضافة واجهة خلفية لذلك الموقع ويتفاعل المستخدم مع الموقع ويغير من محتواه، مثلاً هنا أنت قمت بإضافة سؤال وبذلك محتوى الموقع تغير وبذلك يصبح موقع ديناميكي. وللعلم مصطلح موقع إلكتروني هو مصطلح عام يشمل كلا النوعين (الثابت والديناميكي)، ولكن بخصوص المقارنة بين موقع إلكتروني مقابل تطبيق ويب، فإذن المواقع الإلكترونية هي النوع الثابت أو المواقع الديناميكية البسيطة التي تركز على عرض المحتوى فقط بشكل أساسي. بالتالي المواقع الديناميكية وتطبيقات الويب يتم بنائها من خلال إطار جانغو أو لارافل أو Flask، الفرق يعتمد على مدى التعقيد ووظائف وغرض الموقع. لكن ذلك ليس كافٍِ بالنسبة للواجهة الأمامية لو أردت المزيد من التفاعلية والسرعة وتجنب إعادة تحميل الصفحة في كل طلب يقوم به المستخدم (إرسال البيانات للواجهة الخلفية)، علينا استخدام أحد إطارات الواجهة الأمامية مثل React أو Vue.js.
-
ستجد أسفل فيديو الدرس في نهاية الصفحة صندوق تعليقات كما هنا، أرجو طرح الأسئلة أسفل الدرس وليس هنا في قسم أسئلة البرمجة حيث نطرح الأسئلة العامة الغير متعلقة بمحتوى الدورة أو الدرس، وذلك لمساعدتك بشكل أفضل.
-
أول خطوة هي بناء معجم من بيانات التدريب، أي قم بتحليل بيانات النصوص، واستخرج جميع الكلمات الفريدة، ويوجد أدوات مثل collections.Counter في Python لحساب تردد الكلمات وتحديد الكلمات الفريدة. ثم استبعاد الكلمات النادرة من المعجم، فالكلمات التي تظهر عدد قليل جدًا من المرات ليست مفيدة للتدريب وتزيد من حجم المعجم بلا داعٍ. وnum_embeddings يعني عدد الـ Embeddings حدده بحساب عدد العناصر الفريدة التي تريد تمثيلها، مثلاً الكلمات الفريدة في معجمك أو المستخدمين أو العناصر، ذلك هو حجم قاموسك من الـ Embeddings. والـ embedding_dim هي أبعاد الـ Embedding حددها بالتجربة، ابدأ بقيمة مستخدمة بكثرة مثل 100-300، وجرّب قيمًا مختلفة ولاحظ كيف يؤثر ذلك على أداء النموذج، فالأبعاد الأكبر أفضل للمهام المعقدة والمعاجم الكبيرة، لكنها تستهلك موارد أكثر. وفي حال تستخدم Embeddings مدربة مسبقًا مثل Word2Vec أو GloVe أو FastText، فهي تأتي بأبعاد محددة، حيث GloVe بأبعاد 50، 100، 200، أو 300. بالتالي لو قررت استخدام تلك الـ Embeddings المدربة مسبقًا، فإن embedding_dim يكون بالفعل محددًا مسبقًا.
-
للتوضيح ببساطة، الـ Embeddings طريقة لتمثيل الكائنات مثل الكلمات، أو العناصر، إلخ، كمتجهات ذات أبعاد منخفضة في فضاء رياضي، الفكرة أننا نريد تمثيل الكائنات بطريقة تصبح بها الكائنات المتشابهة قريبة من بعضها في ذلك الفضاء، والكائنات المختلفة تكون بعيدة. PyTorch توفر طبقة جاهزة torch.nn.Embedding لتنفيذ الـ Embeddings بسهولة. import torch.nn as nn import torch بعد ذلك، إنشاء طبقة الـ Embedding باستخدام الدالة البانية nn.Embedding()، والتي تتطلب مُدخلين رئيسيين: num_embeddings: عدد الـ Embeddings المراد إنشاؤها يمثل حجم المعجم لديك بمعنى عدد الكلمات الفريدة أو عدد العناصر الفريدة. embedding_dim: أبعاد كل Embedding، أي طول المتجه الذي سيمثل كل كائن. للتبسيط لو لديك معجم يحتوي على 10000 كلمة وترغب في تمثيل كل كلمة بمتجه ذي 100 بُعد، نكتب: embedding_layer = nn.Embedding(num_embeddings=10000, embedding_dim=100) ولاستخدامها يجب تمرير مؤشرات indices الكائنات التي تريد الحصول على الـ Embedding الخاصة بها، وتلك المؤشرات عبارة عن موتر Tensor من الأعداد الصحيحة. indices = torch.tensor([5, 100, 500]) embeddings = embedding_layer(indices) print(embeddings.shape) print(embeddings) من الأفضل استخدام Pre-trained Embeddings وهي مدربة مسبقًا مثل Word2Vec أو GloVe أو FastText، فهي تعلمت على كميات هائلة من النصوص، وتعتبر نقطة بداية جيدة للتدريب، خاصة لو كمية البيانات المتوفرة لديك محدودة.
- 4 اجابة
-
- 1
-
-
لا يوجد إصدار رسمي لـ DeepHit في TensorFlow من قِبل المصدر الرسمي، لكن يوجد محاولات من المطورين لإعادة تنفيذ النموذج باستخدام TensorFlow. ستجد تطبيق لذلك هنا: https://github.com/Actis92/DeepHitTF2 https://github.com/carlr67/deephitplus ومن الأفضل استخدام مكتبات مساعدة مثل tensorflow-survival أو tf-keras لتبسيط تنفيذ نماذج Survival Analysis. https://github.com/tensorflow/addons/tree/master/tensorflow_addons/losses
- 2 اجابة
-
- 1
-
-
من الأفضل إرفاق مجلد المشروع بشكل كامل لتسهيل الأمر
-
هل تكوين ملف config/filesystems.php هو كالتالي؟ 'disks' => [ 'public' => [ 'driver' => 'local', 'root' => storage_path('app/public'), 'url' => env('APP_URL').'/storage', 'visibility' => 'public', ], ], وتأكدي من تنفيذ أمر التهجير: php artisan vendor:publish --provider="Spatie\MediaLibrary\MediaLibraryServiceProvider" --tag="migrations" ثم: php artisan migrate أيضًأ ملف config/media-library.php في حال لم يكن موجوداً، عليكِ نشره باستخدام الأمر: php artisan vendor:publish --provider="Spatie\MediaLibrary\MediaLibraryServiceProvider" --tag="config" ثم تعديل نموذج Category كالتالي: namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Spatie\MediaLibrary\HasMedia; use Spatie\MediaLibrary\InteractsWithMedia; use Spatie\MediaLibrary\MediaCollections\Models\Media; class Category extends Model implements HasMedia { use HasFactory, InteractsWithMedia; protected $fillable = ['name', 'description', 'photo']; public function registerMediaCollections(): void { $this->addMediaCollection('categories') ->singleFile() ->useDisk('public') // تحديد القرص المستخدم ->storedIn('categories'); // تحديد المجلد داخل القرص } public function registerMediaConversions(Media $media = null): void { $this->addMediaConversion('webp') ->format('webp') ->quality(90) ->performOnCollections('categories'); $this->addMediaConversion('avif') ->format('avif') ->quality(90) ->performOnCollections('categories'); } public function subCategories() { return $this->hasMany(SubCategory::class); } } ثم تعديل دالة store في الكونترولر في الجزء الخاص بـ $request->hasFile: if ($request->hasFile('photo')) { $category->addMediaFromRequest('photo') ->toMediaCollection('categories'); } وتنفيذ الأمر التالي لإنشاء الرابط الرمزي للتخزين: php artisan storage:link ثم حذف الملفات والإعدادات المؤقتة: php artisan optimize:clear ومن المفترض أن يتم حفظ الصور في المسار storage/app/public/categories.
-
سيؤدي إلى مشاكل كبيرة مع القيم الفارغة NULL/NaN في حال لم يتم التعامل معها بحذر، لديك استخدمت OrdinalEncoder الذي يحوِّل كل عمود فئوي إلى عمود واحد عددي مع الحفاظ على هيكل الأعمدة، وذلك يسمح باستخدام نفس الـ mask لاستعادة القيم الفارغة بعد التشفير. لكن من خلال One-Hot Encoding كـ OneHotEncoder من sklearn، يتم إنشاء أعمدة جديدة لكل فئة، الأمر الذي يغير هيكل البيانات بالكامل، ويجعل تطبيق الـ mask الأصلي الذي يعتمد على عدد الأعمدة القديمة مستحيلًا. بعد التشفير بـ One-Hot، ستنشئ أعمدة جديدة لكل فئة كعمود لون به ٣ فئات سيصبح ٣ أعمدة. والـ mask الأصلي يعتمد على عدد الأعمدة القديمة، ولن يتطابق مع عدد الأعمدة الجديدة، ويؤدي إلى أخطاء. وحتى لو تم تعبئة القيم الفارغة بـ missing قبل التشفير، فإن One-Hot سينشئ عمودًا جديدًا لتلك القيمة، وعند محاولة استعادة القيم الفارغة باستخدام encoded_series[mask] = pd.NA، ستكون العملية غير منطقية لأن الأعمدة الجديدة لا تتوافق مع الـ mask. بالتالي عليك التعامل مع القيم الفارغة كفئة مستقلة، بمعنى املأ القيم الفارغة بـ missing قبل التشفير كما تفعل حاليًا. ثم استخدم OneHotEncoder مع تحديد المعلمة handle_unknown='ignore' وستعتبر missing فئة عادية، ولن تحتاج إلى استعادة القيم الفارغة بعد التشفير. from sklearn.preprocessing import OneHotEncoder def onehotencoder_data(data): categorical_cols = data.select_dtypes(include=['object']).columns temp_data = data[categorical_cols].fillna('missing') ohe = OneHotEncoder(handle_unknown='ignore', sparse_output=False) encoded_data = ohe.fit_transform(temp_data) new_columns = ohe.get_feature_names_out(categorical_cols) encoded_df = pd.DataFrame(encoded_data, columns=new_columns, dtype='Int64') data = data.drop(columns=categorical_cols) data = pd.concat([data, encoded_df], axis=1) return data ثم احذف الصفوف التي تحتوي على قيم فارغة قبل التشفير، وذلك ربما يؤدي إلى فقدان بيانات مهمة، فتعامل بحذر، بمعنى القيم الفارغة يجب أن تُعالَج بشكل منفصل حسب البيانات، أقصد هل تعكس missing معلومة مهمة؟ ففي بعض البيانات هي مهمة وتمثل معلومة.
- 3 اجابة
-
- 1
-
-
ستجد أسفل فيديو الدرس في نهاية الصفحة صندوق تعليقات كما هنا، أرجو طرح الأسئلة أسفل الدرس وليس هنا في قسم أسئلة البرمجة حيث نطرح الأسئلة العامة الغير متعلقة بمحتوى الدورة أو الدرس، وذلك لمساعدتك بشكل أفضل.
-
ستحتاج إلى معالجة البيانات الفئوية الاسمة مثل النوع الأول من السكر، من خلالOne-Hot Encoding. أو التمثيلات المضمنة Embeddings أفضل للبيانات الفئوية الاسمية أو الترتيبية في حال عدد الفئات كبيرًا، أو يوجد علاقات معقدة بين الفئات، أو في نماذج تسلسلية.
- 5 اجابة
-
- 1
-
-
لا يٌشترط ذلك، لكن مُستحسن، خاصةً عند التعامل مع النماذج التي تتطلب حسابات رياضية دقيقة كالشبكات العصبونية. ففي معظم عمليات الشبكات العصبونية كالضرب المصفوفي، الاشتقاق التلقائي، مُصمَّمة للعمل مع أعداد float32 أو float16، حيث float16 يُقلل استخدام الذاكرة ويُسرّع الحسابات على GPUs الحديثة كتقنية Tensor Cores في بطاقات NVIDIA، لكنه يُؤثر على الدقّة. والنماذج تتعلم من خلال تحديث الأوزان باستخدام التدرجات gradients، والتي تكون من نوع float. PyTorch يدعم أنواعًا عديدة مثل int، long، double، إلخ، لكن لو أدخلت بيانات من نوع int إلى نموذج يتوقع float، ستحصل على خطأ: RuntimeError: expected scalar type Float but found Long بالتالي عند تحميل البيانات، حوّلها مباشرةً باستخدام .float(): import torch data = torch.tensor([1, 2, 3], dtype=torch.float32) وفي حال البيانات من نوع int في مصفوفة NumPy: import numpy as np numpy_array = np.array([1, 2, 3], dtype=np.float32) tensor = torch.from_numpy(numpy_array)
- 5 اجابة
-
- 1
-
-
نعتذر لك عبدالله، أرجو إبعاد فكرة أنه تم سرقة أموالك تمامًا، الأمر ليس كذلك مُطلقًا، سيتم الرد عليك وحل المشكلة فلا تقلق بخصوص ذلك، وسأقوم بتفقد المشكلة الخاصة بك. مسألة التأخر في الرد أحيانًا تحدث بسبب وجود ضغط على مركز المساعدة، لذا الأمر طبيعي ولا داعي للقلق.
- 1 جواب
-
- 1
-
-
يعتبر حل نعم، لكن المشكلة باقية، فملف manifest.json به مسارات ملفات css و js ستجده كالتالي: { "resources/css/app.css": { "file": "assets/app-96b1d38a.css", "isEntry": true, "src": "resources/css/app.css" }, "resources/js/app.js": { "file": "assets/app-02dd6d25.js", "isEntry": true, "src": "resources/js/app.js" } } قم بوضع كل محتوى مجلد مشروع في public_html ثم وضع ملف htaccess. التالي في نفس المكان وتعديل دومين الموقع به لتحويل كافة الطلبات إلى مجلد public: <IfModule mod_rewrite.c> RewriteEngine on # Redirect www to non-www and enforce HTTPS RewriteCond %{HTTP_HOST} ^www\. [NC,OR] RewriteCond %{HTTPS} off RewriteRule ^ https://اسم موقعك هنا.com%{REQUEST_URI} [L,R=301,NE] # Handle Laravel routing RewriteCond %{REQUEST_URI} !^public RewriteRule ^(.*)$ public/$1 [L] # Handle Laravel routing for non-existing directories and files RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] </IfModule> # Disable Directory listing Options -Indexes # Block files which need to be hidden <Files ~ "\.(env|json|config.js|md|gitignore|gitattributes|lock|example)$"> Order allow,deny Deny from all </Files> # Block specific files <Files ~ "(artisan)$"> Order allow,deny Deny from all </Files> .htaccess
-
الأفضل مكتبة pycox وهي مكتبة متخصصة تحتوي على تنفيذ جاهز لـ DeepHit مع خطوات واضحة، وتعتمد على PyTorch والذي يوفر ميزات مثل الحساب الديناميكي Dynamic Computation Graph، ويُسهّل تصحيح الأخطاء وتعديل النموذج بشكل تفاعلي. ستجد مثال كامل لطريقة الاستخدام هنا: DeepHit for Single Event
- 2 اجابة
-
- 1
-
-
تقصد ملفات PDF؟ لا يوجد مُلخصات لمحتوى الدروس بالأكاديمية المتوفر فقط هي الملفات الخاصة بكل مسار في حال لزم ذلك، وأيضًا رابط لمستودع المشروع به الكود النهائي للمشروع وذلك في المسارات الخاصة بالمشاريع العملية. ،وتستطيع الإعتماد على موسوعة حسوب وبها شرح لأغلب اللغات والمكتبات: https://wiki.hsoub.com/الصفحة_الرئيسية وإذا أردت ملخص للغة أو إطار معين أو مكتبة تستطيع البحث عن cheat sheet ثم اسم اللغة مثلاُ وليكن js إذا ستبحث عن cheat sheet for js وستجد ملخصات مثل التالي: https://htmlcheatsheet.com/js/ http://cheatsheets.shecodes.io/javascript بالنسبة لمحتوى الدورة فستجده مذكور في وصف الدورة، في الصفحة الخاصة بها، مثلاً دورة علوم الحاسوب: https://academy.hsoub.com/learn/computer-science/