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

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

  1. Ali Ahmed55

    Ali Ahmed55

    الأعضاء


    • نقاط

      12

    • المساهمات

      1865


  2. محمد عاطف17

    محمد عاطف17

    الأعضاء


    • نقاط

      9

    • المساهمات

      5583


  3. Razan Razan3

    Razan Razan3

    الأعضاء


    • نقاط

      6

    • المساهمات

      56


  4. Mustafa Suleiman

    Mustafa Suleiman

    الأعضاء


    • نقاط

      3

    • المساهمات

      15380


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

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

  1. السلام عليكم ورحمه الله وبركاته انا وصلت ل حد كورس الرؤية الحاسوبية هل بقدر ادرس حاليا كورس التعلم العميق وبعدين ارجع للترتيب؟ ولا لا لانو كلو معتمد ع بعضو لانو انا هاد الفصل بالجامعة منزلة مادة تعلم عميق ف بدي استفيد من كورس التعلم العميق
    3 نقاط
  2. السلام عليكم هل المشكلة في الصياغة أم هنالك ملف ناقص، لأن جميع الملفات تبدو مكتملة في ال directory Fatal error: Uncaught Error: Call to undefined function Illuminate\Filesystem\join_paths() in /home/vol17_1/infinityfree.com/if0_38415802/htdocs/vendor/laravel/framework/src/Illuminate/Foundation/Application.php:595 Stack trace: #0 /home/vol17_1/infinityfree.com/if0_38415802/htdocs/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(393): Illuminate\Foundation\Application->joinPaths('$basePath', 'app') #1 /home/vol17_1/infinityfree.com/if0_38415802/htdocs/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(367): Illuminate\Foundation\Application->basePath('app') #2 /home/vol17_1/infinityfree.com/if0_38415802/htdocs/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(338): Illuminate\Foundation\Application->path() #3 /home/vol17_1/infinityfree.com/if0_38415802/htdocs/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(326): Illuminate\Foundation\Application->bindPathsInContainer() #4 /home/vol17_1/infinityfree.com/if0_38415802/htdocs/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(201): Illuminate\Foundation\Application->setBasePath('$basePath') #5 /home/vol17_1/infinityfree.com/if0_38415802/htdocs/bootstrap/app.php(14): Illuminate\Foundation\Application->__construct('/home/vol17_1/i...') #6 /home/vol17_1/infinityfree.com/if0_38415802/htdocs/public/index.php(38): require_once('/home/vol17_1/i...') #7 {main} thrown in /home/vol17_1/infinityfree.com/if0_38415802/htdocs/vendor/laravel/framework/src/Illuminate/Foundation/Application.php on line 595
    3 نقاط
  3. السلام عليكم هو انا ازي اقدر اي انفيذ الPriority Queues في Python ؟ وليه تنفذ هياكل البيانات اسهل في باثيون عني اي لغه برمجه تاني ؟
    3 نقاط
  4. السلام عليكم اواجه مشكلة في حل مسألة "Zero array transformation" من موقع "LeetCode" في الحقيقة انا اعددت الخوارزمية و طبقت الحل و الننائج كانت مطابقة و صحيحة , ولكن عند تمرير الكود لمحرر الأكواد الخاص بموقع "LeetCode" , فإنه يظهر لي خطأ من نوع "Time Limit Exceeded". - كيف استطيع تخطي هذه المشكلة ؟ - هل الكود الخاص بي جيد ووصلت الى الحل ؟ رابط المسألة للمراجعة : https://leetcode.com/problems/zero-array-transformation-ii/description/ مع الكود الخاص بي مرفقا في الملف. test.py
    2 نقاط
  5. السلام عليكم هو اي التحذير ده ؟
    2 نقاط
  6. الا والله ده الكود بتاعي import matplotlib.pyplot as plt import seaborn as sns # Assuming you have a DataFrame called 'data' # Set the figure size for better visualization plt.figure(figsize=(12, 6)) # Plotting the distribution of 'x_1' with Kernel Density Estimate (KDE) plt.subplot(1, 3, 1) sns.histplot(data['x_1'], kde=True) plt.title('Distribution of x_1') # Plotting the distribution of 'y_1' with KDE plt.subplot(1, 3, 2) sns.histplot(data['y_1'], kde=True) plt.title('Distribution of y_1') # Plotting the distribution of 'z_1' with KDE plt.subplot(1, 3, 3) sns.histplot(data['z_1'], kde=True) plt.title('Distribution of z_1') # Adjusts the layout to prevent overlapping of plots plt.tight_layout() # Display all plots plt.show()
    2 نقاط
  7. السلام عليكم دي المساله You are given two arrays of integers, fruits and baskets, each of length n, where fruits[i] represents the quantity of the ith type of fruit, and baskets[j] represents the capacity of the jth basket. From left to right, place the fruits according to these rules: Each fruit type must be placed in the leftmost available basket with a capacity greater than or equal to the quantity of that fruit type. Each basket can hold only one type of fruit. If a fruit type cannot be placed in any basket, it remains unplaced. Return the number of fruit types that remain unplaced after all possible allocations are made. ودي الكود بتاعي فا انا عاوز اعرف اي المشكله في الكود وهل فيه افضل من كده class Solution(object): def numOfUnplacedFruits(self, fruits, baskets): """ :type fruits: List[int] :type baskets: List[int] :rtype: int """ fruits.sort() baskets.sort() f_index = 0 b_index = 0 while f_index < len(fruits) and b_index < len(baskets): if fruits[f_index] <= baskets[b_index]: f_index += 1 b_index += 1 return len(fruits) - f_index solution = Solution() print(solution.numOfUnplacedFruits([4, 2, 5], [3, 5, 4])) print(solution.numOfUnplacedFruits([3, 6, 1], [6, 4, 7]))
    2 نقاط
  8. السلام عليكم ورحمه الله وبركاته بعد انتهائي من دورة الذكاء الاصطناعي شو ممكن اشتغل(مجالات العمل) ؟ ولو بدي اتخصص ب مجال الروبوتات كيف ممكن تفيدني هذه الدورة وشو ممكن اشتغل (مجالات العمل)
    2 نقاط
  9. السلام عليكم هو انا اقدر عادي ان اعمل نموذج التعرف علي الوجه من علي Kaggle Notebook واقدر الشغل الكامير وكده والا اي ؟
    2 نقاط
  10. لدي شهادتين من حاسوب (و لاكني لم اعمل) 23 سنة انا متفرغ
    2 نقاط
  11. كيف استطيع الوصول الى المسارات الاساسية من الدوارات الاخرى على الاكاديمة ...؟
    2 نقاط
  12. نعم صحيح تعديل القيم من الممكن أن يؤثر على البيانات ولكنك انت بالفعل قد قمت بتفعيل هذا الخيار لهذا يحدث لك هذا التحذير . هل تستخدم اى من السطرين التاليين في الكود لديك ؟ : pd.set_option('use_inf_as_na', True) df.fillna(value=np.nan, use_inf_as_na=True) إذا كنت تستخدم إحدى هذين الأمرين في الكود فهذا هو سبب التحذير و الكود الذي أرفقته لك يفعل نفس الشئ السابق أى أنني لم أضيف أى شئ جديد لديك في الكود . أى أنه في الكود لديك تم تفعيل خيار تحويل القيم اللانهائية إلى NaN . إذا لم ترد ذلك يجب عليك البحث عن أى من السطرين السابقين وخذفهم.
    1 نقطة
  13. ايوه بس ده مش كده هياثر علي البيانات ؟
    1 نقطة
  14. وعليكم السلام ورحمة الله وبركاته. هذا التخذير يظهر لك بسبب استخدامك لخيار use_inf_as_na في مكتبة pandas وهذا الخيار يستخدم لتعيين القيم اللانهائية (inf) كقيم مفقودة (NaN).و هذا الخيار أصبح قديم وسيتم إزالته في الإصدارات المستقبلية من pandas. لحل هذه المشكلة يمكنك تحويل القيم اللانهائية إلى NaN بنفسك قبل إجراء أى عمليات عليها. df.replace([np.inf, -np.inf], np.nan, inplace=True)
    1 نقطة
  15. وعليكم السلام ورحمة الله وبركاته. نعم لابئس يمكنكِ مذاكرة مسار "التعلم العميق Deep Learning" مباشرة بعد مسار "تطبيقات عملية على نماذج الرؤية الحاسوبية" . ولكن يجب الإنتباه أن التعلم العميق هو أحد فروع تعلم الآلة ولذلك من المفيد أن يكون لديكِ خلفية في تعلم الآلة قبل التوجه نحو التعلم العميق. لكن ليس من الضروري أن يكون لديكِ خبرة كبيرة في تعلم الآلة قبل البدء في التعلم العميق. ويمكنكِ قراءة الإجابة التالية لمزيد من التفاصيل حول الفرق بين تعلم الآلة والتعلم العميق متطلبات كل منهما :
    1 نقطة
  16. اسم المجال الذي تقصدينه هو robotics engineering والأمر ليس بتلك البساطة، برمجة عقل الروبوت تعني التركيز على الجزء البرمجي الذي يتحكم في اتخاذ القرارات، التعلم، التفاعل مع البيئة، وتنفيذ المهام، وذلك يشمل مجالات مثل الذكاء الاصطناعي AI، تعلم الآلة Machine Learning، الرؤية الحاسوبية Computer Vision، ومعالجة اللغة الطبيعية NLP، وهي كلها جزء من الدورة بالأكاديمية. حيث قمنا بدراسة ما يلي: مسار أساسيات بايثون وهي من ضمن اللغات الأساسية في تطوير الخوارزميات للروبوتات وتعلم الآلة. مسار التعامل مع البيانات والروبوتات تعتمد على البيانات مثل الحساسات لاتخاذ القرارات، بالتالي يلزم مهارات في SQL، APIs، واستخراج البيانات. تحليل البيانات (Pandas, Matplotlib, Seaborn) لفهم البيانات التي تجمعها الروبوتات وتحليل أدائها. تعلم الآلة من خلال الانحدار، التصنيف، التجميع، والترابط هي أدوات أساسية لتعليم الروبوت كيفية اتخاذ قرارات ذكية بناءًا على البيانات. الشبكات العصبية والتعلم العميق ضرورية لتطبيقات كالتعرف على الصور، معالجة اللغة، أو تحليل البيئة المحيطة بالروبوت. الرؤية الحاسوبية OpenCV و YOLO من أجل أن يرى الروبوت ويتعرف على الأشياء. نماذج اللغة الكبيرة LLMs وهندسة الموجهات لتطوير روبوتًا يتفاعل باللغة الطبيعية كالمساعدات الصوتية. نقل التعلم Transfer Learning لتدريب الروبوت بسرعة على مهام جديدة باستخدام نماذج جاهزة. وبعدها ستحتاجين إلى دراسة لغة C++ ودراسة إطار ROS لتتمكنين من برمجة الروبوتات ثم دراسة embedded systems. ستجدي هنا تفصيل بخصوص الـ Roadmap اللازمة لذلك المجال: https://github.com/h9-tect/AI-Roadmaps/blob/main/robotics-ai-roadmap.md وأيضًا ستجدي هنا roadmap لمجالات الـ AI التي تسائلتي عنها: https://github.com/h9-tect/AI-Roadmaps/tree/main
    1 نقطة
  17. انا بدي ابرمج عقل الروبوت مش ابني روبوت يعني عشان اقدر اشتغل في مجال برمجة الروبوتات لازم اخلص دورة الذكاء الاصطناعي وآخذ دورة embedded systems بس؟
    1 نقطة
  18. وعليكم السلام ورحمة الله وبركاته. الدورة تؤهلكِ لأن تصبحي AI Developer او Data Scientist حيث ستكونين مسؤولة عن تصميم وتنفيذ خوارزميات الذكاء الاصطناعي والتعلم الآلي (Machine Learning). وتطوير النماذج والتعامل مع البيانات الضخمة. او مسئولة عن تحليل البيانات واستخراج الأنماط المفيدة من خلالها و بناء نماذج تنبؤية واتخاذ قرارات مبنية على تلك البيانات. أما بخصوص مجال الروبوتات هل تقصدين بناء الروبوتات أم التحكم بها أم ماذا ؟ فإذا كنتِ تريدين بناء الروبوتات و تحريكها والتحكم بها فأنتي ستحتاجين الدخول في مجال ال (Robotics) و هذا المجال هو مجال متعدد التخصصات حيث يجمع بين الهندسة والهندسة الكهربائية و علوم الكمبيوتر و الذكاء الاصطناعي والميكانيكا لتصميم وبناء وتشغيل الروبوتات. وإن مجال الذكاء الإصطناعي لن يكون كافيا وحده حيث هذا المجال يتطلب علما كبيرا في المجالات السابقة ويتم تدريسه في عدة سنوات في الكليات الهندسية . ولكن إذا اردتي التحكم بها فستفيدك الدورة من خلال تعلم الرؤية الحاسوبية (Computer Vision) والتي ستجعل الروبوت يعلم ما يحيط به ومنها يأخذ القرارات المناسبة لذلك وأيضا تعلم الآلة والذكاء الإصطناعي سيكون مفيد جدا في هذا الأمر . ولكن أيضا ستحتاجين تعلم مجال الأنظمة المدمجة (Embedded Systems) والتي من خلاله ستتعلمين التحكم في الأجهزة والمستشعرات التي يتكون منها الروبوت . ولهذا فإن مجال الذكاء الإصطناعي وعده لن يفيدك في علم الروبوتات . ويمكنك بعدها العمل في مجال الروبوتات الطبية حيث يمكنكي تطوير روبوتات يمكنها إجراء عمليات جراحية أو مساعدة الأطباء في التشخيص والعلاج. أو مجال التطبيقات الصناعية أو العسكرية أو أى من المجالات التي تتطلب وجود الروبوتات بها.
    1 نقطة
  19. السلام عليكم دورة الذكاء الاصطناعي vs دورة إدارة تطوير المنتجات اريد ان اشترك في احدى الدورتين لاكني محتار ايهما افضل خاصتا من ناحية سوق العمل ارشيدوني بارك الله فيكم
    1 نقطة
  20. وعليكم السلام ورحمة الله وبركاته. أحسنت الكود الخاص بك ممتاز ويعمل بشكل صحيح دون أى مشاكل ويقوم بإخراج العدد الصحيح للفاكهة التي لم توضع في السلة. ولكن لاحظ أن المشكلة التي يطلب منك حلها مختلفة عن الحل الخاص بك . فلاحظ هنا : لاحظ أنه لا يجب عليك ترتيب المصفوفات حيث يجب عليك العمل على نفس الترتيب الذي يتم إدخاله . حيث تقوم بالتكرار على قائمة السلال وترى هل هي تكفي الفاكهة الحالية أم لا . وإ ذا كانت تكفي فيمكنك وضعها في تلك السلة . فلاحظ مثلا المدخلات التالية : print(solution.numOfUnplacedFruits([4, 10, 5], [10, 5, 5])) هنا الكود الخاص بك سيخرج ناتج 0 . ولكن يجب أن يخرج 1 . لأنه في أول سلة حجمها 10 إذا يجب وضع ال 4 بها لأنها أول نوع فاكهة . إذا السلة ذات الحجم 10 تم وضع بها فاكهة . نأتي لنوع الفاكهة الثانية وعددها 10 هنا لن تجد سلة لأن السلة 10 قد تم وضع بها فاكهة أخرى. لذلك يمكنك محاولة حل المسألة من تلك الطريقة حيث تنشأ قائمة بها السلال التي تم إستخدامها مسبقا وعدم ترتيب القوائم . وإعادة رفع الحل لتقيمه لك.
    1 نقطة
  21. الحل لا يتبع المسألة، حيث يجب وضع كل نوع من الفاكهة في أول سلة متاحة لها سعة كافية، أيضًا تقوم بزيادة b_index في كل دورة بغض النظر عما إذا تم تخصيص الفاكهة أم لا، بالتالي سيتجاوز سلال متاحة تستوعب الفاكهة. والترتيب التصاعدي لكلا المصفوفتين لا يضمن الحل المثالي، لأن المسألة تتطلب التعامل مع الفواكه من اليسار إلى اليمين بالترتيب الأصلي لـ fruits، وليس بترتيب تصاعدي. عليك إذن عدم ترتيب fruits لأننا نتبع الترتيب الأصلي من اليسار إلى اليمين، واستخدام طريقة لتتبع السلال المستخدمة. class Solution(object): def numOfUnplacedFruits(self, fruits, baskets): """ :type fruits: List[int] :type baskets: List[int] :rtype: int """ used_baskets = [False] * len(baskets) placed_fruits = 0 for fruit in fruits: for i in range(len(baskets)): if not used_baskets[i] and baskets[i] >= fruit: used_baskets[i] = True placed_fruits += 1 break return len(fruits) - placed_fruits solution = Solution() print(solution.numOfUnplacedFruits([4, 2, 5], [3, 5, 4])) print(solution.numOfUnplacedFruits([3, 6, 1], [6, 4, 7])) بالنسبة للتحسين، فلديك التعقيد الزمني هو O(n * m) حيث n عدد الفواكه و m عدد السلال، وتستطيع تحسينه من خلال هيكل بيانات مثل Binary Search على السلال غير المستخدمة، ليصبح O(n * log m).
    1 نقطة
  22. وعليكم السلام ورحمة الله وبركاته. يجب عليك تحديد المجال الذي تريد العمل عليه وأيضا المجال الذي تحبه أو لديك شغف به حتى تستطيع العمل به والتطور فيه وحتى لا تمل أو تتراجع في منتصف الطريق . إن مجال الذكاء الإصطناعي واسع جدا وستأخذ وقتا لدراسته وحتى بعد الدراسة سيتوجب عليك التعلم دائما لما يحدث من تطوير مستمر في هذا المجال وبشكل كبير. لذلك إذا كنت تريد أو تحب العمل في مجال الذكاء الإصطناعي ولا تمانع من المذاكرة والإطلاع دائما على التطويرات فيمكنك الإشتراك في دورة الذكاء الإصطناعي فهي جيدة. وأيضا إذا كان لديك خبرة سابقة في الجبر الخطي وفي الإحصاء وفي الرياضيات عموما فهذا سيكون جيد ومناسب بالنسبة لك. وبخصوص دورة "إدارة تطوير المنتجات" فتلك الدورة هي لمديري المشروعات فهي مناسبة لك كمبرمج أو مصمم في حال كنت تعمل على مشروع أو تريد الإلمام بالجانب الإداري للمشروعات لتحسين مهاراتك. وإليك الفئات التالية الموجهة لهم تلك الدورة: لمن ليس لديه خبرة في مجال البرمجة أو التصميم ويريد تنفيذ مشروعه الناشئ لمن يريد تعلم إدارة تطوير المنتجات لتحسين فرصه التوظيفية لمن يعمل في إدارة المنتجات ويرغب بتوسعة معلوماته حول عملية التطوير وإدارتها والوظائف المتاحة لك بعد إتمامها في الشركات هي أنك ستكون مسؤول عن تحديد الفرص الجديدة لتطوير منتج جديد قابل للتسويق من المفهوم إلى التوزيع. وتحسين منتج موجود لتلبية احتياجات العملاء بشكل أفضل وتنشيط السوق الحالية و متابعة المنتجات بعد اطلاقها وتقييمها. والعمل على رفع التقارير الدورية للمدير العام. أما في العمل الحر فيمكنك أن تقوم بقيادة فريق كامل لإتمام المشروع وإنهاءه و متابعة سير المشروع وأيضا متابعة متطلبات العميل صاحب المشروع و توصيلها إلى الفرق الموكل إليها هذا الجزء . لهذا إذا كنت مهتما بأن تكون إداريا ولديك مهارة القيادة فهذه المهارة مهمة هنا في مدير المشروعات فالأفضل لك هي دورة تطوير المنتجات وأيضا لو لديك خبرة مسبقة في البرمجة كما أخبرت أنك درست هنا دورتين في الأكاديمية فهذا سيكون مفيدا لك هنا. لذلك نصيحتي لك البحث عن المجال الذي تريد العمل عليه وأيضا الأخذ في الإعتبار الوقت المتاح لديك لدراسة الدورات أو التقدم في المجال المطلوب .
    1 نقطة
  23. وعليكم السلام ورحمة الله وبركاته, ويعد تنفيذ قوائم الأولوية في بايثون عملية بسيطة بفضل مكتبة heapq التي توفر أدوات فعالة وسهلة الاستخدام كم اتم التوضيح في التعليقات السابقة . و يمكن أيضاً بناء قائمة أولوية باستخدام قائمة مرتبة أو شجرة ثنائية، لكن هذا الخيار أكثر تعقيدًا وأقل كفاءة من استخدام heapq. يتميز تنفيذ هياكل البيانات في بايثون بالسهولة مقارنةً بلغات أخرى مثل C أو C++ أو Java، وذلك بسبب أن بايثون تتمتع بصياغة بسيطة وواضحة، مما يُسهل كتابة الخوارزميات وفهمها دون التورط في تعقيدات غير ضرورية. وتتولى بايثون إدارة الذاكرة تلقائيًا مما يُعفي المبرمج من التعامل مع تخصيص الذاكرة وتحريرها يدويًا، كما هو مطلوب في لغات مثل C++. وذلك بجانب توفر مكتبات جاهزة مثل heapq وcollections وqueue، تتيح تنفيذ هياكل البيانات بسرعة دون الحاجة إلى بنائها من الصفر. والعديد من المميزات الأخرى التي تتمتع بها بايثون من غالبية اللغات عالية المستوى
    1 نقطة
  24. في Python يمكنك تنفيذ Priority Queue باستخدام عدة طرق أولا بإستخدام heapq وهي الطريقة الأكثر إستخدام حيث يستخدم heapq بنية Min-Heap افتراضيا : import heapq # إنشاء قائمة انتظار ذات أولوية pq = [] # إدراج عناصر مع تحديد الأولوية (الأولوية الأقل تُخدم أولًا) heapq.heappush(pq, (1, "Task A")) # الأولوية 1 (أعلى أولوية) heapq.heappush(pq, (3, "Task C")) # الأولوية 3 heapq.heappush(pq, (2, "Task B")) # الأولوية 2 # إخراج العناصر حسب الأولوية while pq: priority, task = heapq.heappop(pq) print(f"Processing: {task} (Priority: {priority})") الطريقة الثانية إذا كنت تعمل من خلال Threading يمكنك استخدام queue.PriorityQueue : from queue import PriorityQueue pq = PriorityQueue() # إدراج المهام مع تحديد الأولويات pq.put((1, "Task A")) pq.put((3, "Task C")) pq.put((2, "Task B")) # إخراج المهام حسب الأولوية while not pq.empty(): priority, task = pq.get() print(f"Processing: {task} (Priority: {priority})")
    1 نقطة
  25. يمكنك تنفيذ Priority Queue في Python باستخدام queue.PriorityQueue من المكتبة القياسية أو باستخدام قائمة قائمة الأولويات heap مع heapq، حيث يتم ترتيب العناصر تلقائيا حسب الأولوية عند الإدراج ، فمثلا باستخدام heapq، يمكنك إدراج العناصر كأزواج ليتم فرزها بناءً على الأولوية تلقائيا. ما يجعل تنفيذ هياكل البيانات أسهل في Python مقارنة بلغات أخرى هو أن Python توفر مكتبات مدمجة مثل collections و heapq و queue التي تبسط العمل مع القوائم، والـ heaps دون الحاجة إلى إعادة تنفيذها من الصفر، كما أن Python تعتمد على تركيب بسيط ومرن يجعل كتابة الكود وتنفيذ الهياكل أسرع وأوضح مقارنة بلغات أخرى مثل C++ أو Java، حيث تتطلب هذه اللغات تعريفات صريحة للأنواع وكتابة كود أكثر تعقيدًا لإدارة الذاكرة، يمكنك كتابة الكود بهذا الشكل: import heapq pq = [] heapq.heappush(pq, (1, "Task A")) # أولوية 1 heapq.heappush(pq, (3, "Task C")) # أولوية 3 heapq.heappush(pq, (2, "Task B")) # أولوية 2 while pq: print(heapq.heappop(pq)) # يسترجع العناصر حسب الأولوية
    1 نقطة
  26. وعليكم السلام ورحمة الله وبركاته. للأسف في Kaggle لا يمكنك الوصول إلى الكاميرا حيث لا تسمح kaggle بالوصول إلى الكاميرا في جهازك أو أى أجهزة أخرى خارجية مثل الميكروفون والكاميرا وغيرها . وستجد أنه لا يوجد وصول للكاميرا حاليا في kaggle : https://www.kaggle.com/discussions/product-feedback/90890 ولكن من خلال google colab يمكنك تضمين أكواد javascript والتي تسمح لك بتشغيل الكاميرا وأخذ صور منها وإليك الكود التالي الخاص بال javascript الذي يسمح لك بهذا : https://colab.research.google.com/notebooks/snippets/advanced_outputs.ipynb#scrollTo=2viqYx97hPMi from IPython.display import display, Javascript from google.colab.output import eval_js from base64 import b64decode def take_photo(filename='photo.jpg', quality=0.8): js = Javascript(''' async function takePhoto(quality) { const div = document.createElement('div'); const capture = document.createElement('button'); capture.textContent = 'Capture'; div.appendChild(capture); const video = document.createElement('video'); video.style.display = 'block'; const stream = await navigator.mediaDevices.getUserMedia({video: true}); document.body.appendChild(div); div.appendChild(video); video.srcObject = stream; await video.play(); // Resize the output to fit the video element. google.colab.output.setIframeHeight(document.documentElement.scrollHeight, true); // Wait for Capture to be clicked. await new Promise((resolve) => capture.onclick = resolve); const canvas = document.createElement('canvas'); canvas.width = video.videoWidth; canvas.height = video.videoHeight; canvas.getContext('2d').drawImage(video, 0, 0); stream.getVideoTracks()[0].stop(); div.remove(); return canvas.toDataURL('image/jpeg', quality); } ''') display(js) data = eval_js('takePhoto({})'.format(quality)) binary = b64decode(data.split(',')[1]) with open(filename, 'wb') as f: f.write(binary) return filename
    1 نقطة
  27. لن تستطيع ذلك مباشرًة حيث colab و kaggle notebook لا يدعمان الوصول المباشر للكاميرا على حاسوبك، ستحتاج إلى استخدام فيديو مُسجل لما تريد التعرف عليه واستخدامه في الكود. أو استخدام كود جافاسكريبت لتتمكن من استخدام كاميرا حاسوبك من خلال جوجل كولاب أو kaggle notebook، حيث يتم إلتقاط صور بواسطة الكاميرا من خلال كود جافاسكريبت لكن الصور ستكون ثابتة، ويوجد كود جاهز في colab بالضغط على الزر التالي code snippets ثم اكتب به Camera Capture وسيظهر لك مُقتطف الكود لاستخدامه بالضغط على insert: لو أردت تسهيل الأمر على نفسك استخدم مكتبة colab-webcam وستمكنك من إلتقاط صور أو تحويل الصور إلى فيديو حي لمحاكاة التصوير من خلال الكاميرا عن طريق إلتقاط الصور بشكل مستمر وعرضها.
    1 نقطة
  28. يمكنك الدخول إلى قسم دوراتي وستجد جميع الدورات تظهر لك التي قمت بالاشتراك بها والتي لم تقم بالإشتراك بها . وإذا قمت بالدخول إلى أى دورة لم تقم بالإشتراك بها ستجد أن المسار الأول متاح لك.
    1 نقطة
  29. تخطيط الشبكة Grid هو أسلوب تخطيط ثنائي الاتجاه يستخدم لترتيب عناصر صفحة الويب، إذ يسمح بتوضع المحتوى ضمن أسطر وأعمدة ويقدم ميزات عدة تسمح بتنفيذ التخطيطات المعقدة بأسلوب مباشر. وسنقدم لك في هذا المقال كل ما تحتاجه لتبدأ العمل على تخطيط الصفحات باستخدامه. قبل البدء في قراءة هذا المقال يتوجب عليك أن: تطلع على أساسيات HTML كما شرحناها في سلسلة مقالات مدخل إلى HTML. تتفهم أساسيات عمل CSS. ما هو تخطيط الشبكة Grid Layout؟ الشبكة هي مجموعة من الخطوط الأفقية والعمودية التي تشكل نموذجًا لترتيب العناصر ضمنه. يمكّننا هذا التخطيط من إنشاء تخطيطات لا تقفز فيها العناصر أو تغير اتساعها عند الانتقال من صفحة إلى أخرى مما يمنح موقع الويب تناسقًا أفضل. وتتكون الشبكة تقليديًا من أعمدة وصفوف، وفراغات بين كل سطر وكل عمود، وتُعرف هذه الفراغات بالأقنية gutters كما في الصورة التالية: إنشاء شبكة باستخدام CSS إن قررت أن تخطيط الشبكة هو ما يحتاجه تصميم صفحة الويب الخاصة بك، يمكنك استخدام لغة CSS لإنجاز الأمر. سنلقي نظرة على الميزات الأساسية لتخطيط الشبكة أولًا، ثم نستكشف كيفية إنشاء تخطيط شبكة بسيط لمشروعك. تحديد الشبكة بداية حمًل وافتح هذا الملف الذي سيكون نقطة الانطلاق للعمل ضمن محرر الكود وضمن المتصفح. يعرض هذا المثال حاوية تضم عدة عناصر أبناء لها تخطيط الانسياب الاعتيادي افتراضيًا، إذ تظهر تحت بعضها. سنتعامل مع هذا الملف في القسم الأول من مقالنا، ونطبق بعض التغييرات لاستيعاب سلوك تخطيط الشبكة. ولتعيين شبكة نستخدم القيمة grid للخاصية display. ستفعّل هذه القيمة تخطيط الشبكة، وستتحول جميع العناصر ضمن هذه الحاوية إلى عناصر شبكة grid item. لهذا ضع التصريح التالي ضمن الملف: .container { display: grid; } وعلى خلاف الصندوق المرن، لن تجد اختلافًا مباشرًا في توضع العناصر عند تطبيق القاعدة display: grid، لأن هذا التصريح سيضع العناصر ضمن شبكة من عمود واحد وستبقى فوق بعضها البعض كما هو الحال في الانسياب الاعتيادي. ولترى شيئًا أقرب إلى الشبكة، لا بد من إضافة أعمدة جديدة إليها. لهذا سنضع ثلاث أعمدة لكل منها اتسع مقداره 300 بكسل. يمكنك اختيار أي واحدة طول أو نسبة مئوية لضبط اتساع هذه الأعمدة. .container { display: grid; grid-template-columns: 200px 200px 200px; } أضف التصريح الثاني إلى قاعدة CSS ثم أعد تحميل الصفحة وسترى كيف رتبت العناصر نفسها ليحتل كل منها مكانًا في الشبكة. See the Pen grid1 by Hsoub Academy (@HsoubAcademy) on CodePen. الشبكات المرنة واستخدام الواحدة fr يمكنك تعيين الشبكات بوحدات fr إضافة إلى وحدات الطول والنسب المئوية. وتمثل هذه الوحدة جزءًا من المساحة المتاحة ضمن حاوية الشبكة وتتيح مرونة في تحجيم الأسطر والأعمدة. غيّر القاعدة السابقة كي ننشئ ثلاث أعمدة اتساع كل منها 1fr أي جزء من كل: .container { display: grid; grid-template-columns: 1fr 1fr 1fr; } تتميز الشبكة الآن بوجود مسارات مرنة، إذ توزع الوحدة fr المساحة المتوفرة بشكل تناسبي. وبإمكانك طبعًا استخدام أية قيم موجبة للمسارات في شبكتك كالتالي: .container { display: grid; grid-template-columns: 2fr 1fr 1fr; } إذ يأخذ المسار (عمود هنا) جزئين 2fr من أصل أربعة أجزاء كلية من المساحة المتوفرة بينما يأخذ كل من المسارين التاليين جزءًا واحدًا 1fr وبالتالي سيكون العمود الأول أكثر اتساعًا. وبإمكانك المزج بين الوحدة fr ووحدات الأطوال الثابتة، وفي هذه الحالة تحجز المساحة اللازمة للمسارات ثابتة الاتساع ثم يجري توزيع المساحة الباقية على المسارات التي تحمل قيمًا نسبية. See the Pen grid2 by Hsoub Academy (@HsoubAcademy) on CodePen. ملاحظة: تتوزع المساحات المتاحة فقط بين المسارات عند استخدام الوحدة fr وليس كامل المساحة، بمعنى أنه إذا شغل مسار مساحة أكبر لأن محتواه أكبر سيقل الفراغ الذي تتقاسمه المسارات. الأقنية بين المسارات لإنشاء فراغات بين المسارات، نستخدم الخاصيات التالية: column-gap: للفراغات (الأقنية) بين الأعمدة. row-gap: الفراغات بين الأسطر. gap: خاصية تختصر الخاصيتين السابقتين. .container { display: grid; grid-template-columns: 2fr 1fr 1fr; gap: 20px; } يمكن أن تُقدّر أبعاد الأقنية بأي وحدة قياس ثابتة أو نسبة مئوية ما عدا الوحدة التناسبية fr. See the Pen grid3 by Hsoub Academy (@HsoubAcademy) on CodePen. ملاحظة: سبُقت الخاصيات السابقة في المواصفات الأقدم بالبادئة -grid لكن المواصفات الجديدة ألغتها. مع ذلك يبقى استخدامها صحيحًا كاسم بديل. لهذا كي تبقى في مأمن من المشاكل وتُبقي شيفرتك منيعة استخدم كلتا النسختين من الخاصية: .container { display: grid; grid-template-columns: 2fr 1fr 1fr; grid-gap: 20px; gap: 20px; } تكرار المسارات الموجودة بإمكانك تكرار جميع مسارات الشبكة أو جزء منها باستخدام الدالة ()repeat التي تقدمها CSS. لترى ذلك، غير طريقة جدولة المسارات في التصريح السابق إلى الشكل التالي: .container { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; } ستكون النتيجة ظهور ثلاثة أعمدة متناسبة 1fr من حيث الاتساع كما سبق. إذ يشير المعامل الأول من الدالة ()repeat إلى عدد مرات التكرار بينما يشير المعامل الثاني إلى عدد المسارات، فقد ترغب بتكرارها أكثر من مسار. الشبكات الصريحة والمضمنة لقد خصصنا في الشبكة أعمدةً فقط حتى اللحظة، بينما ظهرت الأسطر تلقائيًا لتناسب المحتوى وهذا مثال عن الشبكات الصريحة مقابل الشبكات الضمنية. وإليك الفرق: الشبكات الصريحة: تُنشأ باستخدام الخاصيتين grid-template-columns أو grid-template-rows. الشبكات الضمنية: توسّع الشبكة الصريحة عندما لا تستطيع الشبكة احتواء المحتوى كأن يظهر ضمن أسطر جديدة. تنشأ المسارات في الشبكات الضمنية بأبعاد تلقائية auto افتراضيًا، وهذا يعني عمومًا بأنه واسعة كفاية لتضم المحتوى. ولمنح الشبكات الضمنية مسارات بأبعاد مخصصة، بإمكانك استخدام الخاصيتين grid-auto-rows و grid-auto-columns. فإن خصصت القيمة 100px للخاصية grid-auto-rows سترى بأن ارتفاع الصفوف التي تنشأ هو 100 بكسل. .container { display: grid; grid-template-columns: repeat(3, 1fr); grid-auto-rows: 100px; gap: 20px; } See the Pen grid4 by Hsoub Academy (@HsoubAcademy) on CodePen. الدالة ()minmax لن يكون ارتفاع 100 بكسل كافيًا في حالتنا السابقة إن أردنا وضع محتوى أطول من 100 بكسل، وبالتالي يحدث عندها الطفحان overflow. لهذا من الأفضل أن يكون ارتفاع المسارات 100 بكسل على الأقل وتكون قادرة على التوسع أكثر عند إضافة محتوى أكبر. ومن المعروف عمومًا في تصميم الويب أنه من الصعب توقع ارتفاع أي عنصر وخاصة عند إضافة محتوى أو عند تغيير حجم الخط مما قد يسبب مشاكل في التصميمات التي تحاول أن تجعل التصميم مثاليًا من كل النواحي. تتيح لنا الدالة ()minmax تحديد الحجم الأدنى والأقصى للمسار، فالصيغة minmax(100px, auto) للدالة تحدد حجمًا أدنى للمسار مقداره 100 بكسل، بينما حددت قيمة الحجم الأقصى ليكون تلقائيًا auto وتعني أن العنصر سيتوسع حتى يستوعب المحتوى. جرّب ضبط قيمة الخاصية grid-auto-rows باستخدام هذه الدالة: .container { display: grid; grid-template-columns: repeat(3, 1fr); grid-auto-rows: minmax(100px, auto); gap: 20px; } فإن أضفت محتوى أكبر سترى كيف يتوسع المسار حتى يستوعب المحتوى الجديد. لاحظ كيف يحدث التوسع أفقيًا مع السطر. أعمدة بقدر ما تتسع له المساحة بإمكاننا تطبيق الأفكار التي تعلمناها سابقًا حول ترتيب المسارات والتكرار والدالة ()minmax لإنشاء نماذج مفيدة. فمن الجيد أحيانًا أن تكون الشبكة قادرة على إنشاء أعمدة بقدر ما تتسع لها الحاوية. ولإنجاز ذلك، نضبط قيمة الخاصية grid-template-columns باستخدام الدالة ()repeat لكن بدل أن نمرر لها المعامل الأول عددًا، نمرر لها القيمة auto-fill. كما نستخدم الدالة ()minmax كمعامل ثاني ونحدد فيها قيمة أصغر قياس نريده للأعمدة، ونجعل قيمة أكبر قياس هو 1fr. جرّب ذلك بكتابة الشيفرة التالية: .container { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); grid-auto-rows: minmax(100px, auto); gap: 20px; } See the Pen Untitled by Hsoub Academy (@HsoubAcademy) on CodePen. نجح الأمر لأن الشبكة ستنشئ أكبر عدد ممكن من الأعمدة التي اتساعها 200 بكسل يمكن للحاوية استيعابها ومن ثم تقسم المساحات الفارغة الباقية بين جميع الأعمدة من خلال القيمة 1fr التي رأينا أنها توزّع المساحة بالتساوي بين المسارات. توزيع المحتوى وفقًا للأسطر ننتقل الآن من إنشاء الشبكات إلى وضع المحتوى ضمنها، وقد رأينا أن للشبكة أسطر، وهذه الأسطر مرقمة ابتداءً من 1 وتتعلق بنمط الكتابة في الصفحة. إذ يُكتب السطر الأول من العمود في الإنكليزية (التي تُكتب من اليسار إلى اليمين) انطلاقًا من الناحية اليسرى للشبكة ويكون هذا السطر في الأعلى، أما في العربية التي تُكتب من اليمين إلى اليسار فستبدأ كتابة المحتوى في العمود من يمين الشبكة. بإمكاننا ترتيب الأشياء وفقًا لهذه لأسطر الكتابة بتحديد بداية ونهاية السطر من خلال الخاصيات التالية: grid-column-start grid-column-end grid-row-start grid-row-end يمكن لجميع الخاصيات أن تأخذ رقم السطر كقيمة لها، كما يمكن استخدام الخاصيات المختصرة التالية: grid-column grid-row التي تتيح لك تحديد بداية ونهاية السطر مباشرة وتفصل بين القيمتين الشرطة المائلة /. لتجريب الأمر، نزّل الملف الذي يضم شيفرة المثال التالي (يمكنك أيضًا الاطلاع على كيفية عملها مباشرة على جيت-هاب). ويضم الملف شبكة ومقال بسيط. لاحظ كيف توضِّع القيمة كل عنصر ضمن خلية مخصصة من الشبكة، ولترتيب جميع العناصر في الشبكة باستخدام أسطر الشبكة، أضف القواعد التالية غلى نهاية شيفرة CSS: header { grid-column: 1 / 3; grid-row: 1; } article { grid-column: 2; grid-row: 2; } aside { grid-column: 1; grid-row: 2; } footer { grid-column: 1 / 3; grid-row: 3; } See the Pen grid6 by Hsoub Academy (@HsoubAcademy) on CodePen. ملاحظة: بإمكانك أيضًا استخدام القيمة 1- كي تستهدف نهاية العمود أو السطر ثم اعدد ابتداءً من النهاية إلى البداية باستخدام القيم السالبة. وتذكر أن الأسطر تُعدّ دائمًا من حافة الشبكة الصريحة وليست الضمنية. ترتيب العناصر باستخدام الخاصية grid-template-areas توجد طريقة بديلة لترتيب العناصر في الشبكة باستخدام الخاصية grid-template-areas وإعطاء أسماء للعناصر المختلفة في التصميم. لتقف على الأمر، أزل شيفرة ترتيب العناصر وفق الأسطر في المثال السابق ثم أضف الشيفرة التالية بدلًا عنها: .container { display: grid; grid-template-areas: "header header" "sidebar content" "footer footer"; grid-template-columns: 1fr 3fr; gap: 20px; } header { grid-area: header; } article { grid-area: content; } aside { grid-area: sidebar; } footer { grid-area: footer; } أعد تحميل الصفحة وسترى أن العناصر قد رُتبّت بالطريقة السابقة نفسها دون أن تستخدم أية أرقام للأسطر. See the Pen grid7 by Hsoub Academy (@HsoubAcademy) on CodePen. إليك قواعد الخاصية grid-template-areas: عليك ملئ كل خلية من خلايا الشبكة. كرر الاسم لتضم خليتين في خلية واحدة. استخدم النقطة . لتترك الخلية فارغة. لا بد أن تكون مساحة الشبكة مربّعة. فلا يمكنك مثلًا تصميم شبكة على شكل حرف L. لا يمكن تكرار المساحات في أماكن مختلفة. بإمكانك تجريب عدة خيارات في تخطيط الشبكة بهذه الطريقة، حاول مثلًا وضع التذييل تحت المقالة فقط وأن تجعل الشريط الجانبي يمتد للأسفل. هذا الطريقة في تخطيط الشبكة جميلة جدًا لأنها واضحة، وبمجرد النظر إلى شيفرة CSS ستعرف تمامًا ما الذي سيحدث. إطارات العمل مع الشبكة في شبكات CSS تميل إطارات العمل مع الشبكات grid frameworks لتكون شبكات مكونة من 12-16 عمود. ولا حاجة بالطبع إلى أدوات أخرى سوى شبكة CSS لتنفيذ إطار العمل هذا، فهي موجودة فعلًا في المواصفات. نزّل الملف الذي يضم شيفرة المثال التالي وهي عبارة عن حاوية مكونة من شبكة تتكون من 12 عمودًا، وتبقى شيفرة HTML نفسها التي استخدمناها في المثال السابق. بإمكاننا الآن استخدام التوضع المبني على الأسطر لتوزيع المحتوى ضمن شبكتنا ذات 12 عمودًا: header { grid-column: 1 / 13; grid-row: 1; } article { grid-column: 4 / 13; grid-row: 2; } aside { grid-column: 1 / 4; grid-row: 2; } footer { grid-column: 1 / 13; grid-row: 3; } See the Pen grid8 by Hsoub Academy (@HsoubAcademy) on CodePen. إن استخدمت الأداة Firefox Grid Inspector لتوضح خطوط الشبكة في تصميمك، سترى كيف تعمل تمامًا شبكتنا ذات 12 عمودًا: الخلاصة تجولنا في مقالنا على الميزات التي يقدمها تخطيط الشبكة Grid Layout في لغة CSS، واستعرضنا أمثلة مختلفة على استخدامه في ترتيب عناصر صفحة الويب وتنفيذ التخطيطات المعقدة بسهولة كبيرة، ومن المفترض أن تصبح قادرًا الآن على استخدام الشبكات بفعالية ضمن تصميماتك. ترجمة -وبتصرف- للمقال: Grids اقرأ أيضًا المقال السابق: تخطيط الصندوق المرن Flexbox في صفحات الويب مدخل إلى تخطيط صفحات الويب باستخدام CSS تعرف على أساسيات CSS تقنيات كتابة شيفرات CSS احترافية وسهلة الصيانة التحكم في تموضع العناصر في CSS
    1 نقطة
  30. تتطور علوم الحاسوب بطريقة سريعة ومتزايدة، ويركز الاختصاصيون اليوم على تقنيات التعلم الآلي والتعلم العميق التي تعتمد على برمجيات معينة مثل المكتبات المتطورة في لغة البرمجة بايثون. يسعى الطلاب والباحثون إلى تعلم هذه التقنيات وبناء المشاريع باستخدامها، وبالتالي فإنهم يحتاجون بيئةً برمجيةً متطورة ومواصفات متقدمة ليتمكن النظام من تحمّل عبء الذاكرة الكبيرة ومعالجة البيانات الضخمة. والمشكلة أنه من الصعب تأمين هذه المواصفات العالية في أجهزتهم. ولذلك أطلقت غوغل منصة Google Colab لمساعدة الطلاب والباحثين على التعلم والتغلب على العقبات. في هذا المقال، سنتحدث عن منصة جوجل كولاب Google Colab وأهم استخداماتها وميزاتها، ولماذا هي أداة مهمة للطلاب والمختصين بعلم البيانات. ما هو NoteBook؟ لغات البرمجة هي اللغات المستخدمة لتطوير البرامج والتطبيقات، وتُشكل الوسيط بين اللغة التي يفهمها الإنسان واللغة التي تفهمها الآلة. كل البرامج والتطبيقات التي تعمل على الحواسيب والهواتف المحمولة أُنشئت باستخدام إحدى لغات البرمجة، حيث يبني المطورون التطبيقات برمجيًا ليتمكن أي شخص من استخدامها. عندما يبرمج أحد المطورين نموذجًا لحل مشكلة معينة، سيكون عليه إرفاق النموذج بشرحٍ لطريقة عمله، ومن الصعب القيام بذلك من خلال التعليمات البرمجية فقط، لذلك سيضطر إلى إعداد عرض تقديمي منفصل. لتسهيل عمل المبرمجين صُمم برنامج دفتر الملاحظات NoteBook، الذي يتضمن سطورًا خاصةً بالتعليمات البرمجية، ومساحةً لكتابة النصوص والتعليقات وإضافة الصور والجداول والرسوم البيانية. وتساعد مستندات NoteBook على فهم الشيفرات البرمجية وطريقة عمل البرنامج. يعَد دفتر الملاحظات أو NoteBook مستندًا يمكن من خلاله كتابة التعليمات البرمجية مثل شيفرات لغة بايثون وكتابة النصوص وإضافة الصور، ويمكن تنفيذها وعرض النتائج. يُعد Google Colab نسخةً سحابيةً محسنةً من Jupyter Notebook المخصص لكتابة وتشغيل الشيفرات البرمجية ومستندات Notebook، وذلك من خلال بيئة برمجية متكاملة أو مستعرض ويب. يوفر Google Colab وصولًا مجانيًا إلى وحدات معالجة الرسومات GPU وTPU، والتي تستخدم لبناء نموذج التعلم الآلي أو التعلم العميق. ويُعد Google Colab خيارًا مثاليًا لملايين المستخدمين لأنه مجاني ولا يتطلب سوى امتلاك حساب غوغل، كما أنه لا يحتاج إلى سرعات اتصال عالية. ويأتي مع حزم مُثبتة مسبقًا وجاهزة للاستخدام، بالتالي لن يحتاج المستخدم إلى إعداد البيئة. دورة تطوير التطبيقات باستخدام لغة Python احترف تطوير التطبيقات مع أكاديمية حسوب والتحق بسوق العمل فور انتهائك من الدورة اشترك الآن كيفية استخدام Google Colab إذا كنت قد استخدمت منصة Jupyter Notebooks من قبل، فستلاحظ التشابه الكبير بينها وبين منصة Google Colab. تمكّنك منصة Google Colab من كتابة وتنفيذ التعليمات البرمجية المكتوبة بلغة بايثون من خلال متصفحك دون الحاجة إلى تثبيت أي محرر أو برنامج. ويمكن استخدام هذه المنصة بسهولة وربطها بحساب غوغل، وتوفر لك وصولًا مجانيًا إلى وحدات معالجة الرسومات GPU ووحدات المعالجة المركزية TPU. كانت تُستخدم منصة Google Colab في السابق كأداةٍ داخلية لتحليل بيانات غوغل. وأصبحت فيما بعد متاحةً للعامة ومُستخدمةً من قبل عدد كبير من الأشخاص. يستخدم الطلاب والباحثين منصة Google Colab لبناء المشاريع البرمجية التي تتضمن تقنيات التعلم الآلي أو التعلم العميق. وتؤمّن هذه المنصة الموارد اللازمة لتشغيل تجارب علوم البيانات وخاصةً لمن لا يمتلك وحدة معالجة رسومات متطورة في جهازه. تُعَد النسخة المجانية من Google Colab مناسبةً للطلاب وللمبتدئين في علم البيانات، ولكنها غير مناسبة للمشاريع الضخمة والتي تتطلب معالجة كميات كبيرة من البيانات والصور، لذلك أصدرت غوغل في أوائل عام 2020 النسخة المدفوعة Google Colab Pro، والتي تؤمّن نظام معالجة رسومات أكثر سرعةً وذاكرة وصول عشوائي إضافية. وقد قدّم Colab Pro حلًا للعديد من المشكلات التي تواجه مهندسي التعلم الآلي وعلماء البيانات. لا يزال Google Colab Pro حتى الآن (وقت كتابة المقال) غير متوافر في العديد من البلدان، ويقتصر على البلدان التالية: الولايات المتحدة وكندا واليابان والبرازيل وألمانيا وفرنسا والهند والمملكة المتحدة وتايلاند. ماذا يقدم لك Google Colab؟ يسمح Google Colab لملايين الأشخاص بالتعلم وتنفيذ المشاريع بلغة بايثون، واستخدام المكتبات المثبتة مسبقًا، ويقدم حلًا للكثير من التحديات التي تواجههم. من السهل البدء باستخدام Google Colab، ولن تحتاج إلى تثبيت أي أدوات أو برامج، كما أنه لا يتطلب جهاز حاسوب بمواصفات خارقة. وستحتاج فقط إلى متصفح وستظهر واجهة Google Colab بشكل مشابه لواجهة jupyter Notebook. يمكن استخدام وحدة معالجة الرسومات بنقرة واحدة، وتنفيذ الشيفرات البرمجية بسهولة؛ مما يجعله بيئةً مثاليةً لتنفيذ مشاريع التعلم الآلي والتعلم العميق وتحليل البيانات الضخمة. يدعم كولاب لغة البرمجة بايثون، ويسمح لك بتشغيل التعليمات البرمجية في كتل، ويمكنك عرض النتائج والمخرجات الرسومية بسهولة، ولكن تقتصر مدة الجلسة الواحدة على 12 ساعة من الاستخدام المتواصل، وبعد انتهاء الوقت ستنتهي الجلسة. تُحفظ مستندات Google Colab التي تُنشئها على منصة غوغل درايف، بالتالي سيكون من السهل مشاركتها مع عدة أشخاص، ويمكنهم جميعًا العمل على نفس الدفتر في نفس الوقت دون أية مشاكل. توفّر غوغل استخدام وحدة معالجة الرسومات NVIDIA Tesla K80 المجانية. وإذا قمت بوصل Colab بـ Google Drive، ستحصل على 15 غيغابايت من مساحة القرص لتخزين مجموعات البيانات. من سلبيات Google Colab صعوبة اكتشاف الأخطاء في التعليمات البرمجية قبل تشغيلها، ولكن لا تزال هي المنصة الأفضل للاستخدام بفضل الميزات العديدة الموجودة. أما فيما يلي، فسنذكر أهم الميزات المتوفرة في هذه المنصة: محرر لكتابة التعليمات البرمجية باستخدام لغة البرمجة بايثون. إنشاء ومشاركة مستندات Notebook. خدمة سحابية مجانية مع GPU وTPU. حفظ واستيراد المستندات من وإلى خدمة غوغل للتخزين السحابي Google Drive. إمكانية توثيق الشيفرات البرمجية وشرحها وتوضيحها. استيراد قواعد البيانات من مصادر خارجية مثل Kaggle. استيراد مستندات Notebook من GITS. تتواجد العديد من مكتبات علوم البيانات والتعلم الآلي ُمثبتة مسبقًا على منصة كولاب مثل مكتبة Pandas وNumPy وTensorflow وKeras وOpenCV. الفرق بين Jupyter وGoogle Colab؟ من بين أبرز الفروقات بين كل من Jupyter وGoogle Colab، نذكر الآتي: يعمل Jupyter على جهاز حاسوب محلي، أما كولاب فيعمل على خادم غوغل. عند استخدام Jupyter تُحفظ الملفات على القرص الثابت على جهاز الحاسوب، بالمقابل تخزّن الملفات في حساب غوغل درايف عند استخدام غولاب. يستهلك Jupyter ذاكرة الوصول العشوائي RAM ووحدة المعالجة المركزية وأقراص التخزين المثبتة على حاسوبك الشخصي؛ أما Google Colab، فيعتمد على التخزين السحابي، ويمنحك وصولًا إلى ذاكرة وصول عشوائي أعلى، و70 وحدة تخزين على القرص، وقدرة على استخدام وحدة معالجة الرسومات المجانية GPU. يعتمد تشغيل Jupyter على حد ذاكرة النظام على جهازك، أما Google Colab، فيحدد وقت التشغيل بمقدار 12/24 عند استخدام النسخة المجانية، ويمكن أن تحدث انقطاعات أثناء الجلسات. عند استخدام Google Colab لن تضطر إلى تثبيت أي مكتبة لأن معظم المكتبات مثبتة مسبقًا، بينما عند استخدام Jupyter، يجب عليك تثبيت جميع المكتبات المطلوبة حسب حاجتك. يُفضل استخدام Jupyter إذا كان عملك سريًا ويتطلب الخصوصية. وبالمقابل، يُعد Google Colab الخيار الأفضل إذا كان مشروعك يتطلب قدرات تخزين عالية ولا يمكنك شراء جهاز بالمواصفات المطلوبة. ما هو GPU ولماذا نحتاجه للذكاء الاصطناعي؟ صُممت وحدات معالجة الرسومات لتدريب نماذج الذكاء الاصطناعي والتعلم العميق. تضم هذه الوحدات عددًا كبيرًا من النوى التي تسمح بتنفيذ العديد من العمليات المتوازية. البرامج التي تستخدم تقنيات التعلم العميق تحتاج إلى التعامل مع كميات هائلة من البيانات، وتوفر وحدات GPU عرض نطاق ترددي مناسب. تتطلب معالجة البيانات الضخمة استخدام أجهزة متطورة وسريعة. وتكمن التحديات التي ترافق هذا النوع من البيانات في تخزينها ومعالجتها ومشاركتها ونقلها. ولأن البيانات الضخمة حجر الأساس للذكاء الاصطناعي، فإن التعامل معها يشكّل عائقًا للطلاب والباحثين، نتيجة صعوبة توافر الأجهزة ذات المواصفات العالية. الميزة الأساسية التي تقدّمها منصة غوغل كولاب هي توفير وحدات معالجة الرسومات GPU وTPU المجانية، والتي تمكّن المستخدمين من تدريب نماذج التعلم العميق المعقدة مع مجموعات البيانات الضخمة، وقد تستغرق هذه العملية عدة ساعات على الحواسيب العادية. وبالمقابل، هي تستغرق بضعة دقائق باستخدام وحدات معالجة الرسومات المتطورة. يفضل الباحثون استخدام وحدة معالجة الرسومات المدمجة في غوغل كولاب بسبب القوة السحابية المطلقة وسرعة التنفيذ التي تتمتع بها. دورة الذكاء الاصطناعي احترف برمجة الذكاء الاصطناعي AI وتحليل البيانات وتعلم كافة المعلومات التي تحتاجها لبناء نماذج ذكاء اصطناعي متخصصة. اشترك الآن خاتمة أدى التطور في العلم والاقتصاد وتكنولوجيا المعلومات إلى زيادة كمية البيانات الرقمية وأصبح من الصعب التعامل معها بالتقنيات العادية. وازدادت الحاجة إلى وجود أدوات تسمح لنا بتحليل البيانات لاستخدامها في الذكاء الاصطناعي وتطوير تطبيقات التعلم الآلي. إذا كنت ترغب بالدخول إلى عالم البيانات والذكاء الاصطناعي، يجب أن تكون على اطلاع ومعرفة بأهم الأدوات المتوافرة مثل غوغل كولاب، الذي يمنحك فرصةً مثاليةً للتعلم واكتساب الخبرات. اقرأ أيضًا دليل استخدام Google Colab كيفية التعامل مع البيانات في Google Colab
    1 نقطة
×
×
  • أضف...