From 2af29e418cc74eccb9871d896e8da083c2b9fde0 Mon Sep 17 00:00:00 2001 From: leestott Date: Fri, 3 Oct 2025 14:59:12 +0000 Subject: [PATCH] =?UTF-8?q?=F0=9F=8C=90=20Update=20translations=20via=20Co?= =?UTF-8?q?-op=20Translator?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../07-ConvNets/lab/PetFaces.ipynb | 76 +++++++++------ .../07-ConvNets/lab/README.md | 20 ++-- .../07-ConvNets/lab/PetFaces.ipynb | 58 +++++++---- .../07-ConvNets/lab/README.md | 22 +++-- .../07-ConvNets/lab/PetFaces.ipynb | 82 ++++++++++------ .../07-ConvNets/lab/README.md | 24 +++-- .../07-ConvNets/lab/PetFaces.ipynb | 60 ++++++++---- .../07-ConvNets/lab/README.md | 30 +++--- .../07-ConvNets/lab/PetFaces.ipynb | 58 +++++++---- .../07-ConvNets/lab/README.md | 20 ++-- .../07-ConvNets/lab/PetFaces.ipynb | 54 +++++++---- .../07-ConvNets/lab/README.md | 22 +++-- .../07-ConvNets/lab/PetFaces.ipynb | 58 +++++++---- .../07-ConvNets/lab/README.md | 18 ++-- .../07-ConvNets/lab/PetFaces.ipynb | 66 ++++++++----- .../07-ConvNets/lab/README.md | 22 +++-- .../07-ConvNets/lab/PetFaces.ipynb | 72 +++++++++----- .../07-ConvNets/lab/README.md | 14 +-- .../07-ConvNets/lab/PetFaces.ipynb | 64 ++++++++----- .../07-ConvNets/lab/README.md | 24 +++-- .../07-ConvNets/lab/PetFaces.ipynb | 58 +++++++---- .../07-ConvNets/lab/README.md | 26 ++--- .../07-ConvNets/lab/PetFaces.ipynb | 72 +++++++++----- .../07-ConvNets/lab/README.md | 20 ++-- .../07-ConvNets/lab/PetFaces.ipynb | 60 ++++++++---- .../07-ConvNets/lab/README.md | 28 +++--- .../07-ConvNets/lab/PetFaces.ipynb | 74 +++++++++------ .../07-ConvNets/lab/README.md | 20 ++-- .../07-ConvNets/lab/PetFaces.ipynb | 62 ++++++++---- .../07-ConvNets/lab/README.md | 22 +++-- .../07-ConvNets/lab/PetFaces.ipynb | 78 +++++++++------ .../07-ConvNets/lab/README.md | 24 +++-- .../07-ConvNets/lab/PetFaces.ipynb | 72 +++++++++----- .../07-ConvNets/lab/README.md | 32 ++++--- .../07-ConvNets/lab/PetFaces.ipynb | 66 ++++++++----- .../07-ConvNets/lab/README.md | 30 +++--- .../07-ConvNets/lab/PetFaces.ipynb | 64 ++++++++----- .../07-ConvNets/lab/README.md | 14 +-- .../07-ConvNets/lab/PetFaces.ipynb | 48 +++++++--- .../07-ConvNets/lab/README.md | 24 +++-- .../07-ConvNets/lab/PetFaces.ipynb | 77 +++++++++------ .../07-ConvNets/lab/README.md | 18 ++-- .../07-ConvNets/lab/PetFaces.ipynb | 74 +++++++++------ .../07-ConvNets/lab/README.md | 22 +++-- .../07-ConvNets/lab/PetFaces.ipynb | 70 +++++++++----- .../07-ConvNets/lab/README.md | 26 ++--- .../07-ConvNets/lab/PetFaces.ipynb | 76 +++++++++------ .../07-ConvNets/lab/README.md | 30 +++--- .../07-ConvNets/lab/PetFaces.ipynb | 62 ++++++++---- .../07-ConvNets/lab/README.md | 26 ++--- .../07-ConvNets/lab/PetFaces.ipynb | 56 +++++++---- .../07-ConvNets/lab/README.md | 16 ++-- .../07-ConvNets/lab/PetFaces.ipynb | 95 +++++++++++-------- .../07-ConvNets/lab/README.md | 34 ++++--- .../07-ConvNets/lab/PetFaces.ipynb | 76 +++++++++------ .../07-ConvNets/lab/README.md | 32 ++++--- .../07-ConvNets/lab/PetFaces.ipynb | 60 ++++++++---- .../07-ConvNets/lab/README.md | 18 ++-- .../07-ConvNets/lab/PetFaces.ipynb | 56 +++++++---- .../07-ConvNets/lab/README.md | 16 ++-- .../07-ConvNets/lab/PetFaces.ipynb | 92 +++++++++++------- .../07-ConvNets/lab/README.md | 30 +++--- .../07-ConvNets/lab/PetFaces.ipynb | 50 +++++++--- .../07-ConvNets/lab/README.md | 22 +++-- .../07-ConvNets/lab/PetFaces.ipynb | 56 +++++++---- .../07-ConvNets/lab/README.md | 22 +++-- .../07-ConvNets/lab/PetFaces.ipynb | 64 ++++++++----- .../07-ConvNets/lab/README.md | 26 ++--- .../07-ConvNets/lab/PetFaces.ipynb | 60 ++++++++---- .../07-ConvNets/lab/README.md | 20 ++-- .../07-ConvNets/lab/PetFaces.ipynb | 70 +++++++++----- .../07-ConvNets/lab/README.md | 24 +++-- .../07-ConvNets/lab/PetFaces.ipynb | 70 +++++++++----- .../07-ConvNets/lab/README.md | 20 ++-- .../07-ConvNets/lab/PetFaces.ipynb | 60 ++++++++---- .../07-ConvNets/lab/README.md | 22 +++-- .../07-ConvNets/lab/PetFaces.ipynb | 62 ++++++++---- .../07-ConvNets/lab/README.md | 18 ++-- .../07-ConvNets/lab/PetFaces.ipynb | 52 ++++++---- .../07-ConvNets/lab/README.md | 32 ++++--- .../07-ConvNets/lab/PetFaces.ipynb | 74 +++++++++------ .../07-ConvNets/lab/README.md | 28 +++--- .../07-ConvNets/lab/PetFaces.ipynb | 64 ++++++++----- .../07-ConvNets/lab/README.md | 16 ++-- .../07-ConvNets/lab/PetFaces.ipynb | 76 +++++++++------ .../07-ConvNets/lab/README.md | 30 +++--- .../07-ConvNets/lab/PetFaces.ipynb | 70 +++++++++----- .../07-ConvNets/lab/README.md | 22 +++-- .../07-ConvNets/lab/PetFaces.ipynb | 66 ++++++++----- .../07-ConvNets/lab/README.md | 20 ++-- .../07-ConvNets/lab/PetFaces.ipynb | 70 +++++++++----- .../07-ConvNets/lab/README.md | 18 ++-- .../07-ConvNets/lab/PetFaces.ipynb | 74 +++++++++------ .../07-ConvNets/lab/README.md | 28 +++--- .../07-ConvNets/lab/PetFaces.ipynb | 76 +++++++++------ .../07-ConvNets/lab/README.md | 18 ++-- 96 files changed, 2727 insertions(+), 1593 deletions(-) diff --git a/translations/ar/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb b/translations/ar/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb index 13557bf9..d40508b1 100644 --- a/translations/ar/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb +++ b/translations/ar/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb @@ -10,7 +10,9 @@ "\n", "### الحصول على البيانات\n", "\n", - "في هذه المهمة، سنركز على مهمة تصنيف بسيطة نسبيًا - تصنيف وجوه الحيوانات الأليفة. يتكون هذا المجموعة من صور مقطوعة للوجوه مأخوذة من [مجموعة بيانات أكسفورد-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/). لنبدأ بتحميل المجموعة وعرضها.\n" + "في هذه المهمة، سنركز على مهمة تصنيف بسيطة نسبيًا - تصنيف وجوه الحيوانات الأليفة. سنستخدم [مجموعة بيانات الحيوانات الأليفة من أكسفورد-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/)، التي تحتوي على صور لـ 37 سلالة مختلفة من الكلاب والقطط. لنبدأ بتنزيل المجموعة وعرضها.\n", + "\n", + "**ملاحظة:** تحتوي مجموعة بيانات الحيوانات الأليفة من أكسفورد-IIIT على صور كاملة للحيوانات الأليفة. سيتم تنظيم الصور حسب السلالة في المجلد المستخرج.\n" ] }, { @@ -77,7 +79,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "الآن دعونا نستعرض جميع أدلة الفئات الفرعية ونرسم أول بضعة صور من كل فئة:\n" + "الآن دعونا نستعرض جميع المجلدات الفرعية للفئات ونرسم أول بضعة صور من كل فئة:\n" ] }, { @@ -86,6 +88,24 @@ "metadata": {}, "outputs": [], "source": [ + "# Note: The Oxford-IIIT Pet Dataset extracts to a folder named 'images'\n", + "# Images are named by breed (e.g., 'Abyssinian_1.jpg')\n", + "# We need to organize them into breed-specific subdirectories\n", + "import os\n", + "from collections import defaultdict\n", + "\n", + "# Organize images by breed\n", + "if not os.path.exists('petfaces'):\n", + " os.makedirs('petfaces')\n", + " for img_file in os.listdir('images'):\n", + " if img_file.endswith(('.jpg', '.png')):\n", + " # Extract breed name from filename (everything before the last underscore and number)\n", + " breed = '_'.join(img_file.split('_')[:-1])\n", + " breed_dir = os.path.join('petfaces', breed)\n", + " if not os.path.exists(breed_dir):\n", + " os.makedirs(breed_dir)\n", + " os.rename(os.path.join('images', img_file), os.path.join(breed_dir, img_file))\n", + "\n", "for cls in os.listdir('petfaces'):\n", " print(cls)\n", " display_images([Image.open(os.path.join('petfaces',cls,x)) \n", @@ -96,7 +116,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "دعونا أيضًا نحدد عدد الفئات في مجموعة البيانات الخاصة بنا:\n" + "دعونا نحدد أيضًا عدد الفئات في مجموعة البيانات الخاصة بنا:\n" ] }, { @@ -124,13 +144,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## تجهيز مجموعة البيانات للتعلم العميق\n", + "## إعداد مجموعة البيانات للتعلم العميق\n", "\n", - "لبدء تدريب الشبكة العصبية، نحتاج إلى تحويل جميع الصور إلى تنسورات، وأيضًا إنشاء تنسورات تتوافق مع التصنيفات (أرقام الفئات). تحتوي معظم أطر عمل الشبكات العصبية على أدوات بسيطة للتعامل مع الصور:\n", + "لبدء تدريب الشبكة العصبية، نحتاج إلى تحويل جميع الصور إلى موترات، وكذلك إنشاء موترات تتوافق مع التصنيفات (أرقام الفئات). تحتوي معظم أطر عمل الشبكات العصبية على أدوات بسيطة للتعامل مع الصور:\n", "* في Tensorflow، استخدم `tf.keras.preprocessing.image_dataset_from_directory`\n", "* في PyTorch، استخدم `torchvision.datasets.ImageFolder`\n", "\n", - "كما رأيت من الصور أعلاه، جميعها تقريبًا ذات نسبة قريبة من الصور المربعة، لذا نحتاج إلى تغيير حجم جميع الصور إلى حجم مربع. بالإضافة إلى ذلك، يمكننا تنظيم الصور في دفعات صغيرة.\n" + "كما رأيت من الصور أعلاه، جميعها تقريبًا ذات نسبة قريبة من المربع، لذا نحتاج إلى تغيير حجم جميع الصور إلى حجم مربع. بالإضافة إلى ذلك، يمكننا تنظيم الصور في دفعات صغيرة.\n" ] }, { @@ -146,7 +166,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "الآن نحتاج إلى تقسيم مجموعة البيانات إلى أجزاء التدريب والاختبار:\n" + "الآن نحتاج إلى تقسيم مجموعة البيانات إلى أجزاء للتدريب والاختبار:\n" ] }, { @@ -162,11 +182,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "الآن دعونا نطبع حجم المصفوفات في مجموعة البيانات الخاصة بنا. إذا قمت بكل شيء بشكل صحيح، يجب أن يكون حجم عناصر التدريب كالتالي:\n", + "الآن دعونا نطبع حجم المصفوفات في مجموعتنا البيانية. إذا كنت قد نفذت كل شيء بشكل صحيح، يجب أن يكون حجم عناصر التدريب كالتالي:\n", " * `(batch_size,image_size,image_size,3)` لـ Tensorflow، و `batch_size,3,image_size,image_size` لـ PyTorch\n", - " * `batch_size` لـ التصنيفات\n", + " * `batch_size` بالنسبة للتسميات\n", "\n", - "يجب أن تحتوي التصنيفات على أرقام الفئات.\n" + "يجب أن تحتوي التسميات على أرقام الفئات.\n" ] }, { @@ -228,16 +248,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## تعريف شبكة عصبية\n", + "## تعريف الشبكة العصبية\n", "\n", "لتصنيف الصور، من الأفضل تعريف شبكة عصبية تلافيفية تحتوي على عدة طبقات. ما يجب الانتباه إليه:\n", - "* تذكر هيكلية الهرم، أي أن عدد المرشحات (filters) يجب أن يزداد كلما تعمقت في الشبكة.\n", - "* لا تنسَ استخدام دوال التفعيل (ReLU) بين الطبقات، بالإضافة إلى Max Pooling.\n", - "* المصنف النهائي يمكن أن يكون مع أو بدون طبقات مخفية، ولكن يجب أن يكون عدد الخلايا العصبية في المخرجات مساويًا لعدد الفئات.\n", + "* ضع في اعتبارك هيكل الهرم، أي أن عدد الفلاتر يجب أن يزيد كلما تعمقت في الشبكة.\n", + "* لا تنسَ وظائف التنشيط بين الطبقات (ReLU) والتجميع الأقصى (Max Pooling).\n", + "* المصنف النهائي يمكن أن يكون مع أو بدون طبقات مخفية، ولكن يجب أن يكون عدد الخلايا العصبية في الطبقة الأخيرة مساويًا لعدد الفئات.\n", "\n", - "من المهم جدًا اختيار دالة التفعيل في الطبقة الأخيرة + دالة الخسارة بشكل صحيح:\n", - "* في Tensorflow، يمكنك استخدام `softmax` كدالة تفعيل، و`sparse_categorical_crossentropy` كدالة خسارة. الفرق بين الخسارة التصنيفية الفئوية المتفرقة وغير المتفرقة هو أن الأولى تتوقع المخرجات كرقم يمثل الفئة، وليس كمتجه واحد-ساخن (one-hot vector).\n", - "* في PyTorch، يمكنك أن تكون الطبقة الأخيرة بدون دالة تفعيل، واستخدام دالة الخسارة `CrossEntropyLoss`. هذه الدالة تطبق softmax تلقائيًا.\n" + "من المهم جدًا اختيار وظيفة التنشيط في الطبقة الأخيرة + وظيفة الخسارة بشكل صحيح:\n", + "* في Tensorflow، يمكنك استخدام `softmax` كوظيفة تنشيط، و`sparse_categorical_crossentropy` كوظيفة خسارة. الفرق بين الخسارة التصنيفية الفئوية النادرة وغير النادرة هو أن الأولى تتوقع الإخراج كرقم الفئة، وليس كمتجه واحد-ساخن.\n", + "* في PyTorch، يمكنك أن تكون الطبقة الأخيرة بدون وظيفة تنشيط، واستخدام وظيفة الخسارة `CrossEntropyLoss`. هذه الوظيفة تطبق softmax تلقائيًا.\n" ] }, { @@ -255,9 +275,9 @@ "source": [ "## تدريب الشبكة العصبية\n", "\n", - "الآن نحن جاهزون لتدريب الشبكة العصبية. أثناء التدريب، يرجى جمع دقة البيانات التدريبية والاختبارية في كل حقبة، ثم قم برسم الدقة لمعرفة ما إذا كان هناك إفراط في التكيف.\n", + "الآن نحن جاهزون لتدريب الشبكة العصبية. أثناء التدريب، يرجى جمع دقة البيانات التدريبية والاختبارية في كل عصر، ثم رسم الدقة لمعرفة ما إذا كان هناك إفراط في التكيف.\n", "\n", - "> لتسريع عملية التدريب، تحتاج إلى استخدام GPU إذا كان متاحًا. بينما سيستخدم TensorFlow/Keras الـ GPU تلقائيًا، في PyTorch تحتاج إلى نقل كل من النموذج والبيانات إلى الـ GPU أثناء التدريب باستخدام طريقة `.to()` للاستفادة من تسريع الـ GPU.\n" + "> لتسريع عملية التدريب، تحتاج إلى استخدام وحدة معالجة الرسومات (GPU) إذا كانت متوفرة. بينما يقوم TensorFlow/Keras تلقائيًا باستخدام وحدة معالجة الرسومات، في PyTorch تحتاج إلى نقل النموذج والبيانات إلى وحدة معالجة الرسومات أثناء التدريب باستخدام طريقة `.to()` للاستفادة من تسريع وحدة معالجة الرسومات.\n" ] }, { @@ -295,17 +315,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "ما الذي يمكن قوله عن الإفراط في التكيّف؟ وما الذي يمكن فعله لتحسين دقة النموذج؟\n", + "ما الذي يمكن قوله عن الإفراط في التخصيص؟ وما الذي يمكن فعله لتحسين دقة النموذج؟\n", "\n", "## اختياري: حساب دقة Top3\n", "\n", - "في هذا التمرين، كنا نتعامل مع تصنيف يحتوي على عدد كبير من الفئات (35)، لذا فإن النتيجة التي حصلنا عليها - حوالي 50% دقة التحقق - تعتبر جيدة جدًا. مجموعة بيانات ImageNet القياسية تحتوي على عدد أكبر - 1000 فئة.\n", + "في هذا التمرين، كنا نتعامل مع تصنيف يحتوي على عدد كبير من الفئات (35)، لذا فإن النتيجة التي حصلنا عليها - حوالي 50% دقة التحقق - تعتبر جيدة جدًا. مجموعة بيانات ImageNet القياسية تحتوي على عدد أكبر من الفئات - 1000 فئة.\n", "\n", - "في مثل هذه الحالات، من الصعب ضمان أن النموذج **دائمًا** يتنبأ بالفئة الصحيحة. هناك حالات تكون فيها سلالتان متشابهتان جدًا، ويُرجع النموذج احتمالات متقاربة جدًا (على سبيل المثال، 0.45 و 0.43). إذا قمنا بقياس الدقة القياسية، سيتم اعتبار ذلك حالة خاطئة، على الرغم من أن الخطأ الذي ارتكبه النموذج صغير جدًا. لهذا السبب، غالبًا ما نقيس معيارًا آخر - وهو الدقة ضمن أعلى 3 تنبؤات الأكثر احتمالًا للنموذج.\n", + "في مثل هذه الحالات، من الصعب ضمان أن النموذج **دائمًا** يتنبأ بالفئة الصحيحة. هناك حالات تكون فيها سلالتان متشابهتان جدًا، ويقوم النموذج بإرجاع احتمالات متقاربة جدًا (على سبيل المثال، 0.45 و 0.43). إذا قمنا بقياس الدقة القياسية، سيتم اعتبار ذلك حالة خاطئة، على الرغم من أن الخطأ الذي ارتكبه النموذج صغير جدًا. لهذا السبب، غالبًا ما نقيس معيارًا آخر - وهو الدقة ضمن أعلى 3 توقعات الأكثر احتمالًا للنموذج.\n", "\n", - "نعتبر الحالة دقيقة إذا كانت الفئة المستهدفة موجودة ضمن أعلى 3 تنبؤات للنموذج.\n", + "نعتبر الحالة دقيقة إذا كانت الفئة المستهدفة موجودة ضمن أعلى 3 توقعات للنموذج.\n", "\n", - "لحساب دقة top-3 على مجموعة بيانات الاختبار، تحتاج إلى مراجعة مجموعة البيانات يدويًا، تطبيق الشبكة العصبية للحصول على التنبؤ، ثم إجراء الحسابات. بعض التلميحات:\n", + "لحساب دقة Top-3 على مجموعة بيانات الاختبار، تحتاج إلى مراجعة مجموعة البيانات يدويًا، وتطبيق الشبكة العصبية للحصول على التوقعات، ثم إجراء الحسابات. بعض التلميحات:\n", "\n", "* في Tensorflow، استخدم وظيفة `tf.nn.in_top_k` لمعرفة ما إذا كانت `predictions` (مخرجات النموذج) ضمن أعلى k (مرر `k=3` كمعامل)، بالنسبة إلى `targets`. تُرجع هذه الوظيفة مصفوفة من القيم المنطقية، والتي يمكن تحويلها إلى `int` باستخدام `tf.cast`، ثم تجميعها باستخدام `tf.reduce_sum`.\n", "* في PyTorch، يمكنك استخدام وظيفة `torch.topk` للحصول على مؤشرات الفئات ذات الاحتمالات الأعلى، ثم التحقق مما إذا كانت الفئة الصحيحة تنتمي إليها. انظر [هذا](https://gist.github.com/weiaicunzai/2a5ae6eac6712c70bde0630f3e76b77b) للحصول على المزيد من التلميحات.\n" @@ -326,7 +346,7 @@ "source": [ "## اختياري: بناء تصنيف القطط مقابل الكلاب\n", "\n", - "نريد أيضًا معرفة مدى دقة تصنيفنا الثنائي للقطط مقابل الكلاب على نفس مجموعة البيانات. للقيام بذلك، نحتاج إلى تعديل التسميات:\n" + "نريد أيضًا معرفة مدى دقة تصنيفنا الثنائي للقطط مقابل الكلاب على نفس مجموعة البيانات. للقيام بذلك، نحتاج إلى تعديل التصنيفات:\n" ] }, { @@ -352,7 +372,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n---\n\n**إخلاء المسؤولية**: \nتم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الموثوق. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.\n" + "\n---\n\n**إخلاء المسؤولية**: \nتم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالترجمة البشرية الاحترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.\n" ] } ], @@ -378,8 +398,8 @@ "version": "3.9.5" }, "coopTranslator": { - "original_hash": "1de3ae931831253c3198d899da48bfe5", - "translation_date": "2025-08-28T03:03:51+00:00", + "original_hash": "df7d1f7da8d2617b76acd93115776ca4", + "translation_date": "2025-10-03T14:27:00+00:00", "source_file": "lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb", "language_code": "ar" } diff --git a/translations/ar/lessons/4-ComputerVision/07-ConvNets/lab/README.md b/translations/ar/lessons/4-ComputerVision/07-ConvNets/lab/README.md index b136d504..93f88065 100644 --- a/translations/ar/lessons/4-ComputerVision/07-ConvNets/lab/README.md +++ b/translations/ar/lessons/4-ComputerVision/07-ConvNets/lab/README.md @@ -1,8 +1,8 @@ # Класификация на лицата на домашни любимци -Лабораторно упражнение от [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners). +Лабораторно упражнение от [Учебна програма за начинаещи в AI](https://github.com/microsoft/ai-for-beginners). ## Задача Представете си, че трябва да разработите приложение за детска градина за домашни любимци, което да каталогизира всички животни. Една от страхотните функции на такова приложение би била автоматичното разпознаване на породата от снимка. Това може успешно да се постигне с помощта на невронни мрежи. -Трябва да обучите конволюционна невронна мрежа, за да класифицирате различни породи котки и кучета, използвайки набора от данни **Pet Faces**. +Трябва да обучите конволюционна невронна мрежа, за да класифицирате различни породи котки и кучета, използвайки **Pet Faces** набора от данни. ## Наборът от данни -Ще използваме набора от данни **Pet Faces**, който е извлечен от набора от данни за домашни любимци [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/). Той съдържа 35 различни породи кучета и котки. +Ще използваме [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/), който съдържа изображения на 37 различни породи кучета и котки. ![Наборът от данни, с който ще работим](../../../../../../translated_images/data.50b2a9d5484bdbf0f52f5765b381cec9efe2bd296a98f007f90bedb6ac67f2a8.bg.png) @@ -31,13 +31,17 @@ CO_OP_TRANSLATOR_METADATA: !rm images.tar.gz ``` -## Начален Notebook +**Забележка:** Изображенията в Oxford-IIIT Pet Dataset са организирани по имена на файлове (например `Abyssinian_1.jpg`, `Bengal_2.jpg`). В ноутбука е включен код за организиране на тези изображения в поддиректории, специфични за породата, за по-лесна класификация. -Започнете лабораторното упражнение, като отворите [PetFaces.ipynb](../../../../../../lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb) +## Начален ноутбук + +Започнете лабораторното упражнение, като отворите [PetFaces.ipynb](PetFaces.ipynb) ## Изводи -Решихте сравнително сложен проблем за класификация на изображения от нулата! Имаше доста класове, но все пак успяхте да постигнете разумна точност! Също така има смисъл да измервате top-k точност, защото е лесно да се объркат някои от класовете, които дори за хората не са ясно различими. +Решихте сравнително сложен проблем с класификация на изображения от нулата! Имаше доста класове, но въпреки това успяхте да постигнете разумна точност! Също така има смисъл да измервате top-k точност, защото е лесно да се объркат някои от класовете, които дори за хората не са ясно различими. + +--- **Отказ от отговорност**: -Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за каквито и да било недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bn/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb b/translations/bn/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb index 74e063d6..73d0836d 100644 --- a/translations/bn/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb +++ b/translations/bn/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb @@ -4,13 +4,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# পোষা প্রাণীর মুখের শ্রেণীবিভাগ\n", + "# পোষা প্রাণীর মুখের শ্রেণীবিন্যাস\n", "\n", "[AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) থেকে ল্যাব অ্যাসাইনমেন্ট।\n", "\n", - "### ডেটা সংগ্রহ\n", + "### ডেটা সংগ্রহ করা\n", "\n", - "এই অ্যাসাইনমেন্টে, আমরা একটি তুলনামূলকভাবে সহজ শ্রেণীবিভাগ কাজের উপর মনোযোগ দেব - পোষা প্রাণীর মুখের শ্রেণীবিভাগ। এই ডেটাসেটটি [Oxford-IIIT Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/) থেকে কাটা মুখের ছবি নিয়ে গঠিত। চলুন ডেটাসেটটি লোড এবং ভিজুয়ালাইজ করার মাধ্যমে শুরু করি।\n" + "এই অ্যাসাইনমেন্টে আমরা একটি তুলনামূলকভাবে সহজ শ্রেণীবিন্যাস কাজের উপর মনোযোগ দেব - পোষা প্রাণীর মুখের শ্রেণীবিন্যাস। আমরা [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/) ব্যবহার করব, যা কুকুর এবং বিড়ালের ৩৭টি বিভিন্ন প্রজাতির ছবি ধারণ করে। চলুন ডেটাসেটটি ডাউনলোড এবং ভিজুয়ালাইজ করার মাধ্যমে শুরু করি।\n", + "\n", + "**নোট:** Oxford-IIIT Pet Dataset-এ সম্পূর্ণ পোষা প্রাণীর ছবি রয়েছে। এক্সট্র্যাক্ট করা ফোল্ডারে ছবিগুলি প্রজাতি অনুযায়ী সংগঠিত থাকবে।\n" ] }, { @@ -77,7 +79,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "এখন চলুন সমস্ত ক্লাস সাবডিরেক্টরিগুলি পরিভ্রমণ করি এবং প্রতিটি ক্লাসের প্রথম কয়েকটি চিত্র প্লট করি:\n" + "এখন চলুন সমস্ত ক্লাস সাবডিরেক্টরি ঘুরে দেখি এবং প্রতিটি ক্লাসের প্রথম কয়েকটি ছবি প্লট করি:\n" ] }, { @@ -86,6 +88,24 @@ "metadata": {}, "outputs": [], "source": [ + "# Note: The Oxford-IIIT Pet Dataset extracts to a folder named 'images'\n", + "# Images are named by breed (e.g., 'Abyssinian_1.jpg')\n", + "# We need to organize them into breed-specific subdirectories\n", + "import os\n", + "from collections import defaultdict\n", + "\n", + "# Organize images by breed\n", + "if not os.path.exists('petfaces'):\n", + " os.makedirs('petfaces')\n", + " for img_file in os.listdir('images'):\n", + " if img_file.endswith(('.jpg', '.png')):\n", + " # Extract breed name from filename (everything before the last underscore and number)\n", + " breed = '_'.join(img_file.split('_')[:-1])\n", + " breed_dir = os.path.join('petfaces', breed)\n", + " if not os.path.exists(breed_dir):\n", + " os.makedirs(breed_dir)\n", + " os.rename(os.path.join('images', img_file), os.path.join(breed_dir, img_file))\n", + "\n", "for cls in os.listdir('petfaces'):\n", " print(cls)\n", " display_images([Image.open(os.path.join('petfaces',cls,x)) \n", @@ -96,7 +116,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "চলুন আমাদের ডেটাসেটে শ্রেণীর সংখ্যা নির্ধারণ করি:\n" + "আসুন আমাদের ডেটাসেটে শ্রেণির সংখ্যা নির্ধারণ করি:\n" ] }, { @@ -124,13 +144,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## ডিপ লার্নিংয়ের জন্য ডেটাসেট প্রস্তুত করা\n", + "## ডিপ লার্নিংয়ের জন্য ডেটাসেট প্রস্তুত করা\n", "\n", - "আমাদের নিউরাল নেটওয়ার্ক প্রশিক্ষণ শুরু করতে, সমস্ত ছবিকে টেনসরে রূপান্তর করতে হবে এবং লেবেল (ক্লাস নম্বর) এর জন্যও টেনসর তৈরি করতে হবে। বেশিরভাগ নিউরাল নেটওয়ার্ক ফ্রেমওয়ার্কে ছবির সাথে কাজ করার জন্য সহজ টুলস থাকে:\n", - "* Tensorflow-এ, ব্যবহার করুন `tf.keras.preprocessing.image_dataset_from_directory`\n", - "* PyTorch-এ, ব্যবহার করুন `torchvision.datasets.ImageFolder`\n", + "আমাদের নিউরাল নেটওয়ার্ক প্রশিক্ষণ শুরু করতে, সমস্ত ছবিকে টেনসরে রূপান্তর করতে হবে এবং লেবেল (ক্লাস নম্বর) অনুযায়ী টেনসর তৈরি করতে হবে। বেশিরভাগ নিউরাল নেটওয়ার্ক ফ্রেমওয়ার্কে ছবির সাথে কাজ করার জন্য সহজ টুলস থাকে:\n", + "* Tensorflow-এ, `tf.keras.preprocessing.image_dataset_from_directory` ব্যবহার করুন\n", + "* PyTorch-এ, `torchvision.datasets.ImageFolder` ব্যবহার করুন\n", "\n", - "উপরে ছবিগুলো থেকে আপনি দেখেছেন, এগুলো প্রায় সবই বর্গাকার অনুপাতের কাছাকাছি, তাই আমাদের সমস্ত ছবিকে বর্গাকার আকারে রিসাইজ করতে হবে। এছাড়াও, আমরা ছবিগুলোকে মিনিব্যাচে সংগঠিত করতে পারি।\n" + "উপরে ছবিগুলো থেকে আপনি দেখেছেন, সবগুলোই প্রায় বর্গাকার অনুপাতের কাছাকাছি, তাই আমাদের সমস্ত ছবিকে বর্গাকার আকারে রিসাইজ করতে হবে। এছাড়াও, আমরা ছবিগুলোকে মিনিব্যাচে সংগঠিত করতে পারি।\n" ] }, { @@ -162,11 +182,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "এখন আমাদের ডেটাসেটে টেনসরগুলোর আকার প্রিন্ট করি। যদি সবকিছু সঠিকভাবে করা হয়ে থাকে, তাহলে ট্রেনিং উপাদানগুলোর আকার হবে:\n", - " * Tensorflow এর জন্য `(batch_size,image_size,image_size,3)`, PyTorch এর জন্য `batch_size,3,image_size,image_size`\n", - " * লেবেলগুলোর জন্য `batch_size`\n", + "এখন আমাদের ডেটাসেটে টেনসরগুলোর আকার প্রিন্ট করি। যদি আপনি সবকিছু সঠিকভাবে করে থাকেন, তাহলে প্রশিক্ষণের উপাদানগুলোর আকার হবে:\n", + " * টেনসরফ্লোরের জন্য `(batch_size,image_size,image_size,3)`, পাইটর্চের জন্য `batch_size,3,image_size,image_size`\n", + " * লেবেলের জন্য `batch_size`\n", " \n", - "লেবেলগুলোতে ক্লাসের সংখ্যা থাকা উচিত।\n" + " লেবেলগুলোতে শ্রেণির সংখ্যা থাকা উচিত।\n" ] }, { @@ -231,13 +251,13 @@ "## একটি নিউরাল নেটওয়ার্ক সংজ্ঞায়িত করুন\n", "\n", "ইমেজ শ্রেণীবিন্যাসের জন্য, আপনাকে সম্ভবত কয়েকটি স্তর সহ একটি কনভোলিউশনাল নিউরাল নেটওয়ার্ক সংজ্ঞায়িত করতে হবে। যেসব বিষয়ে নজর রাখা উচিত:\n", - "* পিরামিড আর্কিটেকচারের কথা মনে রাখুন, অর্থাৎ স্তর যত গভীরে যাবে, ফিল্টারের সংখ্যা তত বাড়বে।\n", + "* পিরামিড আর্কিটেকচারের কথা মনে রাখুন, অর্থাৎ স্তর যত গভীরে যাবে, ফিল্টারের সংখ্যা তত বাড়তে হবে।\n", "* স্তরগুলোর মধ্যে অ্যাক্টিভেশন ফাংশন (ReLU) এবং ম্যাক্স পুলিং ভুলে যাবেন না।\n", "* চূড়ান্ত শ্রেণীবিন্যাসকারী লুকানো স্তর সহ বা ছাড়া হতে পারে, তবে আউটপুট নিউরনের সংখ্যা শ্রেণীর সংখ্যার সমান হওয়া উচিত।\n", "\n", "একটি গুরুত্বপূর্ণ বিষয় হল শেষ স্তরের অ্যাক্টিভেশন ফাংশন + লস ফাংশন সঠিকভাবে সেট করা:\n", - "* টেনসরফ্লো-তে, আপনি `softmax` অ্যাক্টিভেশন এবং `sparse_categorical_crossentropy` লস ব্যবহার করতে পারেন। স্পার্স ক্যাটেগরিকাল ক্রস-এন্ট্রোপি এবং নন-স্পার্সের মধ্যে পার্থক্য হল যে প্রথমটি আউটপুটকে শ্রেণীর সংখ্যা হিসেবে আশা করে, এবং ওয়ান-হট ভেক্টর হিসেবে নয়।\n", - "* পাইটর্চ-এ, আপনি চূড়ান্ত স্তরটি অ্যাক্টিভেশন ফাংশন ছাড়া রাখতে পারেন এবং `CrossEntropyLoss` লস ফাংশন ব্যবহার করতে পারেন। এই ফাংশনটি স্বয়ংক্রিয়ভাবে softmax প্রয়োগ করে।\n" + "* Tensorflow-এ, আপনি `softmax` অ্যাক্টিভেশন এবং `sparse_categorical_crossentropy` লস ব্যবহার করতে পারেন। স্পার্স ক্যাটেগরিকাল ক্রস-এন্ট্রোপি এবং নন-স্পার্সের মধ্যে পার্থক্য হল যে প্রথমটি আউটপুটকে শ্রেণীর সংখ্যা হিসেবে আশা করে, এবং এক-হট ভেক্টর হিসেবে নয়।\n", + "* PyTorch-এ, আপনি চূড়ান্ত স্তরটি অ্যাক্টিভেশন ফাংশন ছাড়া রাখতে পারেন এবং `CrossEntropyLoss` লস ফাংশন ব্যবহার করতে পারেন। এই ফাংশনটি স্বয়ংক্রিয়ভাবে softmax প্রয়োগ করে।\n" ] }, { @@ -255,9 +275,9 @@ "source": [ "## নিউরাল নেটওয়ার্ক প্রশিক্ষণ দিন\n", "\n", - "এখন আমরা নিউরাল নেটওয়ার্ক প্রশিক্ষণের জন্য প্রস্তুত। প্রশিক্ষণের সময়, প্রতিটি epoch-এ train এবং test ডেটার উপর সঠিকতার (accuracy) তথ্য সংগ্রহ করুন এবং তারপর সঠিকতার গ্রাফ আঁকুন যাতে দেখা যায় কোনো overfitting হচ্ছে কিনা।\n", + "এখন আমরা নিউরাল নেটওয়ার্ক প্রশিক্ষণের জন্য প্রস্তুত। প্রশিক্ষণের সময়, প্রতিটি epoch-এ train এবং test ডেটার উপর সঠিকতার তথ্য সংগ্রহ করুন এবং তারপর সঠিকতার গ্রাফ তৈরি করুন যাতে দেখা যায় কোনো overfitting হচ্ছে কিনা।\n", "\n", - "> প্রশিক্ষণের গতি বাড়ানোর জন্য, GPU ব্যবহার করতে হবে যদি এটি উপলব্ধ থাকে। TensorFlow/Keras স্বয়ংক্রিয়ভাবে GPU ব্যবহার করবে, কিন্তু PyTorch-এ আপনাকে প্রশিক্ষণের সময় `.to()` মেথড ব্যবহার করে মডেল এবং ডেটা উভয়কেই GPU-তে স্থানান্তর করতে হবে GPU-র গতি সুবিধা নেওয়ার জন্য।\n" + "> প্রশিক্ষণের গতি বাড়ানোর জন্য GPU ব্যবহার করতে হবে যদি এটি উপলব্ধ থাকে। TensorFlow/Keras স্বয়ংক্রিয়ভাবে GPU ব্যবহার করবে, কিন্তু PyTorch-এ আপনাকে প্রশিক্ষণের সময় `.to()` মেথড ব্যবহার করে মডেল এবং ডেটা GPU-তে স্থানান্তর করতে হবে GPU ত্বরান্বিতকরণের সুবিধা নেওয়ার জন্য।\n" ] }, { @@ -295,20 +315,20 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "ওভারফিটিং সম্পর্কে আপনি কী বলতে পারেন? মডেলের সঠিকতা উন্নত করতে কী করা যেতে পারে?\n", + "ওভারফিটিং সম্পর্কে কী বলা যায়? মডেলের সঠিকতা উন্নত করতে কী করা যেতে পারে?\n", "\n", - "## ঐচ্ছিক: টপ-৩ সঠিকতা গণনা করুন\n", + "## ঐচ্ছিক: টপ-৩ অ্যাকুরেসি গণনা করুন\n", "\n", - "এই অনুশীলনে, আমরা এমন একটি শ্রেণীবিভাজন নিয়ে কাজ করছিলাম যেখানে শ্রেণীর সংখ্যা বেশ বেশি (৩৫), তাই আমাদের ফলাফল - প্রায় ৫০% যাচাইকরণ সঠিকতা - বেশ ভালো। স্ট্যান্ডার্ড ইমেজনেট ডেটাসেটে আরও বেশি শ্রেণী থাকে - ১০০০।\n", + "এই অনুশীলনে, আমরা বেশ উচ্চ সংখ্যক ক্লাস (৩৫) নিয়ে শ্রেণীবিন্যাস করছিলাম, তাই আমাদের ফলাফল - প্রায় ৫০% ভ্যালিডেশন অ্যাকুরেসি - বেশ ভালো। স্ট্যান্ডার্ড ImageNet ডেটাসেটে আরও বেশি ক্লাস থাকে - ১০০০।\n", "\n", - "এমন ক্ষেত্রে মডেলটি **সবসময়** সঠিকভাবে শ্রেণী অনুমান করবে তা নিশ্চিত করা কঠিন। এমন কিছু পরিস্থিতি থাকে যেখানে দুটি প্রজাতি একে অপরের সাথে খুবই সাদৃশ্যপূর্ণ, এবং মডেল খুব কাছাকাছি সম্ভাবনা প্রদান করে (যেমন, ০.৪৫ এবং ০.৪৩)। যদি আমরা স্ট্যান্ডার্ড সঠিকতা পরিমাপ করি, এটি ভুল হিসেবে গণ্য হবে, যদিও মডেল খুব ছোট একটি ভুল করেছে। এই কারণে, আমরা প্রায়ই আরেকটি মেট্রিক পরিমাপ করি - মডেলের সবচেয়ে সম্ভাব্য তিনটি অনুমানের মধ্যে সঠিকতা।\n", + "এমন ক্ষেত্রে নিশ্চিত করা কঠিন যে মডেল **সবসময়** সঠিকভাবে ক্লাস পূর্বাভাস করবে। এমন কিছু পরিস্থিতি থাকে যেখানে দুটি প্রজাতি একে অপরের সাথে খুবই মিল থাকে, এবং মডেল খুব কাছাকাছি সম্ভাবনা প্রদান করে (যেমন, ০.৪৫ এবং ০.৪৩)। যদি আমরা স্ট্যান্ডার্ড অ্যাকুরেসি পরিমাপ করি, এটি ভুল হিসেবে গণ্য হবে, যদিও মডেল খুব ছোট একটি ভুল করেছে। এই কারণে, আমরা প্রায়ই আরেকটি মেট্রিক পরিমাপ করি - মডেলের সর্বাধিক সম্ভাব্য তিনটি পূর্বাভাসের মধ্যে অ্যাকুরেসি।\n", "\n", - "আমরা একটি কেসকে সঠিক বলে বিবেচনা করি যদি লক্ষ্য লেবেলটি মডেলের শীর্ষ ৩ অনুমানের মধ্যে থাকে।\n", + "আমরা একটি ক্ষেত্রে সঠিক বলে বিবেচনা করি যদি টার্গেট লেবেল মডেলের টপ-৩ পূর্বাভাসের মধ্যে থাকে।\n", "\n", - "পরীক্ষার ডেটাসেটে টপ-৩ সঠিকতা গণনা করতে, আপনাকে ডেটাসেটটি ম্যানুয়ালি পর্যবেক্ষণ করতে হবে, নিউরাল নেটওয়ার্ক প্রয়োগ করে অনুমান পেতে হবে, এবং তারপর গণনা করতে হবে। কিছু পরামর্শ:\n", + "টেস্ট ডেটাসেটে টপ-৩ অ্যাকুরেসি গণনা করতে, আপনাকে ম্যানুয়ালি ডেটাসেটের উপর যেতে হবে, নিউরাল নেটওয়ার্ক প্রয়োগ করে পূর্বাভাস পেতে হবে, এবং তারপর গণনা করতে হবে। কিছু পরামর্শ:\n", "\n", - "* টেনসরফ্লো-তে, `tf.nn.in_top_k` ফাংশন ব্যবহার করুন দেখতে যে `predictions` (মডেলের আউটপুট) টপ-k-তে আছে কিনা (প্যারামিটার হিসেবে `k=3` পাস করুন), `targets` এর সাথে সম্পর্কিত। এই ফাংশন একটি বুলিয়ান মানের টেনসর প্রদান করে, যা `tf.cast` ব্যবহার করে `int`-এ রূপান্তর করা যায়, এবং তারপর `tf.reduce_sum` ব্যবহার করে যোগ করা যায়।\n", - "* পাইটর্চ-এ, আপনি `torch.topk` ফাংশন ব্যবহার করতে পারেন উচ্চতর সম্ভাবনার শ্রেণীর ইনডেক্স পেতে, এবং তারপর দেখতে পারেন সঠিক শ্রেণীটি তাদের মধ্যে আছে কিনা। আরও পরামর্শের জন্য [এটি](https://gist.github.com/weiaicunzai/2a5ae6eac6712c70bde0630f3e76b77b) দেখুন।\n" + "* Tensorflow-এ, `tf.nn.in_top_k` ফাংশন ব্যবহার করুন দেখতে যে `predictions` (মডেলের আউটপুট) টপ-k এর মধ্যে আছে কিনা (প্যারামিটার হিসেবে `k=3` পাস করুন), `targets` এর সাথে সম্পর্কিত। এই ফাংশন একটি বুলিয়ান মানের টেনসর প্রদান করে, যা `tf.cast` ব্যবহার করে `int` এ রূপান্তরিত করা যায়, এবং তারপর `tf.reduce_sum` ব্যবহার করে যোগ করা যায়।\n", + "* PyTorch-এ, আপনি `torch.topk` ফাংশন ব্যবহার করতে পারেন উচ্চ সম্ভাবনার ক্লাসগুলোর ইনডেক্স পেতে, এবং তারপর দেখতে পারেন সঠিক ক্লাস তাদের মধ্যে আছে কিনা। আরও পরামর্শের জন্য [এটি](https://gist.github.com/weiaicunzai/2a5ae6eac6712c70bde0630f3e76b77b) দেখুন।\n" ] }, { @@ -326,7 +346,7 @@ "source": [ "## ঐচ্ছিক: বিড়াল বনাম কুকুর শ্রেণীবিন্যাস তৈরি করুন\n", "\n", - "আমরা দেখতে চাই আমাদের দ্বৈত বিড়াল বনাম কুকুর শ্রেণীবিন্যাস একই ডেটাসেটে কতটা সঠিক হবে। এটি করতে, আমাদের লেবেলগুলি সামঞ্জস্য করতে হবে:\n" + "আমরা একই ডেটাসেটে আমাদের দ্বৈত বিড়াল বনাম কুকুর শ্রেণীবিন্যাস কতটা সঠিক হবে তা দেখতে চাই। এটি করতে, আমাদের লেবেলগুলি সামঞ্জস্য করতে হবে:\n" ] }, { @@ -352,7 +372,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n---\n\n**অস্বীকৃতি**: \nএই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনুবাদ করা হয়েছে। আমরা যথাসম্ভব সঠিক অনুবাদ প্রদানের চেষ্টা করি, তবে অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল ভাষায় থাকা নথিটিকে প্রামাণিক উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য, পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদ ব্যবহারের ফলে কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যা হলে আমরা তার জন্য দায়ী থাকব না।\n" + "\n---\n\n**অস্বীকৃতি**: \nএই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনুবাদ করা হয়েছে। আমরা যথাসাধ্য সঠিকতার জন্য চেষ্টা করি, তবে অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল ভাষায় থাকা নথিটিকে প্রামাণিক উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য, পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদ ব্যবহারের ফলে কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যা হলে আমরা দায়বদ্ধ থাকব না।\n" ] } ], @@ -378,8 +398,8 @@ "version": "3.9.5" }, "coopTranslator": { - "original_hash": "1de3ae931831253c3198d899da48bfe5", - "translation_date": "2025-08-28T10:53:14+00:00", + "original_hash": "df7d1f7da8d2617b76acd93115776ca4", + "translation_date": "2025-10-03T14:32:23+00:00", "source_file": "lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb", "language_code": "bn" } diff --git a/translations/bn/lessons/4-ComputerVision/07-ConvNets/lab/README.md b/translations/bn/lessons/4-ComputerVision/07-ConvNets/lab/README.md index 2f538458..148e208b 100644 --- a/translations/bn/lessons/4-ComputerVision/07-ConvNets/lab/README.md +++ b/translations/bn/lessons/4-ComputerVision/07-ConvNets/lab/README.md @@ -1,29 +1,29 @@ -# পোষা প্রাণীর মুখমণ্ডল শ্রেণীবিভাগ +# পোষা প্রাণীর মুখের শ্রেণীবিন্যাস [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) থেকে ল্যাব অ্যাসাইনমেন্ট। ## কাজ -ভাবুন, আপনাকে একটি পোষা প্রাণীর নার্সারির জন্য একটি অ্যাপ্লিকেশন তৈরি করতে হবে, যেখানে সব পোষা প্রাণীকে ক্যাটালগ করা হবে। এমন একটি অ্যাপ্লিকেশনের একটি চমৎকার বৈশিষ্ট্য হতে পারে ফটোগ্রাফ থেকে স্বয়ংক্রিয়ভাবে প্রজাতি শনাক্ত করা। এটি নিউরাল নেটওয়ার্ক ব্যবহার করে সফলভাবে করা সম্ভব। +ধরুন আপনাকে একটি পোষা প্রাণীর নার্সারি অ্যাপ্লিকেশন তৈরি করতে হবে যেখানে সমস্ত পোষা প্রাণীকে ক্যাটালগ করা হবে। এই ধরনের অ্যাপ্লিকেশনের একটি চমৎকার বৈশিষ্ট্য হতে পারে ফটোগ্রাফ থেকে স্বয়ংক্রিয়ভাবে জাত শনাক্ত করা। এটি নিউরাল নেটওয়ার্ক ব্যবহার করে সফলভাবে করা সম্ভব। -আপনাকে একটি কনভলিউশনাল নিউরাল নেটওয়ার্ক প্রশিক্ষণ দিতে হবে, যা **Pet Faces** ডেটাসেট ব্যবহার করে বিভিন্ন প্রজাতির বিড়াল এবং কুকুর শ্রেণীবদ্ধ করতে সক্ষম হবে। +আপনাকে **Pet Faces** ডেটাসেট ব্যবহার করে বিড়াল এবং কুকুরের বিভিন্ন জাত শ্রেণীবিন্যাস করার জন্য একটি কনভোলিউশনাল নিউরাল নেটওয়ার্ক প্রশিক্ষণ দিতে হবে। ## ডেটাসেট -আমরা **Pet Faces** ডেটাসেট ব্যবহার করব, যা [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/) পোষা প্রাণীর ডেটাসেট থেকে প্রাপ্ত। এতে ৩৫টি ভিন্ন প্রজাতির কুকুর এবং বিড়াল রয়েছে। +আমরা [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/) ব্যবহার করব, যেখানে ৩৭টি ভিন্ন জাতের কুকুর এবং বিড়ালের ছবি রয়েছে। ![আমরা যে ডেটাসেট নিয়ে কাজ করব](../../../../../../translated_images/data.50b2a9d5484bdbf0f52f5765b381cec9efe2bd296a98f007f90bedb6ac67f2a8.bn.png) -ডেটাসেট ডাউনলোড করতে নিচের কোড স্নিপেটটি ব্যবহার করুন: +ডেটাসেট ডাউনলোড করতে, এই কোড স্নিপেটটি ব্যবহার করুন: ```python !wget https://thor.robots.ox.ac.uk/~vgg/data/pets/images.tar.gz @@ -31,13 +31,17 @@ CO_OP_TRANSLATOR_METADATA: !rm images.tar.gz ``` +**নোট:** Oxford-IIIT Pet Dataset-এর ছবিগুলি ফাইলনামের মাধ্যমে সংগঠিত (যেমন, `Abyssinian_1.jpg`, `Bengal_2.jpg`)। নোটবুকে এই ছবিগুলিকে জাত-নির্দিষ্ট সাবডিরেক্টরিতে সংগঠিত করার কোড অন্তর্ভুক্ত রয়েছে, যা শ্রেণীবিন্যাসকে সহজ করে তোলে। + ## নোটবুক শুরু করা -ল্যাব শুরু করতে [PetFaces.ipynb](../../../../../../lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb) খুলুন। +ল্যাব শুরু করতে [PetFaces.ipynb](PetFaces.ipynb) খুলুন। ## মূল শিক্ষা -আপনি স্ক্র্যাচ থেকে একটি তুলনামূলকভাবে জটিল ইমেজ শ্রেণীবিভাগ সমস্যার সমাধান করেছেন! এখানে অনেকগুলো শ্রেণী ছিল, তবুও আপনি যুক্তিসঙ্গত নির্ভুলতা অর্জন করতে পেরেছেন! উপরন্তু, টপ-k নির্ভুলতা পরিমাপ করাও যৌক্তিক, কারণ কিছু শ্রেণী এমন রয়েছে যেগুলো মানুষের জন্যও স্পষ্টভাবে আলাদা করা কঠিন। +আপনি স্ক্র্যাচ থেকে একটি তুলনামূলকভাবে জটিল ইমেজ শ্রেণীবিন্যাস সমস্যার সমাধান করেছেন! এখানে অনেকগুলো ক্লাস ছিল, তবুও আপনি যুক্তিসঙ্গত সঠিকতা অর্জন করতে পেরেছেন! এটি টপ-k সঠিকতা পরিমাপ করাও যুক্তিযুক্ত, কারণ কিছু ক্লাসকে বিভ্রান্ত করা সহজ, যা মানুষের জন্যও স্পষ্টভাবে আলাদা নয়। + +--- **অস্বীকৃতি**: -এই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনুবাদ করা হয়েছে। আমরা যথাসম্ভব সঠিক অনুবাদের চেষ্টা করি, তবে অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। নথিটির মূল ভাষায় থাকা সংস্করণটিকেই প্রামাণিক উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদ ব্যবহারের ফলে সৃষ্ট কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যার জন্য আমরা দায়ী নই। \ No newline at end of file +এই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনুবাদ করা হয়েছে। আমরা যথাসাধ্য সঠিকতার জন্য চেষ্টা করি, তবে অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল ভাষায় থাকা নথিটিকে প্রামাণিক উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য, পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদ ব্যবহারের ফলে কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যা হলে আমরা দায়বদ্ধ থাকব না। \ No newline at end of file diff --git a/translations/br/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb b/translations/br/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb index c232b731..4ec75289 100644 --- a/translations/br/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb +++ b/translations/br/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb @@ -6,11 +6,13 @@ "source": [ "# Classificação de Rostos de Animais de Estimação\n", "\n", - "Trabalho prático do [Currículo de IA para Iniciantes](https://github.com/microsoft/ai-for-beginners).\n", + "Tarefa de laboratório do [Currículo de IA para Iniciantes](https://github.com/microsoft/ai-for-beginners).\n", "\n", "### Obtendo os Dados\n", "\n", - "Neste trabalho, vamos nos concentrar em uma tarefa de classificação relativamente simples - a classificação de rostos de animais de estimação. Este conjunto de dados consiste em recortes de rostos do [Conjunto de Dados Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/). Vamos começar carregando e visualizando o conjunto de dados.\n" + "Nesta tarefa, vamos nos concentrar em uma tarefa de classificação relativamente simples - classificação de rostos de animais de estimação. Utilizaremos o [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/), que contém imagens de 37 raças diferentes de cães e gatos. Vamos começar baixando e visualizando o conjunto de dados.\n", + "\n", + "**Nota:** O Oxford-IIIT Pet Dataset contém imagens completas de animais de estimação. As imagens serão organizadas por raça na pasta extraída.\n" ] }, { @@ -86,6 +88,24 @@ "metadata": {}, "outputs": [], "source": [ + "# Note: The Oxford-IIIT Pet Dataset extracts to a folder named 'images'\n", + "# Images are named by breed (e.g., 'Abyssinian_1.jpg')\n", + "# We need to organize them into breed-specific subdirectories\n", + "import os\n", + "from collections import defaultdict\n", + "\n", + "# Organize images by breed\n", + "if not os.path.exists('petfaces'):\n", + " os.makedirs('petfaces')\n", + " for img_file in os.listdir('images'):\n", + " if img_file.endswith(('.jpg', '.png')):\n", + " # Extract breed name from filename (everything before the last underscore and number)\n", + " breed = '_'.join(img_file.split('_')[:-1])\n", + " breed_dir = os.path.join('petfaces', breed)\n", + " if not os.path.exists(breed_dir):\n", + " os.makedirs(breed_dir)\n", + " os.rename(os.path.join('images', img_file), os.path.join(breed_dir, img_file))\n", + "\n", "for cls in os.listdir('petfaces'):\n", " print(cls)\n", " display_images([Image.open(os.path.join('petfaces',cls,x)) \n", @@ -126,7 +146,7 @@ "source": [ "## Preparando o conjunto de dados para Deep Learning\n", "\n", - "Para começar o treinamento da nossa rede neural, precisamos converter todas as imagens em tensores e também criar tensores correspondentes aos rótulos (números das classes). A maioria dos frameworks de redes neurais contém ferramentas simples para lidar com imagens:\n", + "Para começar a treinar nossa rede neural, precisamos converter todas as imagens em tensores e também criar tensores correspondentes aos rótulos (números das classes). A maioria dos frameworks de redes neurais contém ferramentas simples para lidar com imagens:\n", "* No Tensorflow, use `tf.keras.preprocessing.image_dataset_from_directory`\n", "* No PyTorch, use `torchvision.datasets.ImageFolder`\n", "\n", @@ -228,15 +248,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Defina uma rede neural\n", + "## Definir uma rede neural\n", "\n", "Para classificação de imagens, você provavelmente deve definir uma rede neural convolucional com várias camadas. O que observar:\n", - "* Lembre-se da arquitetura em pirâmide, ou seja, o número de filtros deve aumentar à medida que você aprofunda.\n", + "* Tenha em mente a arquitetura em pirâmide, ou seja, o número de filtros deve aumentar conforme você aprofunda.\n", "* Não se esqueça das funções de ativação entre as camadas (ReLU) e do Max Pooling.\n", - "* O classificador final pode ser com ou sem camadas ocultas, mas o número de neurônios de saída deve ser igual ao número de classes.\n", + "* O classificador final pode ter ou não camadas ocultas, mas o número de neurônios de saída deve ser igual ao número de classes.\n", "\n", - "Um ponto importante é acertar a função de ativação na última camada + a função de perda:\n", - "* No Tensorflow, você pode usar `softmax` como a ativação e `sparse_categorical_crossentropy` como a função de perda. A diferença entre a entropia cruzada categórica esparsa e a não esparsa é que a primeira espera a saída como o número da classe, e não como um vetor one-hot.\n", + "É importante acertar a função de ativação na última camada + função de perda:\n", + "* No Tensorflow, você pode usar `softmax` como função de ativação e `sparse_categorical_crossentropy` como função de perda. A diferença entre sparse categorical cross-entropy e a versão não-sparse é que a primeira espera a saída como o número da classe, e não como um vetor one-hot.\n", "* No PyTorch, você pode ter a camada final sem função de ativação e usar a função de perda `CrossEntropyLoss`. Essa função aplica softmax automaticamente.\n" ] }, @@ -253,11 +273,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Treine a Rede Neural\n", + "## Treinar a Rede Neural\n", "\n", - "Agora estamos prontos para treinar a rede neural. Durante o treinamento, colete a acurácia nos dados de treino e teste em cada época e, em seguida, faça um gráfico da acurácia para verificar se há overfitting.\n", + "Agora estamos prontos para treinar a rede neural. Durante o treinamento, colete a precisão nos dados de treinamento e teste em cada época e, em seguida, faça um gráfico da precisão para verificar se há overfitting.\n", "\n", - "> Para acelerar o treinamento, é necessário usar GPU, se disponível. Enquanto o TensorFlow/Keras usará a GPU automaticamente, no PyTorch você precisa mover tanto o modelo quanto os dados para a GPU durante o treinamento usando o método `.to()` para aproveitar a aceleração da GPU.\n" + "> Para acelerar o treinamento, você precisa usar GPU, se disponível. Enquanto o TensorFlow/Keras usará GPU automaticamente, no PyTorch você precisa mover tanto o modelo quanto os dados para a GPU durante o treinamento usando o método `.to()` para aproveitar a aceleração da GPU.\n" ] }, { @@ -299,16 +319,16 @@ "\n", "## Opcional: Calcular a Precisão Top-3\n", "\n", - "Neste exercício, estávamos lidando com uma classificação com um número relativamente alto de classes (35), então nosso resultado - cerca de 50% de precisão na validação - é bastante bom. O conjunto de dados padrão do ImageNet tem ainda mais classes - 1000.\n", + "Neste exercício, estamos lidando com classificação com um número bastante alto de classes (35), então nosso resultado - cerca de 50% de precisão na validação - é muito bom. O conjunto de dados padrão do ImageNet tem ainda mais - 1000 classes.\n", "\n", - "Em tais casos, é difícil garantir que o modelo **sempre** preveja corretamente a classe. Existem situações em que duas categorias são muito semelhantes entre si, e o modelo retorna probabilidades muito próximas (por exemplo, 0,45 e 0,43). Se medirmos a precisão padrão, isso será considerado um erro, mesmo que o modelo tenha cometido um erro muito pequeno. Por isso, muitas vezes medimos outra métrica - a precisão dentro das 3 previsões mais prováveis do modelo.\n", + "Em casos como este, é difícil garantir que o modelo **sempre** preveja corretamente a classe. Existem situações em que duas raças são muito semelhantes entre si, e o modelo retorna probabilidades muito próximas (por exemplo, 0,45 e 0,43). Se medirmos a precisão padrão, isso será considerado um erro, mesmo que o modelo tenha cometido um erro muito pequeno. Por isso, frequentemente medimos outra métrica - uma precisão dentro das 3 previsões mais prováveis do modelo.\n", "\n", - "Consideramos o caso como correto se o rótulo alvo estiver contido entre as 3 principais previsões do modelo.\n", + "Consideramos o caso como preciso se o rótulo alvo estiver contido nas 3 principais previsões do modelo.\n", "\n", - "Para calcular a precisão top-3 no conjunto de dados de teste, você precisa percorrer manualmente o conjunto de dados, aplicar a rede neural para obter a previsão e, em seguida, fazer os cálculos. Algumas dicas:\n", + "Para calcular a precisão top-3 no conjunto de dados de teste, você precisa revisar manualmente o conjunto de dados, aplicar a rede neural para obter a previsão e, em seguida, fazer os cálculos. Algumas dicas:\n", "\n", - "* No TensorFlow, use a função `tf.nn.in_top_k` para verificar se as `predictions` (saída do modelo) estão entre as top-k (passe `k=3` como parâmetro), em relação aos `targets`. Essa função retorna um tensor de valores booleanos, que pode ser convertido para `int` usando `tf.cast`, e depois acumulado usando `tf.reduce_sum`.\n", - "* No PyTorch, você pode usar a função `torch.topk` para obter os índices das classes com maiores probabilidades e, em seguida, verificar se a classe correta está entre elas. Veja [este](https://gist.github.com/weiaicunzai/2a5ae6eac6712c70bde0630f3e76b77b) para mais dicas.\n" + "* No Tensorflow, use a função `tf.nn.in_top_k` para verificar se as `predictions` (saída do modelo) estão no top-k (passe `k=3` como parâmetro), em relação aos `targets`. Esta função retorna um tensor de valores booleanos, que pode ser convertido em `int` usando `tf.cast`, e então acumulado usando `tf.reduce_sum`.\n", + "* No PyTorch, você pode usar a função `torch.topk` para obter os índices das classes com maiores probabilidades e, em seguida, verificar se a classe correta pertence a elas. Veja [este](https://gist.github.com/weiaicunzai/2a5ae6eac6712c70bde0630f3e76b77b) para mais dicas.\n" ] }, { @@ -352,7 +372,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n---\n\n**Aviso Legal**: \nEste documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.\n" + "\n---\n\n**Aviso Legal**: \nEste documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte oficial. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.\n" ] } ], @@ -378,8 +398,8 @@ "version": "3.9.5" }, "coopTranslator": { - "original_hash": "1de3ae931831253c3198d899da48bfe5", - "translation_date": "2025-08-28T12:58:44+00:00", + "original_hash": "df7d1f7da8d2617b76acd93115776ca4", + "translation_date": "2025-10-03T14:35:12+00:00", "source_file": "lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb", "language_code": "br" } diff --git a/translations/br/lessons/4-ComputerVision/07-ConvNets/lab/README.md b/translations/br/lessons/4-ComputerVision/07-ConvNets/lab/README.md index 476db2b8..38b68f8c 100644 --- a/translations/br/lessons/4-ComputerVision/07-ConvNets/lab/README.md +++ b/translations/br/lessons/4-ComputerVision/07-ConvNets/lab/README.md @@ -1,29 +1,29 @@ # Classificação de Rostos de Animais de Estimação -Trabalho prático do [Currículo de IA para Iniciantes](https://github.com/microsoft/ai-for-beginners). +Atividade de laboratório do [Currículo de IA para Iniciantes](https://github.com/microsoft/ai-for-beginners). ## Tarefa -Imagine que você precisa desenvolver um aplicativo para um berçário de animais de estimação para catalogar todos os animais. Uma das grandes funcionalidades de tal aplicativo seria identificar automaticamente a raça a partir de uma fotografia. Isso pode ser feito com sucesso utilizando redes neurais. +Imagine que você precisa desenvolver um aplicativo para um berçário de animais de estimação para catalogar todos os animais. Uma das grandes funcionalidades de tal aplicativo seria identificar automaticamente a raça a partir de uma fotografia. Isso pode ser feito com sucesso usando redes neurais. -Você precisa treinar uma rede neural convolucional para classificar diferentes raças de gatos e cachorros usando o dataset **Pet Faces**. +Você precisa treinar uma rede neural convolucional para classificar diferentes raças de gatos e cães usando o conjunto de dados **Pet Faces**. -## O Dataset +## O Conjunto de Dados -Usaremos o dataset **Pet Faces**, derivado do dataset de animais de estimação [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/). Ele contém 35 raças diferentes de cães e gatos. +Usaremos o [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/), que contém imagens de 37 diferentes raças de cães e gatos. -![Dataset com o qual trabalharemos](../../../../../../translated_images/data.50b2a9d5484bdbf0f52f5765b381cec9efe2bd296a98f007f90bedb6ac67f2a8.br.png) +![Conjunto de dados com o qual trabalharemos](../../../../../../translated_images/data.50b2a9d5484bdbf0f52f5765b381cec9efe2bd296a98f007f90bedb6ac67f2a8.br.png) -Para baixar o dataset, use este trecho de código: +Para baixar o conjunto de dados, use este trecho de código: ```python !wget https://thor.robots.ox.ac.uk/~vgg/data/pets/images.tar.gz @@ -31,13 +31,17 @@ Para baixar o dataset, use este trecho de código: !rm images.tar.gz ``` -## Iniciando o Notebook +**Nota:** As imagens do Oxford-IIIT Pet Dataset estão organizadas por nome de arquivo (por exemplo, `Abyssinian_1.jpg`, `Bengal_2.jpg`). O notebook inclui código para organizar essas imagens em subdiretórios específicos de raças para facilitar a classificação. -Comece o trabalho prático abrindo [PetFaces.ipynb](../../../../../../lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb) +## Notebook Inicial + +Comece o laboratório abrindo [PetFaces.ipynb](PetFaces.ipynb) ## Conclusão -Você resolveu um problema relativamente complexo de classificação de imagens do zero! Havia muitas classes, e mesmo assim você conseguiu obter uma precisão razoável! Também faz sentido medir a precisão top-k, porque é fácil confundir algumas classes que não são claramente diferentes, mesmo para seres humanos. +Você resolveu um problema relativamente complexo de classificação de imagens do zero! Havia muitas classes, e você ainda conseguiu obter uma precisão razoável! Também faz sentido medir a precisão top-k, porque é fácil confundir algumas classes que não são claramente diferentes, mesmo para seres humanos. + +--- **Aviso Legal**: -Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automáticas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte oficial. Para informações críticas, recomenda-se a tradução profissional feita por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, é importante estar ciente de que traduções automáticas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/cs/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb b/translations/cs/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb index 3d19b0e6..83a82fb8 100644 --- a/translations/cs/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb +++ b/translations/cs/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb @@ -10,7 +10,9 @@ "\n", "### Získání dat\n", "\n", - "V tomto úkolu se zaměříme na relativně jednoduchý klasifikační úkol - klasifikaci obličejů domácích mazlíčků. Tento dataset obsahuje výřezy obličejů z [Oxford-IIIT Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/). Začněme načtením a vizualizací dat.\n" + "V tomto úkolu se zaměříme na relativně jednoduchý klasifikační úkol – klasifikaci obličejů domácích mazlíčků. Použijeme [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/), který obsahuje obrázky 37 různých plemen psů a koček. Začněme stažením a vizualizací datové sady.\n", + "\n", + "**Poznámka:** Oxford-IIIT Pet Dataset obsahuje kompletní obrázky domácích mazlíčků. Obrázky budou v extrahované složce uspořádány podle plemen.\n" ] }, { @@ -77,7 +79,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Nyní projdeme všechny podadresáře tříd a vykreslíme první obrázky každé třídy:\n" + "Nyní projděme všechny podadresáře tříd a zobrazme první několik obrázků každé třídy:\n" ] }, { @@ -86,6 +88,24 @@ "metadata": {}, "outputs": [], "source": [ + "# Note: The Oxford-IIIT Pet Dataset extracts to a folder named 'images'\n", + "# Images are named by breed (e.g., 'Abyssinian_1.jpg')\n", + "# We need to organize them into breed-specific subdirectories\n", + "import os\n", + "from collections import defaultdict\n", + "\n", + "# Organize images by breed\n", + "if not os.path.exists('petfaces'):\n", + " os.makedirs('petfaces')\n", + " for img_file in os.listdir('images'):\n", + " if img_file.endswith(('.jpg', '.png')):\n", + " # Extract breed name from filename (everything before the last underscore and number)\n", + " breed = '_'.join(img_file.split('_')[:-1])\n", + " breed_dir = os.path.join('petfaces', breed)\n", + " if not os.path.exists(breed_dir):\n", + " os.makedirs(breed_dir)\n", + " os.rename(os.path.join('images', img_file), os.path.join(breed_dir, img_file))\n", + "\n", "for cls in os.listdir('petfaces'):\n", " print(cls)\n", " display_images([Image.open(os.path.join('petfaces',cls,x)) \n", @@ -96,7 +116,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Pojďme také definovat počet tříd v našem datovém souboru:\n" + "Definujme také počet tříd v našem datovém souboru:\n" ] }, { @@ -126,11 +146,11 @@ "source": [ "## Příprava datové sady pro hluboké učení\n", "\n", - "Abychom mohli začít trénovat naši neuronovou síť, musíme převést všechny obrázky na tensory a také vytvořit tensory odpovídající štítkům (číslům tříd). Většina frameworků pro neuronové sítě obsahuje jednoduché nástroje pro práci s obrázky:\n", + "Abychom mohli začít trénovat naši neuronovou síť, musíme převést všechny obrázky na tensory a také vytvořit tensory odpovídající štítkům (čísla tříd). Většina frameworků pro neuronové sítě obsahuje jednoduché nástroje pro práci s obrázky:\n", "* V Tensorflow použijte `tf.keras.preprocessing.image_dataset_from_directory`\n", "* V PyTorch použijte `torchvision.datasets.ImageFolder`\n", "\n", - "Jak jste viděli na obrázcích výše, všechny mají poměr stran blízký čtverci, takže musíme všechny obrázky změnit na čtvercový rozměr. Také můžeme obrázky organizovat do minibatchů.\n" + "Jak jste viděli na obrázcích výše, všechny mají poměr stran blízký čtverci, takže musíme všechny obrázky změnit na čtvercový rozměr. Také můžeme obrázky uspořádat do minibatchů.\n" ] }, { @@ -162,7 +182,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Nyní si vypíšeme velikost tensorů v našem datasetu. Pokud jste vše provedli správně, velikost trénovacích prvků by měla být\n", + "Nyní si vytiskneme velikost tensorů v našem datasetu. Pokud jste vše provedli správně, velikost trénovacích prvků by měla být:\n", " * `(batch_size,image_size,image_size,3)` pro Tensorflow, `batch_size,3,image_size,image_size` pro PyTorch\n", " * `batch_size` pro štítky\n", " \n", @@ -235,8 +255,8 @@ "* Nezapomeňte na aktivační funkce mezi vrstvami (ReLU) a Max Pooling.\n", "* Konečný klasifikátor může být s nebo bez skrytých vrstev, ale počet výstupních neuronů by měl odpovídat počtu tříd.\n", "\n", - "Důležité je správně nastavit aktivační funkci na poslední vrstvě + ztrátovou funkci:\n", - "* V Tensorflow můžete použít `softmax` jako aktivační funkci a `sparse_categorical_crossentropy` jako ztrátovou funkci. Rozdíl mezi sparse kategorickou cross-entropií a nesparse verzí je v tom, že první očekává výstup jako číslo třídy, nikoliv jako one-hot vektor.\n", + "Důležité je správně nastavit aktivační funkci v poslední vrstvě + ztrátovou funkci:\n", + "* V Tensorflow můžete použít `softmax` jako aktivační funkci a `sparse_categorical_crossentropy` jako ztrátovou funkci. Rozdíl mezi sparse categorical cross-entropy a nesparse verzí je v tom, že první očekává výstup jako číslo třídy, nikoli jako one-hot vektor.\n", "* V PyTorch můžete mít poslední vrstvu bez aktivační funkce a použít ztrátovou funkci `CrossEntropyLoss`. Tato funkce automaticky aplikuje softmax.\n" ] }, @@ -255,9 +275,9 @@ "source": [ "## Trénování neuronové sítě\n", "\n", - "Nyní jsme připraveni trénovat neuronovou síť. Během trénování sbírejte přesnost na trénovacích a testovacích datech při každé epoše a poté vykreslete graf přesnosti, abyste zjistili, zda nedochází k přeučení.\n", + "Nyní jsme připraveni trénovat neuronovou síť. Během trénování prosím sbírejte přesnost na trénovacích a testovacích datech v každé epoše a poté vykreslete graf přesnosti, abyste zjistili, zda dochází k přeučení.\n", "\n", - "> Pro urychlení trénování je potřeba použít GPU, pokud je k dispozici. Zatímco TensorFlow/Keras automaticky využije GPU, v PyTorch je nutné během trénování přesunout jak model, tak data na GPU pomocí metody `.to()`, abyste mohli využít akceleraci GPU.\n" + "> Pro urychlení trénování je potřeba použít GPU, pokud je k dispozici. Zatímco TensorFlow/Keras automaticky využijí GPU, v PyTorch je nutné během trénování přesunout model i data na GPU pomocí metody `.to()`, aby bylo možné využít akceleraci GPU.\n" ] }, { @@ -295,20 +315,20 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Co můžete říci o overfittingu? Co lze udělat pro zlepšení přesnosti modelu?\n", + "Co můžete říci o přeučení? Co lze udělat pro zlepšení přesnosti modelu?\n", "\n", "## Volitelné: Výpočet Top3 přesnosti\n", "\n", - "V tomto cvičení jsme se zabývali klasifikací s poměrně vysokým počtem tříd (35), takže náš výsledek - přibližně 50% validační přesnost - je docela dobrý. Standardní dataset ImageNet má dokonce ještě více - 1000 tříd.\n", + "V tomto cvičení jsme se zabývali klasifikací s poměrně vysokým počtem tříd (35), takže náš výsledek - přibližně 50% validační přesnost - je docela dobrý. Standardní dataset ImageNet má dokonce více - 1000 tříd.\n", "\n", "V takových případech je obtížné zajistit, aby model **vždy** správně předpověděl třídu. Existují situace, kdy jsou si dvě plemena velmi podobná a model vrací velmi podobné pravděpodobnosti (např. 0,45 a 0,43). Pokud měříme standardní přesnost, bude to považováno za chybu, i když model udělal jen velmi malou chybu. Proto často měříme jinou metriku - přesnost v rámci top 3 nejpravděpodobnějších předpovědí modelu.\n", "\n", - "Považujeme případ za správný, pokud cílový štítek je obsažen v top 3 předpovědích modelu.\n", + "Považujeme případ za přesný, pokud je cílový štítek obsažen v top 3 předpovědích modelu.\n", "\n", "Pro výpočet top-3 přesnosti na testovacím datasetu je třeba dataset manuálně projít, aplikovat neuronovou síť pro získání předpovědi a poté provést výpočty. Několik tipů:\n", "\n", - "* V Tensorflow použijte funkci `tf.nn.in_top_k`, abyste zjistili, zda `predictions` (výstup modelu) jsou v top-k (předat `k=3` jako parametr) vzhledem k `targets`. Tato funkce vrací tensor s hodnotami typu boolean, které lze převést na `int` pomocí `tf.cast` a poté akumulovat pomocí `tf.reduce_sum`.\n", - "* V PyTorch můžete použít funkci `torch.topk` pro získání indexů tříd s nejvyššími pravděpodobnostmi a poté zjistit, zda správná třída mezi nimi patří. Podívejte se na [tento](https://gist.github.com/weiaicunzai/2a5ae6eac6712c70bde0630f3e76b77b) odkaz pro další tipy.\n" + "* V Tensorflow použijte funkci `tf.nn.in_top_k`, abyste zjistili, zda `predictions` (výstup modelu) jsou v top-k (předat `k=3` jako parametr) vzhledem k `targets`. Tato funkce vrací tensor hodnot typu boolean, které lze převést na `int` pomocí `tf.cast` a poté akumulovat pomocí `tf.reduce_sum`.\n", + "* V PyTorch můžete použít funkci `torch.topk`, abyste získali indexy tříd s nejvyššími pravděpodobnostmi, a poté zjistit, zda správná třída mezi nimi patří. Podívejte se na [tento](https://gist.github.com/weiaicunzai/2a5ae6eac6712c70bde0630f3e76b77b) odkaz pro další tipy.\n" ] }, { @@ -326,7 +346,7 @@ "source": [ "## Volitelné: Vytvoření klasifikace kočky vs. psi\n", "\n", - "Chceme také zjistit, jak přesná by byla naše binární klasifikace kočky vs. psi na stejném datovém souboru. Abychom toho dosáhli, musíme upravit štítky:\n" + "Chceme také zjistit, jak přesná by byla naše binární klasifikace kočky vs. psi na stejném datovém souboru. K tomu je potřeba upravit štítky:\n" ] }, { @@ -352,7 +372,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n---\n\n**Prohlášení**: \nTento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). I když se snažíme o přesnost, mějte prosím na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace doporučujeme profesionální lidský překlad. Neodpovídáme za žádná nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu.\n" + "\n---\n\n**Prohlášení**: \nTento dokument byl přeložen pomocí služby AI pro překlady [Co-op Translator](https://github.com/Azure/co-op-translator). I když se snažíme o přesnost, mějte prosím na paměti, že automatizované překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace doporučujeme profesionální lidský překlad. Neodpovídáme za žádná nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu.\n" ] } ], @@ -378,8 +398,8 @@ "version": "3.9.5" }, "coopTranslator": { - "original_hash": "1de3ae931831253c3198d899da48bfe5", - "translation_date": "2025-08-29T13:29:25+00:00", + "original_hash": "df7d1f7da8d2617b76acd93115776ca4", + "translation_date": "2025-10-03T14:45:10+00:00", "source_file": "lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb", "language_code": "cs" } diff --git a/translations/cs/lessons/4-ComputerVision/07-ConvNets/lab/README.md b/translations/cs/lessons/4-ComputerVision/07-ConvNets/lab/README.md index 174dded6..cc0b276b 100644 --- a/translations/cs/lessons/4-ComputerVision/07-ConvNets/lab/README.md +++ b/translations/cs/lessons/4-ComputerVision/07-ConvNets/lab/README.md @@ -1,8 +1,8 @@ -# Klassificering af kæledyrs ansigter +# Klassifikation af kæledyrs ansigter Laboratorieopgave fra [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners). ## Opgave -Forestil dig, at du skal udvikle en applikation til en dyrepension, der skal katalogisere alle kæledyr. En fantastisk funktion i en sådan applikation ville være automatisk at identificere racen ud fra et fotografi. Dette kan med succes gøres ved hjælp af neurale netværk. +Forestil dig, at du skal udvikle en applikation til en dyrepension for at katalogisere alle kæledyr. En af de fantastiske funktioner ved en sådan applikation ville være automatisk at identificere racen ud fra et fotografi. Dette kan med succes gøres ved hjælp af neurale netværk. Du skal træne et konvolutionelt neuralt netværk til at klassificere forskellige racer af katte og hunde ved hjælp af **Pet Faces**-datasættet. ## Datasættet -Vi vil bruge **Pet Faces**-datasættet, som er afledt af [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/) kæledyrs-datasættet. Det indeholder 35 forskellige racer af hunde og katte. +Vi vil bruge [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/), som indeholder billeder af 37 forskellige racer af hunde og katte. -![Datasættet vi skal arbejde med](../../../../../../translated_images/data.50b2a9d5484bdbf0f52f5765b381cec9efe2bd296a98f007f90bedb6ac67f2a8.da.png) +![Datasæt vi skal arbejde med](../../../../../../translated_images/data.50b2a9d5484bdbf0f52f5765b381cec9efe2bd296a98f007f90bedb6ac67f2a8.da.png) For at downloade datasættet, brug denne kode: @@ -31,15 +31,17 @@ For at downloade datasættet, brug denne kode: !rm images.tar.gz ``` -## Start Notebook +**Bemærk:** Billederne i Oxford-IIIT Pet Dataset er organiseret efter filnavn (f.eks. `Abyssinian_1.jpg`, `Bengal_2.jpg`). Notebogen inkluderer kode til at organisere disse billeder i race-specifikke underkataloger for lettere klassifikation. + +## Startnotebook Start laboratoriet ved at åbne [PetFaces.ipynb](PetFaces.ipynb) -## Læring +## Konklusion -Du har løst et relativt komplekst problem med billedklassificering fra bunden! Der var en hel del klasser, og du var stadig i stand til at opnå en rimelig nøjagtighed! Det giver også mening at måle top-k nøjagtighed, fordi det er nemt at forveksle nogle af klasserne, som ikke er tydeligt forskellige, selv for mennesker. +Du har løst et relativt komplekst problem med billedklassifikation fra bunden! Der var en hel del klasser, og du var stadig i stand til at opnå rimelig nøjagtighed! Det giver også mening at måle top-k nøjagtighed, fordi det er nemt at forveksle nogle af klasserne, som ikke er klart forskellige, selv for mennesker. --- **Ansvarsfraskrivelse**: -Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. \ No newline at end of file +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på at sikre nøjagtighed, skal det bemærkes, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os ikke ansvar for misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/de/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb b/translations/de/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb index 3bc86f95..7d0ca7c3 100644 --- a/translations/de/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb +++ b/translations/de/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb @@ -4,13 +4,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Klassifizierung von Tiergesichtern\n", + "# Klassifikation von Haustiergesichtern\n", "\n", "Laboraufgabe aus dem [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners).\n", "\n", - "### Beschaffung der Daten\n", + "### Datenbeschaffung\n", "\n", - "In dieser Aufgabe konzentrieren wir uns auf eine relativ einfache Klassifizierungsaufgabe – die Klassifizierung von Tiergesichtern. Dieses Datenset besteht aus ausgeschnittenen Gesichtern aus dem [Oxford-IIIT Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/). Beginnen wir damit, das Datenset zu laden und zu visualisieren.\n" + "In dieser Aufgabe konzentrieren wir uns auf eine relativ einfache Klassifikationsaufgabe – die Klassifikation von Haustiergesichtern. Wir verwenden das [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/), das Bilder von 37 verschiedenen Hunderassen und Katzenrassen enthält. Beginnen wir mit dem Herunterladen und Visualisieren des Datensatzes.\n", + "\n", + "**Hinweis:** Das Oxford-IIIT Pet Dataset enthält vollständige Bilder von Haustieren. Die Bilder werden im extrahierten Ordner nach Rassen organisiert.\n" ] }, { @@ -86,6 +88,24 @@ "metadata": {}, "outputs": [], "source": [ + "# Note: The Oxford-IIIT Pet Dataset extracts to a folder named 'images'\n", + "# Images are named by breed (e.g., 'Abyssinian_1.jpg')\n", + "# We need to organize them into breed-specific subdirectories\n", + "import os\n", + "from collections import defaultdict\n", + "\n", + "# Organize images by breed\n", + "if not os.path.exists('petfaces'):\n", + " os.makedirs('petfaces')\n", + " for img_file in os.listdir('images'):\n", + " if img_file.endswith(('.jpg', '.png')):\n", + " # Extract breed name from filename (everything before the last underscore and number)\n", + " breed = '_'.join(img_file.split('_')[:-1])\n", + " breed_dir = os.path.join('petfaces', breed)\n", + " if not os.path.exists(breed_dir):\n", + " os.makedirs(breed_dir)\n", + " os.rename(os.path.join('images', img_file), os.path.join(breed_dir, img_file))\n", + "\n", "for cls in os.listdir('petfaces'):\n", " print(cls)\n", " display_images([Image.open(os.path.join('petfaces',cls,x)) \n", @@ -127,10 +147,10 @@ "## Vorbereitung des Datensatzes für Deep Learning\n", "\n", "Um mit dem Training unseres neuronalen Netzwerks zu beginnen, müssen wir alle Bilder in Tensoren umwandeln und auch Tensoren erstellen, die den Labels (Klassennummern) entsprechen. Die meisten Frameworks für neuronale Netzwerke bieten einfache Werkzeuge zur Verarbeitung von Bildern:\n", - "* In Tensorflow verwenden Sie `tf.keras.preprocessing.image_dataset_from_directory`\n", - "* In PyTorch verwenden Sie `torchvision.datasets.ImageFolder`\n", + "* In Tensorflow: `tf.keras.preprocessing.image_dataset_from_directory`\n", + "* In PyTorch: `torchvision.datasets.ImageFolder`\n", "\n", - "Wie Sie auf den obigen Bildern gesehen haben, haben alle ein nahezu quadratisches Seitenverhältnis. Daher müssen wir alle Bilder auf eine quadratische Größe skalieren. Außerdem können wir die Bilder in Minibatches organisieren.\n" + "Wie Sie anhand der obigen Bilder gesehen haben, haben alle ein nahezu quadratisches Seitenverhältnis. Daher müssen wir alle Bilder auf eine quadratische Größe skalieren. Außerdem können wir die Bilder in Minibatches organisieren.\n" ] }, { @@ -146,7 +166,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Jetzt müssen wir den Datensatz in Trainings- und Testanteile aufteilen:\n" + "Jetzt müssen wir den Datensatz in Trainings- und Testabschnitte aufteilen:\n" ] }, { @@ -162,7 +182,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Jetzt lassen wir uns die Größe der Tensoren in unserem Datensatz ausgeben. Wenn alles korrekt eingerichtet wurde, sollte die Größe der Trainingselemente wie folgt sein:\n", + "Jetzt lassen wir uns die Größe der Tensoren in unserem Datensatz ausgeben. Wenn alles korrekt umgesetzt wurde, sollte die Größe der Trainingselemente wie folgt sein:\n", " * `(batch_size,image_size,image_size,3)` für Tensorflow, `batch_size,3,image_size,image_size` für PyTorch\n", " * `batch_size` für Labels\n", "\n", @@ -235,8 +255,8 @@ "* Vergiss nicht die Aktivierungsfunktionen zwischen den Schichten (ReLU) und Max Pooling.\n", "* Der finale Klassifikator kann mit oder ohne versteckte Schichten sein, aber die Anzahl der Ausgabeneuronen sollte der Anzahl der Klassen entsprechen.\n", "\n", - "Ein wichtiger Punkt ist, die Aktivierungsfunktion in der letzten Schicht + Verlustfunktion korrekt zu wählen:\n", - "* In Tensorflow kannst du `softmax` als Aktivierungsfunktion und `sparse_categorical_crossentropy` als Verlustfunktion verwenden. Der Unterschied zwischen sparse categorical cross-entropy und der nicht-sparschen Variante ist, dass die erstere die Ausgabe als Klassenindex erwartet und nicht als One-Hot-Vektor.\n", + "Ein wichtiger Punkt ist, die Aktivierungsfunktion in der letzten Schicht + die Verlustfunktion korrekt zu wählen:\n", + "* In Tensorflow kannst du `softmax` als Aktivierungsfunktion und `sparse_categorical_crossentropy` als Verlustfunktion verwenden. Der Unterschied zwischen sparse categorical cross-entropy und der nicht-sparschen Variante ist, dass erstere die Ausgabe als Klassenindex erwartet und nicht als One-Hot-Vektor.\n", "* In PyTorch kannst du die letzte Schicht ohne Aktivierungsfunktion belassen und die Verlustfunktion `CrossEntropyLoss` verwenden. Diese Funktion wendet automatisch softmax an.\n" ] }, @@ -253,11 +273,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Trainiere das neuronale Netzwerk\n", + "## Trainieren des neuronalen Netzwerks\n", "\n", "Jetzt sind wir bereit, das neuronale Netzwerk zu trainieren. Während des Trainings sollten Sie die Genauigkeit auf den Trainings- und Testdaten in jeder Epoche erfassen und anschließend die Genauigkeit plotten, um zu überprüfen, ob Überanpassung vorliegt.\n", "\n", - "> Um das Training zu beschleunigen, sollten Sie eine GPU verwenden, falls verfügbar. Während TensorFlow/Keras automatisch die GPU nutzt, müssen Sie in PyTorch sowohl das Modell als auch die Daten während des Trainings mit der `.to()`-Methode auf die GPU verschieben, um die GPU-Beschleunigung zu nutzen.\n" + "> Um das Training zu beschleunigen, sollten Sie eine GPU verwenden, falls verfügbar. Während TensorFlow/Keras automatisch die GPU nutzt, müssen Sie in PyTorch sowohl das Modell als auch die Daten während des Trainings mit der Methode `.to()` auf die GPU verschieben, um von der GPU-Beschleunigung zu profitieren.\n" ] }, { @@ -299,16 +319,16 @@ "\n", "## Optional: Berechnung der Top-3-Genauigkeit\n", "\n", - "In dieser Übung haben wir uns mit einer Klassifikation mit einer ziemlich hohen Anzahl von Klassen (35) beschäftigt, sodass unser Ergebnis - etwa 50 % Validierungsgenauigkeit - ziemlich gut ist. Das Standard-ImageNet-Dataset hat sogar noch mehr - 1000 Klassen.\n", + "In dieser Übung haben wir uns mit einer Klassifikation mit einer ziemlich hohen Anzahl von Klassen (35) beschäftigt, sodass unser Ergebnis – etwa 50 % Validierungsgenauigkeit – ziemlich gut ist. Der Standard-ImageNet-Datensatz hat sogar noch mehr – 1000 Klassen.\n", "\n", - "In solchen Fällen ist es schwierig sicherzustellen, dass das Modell **immer** die Klasse korrekt vorhersagt. Es gibt Fälle, in denen zwei Rassen einander sehr ähnlich sind und das Modell sehr ähnliche Wahrscheinlichkeiten zurückgibt (z. B. 0,45 und 0,43). Wenn wir die Standardgenauigkeit messen, wird dies als falscher Fall betrachtet, obwohl das Modell nur einen sehr kleinen Fehler gemacht hat. Daher messen wir oft eine andere Metrik - die Genauigkeit innerhalb der Top-3 der wahrscheinlichsten Vorhersagen des Modells.\n", + "In solchen Fällen ist es schwierig sicherzustellen, dass das Modell **immer** die Klasse korrekt vorhersagt. Es gibt Fälle, in denen zwei Rassen einander sehr ähnlich sind und das Modell sehr ähnliche Wahrscheinlichkeiten zurückgibt (z. B. 0,45 und 0,43). Wenn wir die Standardgenauigkeit messen, wird dies als falscher Fall betrachtet, obwohl das Modell nur einen sehr kleinen Fehler gemacht hat. Daher messen wir oft eine andere Metrik – die Genauigkeit innerhalb der Top-3 der wahrscheinlichsten Vorhersagen des Modells.\n", "\n", "Wir betrachten den Fall als korrekt, wenn das Ziel-Label innerhalb der Top-3-Vorhersagen des Modells enthalten ist.\n", "\n", - "Um die Top-3-Genauigkeit auf dem Test-Dataset zu berechnen, müssen Sie das Dataset manuell durchgehen, das neuronale Netzwerk anwenden, um die Vorhersage zu erhalten, und dann die Berechnungen durchführen. Einige Hinweise:\n", + "Um die Top-3-Genauigkeit auf dem Testdatensatz zu berechnen, müssen Sie den Datensatz manuell durchgehen, das neuronale Netzwerk anwenden, um die Vorhersage zu erhalten, und dann die Berechnungen durchführen. Einige Hinweise:\n", "\n", "* In Tensorflow können Sie die Funktion `tf.nn.in_top_k` verwenden, um zu überprüfen, ob die `predictions` (Ausgabe des Modells) in den Top-k enthalten sind (übergeben Sie `k=3` als Parameter) in Bezug auf die `targets`. Diese Funktion gibt einen Tensor mit booleschen Werten zurück, der mit `tf.cast` in `int` umgewandelt und dann mit `tf.reduce_sum` akkumuliert werden kann.\n", - "* In PyTorch können Sie die Funktion `torch.topk` verwenden, um die Indizes der Klassen mit den höchsten Wahrscheinlichkeiten zu erhalten und dann überprüfen, ob die korrekte Klasse zu diesen gehört. Weitere Hinweise finden Sie [hier](https://gist.github.com/weiaicunzai/2a5ae6eac6712c70bde0630f3e76b77b).\n" + "* In PyTorch können Sie die Funktion `torch.topk` verwenden, um die Indizes der Klassen mit den höchsten Wahrscheinlichkeiten zu erhalten, und dann überprüfen, ob die richtige Klasse zu diesen gehört. Weitere Hinweise finden Sie [hier](https://gist.github.com/weiaicunzai/2a5ae6eac6712c70bde0630f3e76b77b).\n" ] }, { @@ -326,7 +346,7 @@ "source": [ "## Optional: Erstellen einer Klassifikation für Katzen vs. Hunde\n", "\n", - "Wir möchten auch sehen, wie genau unsere binäre Klassifikation für Katzen vs. Hunde auf demselben Datensatz wäre. Dafür müssen wir die Labels anpassen:\n" + "Wir möchten auch sehen, wie genau unsere binäre Klassifikation von Katzen vs. Hunde auf demselben Datensatz wäre. Dafür müssen wir die Labels anpassen:\n" ] }, { @@ -378,8 +398,8 @@ "version": "3.9.5" }, "coopTranslator": { - "original_hash": "1de3ae931831253c3198d899da48bfe5", - "translation_date": "2025-08-31T15:54:11+00:00", + "original_hash": "df7d1f7da8d2617b76acd93115776ca4", + "translation_date": "2025-10-03T14:25:55+00:00", "source_file": "lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb", "language_code": "de" } diff --git a/translations/de/lessons/4-ComputerVision/07-ConvNets/lab/README.md b/translations/de/lessons/4-ComputerVision/07-ConvNets/lab/README.md index a40a34d5..afdc9e8d 100644 --- a/translations/de/lessons/4-ComputerVision/07-ConvNets/lab/README.md +++ b/translations/de/lessons/4-ComputerVision/07-ConvNets/lab/README.md @@ -1,8 +1,8 @@ -# Κατηγοριοποίηση Προσώπων Κατοικίδιων +# Ταξινόμηση Προσώπων Κατοικίδιων -Εργαστηριακή Άσκηση από το [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners). +Εργαστηριακή Άσκηση από το [Πρόγραμμα Σπουδών AI για Αρχάριους](https://github.com/microsoft/ai-for-beginners). ## Εργασία -Φανταστείτε ότι πρέπει να αναπτύξετε μια εφαρμογή για ένα βρεφονηπιακό σταθμό κατοικίδιων, ώστε να καταγράφετε όλα τα κατοικίδια. Μία από τις εξαιρετικές δυνατότητες μιας τέτοιας εφαρμογής θα ήταν η αυτόματη αναγνώριση της φυλής από μια φωτογραφία. Αυτό μπορεί να επιτευχθεί με επιτυχία χρησιμοποιώντας νευρωνικά δίκτυα. +Φανταστείτε ότι πρέπει να αναπτύξετε μια εφαρμογή για ένα βρεφονηπιακό σταθμό κατοικίδιων για την καταγραφή όλων των κατοικίδιων. Ένα από τα εξαιρετικά χαρακτηριστικά μιας τέτοιας εφαρμογής θα ήταν η αυτόματη αναγνώριση της φυλής από μια φωτογραφία. Αυτό μπορεί να επιτευχθεί με επιτυχία χρησιμοποιώντας νευρωνικά δίκτυα. Πρέπει να εκπαιδεύσετε ένα συνελικτικό νευρωνικό δίκτυο για να ταξινομήσετε διαφορετικές φυλές γατών και σκύλων χρησιμοποιώντας το σύνολο δεδομένων **Pet Faces**. ## Το Σύνολο Δεδομένων -Θα χρησιμοποιήσουμε το σύνολο δεδομένων **Pet Faces**, το οποίο προέρχεται από το σύνολο δεδομένων κατοικίδιων [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/). Περιέχει 35 διαφορετικές φυλές σκύλων και γατών. +Θα χρησιμοποιήσουμε το [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/), το οποίο περιέχει εικόνες από 37 διαφορετικές φυλές σκύλων και γατών. ![Το σύνολο δεδομένων που θα χρησιμοποιήσουμε](../../../../../../translated_images/data.50b2a9d5484bdbf0f52f5765b381cec9efe2bd296a98f007f90bedb6ac67f2a8.el.png) @@ -31,15 +31,17 @@ CO_OP_TRANSLATOR_METADATA: !rm images.tar.gz ``` -## Έναρξη Σημειωματάριου +**Σημείωση:** Οι εικόνες του Oxford-IIIT Pet Dataset είναι οργανωμένες ανά όνομα αρχείου (π.χ., `Abyssinian_1.jpg`, `Bengal_2.jpg`). Το notebook περιλαμβάνει κώδικα για την οργάνωση αυτών των εικόνων σε υποκαταλόγους ανά φυλή για ευκολότερη ταξινόμηση. + +## Ξεκινώντας το Notebook Ξεκινήστε το εργαστήριο ανοίγοντας το [PetFaces.ipynb](PetFaces.ipynb) ## Συμπέρασμα -Έχετε λύσει ένα σχετικά πολύπλοκο πρόβλημα ταξινόμησης εικόνων από το μηδέν! Υπήρχαν αρκετές κατηγορίες, και παρόλα αυτά καταφέρατε να πετύχετε μια ικανοποιητική ακρίβεια! Επίσης, έχει νόημα να μετρήσετε την ακρίβεια top-k, καθώς είναι εύκολο να μπερδευτούν ορισμένες κατηγορίες που δεν είναι ξεκάθαρα διαφορετικές, ακόμα και για τους ανθρώπους. +Έχετε λύσει ένα σχετικά πολύπλοκο πρόβλημα ταξινόμησης εικόνων από το μηδέν! Υπήρχαν αρκετές κατηγορίες, και παρόλα αυτά καταφέρατε να πετύχετε μια ικανοποιητική ακρίβεια! Επίσης, έχει νόημα να μετρήσετε την ακρίβεια top-k, επειδή είναι εύκολο να μπερδευτούν ορισμένες κατηγορίες που δεν είναι ξεκάθαρα διαφορετικές ακόμα και για τους ανθρώπους. --- -**Αποποίηση Ευθύνης**: -Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτόματες μεταφράσεις ενδέχεται να περιέχουν σφάλματα ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτόματες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/en/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb b/translations/en/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb index 91ad0ecb..a57f03be 100644 --- a/translations/en/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb +++ b/translations/en/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb @@ -10,7 +10,9 @@ "\n", "### Getting the Data\n", "\n", - "In this assignment, we will focus on a relatively simple classification task: classifying pet faces. This dataset consists of cropped faces from the [Oxford-IIIT Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/). Let's begin by loading and visualizing the dataset.\n" + "In this assignment, we will focus on a relatively simple classification task: classifying pet faces. We will use the [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/), which includes images of 37 different breeds of dogs and cats. Let's begin by downloading and visualizing the dataset.\n", + "\n", + "**Note:** The Oxford-IIIT Pet Dataset contains full images of pets. The images will be organized by breed in the extracted folder.\n" ] }, { @@ -77,7 +79,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Now let's traverse all class subdirectories and plot first few images of each class:\n" + "Now let's traverse all class subdirectories and plot the first few images of each class:\n" ] }, { @@ -86,6 +88,24 @@ "metadata": {}, "outputs": [], "source": [ + "# Note: The Oxford-IIIT Pet Dataset extracts to a folder named 'images'\n", + "# Images are named by breed (e.g., 'Abyssinian_1.jpg')\n", + "# We need to organize them into breed-specific subdirectories\n", + "import os\n", + "from collections import defaultdict\n", + "\n", + "# Organize images by breed\n", + "if not os.path.exists('petfaces'):\n", + " os.makedirs('petfaces')\n", + " for img_file in os.listdir('images'):\n", + " if img_file.endswith(('.jpg', '.png')):\n", + " # Extract breed name from filename (everything before the last underscore and number)\n", + " breed = '_'.join(img_file.split('_')[:-1])\n", + " breed_dir = os.path.join('petfaces', breed)\n", + " if not os.path.exists(breed_dir):\n", + " os.makedirs(breed_dir)\n", + " os.rename(os.path.join('images', img_file), os.path.join(breed_dir, img_file))\n", + "\n", "for cls in os.listdir('petfaces'):\n", " print(cls)\n", " display_images([Image.open(os.path.join('petfaces',cls,x)) \n", @@ -126,11 +146,11 @@ "source": [ "## Preparing dataset for Deep Learning\n", "\n", - "To begin training our neural network, we need to convert all images into tensors, as well as create tensors for the labels (class numbers). Most neural network frameworks provide straightforward tools for working with images:\n", + "To begin training our neural network, we need to convert all images into tensors and also create tensors corresponding to labels (class numbers). Most neural network frameworks provide straightforward tools for working with images:\n", "* In Tensorflow, use `tf.keras.preprocessing.image_dataset_from_directory`\n", "* In PyTorch, use `torchvision.datasets.ImageFolder`\n", "\n", - "As you may have noticed from the images above, they all have a nearly square aspect ratio, so we need to resize all images to a square format. Additionally, we can group images into minibatches.\n" + "As observed in the images above, most of them have a nearly square aspect ratio, so we need to resize all images to a square format. Additionally, we can organize the images into minibatches.\n" ] }, { @@ -146,7 +166,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Now we need to separate dataset into train and test portions:\n" + "Now we need to separate the dataset into train and test portions:\n" ] }, { @@ -162,11 +182,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Now let's display the size of the tensors in our dataset. If everything has been set up correctly, the size of the training elements should be:\n", - " * `(batch_size, image_size, image_size, 3)` for TensorFlow, `batch_size, 3, image_size, image_size` for PyTorch\n", + "Now let's display the size of the tensors in our dataset. If everything has been implemented correctly, the size of the training elements should be:\n", + " * `(batch_size,image_size,image_size,3)` for TensorFlow, `batch_size,3,image_size,image_size` for PyTorch\n", " * `batch_size` for Labels\n", "\n", - "Labels should represent the class numbers.\n" + "Labels should consist of class numbers.\n" ] }, { @@ -230,14 +250,14 @@ "source": [ "## Define a neural network\n", "\n", - "For image classification, you should probably define a convolutional neural network with several layers. Things to keep in mind:\n", - "* Remember the pyramid architecture, meaning the number of filters should increase as you go deeper.\n", - "* Don’t forget to include activation functions (ReLU) and Max Pooling between layers.\n", + "For image classification, it's recommended to define a convolutional neural network with multiple layers. Key points to consider:\n", + "* Follow the pyramid architecture, meaning the number of filters should increase as the network goes deeper.\n", + "* Don't forget to include activation functions (ReLU) between layers and Max Pooling.\n", "* The final classifier can include hidden layers or not, but the number of output neurons must match the number of classes.\n", "\n", - "It’s crucial to correctly set the activation function for the last layer and the loss function:\n", - "* In TensorFlow, you can use `softmax` as the activation function and `sparse_categorical_crossentropy` as the loss function. The difference between sparse categorical cross-entropy and the non-sparse version is that the former expects the output as a class number, not as a one-hot vector.\n", - "* In PyTorch, you can leave the final layer without an activation function and use the `CrossEntropyLoss` loss function. This function automatically applies softmax.\n" + "It's crucial to correctly set the activation function for the last layer and the loss function:\n", + "* In TensorFlow, you can use `softmax` as the activation function and `sparse_categorical_crossentropy` as the loss function. The difference between sparse categorical cross-entropy and the non-sparse version is that the sparse one expects the output as a class index rather than a one-hot vector.\n", + "* In PyTorch, the final layer can omit the activation function, and you can use the `CrossEntropyLoss` loss function. This function automatically applies softmax.\n" ] }, { @@ -255,9 +275,9 @@ "source": [ "## Train the Neural Network\n", "\n", - "Now we are ready to train the neural network. During training, make sure to collect accuracy on both the training and test data for each epoch, and then plot the accuracy to check for signs of overfitting.\n", + "Now we are ready to train the neural network. During training, make sure to record the accuracy on both the training and test data for each epoch, and then plot the accuracy to check for signs of overfitting.\n", "\n", - "> To speed up training, you should use a GPU if one is available. While TensorFlow/Keras will automatically utilize the GPU, in PyTorch you need to explicitly move both the model and the data to the GPU during training using the `.to()` method to benefit from GPU acceleration.\n" + "> To accelerate training, use a GPU if available. While TensorFlow/Keras automatically utilizes the GPU, in PyTorch you need to explicitly move both the model and the data to the GPU during training using the `.to()` method to benefit from GPU acceleration.\n" ] }, { @@ -299,16 +319,16 @@ "\n", "## Optional: Calculate Top3 Accuracy\n", "\n", - "In this exercise, we were working on a classification problem with a relatively high number of classes (35), so achieving around 50% validation accuracy is quite good. The standard ImageNet dataset has even more classes—1000.\n", + "In this exercise, we were working on classification with a relatively high number of classes (35), so our result—around 50% validation accuracy—is quite good. The standard ImageNet dataset has even more classes—1000.\n", "\n", "In such scenarios, it is challenging to ensure that the model **always** predicts the correct class. There are situations where two breeds are very similar, and the model outputs probabilities that are close to each other (e.g., 0.45 and 0.43). If we measure standard accuracy, this would be considered an incorrect prediction, even though the model made only a minor error. For this reason, we often use another metric: accuracy within the top 3 most probable predictions of the model.\n", "\n", - "We consider a prediction correct if the target label is included in the top 3 predictions made by the model.\n", + "We consider a prediction accurate if the target label is included in the top 3 predictions made by the model.\n", "\n", - "To calculate top-3 accuracy on the test dataset, you need to manually iterate through the dataset, apply the neural network to generate predictions, and then perform the calculations. Here are some tips:\n", + "To compute top-3 accuracy on the test dataset, you need to manually iterate through the dataset, apply the neural network to generate predictions, and then perform the calculations. Here are some tips:\n", "\n", - "* In TensorFlow, use the `tf.nn.in_top_k` function to check if the `predictions` (model output) are within the top-k (set `k=3` as the parameter) relative to the `targets`. This function returns a tensor of boolean values, which can be converted to `int` using `tf.cast` and then summed using `tf.reduce_sum`.\n", - "* In PyTorch, you can use the `torch.topk` function to obtain the indices of the classes with the highest probabilities and then check if the correct class is among them. Refer to [this](https://gist.github.com/weiaicunzai/2a5ae6eac6712c70bde0630f3e76b77b) for additional guidance.\n" + "* In TensorFlow, use the `tf.nn.in_top_k` function to check whether the `predictions` (the model's output) are within the top-k (set `k=3` as the parameter) relative to the `targets`. This function returns a tensor of boolean values, which can be converted to `int` using `tf.cast` and then summed using `tf.reduce_sum`.\n", + "* In PyTorch, you can use the `torch.topk` function to obtain the indices of the classes with the highest probabilities and then check whether the correct class is among them. Refer to [this](https://gist.github.com/weiaicunzai/2a5ae6eac6712c70bde0630f3e76b77b) for additional guidance.\n" ] }, { @@ -324,9 +344,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Optional: Build Cats vs. Dogs classification\n", + "## Optional: Build Cats vs. Dogs Classification\n", "\n", - "We also want to evaluate how accurate our binary classification of cats vs. dogs would be on the same dataset. To do this, we need to modify the labels:\n" + "We also want to evaluate the accuracy of our binary classification for cats vs. dogs using the same dataset. To do this, we need to modify the labels:\n" ] }, { @@ -352,7 +372,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n---\n\n**Disclaimer**: \nThis document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we aim for accuracy, please note that automated translations may include errors or inaccuracies. The original document in its native language should be regarded as the authoritative source. For critical information, professional human translation is advised. We are not responsible for any misunderstandings or misinterpretations resulting from the use of this translation.\n" + "\n---\n\n**Disclaimer**: \nThis document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we aim for accuracy, please note that automated translations may contain errors or inaccuracies. The original document in its native language should be regarded as the authoritative source. For critical information, professional human translation is recommended. We are not responsible for any misunderstandings or misinterpretations resulting from the use of this translation.\n" ] } ], @@ -378,8 +398,8 @@ "version": "3.9.5" }, "coopTranslator": { - "original_hash": "1de3ae931831253c3198d899da48bfe5", - "translation_date": "2025-08-31T18:10:12+00:00", + "original_hash": "df7d1f7da8d2617b76acd93115776ca4", + "translation_date": "2025-10-03T14:24:09+00:00", "source_file": "lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb", "language_code": "en" } diff --git a/translations/en/lessons/4-ComputerVision/07-ConvNets/lab/README.md b/translations/en/lessons/4-ComputerVision/07-ConvNets/lab/README.md index 8e2a096b..cda10e00 100644 --- a/translations/en/lessons/4-ComputerVision/07-ConvNets/lab/README.md +++ b/translations/en/lessons/4-ComputerVision/07-ConvNets/lab/README.md @@ -1,8 +1,8 @@ # Clasificación de Caras de Mascotas -Asignación de laboratorio del [Currículo de IA para Principiantes](https://github.com/microsoft/ai-for-beginners). +Asignación de laboratorio del [Currículo de AI para Principiantes](https://github.com/microsoft/ai-for-beginners). ## Tarea -Imagina que necesitas desarrollar una aplicación para una guardería de mascotas para catalogar a todas las mascotas. Una de las grandes características de dicha aplicación sería descubrir automáticamente la raza a partir de una fotografía. Esto se puede lograr con éxito utilizando redes neuronales. +Imagina que necesitas desarrollar una aplicación para una guardería de mascotas para catalogar a todas las mascotas. Una de las grandes características de dicha aplicación sería descubrir automáticamente la raza a partir de una fotografía. Esto se puede lograr exitosamente utilizando redes neuronales. Necesitas entrenar una red neuronal convolucional para clasificar diferentes razas de gatos y perros utilizando el conjunto de datos **Pet Faces**. ## El Conjunto de Datos -Usaremos el conjunto de datos **Pet Faces**, derivado del conjunto de datos de mascotas [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/). Contiene 35 razas diferentes de perros y gatos. +Usaremos el [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/), que contiene imágenes de 37 razas diferentes de perros y gatos. -![Conjunto de datos con el que trabajaremos](../../../../../../lessons/4-ComputerVision/07-ConvNets/lab/images/data.png) +![Conjunto de datos con el que trabajaremos](../../../../../../translated_images/data.50b2a9d5484bdbf0f52f5765b381cec9efe2bd296a98f007f90bedb6ac67f2a8.es.png) Para descargar el conjunto de datos, utiliza este fragmento de código: @@ -31,13 +31,17 @@ Para descargar el conjunto de datos, utiliza este fragmento de código: !rm images.tar.gz ``` -## Cuaderno Inicial +**Nota:** Las imágenes del Oxford-IIIT Pet Dataset están organizadas por nombre de archivo (por ejemplo, `Abyssinian_1.jpg`, `Bengal_2.jpg`). El notebook incluye código para organizar estas imágenes en subdirectorios específicos de razas para facilitar la clasificación. -Comienza el laboratorio abriendo [PetFaces.ipynb](../../../../../../lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb) +## Notebook Inicial + +Comienza el laboratorio abriendo [PetFaces.ipynb](PetFaces.ipynb) ## Conclusión -¡Has resuelto un problema relativamente complejo de clasificación de imágenes desde cero! Había bastantes clases, y aun así lograste obtener una precisión razonable. También tiene sentido medir la precisión top-k, porque es fácil confundir algunas de las clases que no son claramente diferentes, incluso para los seres humanos. +¡Has resuelto un problema relativamente complejo de clasificación de imágenes desde cero! Había bastantes clases, y aun así lograste obtener una precisión razonable. También tiene sentido medir la precisión top-k, porque es fácil confundir algunas clases que no son claramente diferentes incluso para los seres humanos. + +--- **Descargo de responsabilidad**: -Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse como la fuente autorizada. Para información crítica, se recomienda una traducción profesional realizada por humanos. No nos hacemos responsables de malentendidos o interpretaciones erróneas que puedan surgir del uso de esta traducción. \ No newline at end of file +Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). Aunque nos esforzamos por garantizar la precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse como la fuente autorizada. Para información crítica, se recomienda una traducción profesional realizada por humanos. No nos hacemos responsables de malentendidos o interpretaciones erróneas que puedan surgir del uso de esta traducción. \ No newline at end of file diff --git a/translations/fa/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb b/translations/fa/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb index 7384e3fa..52c8d679 100644 --- a/translations/fa/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb +++ b/translations/fa/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb @@ -6,11 +6,13 @@ "source": [ "# طبقه‌بندی چهره حیوانات خانگی\n", "\n", - "تکلیف آزمایشگاهی از [برنامه درسی هوش مصنوعی برای مبتدیان](https://github.com/microsoft/ai-for-beginners).\n", + "تکلیف آزمایشگاهی از [برنامه درسی AI برای مبتدیان](https://github.com/microsoft/ai-for-beginners).\n", "\n", "### دریافت داده‌ها\n", "\n", - "در این تکلیف، ما بر روی یک وظیفه طبقه‌بندی نسبتاً ساده تمرکز خواهیم کرد - طبقه‌بندی چهره حیوانات خانگی. این مجموعه داده شامل چهره‌های برش‌خورده از [مجموعه داده آکسفورد-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/) است. بیایید با بارگذاری و بصری‌سازی مجموعه داده شروع کنیم.\n" + "در این تکلیف، ما بر روی یک وظیفه طبقه‌بندی نسبتاً ساده تمرکز خواهیم کرد - طبقه‌بندی چهره حیوانات خانگی. ما از [مجموعه داده حیوانات خانگی آکسفورد-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/) استفاده خواهیم کرد که شامل تصاویر 37 نژاد مختلف از سگ‌ها و گربه‌ها است. بیایید با دانلود و مشاهده مجموعه داده شروع کنیم.\n", + "\n", + "**توجه:** مجموعه داده حیوانات خانگی آکسفورد-IIIT شامل تصاویر کامل حیوانات خانگی است. تصاویر در پوشه استخراج‌شده بر اساس نژاد سازماندهی خواهند شد.\n" ] }, { @@ -46,7 +48,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "ما یک تابع عمومی برای نمایش مجموعه‌ای از تصاویر از یک لیست تعریف خواهیم کرد:\n" + "ما یک تابع عمومی تعریف خواهیم کرد تا مجموعه‌ای از تصاویر را از یک لیست نمایش دهد:\n" ] }, { @@ -86,6 +88,24 @@ "metadata": {}, "outputs": [], "source": [ + "# Note: The Oxford-IIIT Pet Dataset extracts to a folder named 'images'\n", + "# Images are named by breed (e.g., 'Abyssinian_1.jpg')\n", + "# We need to organize them into breed-specific subdirectories\n", + "import os\n", + "from collections import defaultdict\n", + "\n", + "# Organize images by breed\n", + "if not os.path.exists('petfaces'):\n", + " os.makedirs('petfaces')\n", + " for img_file in os.listdir('images'):\n", + " if img_file.endswith(('.jpg', '.png')):\n", + " # Extract breed name from filename (everything before the last underscore and number)\n", + " breed = '_'.join(img_file.split('_')[:-1])\n", + " breed_dir = os.path.join('petfaces', breed)\n", + " if not os.path.exists(breed_dir):\n", + " os.makedirs(breed_dir)\n", + " os.rename(os.path.join('images', img_file), os.path.join(breed_dir, img_file))\n", + "\n", "for cls in os.listdir('petfaces'):\n", " print(cls)\n", " display_images([Image.open(os.path.join('petfaces',cls,x)) \n", @@ -130,7 +150,7 @@ "* در Tensorflow، از `tf.keras.preprocessing.image_dataset_from_directory` استفاده کنید\n", "* در PyTorch، از `torchvision.datasets.ImageFolder` استفاده کنید\n", "\n", - "همان‌طور که از تصاویر بالا مشاهده کردید، نسبت همه آن‌ها نزدیک به مربع است، بنابراین باید تمام تصاویر را به اندازه مربع تغییر دهیم. همچنین می‌توانیم تصاویر را در دسته‌های کوچک سازماندهی کنیم.\n" + "همان‌طور که از تصاویر بالا مشاهده کردید، همه آن‌ها نسبت تصویری نزدیک به مربع دارند، بنابراین باید تمام تصاویر را به اندازه مربع تغییر دهیم. همچنین می‌توانیم تصاویر را در مینی‌بچ‌ها سازماندهی کنیم.\n" ] }, { @@ -146,7 +166,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "اکنون باید مجموعه داده را به بخش‌های آموزش و آزمایش تقسیم کنیم:\n" + "حالا باید مجموعه داده را به بخش‌های آموزش و آزمون تقسیم کنیم:\n" ] }, { @@ -166,7 +186,7 @@ " * `(batch_size,image_size,image_size,3)` برای Tensorflow، `batch_size,3,image_size,image_size` برای PyTorch\n", " * `batch_size` برای برچسب‌ها\n", "\n", - "برچسب‌ها باید شامل شماره‌های کلاس‌ها باشند.\n" + "برچسب‌ها باید شامل اعداد کلاس‌ها باشند.\n" ] }, { @@ -230,12 +250,12 @@ "source": [ "## تعریف یک شبکه عصبی\n", "\n", - "برای دسته‌بندی تصاویر، احتمالاً باید یک شبکه عصبی کانولوشنی با چندین لایه تعریف کنید. نکاتی که باید به آن توجه کنید:\n", - "* معماری هرمی را در نظر داشته باشید، یعنی تعداد فیلترها باید با عمیق‌تر شدن افزایش یابد.\n", + "برای طبقه‌بندی تصاویر، بهتر است یک شبکه عصبی کانولوشنی با چندین لایه تعریف کنید. نکاتی که باید به آن توجه کنید:\n", + "* معماری هرمی را در نظر داشته باشید، یعنی تعداد فیلترها باید با عمیق‌تر شدن لایه‌ها افزایش یابد.\n", "* فراموش نکنید که بین لایه‌ها از توابع فعال‌سازی (مانند ReLU) و Max Pooling استفاده کنید.\n", "* طبقه‌بند نهایی می‌تواند با یا بدون لایه‌های مخفی باشد، اما تعداد نورون‌های خروجی باید برابر با تعداد کلاس‌ها باشد.\n", "\n", - "یک نکته مهم این است که تابع فعال‌سازی در لایه آخر و تابع خطا را به درستی انتخاب کنید:\n", + "یک نکته مهم این است که تابع فعال‌سازی در لایه آخر و همچنین تابع خطا را به درستی انتخاب کنید:\n", "* در Tensorflow، می‌توانید از `softmax` به عنوان تابع فعال‌سازی و از `sparse_categorical_crossentropy` به عنوان تابع خطا استفاده کنید. تفاوت بین sparse categorical cross-entropy و نوع غیر sparse آن این است که اولی خروجی را به صورت شماره کلاس انتظار دارد، نه به صورت بردار one-hot.\n", "* در PyTorch، می‌توانید لایه آخر را بدون تابع فعال‌سازی داشته باشید و از تابع خطای `CrossEntropyLoss` استفاده کنید. این تابع به صورت خودکار softmax را اعمال می‌کند.\n" ] @@ -255,9 +275,9 @@ "source": [ "## آموزش شبکه عصبی\n", "\n", - "اکنون آماده‌ایم تا شبکه عصبی را آموزش دهیم. در طول آموزش، لطفاً دقت (accuracy) داده‌های آموزشی و آزمایشی را در هر دوره (epoch) جمع‌آوری کرده و سپس دقت را رسم کنید تا بررسی کنید آیا بیش‌برازش (overfitting) رخ داده است یا خیر.\n", + "اکنون آماده‌ایم تا شبکه عصبی را آموزش دهیم. در طول آموزش، لطفاً دقت (accuracy) داده‌های آموزش و تست را در هر دوره (epoch) جمع‌آوری کنید و سپس دقت را رسم کنید تا بررسی کنید آیا بیش‌برازش (overfitting) رخ داده است یا خیر.\n", "\n", - "> برای سرعت بخشیدن به فرآیند آموزش، در صورت امکان باید از GPU استفاده کنید. در حالی که TensorFlow/Keras به‌طور خودکار از GPU استفاده می‌کند، در PyTorch باید هم مدل و هم داده‌ها را در طول آموزش با استفاده از متد `.to()` به GPU منتقل کنید تا از شتاب GPU بهره‌مند شوید.\n" + "> برای افزایش سرعت آموزش، باید از GPU استفاده کنید اگر در دسترس باشد. در حالی که TensorFlow/Keras به طور خودکار از GPU استفاده می‌کند، در PyTorch باید هم مدل و هم داده‌ها را در طول آموزش با استفاده از متد `.to()` به GPU منتقل کنید تا از شتاب GPU بهره‌مند شوید.\n" ] }, { @@ -299,16 +319,16 @@ "\n", "## اختیاری: محاسبه دقت Top3\n", "\n", - "در این تمرین، با مسئله دسته‌بندی با تعداد نسبتاً زیادی کلاس (۳۵ کلاس) سروکار داشتیم، بنابراین نتیجه ما - حدود ۵۰٪ دقت اعتبارسنجی - کاملاً خوب است. مجموعه داده استاندارد ImageNet حتی تعداد بیشتری کلاس دارد - ۱۰۰۰ کلاس.\n", + "در این تمرین، ما با دسته‌بندی با تعداد نسبتاً زیادی کلاس (35 کلاس) سروکار داشتیم، بنابراین نتیجه ما - حدود 50% دقت اعتبارسنجی - کاملاً خوب است. مجموعه داده استاندارد ImageNet حتی بیشتر از این دارد - 1000 کلاس.\n", "\n", - "در چنین مواردی، دشوار است که اطمینان حاصل شود مدل **همیشه** کلاس درست را پیش‌بینی می‌کند. مواردی وجود دارد که دو نژاد بسیار شبیه به یکدیگر هستند و مدل احتمال‌های بسیار مشابهی را برمی‌گرداند (مثلاً ۰.۴۵ و ۰.۴۳). اگر دقت استاندارد را اندازه‌گیری کنیم، این مورد به عنوان یک خطا در نظر گرفته می‌شود، حتی اگر مدل اشتباه بسیار کوچکی کرده باشد. به همین دلیل، اغلب معیار دیگری را اندازه‌گیری می‌کنیم - دقت در میان سه پیش‌بینی محتمل‌ترین مدل.\n", + "در چنین مواردی، دشوار است که اطمینان حاصل شود مدل **همیشه** کلاس را به درستی پیش‌بینی می‌کند. مواردی وجود دارد که دو نژاد بسیار شبیه به یکدیگر هستند و مدل احتمال‌های بسیار مشابهی را بازمی‌گرداند (مثلاً 0.45 و 0.43). اگر دقت استاندارد را اندازه‌گیری کنیم، این مورد به عنوان یک خطا در نظر گرفته می‌شود، حتی اگر مدل اشتباه بسیار کوچکی کرده باشد. به همین دلیل، اغلب معیار دیگری را اندازه‌گیری می‌کنیم - دقت در میان سه پیش‌بینی محتمل‌ترین مدل.\n", "\n", "ما مورد را دقیق در نظر می‌گیریم اگر برچسب هدف در میان سه پیش‌بینی برتر مدل باشد.\n", "\n", - "برای محاسبه دقت Top-3 در مجموعه داده آزمایشی، باید به صورت دستی مجموعه داده را مرور کنید، شبکه عصبی را اعمال کنید تا پیش‌بینی را دریافت کنید، و سپس محاسبات را انجام دهید. چند نکته:\n", + "برای محاسبه دقت top-3 در مجموعه داده آزمایشی، باید به صورت دستی مجموعه داده را بررسی کنید، شبکه عصبی را اعمال کنید تا پیش‌بینی را دریافت کنید، و سپس محاسبات را انجام دهید. چند نکته:\n", "\n", - "* در Tensorflow، از تابع `tf.nn.in_top_k` استفاده کنید تا ببینید آیا `predictions` (خروجی مدل) در میان k برتر هستند (پارامتر `k=3` را وارد کنید)، با توجه به `targets`. این تابع یک تنسور از مقادیر بولین برمی‌گرداند که می‌توان آن را با استفاده از `tf.cast` به `int` تبدیل کرد و سپس با استفاده از `tf.reduce_sum` جمع‌آوری کرد.\n", - "* در PyTorch، می‌توانید از تابع `torch.topk` استفاده کنید تا شاخص‌های کلاس‌هایی با بالاترین احتمال‌ها را دریافت کنید و سپس بررسی کنید که آیا کلاس درست در میان آن‌ها قرار دارد. برای نکات بیشتر، [این](https://gist.github.com/weiaicunzai/2a5ae6eac6712c70bde0630f3e76b77b) را ببینید.\n" + "* در Tensorflow، از تابع `tf.nn.in_top_k` استفاده کنید تا ببینید آیا `predictions` (خروجی مدل) در top-k هستند (پارامتر `k=3` را وارد کنید)، با توجه به `targets`. این تابع یک تنسور از مقادیر بولین بازمی‌گرداند که می‌توان آن را با استفاده از `tf.cast` به `int` تبدیل کرد و سپس با استفاده از `tf.reduce_sum` جمع‌آوری کرد.\n", + "* در PyTorch، می‌توانید از تابع `torch.topk` استفاده کنید تا شاخص‌های کلاس‌هایی با بالاترین احتمال‌ها را دریافت کنید و سپس ببینید آیا کلاس صحیح در میان آن‌ها قرار دارد. برای نکات بیشتر، [این](https://gist.github.com/weiaicunzai/2a5ae6eac6712c70bde0630f3e76b77b) را ببینید.\n" ] }, { @@ -352,7 +372,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n---\n\n**سلب مسئولیت**: \nاین سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما تلاش می‌کنیم دقت را حفظ کنیم، لطفاً توجه داشته باشید که ترجمه‌های خودکار ممکن است شامل خطاها یا نادرستی‌ها باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، توصیه می‌شود از ترجمه حرفه‌ای انسانی استفاده کنید. ما مسئولیتی در قبال سوءتفاهم‌ها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم.\n" + "\n---\n\n**سلب مسئولیت**: \nاین سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما تلاش می‌کنیم دقت را حفظ کنیم، لطفاً توجه داشته باشید که ترجمه‌های خودکار ممکن است شامل خطاها یا نادرستی‌ها باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، توصیه می‌شود از ترجمه حرفه‌ای انسانی استفاده کنید. ما مسئولیتی در قبال سوء تفاهم‌ها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم.\n" ] } ], @@ -378,8 +398,8 @@ "version": "3.9.5" }, "coopTranslator": { - "original_hash": "1de3ae931831253c3198d899da48bfe5", - "translation_date": "2025-08-31T15:55:14+00:00", + "original_hash": "df7d1f7da8d2617b76acd93115776ca4", + "translation_date": "2025-10-03T14:27:31+00:00", "source_file": "lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb", "language_code": "fa" } diff --git a/translations/fa/lessons/4-ComputerVision/07-ConvNets/lab/README.md b/translations/fa/lessons/4-ComputerVision/07-ConvNets/lab/README.md index 5aefa3c1..84df2074 100644 --- a/translations/fa/lessons/4-ComputerVision/07-ConvNets/lab/README.md +++ b/translations/fa/lessons/4-ComputerVision/07-ConvNets/lab/README.md @@ -1,27 +1,27 @@ -# دسته‌بندی چهره حیوانات خانگی +# طبقه‌بندی چهره حیوانات خانگی تکلیف آزمایشگاهی از [برنامه درسی AI برای مبتدیان](https://github.com/microsoft/ai-for-beginners). ## وظیفه -تصور کنید که باید یک برنامه برای پرورشگاه حیوانات خانگی طراحی کنید تا همه حیوانات را دسته‌بندی کند. یکی از ویژگی‌های عالی چنین برنامه‌ای می‌تواند شناسایی خودکار نژاد حیوان از یک عکس باشد. این کار با استفاده از شبکه‌های عصبی به‌خوبی قابل انجام است. +تصور کنید که باید یک برنامه برای یک مرکز نگهداری حیوانات خانگی توسعه دهید تا همه حیوانات را دسته‌بندی کند. یکی از ویژگی‌های عالی چنین برنامه‌ای می‌تواند شناسایی خودکار نژاد از طریق یک عکس باشد. این کار به‌طور موفقیت‌آمیز با استفاده از شبکه‌های عصبی قابل انجام است. -شما باید یک شبکه عصبی کانولوشن را آموزش دهید تا نژادهای مختلف گربه‌ها و سگ‌ها را با استفاده از مجموعه داده **چهره حیوانات خانگی** دسته‌بندی کند. +شما باید یک شبکه عصبی کانولوشن را آموزش دهید تا نژادهای مختلف گربه‌ها و سگ‌ها را با استفاده از مجموعه داده **چهره حیوانات خانگی** طبقه‌بندی کند. ## مجموعه داده -ما از مجموعه داده **چهره حیوانات خانگی** استفاده خواهیم کرد که از مجموعه داده حیوانات خانگی [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/) استخراج شده است. این مجموعه شامل ۳۵ نژاد مختلف از سگ‌ها و گربه‌ها است. +ما از [مجموعه داده حیوانات خانگی آکسفورد-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/) استفاده خواهیم کرد که شامل تصاویر 37 نژاد مختلف از سگ‌ها و گربه‌ها است. -![مجموعه داده‌ای که با آن کار خواهیم کرد](../../../../../../lessons/4-ComputerVision/07-ConvNets/lab/images/data.png) +![مجموعه داده‌ای که با آن کار خواهیم کرد](../../../../../../translated_images/data.50b2a9d5484bdbf0f52f5765b381cec9efe2bd296a98f007f90bedb6ac67f2a8.fa.png) برای دانلود مجموعه داده، از این قطعه کد استفاده کنید: @@ -31,13 +31,17 @@ CO_OP_TRANSLATOR_METADATA: !rm images.tar.gz ``` -## شروع دفترچه یادداشت +**توجه:** تصاویر مجموعه داده حیوانات خانگی آکسفورد-IIIT بر اساس نام فایل سازماندهی شده‌اند (مثلاً `Abyssinian_1.jpg`، `Bengal_2.jpg`). نوت‌بوک شامل کدی است که این تصاویر را به زیرشاخه‌های مربوط به نژادها سازماندهی می‌کند تا طبقه‌بندی آسان‌تر شود. -آزمایشگاه را با باز کردن [PetFaces.ipynb](../../../../../../lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb) شروع کنید. +## شروع نوت‌بوک + +آزمایشگاه را با باز کردن [PetFaces.ipynb](PetFaces.ipynb) شروع کنید. ## نتیجه‌گیری -شما یک مسئله نسبتاً پیچیده دسته‌بندی تصاویر را از ابتدا حل کردید! تعداد کلاس‌ها زیاد بود، و شما همچنان توانستید به دقت قابل قبولی دست پیدا کنید! همچنین منطقی است که دقت top-k را اندازه‌گیری کنید، زیرا ممکن است برخی از کلاس‌ها که حتی برای انسان‌ها به‌وضوح متفاوت نیستند، به‌راحتی با یکدیگر اشتباه گرفته شوند. +شما یک مسئله نسبتاً پیچیده طبقه‌بندی تصویر را از ابتدا حل کردید! تعداد کلاس‌ها زیاد بود، و شما همچنان توانستید به دقت قابل قبولی دست پیدا کنید! همچنین منطقی است که دقت top-k را اندازه‌گیری کنید، زیرا برخی از کلاس‌ها که حتی برای انسان‌ها به‌وضوح متفاوت نیستند، به‌راحتی قابل اشتباه گرفتن هستند. + +--- **سلب مسئولیت**: -این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما تلاش می‌کنیم دقت را حفظ کنیم، لطفاً توجه داشته باشید که ترجمه‌های خودکار ممکن است شامل خطاها یا نادرستی‌ها باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حیاتی، توصیه می‌شود از ترجمه حرفه‌ای انسانی استفاده کنید. ما مسئولیتی در قبال سوء تفاهم‌ها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم. \ No newline at end of file +این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما تلاش می‌کنیم دقت را حفظ کنیم، لطفاً توجه داشته باشید که ترجمه‌های خودکار ممکن است شامل خطاها یا نادرستی‌ها باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، توصیه می‌شود از ترجمه حرفه‌ای انسانی استفاده کنید. ما مسئولیتی در قبال سوء تفاهم‌ها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم. \ No newline at end of file diff --git a/translations/fi/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb b/translations/fi/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb index febb01f6..87b9ed74 100644 --- a/translations/fi/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb +++ b/translations/fi/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb @@ -10,7 +10,9 @@ "\n", "### Datan hankinta\n", "\n", - "Tässä tehtävässä keskitymme suhteellisen yksinkertaiseen luokittelutehtävään – lemmikkien kasvojen luokitteluun. Tämä datasetti koostuu leikatuista kasvoista [Oxford-IIIT Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/) -aineistosta. Aloitetaan lataamalla ja visualisoimalla datasetti.\n" + "Tässä tehtävässä keskitymme suhteellisen yksinkertaiseen luokittelutehtävään - lemmikkien kasvojen luokitteluun. Käytämme [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/) -aineistoa, joka sisältää kuvia 37 eri koira- ja kissarodusta. Aloitetaan lataamalla ja visualisoimalla aineisto.\n", + "\n", + "**Huom:** Oxford-IIIT Pet Dataset sisältää kokonaisia kuvia lemmikeistä. Kuvat järjestetään roduittain puretussa kansiossa.\n" ] }, { @@ -46,7 +48,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Määritämme yleisen funktion, joka näyttää sarjan kuvia listasta:\n" + "Määritämme yleisen funktion, joka näyttää kuvasarjan listasta:\n" ] }, { @@ -86,6 +88,24 @@ "metadata": {}, "outputs": [], "source": [ + "# Note: The Oxford-IIIT Pet Dataset extracts to a folder named 'images'\n", + "# Images are named by breed (e.g., 'Abyssinian_1.jpg')\n", + "# We need to organize them into breed-specific subdirectories\n", + "import os\n", + "from collections import defaultdict\n", + "\n", + "# Organize images by breed\n", + "if not os.path.exists('petfaces'):\n", + " os.makedirs('petfaces')\n", + " for img_file in os.listdir('images'):\n", + " if img_file.endswith(('.jpg', '.png')):\n", + " # Extract breed name from filename (everything before the last underscore and number)\n", + " breed = '_'.join(img_file.split('_')[:-1])\n", + " breed_dir = os.path.join('petfaces', breed)\n", + " if not os.path.exists(breed_dir):\n", + " os.makedirs(breed_dir)\n", + " os.rename(os.path.join('images', img_file), os.path.join(breed_dir, img_file))\n", + "\n", "for cls in os.listdir('petfaces'):\n", " print(cls)\n", " display_images([Image.open(os.path.join('petfaces',cls,x)) \n", @@ -124,13 +144,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Valmistellaan aineistoa syväoppimista varten\n", + "## Datasetin valmistelu syväoppimista varten\n", "\n", - "Ennen kuin aloitamme neuroverkon kouluttamisen, meidän täytyy muuntaa kaikki kuvat tensoreiksi ja luoda myös tensoreita, jotka vastaavat luokkien numeroita (labelit). Useimmat neuroverkkokehykset sisältävät yksinkertaisia työkaluja kuvien käsittelyyn:\n", + "Ennen kuin aloitamme neuroverkon kouluttamisen, meidän täytyy muuntaa kaikki kuvat tensoreiksi ja luoda myös tensoreita, jotka vastaavat tunnisteita (luokkanumeroita). Useimmissa neuroverkkokehitysympäristöissä on yksinkertaisia työkaluja kuvien käsittelyyn:\n", "* Tensorflow:ssa käytä `tf.keras.preprocessing.image_dataset_from_directory`\n", "* PyTorch:ssa käytä `torchvision.datasets.ImageFolder`\n", "\n", - "Kuten yllä olevista kuvista näet, kaikki kuvat ovat lähellä neliömäistä kuvasuhdetta, joten meidän täytyy muuttaa kaikkien kuvien koko neliöksi. Lisäksi voimme järjestää kuvat pieniin eriin (minibatch).\n" + "Kuten yllä olevista kuvista näit, kaikki kuvat ovat lähellä neliömäistä kuvasuhdetta, joten meidän täytyy muuttaa kaikki kuvat neliön kokoisiksi. Lisäksi voimme järjestää kuvat pieniin eriin (minibatch).\n" ] }, { @@ -146,7 +166,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Nyt meidän täytyy jakaa tietojoukko harjoitus- ja testiosuuksiin:\n" + "Nyt meidän täytyy jakaa datasetti harjoitus- ja testiosuuksiin:\n" ] }, { @@ -162,11 +182,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Nyt tulostetaan tensorien koko datasetissämme. Jos olet tehnyt kaiken oikein, harjoituselementtien koko pitäisi olla\n", - " * `(batch_size,image_size,image_size,3)` Tensorflowille, `batch_size,3,image_size,image_size` PyTorchille\n", - " * `batch_size` Tunnisteille\n", + "Tulostetaan nyt tensorien koko datasetissämme. Jos olet tehnyt kaiken oikein, harjoituselementtien koko pitäisi olla\n", + " * `(batch_size,image_size,image_size,3)` Tensorflow'lle, `batch_size,3,image_size,image_size` PyTorchille\n", + " * `batch_size` Labelseille\n", " \n", - " Tunnisteiden tulisi sisältää luokkien numerot.\n" + " Labelien tulisi sisältää luokkien numerot.\n" ] }, { @@ -231,12 +251,12 @@ "## Määritä neuroverkko\n", "\n", "Kuvien luokittelua varten kannattaa todennäköisesti määrittää konvoluutio-neuroverkko, jossa on useita kerroksia. Mitä kannattaa huomioida:\n", - "* Muista pyramidirakenne, eli suodattimien määrän tulisi kasvaa syvemmälle mentäessä\n", - "* Älä unohda aktivointifunktioita kerrosten välillä (ReLU) ja Max Pooling -kerroksia\n", - "* Lopullinen luokittelija voi sisältää tai olla sisältämättä piilokerroksia, mutta ulostuloneuronien määrän tulee vastata luokkien määrää.\n", + "* Pidä mielessä pyramidirakenne, eli suodattimien määrä tulisi kasvaa syvemmälle mentäessä.\n", + "* Älä unohda aktivointifunktioita kerrosten välillä (ReLU) ja Max Pooling -toimintoa.\n", + "* Lopullinen luokitin voi sisältää tai olla sisältämättä piilokerroksia, mutta ulostuloneuronien määrän tulisi vastata luokkien määrää.\n", "\n", "On tärkeää valita oikein viimeisen kerroksen aktivointifunktio ja häviöfunktio:\n", - "* Tensorflow'ssa voit käyttää `softmax`-funktiota aktivointina ja `sparse_categorical_crossentropy`-funktiota häviönä. Sparse categorical cross-entropyn ja ei-sparse-version ero on siinä, että ensimmäinen odottaa ulostulon olevan luokan numero, ei one-hot-vektori.\n", + "* Tensorflow'ssa voit käyttää `softmax`-aktivointia ja `sparse_categorical_crossentropy`-häviöfunktiota. Sparse categorical cross-entropy eroaa ei-sparse-versiosta siten, että ensimmäinen odottaa ulostulon olevan luokan numero eikä one-hot-vektori.\n", "* PyTorchissa viimeinen kerros voi olla ilman aktivointifunktiota, ja häviöfunktioksi voi valita `CrossEntropyLoss`. Tämä funktio soveltaa softmaxia automaattisesti.\n" ] }, @@ -255,9 +275,9 @@ "source": [ "## Kouluta neuroverkko\n", "\n", - "Nyt olemme valmiita kouluttamaan neuroverkon. Koulutuksen aikana kerää tarkkuus (accuracy) sekä koulutus- että testidatasta jokaisella epookilla ja piirrä sitten tarkkuus nähdäksesi, onko ylikoulutusta tapahtunut.\n", + "Nyt olemme valmiita kouluttamaan neuroverkon. Koulutuksen aikana kerää tarkkuus sekä koulutus- että testidatasta jokaisella epookilla ja piirrä sitten tarkkuus nähdäksesi, onko ylioppimista tapahtunut.\n", "\n", - "> Koulutuksen nopeuttamiseksi sinun tulee käyttää GPU:ta, jos se on saatavilla. Vaikka TensorFlow/Keras käyttää GPU:ta automaattisesti, PyTorchissa sinun täytyy siirtää sekä malli että data GPU:lle koulutuksen aikana käyttämällä `.to()`-metodia hyödyntääksesi GPU:n laskentatehoa.\n" + "> Koulutuksen nopeuttamiseksi sinun tulee käyttää GPU:ta, jos se on saatavilla. Vaikka TensorFlow/Keras käyttää GPU:ta automaattisesti, PyTorchissa sinun täytyy siirtää sekä malli että data GPU:lle koulutuksen aikana `.to()`-metodin avulla, jotta voit hyödyntää GPU:n kiihdytystä.\n" ] }, { @@ -299,16 +319,16 @@ "\n", "## Valinnainen: Laske Top3-tarkkuus\n", "\n", - "Tässä harjoituksessa käsittelimme luokittelua, jossa oli melko suuri määrä luokkia (35), joten tuloksemme - noin 50 % validointitarkkuus - on varsin hyvä. Standardi ImageNet-datasetissä on vielä enemmän luokkia - 1000.\n", + "Tässä harjoituksessa käsittelimme luokittelua, jossa oli melko suuri määrä luokkia (35), joten tuloksemme - noin 50 % validointitarkkuus - on varsin hyvä. Standardi ImageNet-datasetissä on vielä enemmän - 1000 luokkaa.\n", "\n", - "Tällaisissa tapauksissa on vaikea varmistaa, että malli **aina** ennustaa luokan oikein. On tilanteita, joissa kaksi rotua ovat hyvin samankaltaisia, ja malli antaa hyvin samanlaiset todennäköisyydet (esim. 0,45 ja 0,43). Jos mittaamme tavallista tarkkuutta, tämä lasketaan virheelliseksi tapaukseksi, vaikka malli teki vain pienen virheen. Tämän vuoksi mittaamme usein toista metriikkaa - tarkkuutta mallin kolmen todennäköisimmän ennusteen joukossa.\n", + "Tällaisissa tapauksissa on vaikeaa varmistaa, että malli **aina** ennustaa luokan oikein. On tilanteita, joissa kaksi rotua ovat hyvin samankaltaisia, ja malli antaa hyvin samankaltaiset todennäköisyydet (esim. 0.45 ja 0.43). Jos mittaamme tavallista tarkkuutta, tämä katsotaan virheelliseksi tapaukseksi, vaikka malli teki vain hyvin pienen virheen. Tästä syystä mittaamme usein toista metriikkaa - tarkkuutta mallin kolmen todennäköisimmän ennusteen joukossa.\n", "\n", - "Pidämme tapausta tarkkana, jos kohdeluokka sisältyy mallin kolmen parhaan ennusteen joukkoon.\n", + "Pidämme tapausta tarkkana, jos kohde-etiketti sisältyy mallin kolmen todennäköisimmän ennusteen joukkoon.\n", "\n", - "Top-3-tarkkuuden laskemiseksi testidatasetillä sinun täytyy käydä datasetti manuaalisesti läpi, soveltaa neuroverkkoa saadaksesi ennusteet ja tehdä sitten laskelmat. Joitakin vinkkejä:\n", + "Top-3-tarkkuuden laskemiseksi testidatasetissä sinun täytyy käydä datasetti manuaalisesti läpi, soveltaa neuroverkkoa saadaksesi ennusteen ja tehdä laskelmat. Joitakin vinkkejä:\n", "\n", - "* Tensorflow'ssa voit käyttää `tf.nn.in_top_k`-funktiota tarkistaaksesi, ovatko `predictions` (mallin tuotos) top-k:ssa (anna `k=3` parametrina) suhteessa `targets`:iin. Tämä funktio palauttaa boolean-arvojen tensorin, joka voidaan muuntaa `int`-muotoon käyttämällä `tf.cast`-funktiota ja sitten koota yhteen `tf.reduce_sum`-funktiolla.\n", - "* PyTorchissa voit käyttää `torch.topk`-funktiota saadaksesi luokkien indeksit, joilla on korkeimmat todennäköisyydet, ja tarkistaa sitten, kuuluuko oikea luokka näihin. Katso [tämä](https://gist.github.com/weiaicunzai/2a5ae6eac6712c70bde0630f3e76b77b) saadaksesi lisää vinkkejä.\n" + "* Tensorflow'ssa voit käyttää `tf.nn.in_top_k`-funktiota nähdäksesi, ovatko `predictions` (mallin tuotos) top-k:ssa (anna `k=3` parametrina) suhteessa `targets`:iin. Tämä funktio palauttaa tensorin, joka sisältää totuusarvoja, jotka voidaan muuntaa `int`-muotoon käyttämällä `tf.cast`-funktiota, ja sitten koota yhteen käyttämällä `tf.reduce_sum`.\n", + "* PyTorchissa voit käyttää `torch.topk`-funktiota saadaksesi indeksit luokista, joilla on korkeimmat todennäköisyydet, ja sitten tarkistaa, kuuluuko oikea luokka näihin. Katso [tämä](https://gist.github.com/weiaicunzai/2a5ae6eac6712c70bde0630f3e76b77b) saadaksesi lisää vinkkejä.\n" ] }, { @@ -326,7 +346,7 @@ "source": [ "## Valinnainen: Rakenna kissojen ja koirien luokittelu\n", "\n", - "Haluamme myös nähdä, kuinka tarkka kaksiluokkainen kissojen ja koirien luokittelu olisi samalla tietojoukolla. Tätä varten meidän täytyy muokata tunnisteita:\n" + "Haluamme myös nähdä, kuinka tarkka kaksiluokkainen kissojen ja koirien luokittelu olisi samalla aineistolla. Tätä varten meidän täytyy muokata tunnisteita:\n" ] }, { @@ -352,7 +372,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n---\n\n**Vastuuvapauslauseke**: \nTämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.\n" + "\n---\n\n**Vastuuvapauslauseke**: \nTämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.\n" ] } ], @@ -378,8 +398,8 @@ "version": "3.9.5" }, "coopTranslator": { - "original_hash": "1de3ae931831253c3198d899da48bfe5", - "translation_date": "2025-08-28T20:30:10+00:00", + "original_hash": "df7d1f7da8d2617b76acd93115776ca4", + "translation_date": "2025-10-03T14:40:13+00:00", "source_file": "lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb", "language_code": "fi" } diff --git a/translations/fi/lessons/4-ComputerVision/07-ConvNets/lab/README.md b/translations/fi/lessons/4-ComputerVision/07-ConvNets/lab/README.md index a80060d1..17517f4e 100644 --- a/translations/fi/lessons/4-ComputerVision/07-ConvNets/lab/README.md +++ b/translations/fi/lessons/4-ComputerVision/07-ConvNets/lab/README.md @@ -1,8 +1,8 @@ -# Classification des visages d'animaux de compagnie +# Classification des visages d'animaux -Devoir de laboratoire tiré du [programme AI for Beginners](https://github.com/microsoft/ai-for-beginners). +Travail pratique issu du [Curriculum AI pour débutants](https://github.com/microsoft/ai-for-beginners). ## Tâche -Imaginez que vous devez développer une application pour une garderie pour animaux afin de cataloguer tous les animaux. L'une des fonctionnalités intéressantes d'une telle application serait de reconnaître automatiquement la race à partir d'une photographie. Cela peut être réalisé avec succès en utilisant des réseaux neuronaux. +Imaginez que vous devez développer une application pour une garderie d'animaux afin de cataloguer tous les animaux. L'une des fonctionnalités intéressantes de cette application serait de découvrir automatiquement la race à partir d'une photographie. Cela peut être réalisé avec succès en utilisant des réseaux neuronaux. -Vous devez entraîner un réseau neuronal convolutif pour classer différentes races de chats et de chiens en utilisant le dataset **Pet Faces**. +Vous devez entraîner un réseau neuronal convolutif pour classifier différentes races de chats et de chiens en utilisant le dataset **Pet Faces**. ## Le Dataset -Nous utiliserons le dataset **Pet Faces**, dérivé du dataset [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/) pour animaux. Il contient 35 races différentes de chiens et de chats. +Nous utiliserons le [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/), qui contient des images de 37 races différentes de chiens et de chats. -![Dataset que nous allons utiliser](../../../../../../translated_images/data.50b2a9d5484bdbf0f52f5765b381cec9efe2bd296a98f007f90bedb6ac67f2a8.fr.png) +![Dataset avec lequel nous travaillerons](../../../../../../translated_images/data.50b2a9d5484bdbf0f52f5765b381cec9efe2bd296a98f007f90bedb6ac67f2a8.fr.png) -Pour télécharger le dataset, utilisez cet extrait de code : +Pour télécharger le dataset, utilisez ce fragment de code : ```python !wget https://thor.robots.ox.ac.uk/~vgg/data/pets/images.tar.gz @@ -31,13 +31,17 @@ Pour télécharger le dataset, utilisez cet extrait de code : !rm images.tar.gz ``` -## Démarrage du Notebook +**Remarque :** Les images du Oxford-IIIT Pet Dataset sont organisées par nom de fichier (par exemple, `Abyssinian_1.jpg`, `Bengal_2.jpg`). Le notebook inclut du code pour organiser ces images dans des sous-répertoires spécifiques à chaque race afin de faciliter la classification. -Commencez le laboratoire en ouvrant [PetFaces.ipynb](../../../../../../lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb) +## Notebook de départ + +Commencez le travail pratique en ouvrant [PetFaces.ipynb](PetFaces.ipynb) ## Résultat -Vous avez résolu un problème relativement complexe de classification d'images à partir de zéro ! Il y avait un grand nombre de classes, et vous avez tout de même réussi à obtenir une précision raisonnable ! Il est également pertinent de mesurer la précision top-k, car il est facile de confondre certaines classes qui ne sont pas clairement distinctes, même pour des êtres humains. +Vous avez résolu un problème relativement complexe de classification d'images à partir de zéro ! Il y avait un grand nombre de classes, et vous avez tout de même réussi à obtenir une précision raisonnable ! Il est également pertinent de mesurer la précision top-k, car il est facile de confondre certaines classes qui ne sont pas clairement distinctes, même pour les êtres humains. + +--- **Avertissement** : Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/he/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb b/translations/he/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb index 8a863b22..690b577a 100644 --- a/translations/he/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb +++ b/translations/he/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb @@ -4,13 +4,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# סיווג פרצופים של חיות מחמד\n", + "# סיווג פנים של חיות מחמד\n", "\n", - "מטלת מעבדה מתוך [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners).\n", + "משימת מעבדה מתוך [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners).\n", "\n", - "### קבלת הנתונים\n", + "### השגת הנתונים\n", "\n", - "במטלה זו נתמקד במשימת סיווג יחסית פשוטה - סיווג פרצופים של חיות מחמד. מערך הנתונים הזה מורכב מפרצופים שנחתכו מתוך [Oxford-IIIT Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/). בואו נתחיל בטעינה והמחשה של מערך הנתונים.\n" + "במשימה זו נתמקד במשימת סיווג יחסית פשוטה - סיווג פנים של חיות מחמד. נשתמש ב-[Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/), שמכיל תמונות של 37 גזעים שונים של כלבים וחתולים. נתחיל בהורדה ובוויזואליזציה של מערך הנתונים.\n", + "\n", + "**הערה:** מערך הנתונים Oxford-IIIT Pet Dataset מכיל תמונות מלאות של חיות מחמד. התמונות יהיו מאורגנות לפי גזע בתיקייה המופקת.\n" ] }, { @@ -86,6 +88,24 @@ "metadata": {}, "outputs": [], "source": [ + "# Note: The Oxford-IIIT Pet Dataset extracts to a folder named 'images'\n", + "# Images are named by breed (e.g., 'Abyssinian_1.jpg')\n", + "# We need to organize them into breed-specific subdirectories\n", + "import os\n", + "from collections import defaultdict\n", + "\n", + "# Organize images by breed\n", + "if not os.path.exists('petfaces'):\n", + " os.makedirs('petfaces')\n", + " for img_file in os.listdir('images'):\n", + " if img_file.endswith(('.jpg', '.png')):\n", + " # Extract breed name from filename (everything before the last underscore and number)\n", + " breed = '_'.join(img_file.split('_')[:-1])\n", + " breed_dir = os.path.join('petfaces', breed)\n", + " if not os.path.exists(breed_dir):\n", + " os.makedirs(breed_dir)\n", + " os.rename(os.path.join('images', img_file), os.path.join(breed_dir, img_file))\n", + "\n", "for cls in os.listdir('petfaces'):\n", " print(cls)\n", " display_images([Image.open(os.path.join('petfaces',cls,x)) \n", @@ -126,7 +146,7 @@ "source": [ "## הכנת מערך נתונים ללמידה עמוקה\n", "\n", - "כדי להתחיל לאמן את רשת העצבים שלנו, עלינו להמיר את כל התמונות לטנסורים, וגם ליצור טנסורים שמתאימים לתוויות (מספרי הקטגוריות). רוב מסגרות העבודה של רשתות עצבים מכילות כלים פשוטים להתמודדות עם תמונות:\n", + "כדי להתחיל לאמן את הרשת העצבית שלנו, עלינו להמיר את כל התמונות לטנזורים, וגם ליצור טנזורים התואמים לתוויות (מספרי מחלקות). רוב מסגרות הרשתות העצביות מכילות כלים פשוטים להתמודדות עם תמונות:\n", "* ב-Tensorflow, השתמשו ב-`tf.keras.preprocessing.image_dataset_from_directory`\n", "* ב-PyTorch, השתמשו ב-`torchvision.datasets.ImageFolder`\n", "\n", @@ -146,7 +166,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "עכשיו אנחנו צריכים להפריד את מערך הנתונים לחלקי אימון ובדיקה:\n" + ":עכשיו אנחנו צריכים לחלק את מערך הנתונים לחלקי אימון ובדיקה\n" ] }, { @@ -228,16 +248,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## הגדרת רשת נוירונים\n", + "## הגדרת רשת עצבית\n", "\n", - "לצורך סיווג תמונות, כדאי להגדיר רשת נוירונים קונבולוציונית עם מספר שכבות. דברים שכדאי לשים לב אליהם:\n", - "* זכרו את ארכיטקטורת הפירמידה, כלומר מספר הפילטרים צריך לגדול ככל שמעמיקים בשכבות.\n", - "* אל תשכחו להוסיף פונקציות הפעלה בין השכבות (ReLU) ושכבות Max Pooling.\n", - "* הסיווג הסופי יכול להיות עם או בלי שכבות נסתרות, אך מספר הנוירונים בשכבה האחרונה צריך להיות שווה למספר הקטגוריות.\n", + "לסיווג תמונות, כדאי להגדיר רשת עצבית קונבולוציונית עם מספר שכבות. דברים שכדאי לשים לב אליהם:\n", + "* זכרו את הארכיטקטורה הפירמידלית, כלומר מספר הפילטרים צריך לגדול ככל שמעמיקים.\n", + "* אל תשכחו פונקציות הפעלה בין השכבות (ReLU) ו-Max Pooling.\n", + "* המסווג הסופי יכול להיות עם או בלי שכבות נסתרות, אך מספר הנוירונים ביציאה צריך להיות שווה למספר הקטגוריות.\n", "\n", - "דבר חשוב הוא להגדיר נכון את פונקציית ההפעלה בשכבה האחרונה ואת פונקציית האובדן:\n", - "* ב-Tensorflow, ניתן להשתמש ב-`softmax` כפונקציית הפעלה וב-`sparse_categorical_crossentropy` כפונקציית אובדן. ההבדל בין sparse categorical cross-entropy לבין הגרסה הלא-ספארסית הוא שהראשונה מצפה לפלט כמספר הקטגוריה ולא כווקטור one-hot.\n", - "* ב-PyTorch, ניתן להגדיר את השכבה האחרונה ללא פונקציית הפעלה, ולהשתמש בפונקציית האובדן `CrossEntropyLoss`. פונקציה זו מיישמת softmax באופן אוטומטי.\n" + "דבר חשוב הוא לבחור נכון את פונקציית ההפעלה בשכבה האחרונה ואת פונקציית ההפסד:\n", + "* ב-Tensorflow, ניתן להשתמש ב-`softmax` כפונקציית הפעלה וב-`sparse_categorical_crossentropy` כפונקציית הפסד. ההבדל בין sparse categorical cross-entropy לבין הגרסה הלא-ספארסית הוא שהראשונה מצפה שהפלט יהיה כמספר הקטגוריה ולא כוקטור one-hot.\n", + "* ב-PyTorch, ניתן להגדיר את השכבה האחרונה ללא פונקציית הפעלה, ולהשתמש בפונקציית הפסד `CrossEntropyLoss`. פונקציה זו מיישמת softmax באופן אוטומטי.\n" ] }, { @@ -253,11 +273,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## לאמן את הרשת העצבית\n", + "## אימון רשת העצבים\n", "\n", - "עכשיו אנחנו מוכנים לאמן את הרשת העצבית. במהלך האימון, יש לאסוף את דיוק הנתונים של האימון והבדיקה בכל אפוק, ולאחר מכן לשרטט את הדיוק כדי לבדוק אם יש התאמת יתר.\n", + "עכשיו אנחנו מוכנים לאמן את רשת העצבים. במהלך האימון, אנא אספו את דיוק הנתונים של האימון והבדיקה בכל אפוק, ולאחר מכן צרו גרף של הדיוק כדי לבדוק אם יש תופעת התאמת יתר.\n", "\n", - "> כדי להאיץ את האימון, יש להשתמש ב-GPU אם הוא זמין. בעוד ש-TensorFlow/Keras ישתמשו ב-GPU באופן אוטומטי, ב-PyTorch יש להעביר גם את המודל וגם את הנתונים ל-GPU במהלך האימון באמצעות השיטה `.to()` כדי לנצל את ההאצה של ה-GPU.\n" + "> כדי להאיץ את האימון, יש להשתמש ב-GPU אם הוא זמין. בעוד ש-TensorFlow/Keras ישתמשו ב-GPU באופן אוטומטי, ב-PyTorch יש להעביר גם את המודל וגם את הנתונים ל-GPU במהלך האימון באמצעות השיטה `.to()` כדי לנצל את יתרונות ההאצה של ה-GPU.\n" ] }, { @@ -295,20 +315,20 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "מה ניתן לומר על אוברפיטינג? מה ניתן לעשות כדי לשפר את הדיוק של המודל\n", + "מה אפשר לומר על התאמת יתר? מה ניתן לעשות כדי לשפר את דיוק המודל?\n", "\n", "## אופציונלי: חישוב דיוק Top3\n", "\n", "בתרגיל הזה עסקנו בסיווג עם מספר די גבוה של קטגוריות (35), כך שהתוצאה שלנו - כ-50% דיוק אימות - היא די טובה. מערך הנתונים הסטנדרטי של ImageNet מכיל אפילו יותר - 1000 קטגוריות.\n", "\n", - "במקרים כאלה קשה להבטיח שהמודל **תמיד** ינבא את הקטגוריה הנכונה. ישנם מקרים שבהם שני גזעים דומים מאוד זה לזה, והמודל מחזיר הסתברויות דומות מאוד (לדוגמה, 0.45 ו-0.43). אם נמדוד דיוק סטנדרטי, זה ייחשב כמקרה שגוי, למרות שהמודל עשה טעות קטנה מאוד. לכן, לעיתים קרובות אנו מודדים מדד אחר - דיוק בתוך שלוש התחזיות הסבירות ביותר של המודל.\n", + "במקרים כאלה קשה להבטיח שהמודל **תמיד** מנבא את הקטגוריה הנכונה. ישנם מקרים שבהם שני סוגים דומים מאוד זה לזה, והמודל מחזיר הסתברויות מאוד דומות (לדוגמה, 0.45 ו-0.43). אם נמדוד דיוק סטנדרטי, זה ייחשב כטעות, למרות שהמודל עשה טעות קטנה מאוד. לכן, לעיתים אנו מודדים מדד אחר - דיוק בתוך שלוש התחזיות הסבירות ביותר של המודל.\n", "\n", - "אנו מחשיבים מקרה כמדויק אם התווית הנכונה נמצאת בתוך שלוש התחזיות המובילות של המודל.\n", + "אנו מחשיבים את המקרה כמדויק אם התווית הנכונה נמצאת בתוך שלוש התחזיות המובילות של המודל.\n", "\n", - "כדי לחשב דיוק Top-3 על מערך הנתונים של הבדיקה, עליכם לעבור ידנית על מערך הנתונים, להפעיל את הרשת העצבית כדי לקבל את התחזיות, ואז לבצע את החישובים. כמה רמזים:\n", + "כדי לחשב דיוק Top-3 על מערך הנתונים של הבדיקה, עליכם לעבור ידנית על מערך הנתונים, להפעיל את הרשת העצבית כדי לקבל את התחזית, ואז לבצע את החישובים. כמה רמזים:\n", "\n", - "* ב-Tensorflow, השתמשו בפונקציה `tf.nn.in_top_k` כדי לבדוק אם ה-`predictions` (הפלט של המודל) נמצאים ב-top-k (העבירו `k=3` כפרמטר), ביחס ל-`targets`. פונקציה זו מחזירה טנסור של ערכים בוליאניים, שניתן להמיר ל-`int` באמצעות `tf.cast`, ואז לצבור באמצעות `tf.reduce_sum`.\n", - "* ב-PyTorch, ניתן להשתמש בפונקציה `torch.topk` כדי לקבל את האינדקסים של הקטגוריות עם ההסתברויות הגבוהות ביותר, ואז לבדוק אם הקטגוריה הנכונה נמצאת ביניהן. ראו [כאן](https://gist.github.com/weiaicunzai/2a5ae6eac6712c70bde0630f3e76b77b) לעוד רמזים.\n" + "* ב-Tensorflow, השתמשו בפונקציה `tf.nn.in_top_k` כדי לבדוק אם ה-`predictions` (תוצאת המודל) נמצאות ב-top-k (העבירו `k=3` כפרמטר), ביחס ל-`targets`. פונקציה זו מחזירה טנזור של ערכים בוליאניים, שניתן להמיר ל-`int` באמצעות `tf.cast`, ואז לצבור באמצעות `tf.reduce_sum`.\n", + "* ב-PyTorch, ניתן להשתמש בפונקציה `torch.topk` כדי לקבל אינדקסים של קטגוריות עם הסתברויות גבוהות, ואז לבדוק אם הקטגוריה הנכונה נמצאת ביניהן. ראו [כאן](https://gist.github.com/weiaicunzai/2a5ae6eac6712c70bde0630f3e76b77b) לעוד רמזים.\n" ] }, { @@ -326,7 +346,7 @@ "source": [ "## אופציונלי: בניית סיווג חתולים מול כלבים\n", "\n", - "אנחנו גם רוצים לבדוק עד כמה מדויק יהיה סיווג בינארי של חתולים מול כלבים על אותו מערך נתונים. כדי לעשות זאת, עלינו להתאים את התוויות:\n" + "אנחנו גם רוצים לבדוק עד כמה מדויק הסיווג הבינארי שלנו של חתולים מול כלבים יהיה על אותו מערך נתונים. כדי לעשות זאת, אנחנו צריכים להתאים את התוויות:\n" ] }, { @@ -352,7 +372,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n---\n\n**כתב ויתור**: \nמסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). בעוד שאנו שואפים לדיוק, יש להיות מודעים לכך שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה.\n" + "\n---\n\n**כתב ויתור**: \nמסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור הסמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה.\n" ] } ], @@ -378,8 +398,8 @@ "version": "3.9.5" }, "coopTranslator": { - "original_hash": "1de3ae931831253c3198d899da48bfe5", - "translation_date": "2025-08-28T20:31:23+00:00", + "original_hash": "df7d1f7da8d2617b76acd93115776ca4", + "translation_date": "2025-10-03T14:41:18+00:00", "source_file": "lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb", "language_code": "he" } diff --git a/translations/he/lessons/4-ComputerVision/07-ConvNets/lab/README.md b/translations/he/lessons/4-ComputerVision/07-ConvNets/lab/README.md index 13b09efb..6f478559 100644 --- a/translations/he/lessons/4-ComputerVision/07-ConvNets/lab/README.md +++ b/translations/he/lessons/4-ComputerVision/07-ConvNets/lab/README.md @@ -1,27 +1,27 @@ # סיווג פנים של חיות מחמד -משימת מעבדה מתוך [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners). +משימת מעבדה מתוך [תוכנית הלימודים AI למתחילים](https://github.com/microsoft/ai-for-beginners). ## משימה -דמיינו שאתם צריכים לפתח אפליקציה למעון חיות מחמד כדי לקטלג את כל החיות. אחת התכונות המדהימות של אפליקציה כזו תהיה זיהוי אוטומטי של הגזע מתוך תמונה. ניתן לבצע זאת בהצלחה באמצעות רשתות נוירונים. +דמיינו שאתם צריכים לפתח אפליקציה למעון חיות מחמד כדי לקטלג את כל החיות. אחת התכונות הנהדרות של אפליקציה כזו תהיה זיהוי אוטומטי של הגזע מתוך תמונה. ניתן לבצע זאת בהצלחה באמצעות רשתות נוירונים. -עליכם לאמן רשת נוירונים קונבולוציונית כדי לסווג גזעים שונים של חתולים וכלבים באמצעות **מאגר הנתונים של פנים חיות מחמד**. +עליכם לאמן רשת נוירונים קונבולוציונית כדי לסווג גזעים שונים של חתולים וכלבים באמצעות **מאגר נתוני פנים של חיות מחמד**. ## מאגר הנתונים -נשתמש במאגר הנתונים **Pet Faces**, שמקורו במאגר הנתונים של חיות מחמד [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/). הוא מכיל 35 גזעים שונים של כלבים וחתולים. +נשתמש ב-[מאגר הנתונים של Oxford-IIIT Pet](https://www.robots.ox.ac.uk/~vgg/data/pets/), המכיל תמונות של 37 גזעים שונים של כלבים וחתולים. -![מאגר הנתונים שנעבוד איתו](../../../../../../translated_images/data.50b2a9d5484bdbf0f52f5765b381cec9efe2bd296a98f007f90bedb6ac67f2a8.he.png) +![מאגר הנתונים שבו נעסוק](../../../../../../translated_images/data.50b2a9d5484bdbf0f52f5765b381cec9efe2bd296a98f007f90bedb6ac67f2a8.he.png) כדי להוריד את מאגר הנתונים, השתמשו בקטע הקוד הבא: @@ -31,15 +31,17 @@ CO_OP_TRANSLATOR_METADATA: !rm images.tar.gz ``` +**הערה:** תמונות מאגר הנתונים של Oxford-IIIT Pet מאורגנות לפי שם הקובץ (לדוגמה, `Abyssinian_1.jpg`, `Bengal_2.jpg`). המחברת כוללת קוד לארגון התמונות הללו בתיקיות לפי גזע לצורך סיווג קל יותר. + ## פתיחת המחברת התחילו את המעבדה על ידי פתיחת [PetFaces.ipynb](PetFaces.ipynb) ## תובנות -פתרתם בעיה יחסית מורכבת של סיווג תמונות מאפס! היו לא מעט קטגוריות, ועדיין הצלחתם להגיע לדיוק סביר! בנוסף, יש היגיון למדוד דיוק top-k, מכיוון שקל להתבלבל בין חלק מהקטגוריות שאינן שונות באופן ברור אפילו עבור בני אדם. +פתרתם בעיה יחסית מורכבת של סיווג תמונות מאפס! היו לא מעט קטגוריות, ועדיין הצלחתם להגיע לדיוק סביר! יש גם היגיון למדוד דיוק top-k, מכיוון שקל להתבלבל בין כמה קטגוריות שאינן שונות באופן ברור אפילו עבור בני אדם. --- **כתב ויתור**: -מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו אחראים לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file +מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. \ No newline at end of file diff --git a/translations/hi/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb b/translations/hi/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb index b8b77efd..25677f1b 100644 --- a/translations/hi/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb +++ b/translations/hi/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb @@ -10,7 +10,9 @@ "\n", "### डेटा प्राप्त करना\n", "\n", - "इस असाइनमेंट में, हम एक अपेक्षाकृत सरल वर्गीकरण कार्य पर ध्यान केंद्रित करेंगे - पालतू जानवरों के चेहरों का वर्गीकरण। यह डेटासेट [Oxford-IIIT Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/) से कटे हुए चेहरों से बना है। चलिए डेटासेट को लोड करने और विज़ुअलाइज़ करने से शुरू करते हैं।\n" + "इस असाइनमेंट में, हम एक अपेक्षाकृत सरल वर्गीकरण कार्य पर ध्यान केंद्रित करेंगे - पालतू जानवरों के चेहरों का वर्गीकरण। हम [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/) का उपयोग करेंगे, जिसमें कुत्तों और बिल्लियों की 37 विभिन्न नस्लों की छवियां शामिल हैं। चलिए डेटा को डाउनलोड और विज़ुअलाइज़ करने से शुरू करते हैं।\n", + "\n", + "**नोट:** Oxford-IIIT Pet Dataset में पूरे पालतू जानवरों की छवियां शामिल हैं। निकाले गए फ़ोल्डर में छवियां नस्ल के अनुसार व्यवस्थित होंगी।\n" ] }, { @@ -46,7 +48,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "हम एक सामान्य फ़ंक्शन परिभाषित करेंगे जो एक सूची से छवियों की श्रृंखला प्रदर्शित करेगा:\n" + "हम एक सामान्य फ़ंक्शन परिभाषित करेंगे जो सूची से छवियों की श्रृंखला प्रदर्शित करेगा:\n" ] }, { @@ -86,6 +88,24 @@ "metadata": {}, "outputs": [], "source": [ + "# Note: The Oxford-IIIT Pet Dataset extracts to a folder named 'images'\n", + "# Images are named by breed (e.g., 'Abyssinian_1.jpg')\n", + "# We need to organize them into breed-specific subdirectories\n", + "import os\n", + "from collections import defaultdict\n", + "\n", + "# Organize images by breed\n", + "if not os.path.exists('petfaces'):\n", + " os.makedirs('petfaces')\n", + " for img_file in os.listdir('images'):\n", + " if img_file.endswith(('.jpg', '.png')):\n", + " # Extract breed name from filename (everything before the last underscore and number)\n", + " breed = '_'.join(img_file.split('_')[:-1])\n", + " breed_dir = os.path.join('petfaces', breed)\n", + " if not os.path.exists(breed_dir):\n", + " os.makedirs(breed_dir)\n", + " os.rename(os.path.join('images', img_file), os.path.join(breed_dir, img_file))\n", + "\n", "for cls in os.listdir('petfaces'):\n", " print(cls)\n", " display_images([Image.open(os.path.join('petfaces',cls,x)) \n", @@ -95,7 +115,9 @@ { "cell_type": "markdown", "metadata": {}, - "source": [] + "source": [ + "आइए हमारे डेटासेट में वर्गों की संख्या भी परिभाषित करें:\n" + ] }, { "cell_type": "code", @@ -124,7 +146,7 @@ "source": [ "## डीप लर्निंग के लिए डेटासेट तैयार करना\n", "\n", - "हमारे न्यूरल नेटवर्क को ट्रेनिंग शुरू करने के लिए, हमें सभी इमेज को टेन्सर में बदलना होगा, और लेबल (क्लास नंबर) के लिए भी टेन्सर बनाना होगा। अधिकांश न्यूरल नेटवर्क फ्रेमवर्क में इमेज के साथ काम करने के लिए सरल टूल्स होते हैं:\n", + "हमारे न्यूरल नेटवर्क को ट्रेनिंग शुरू करने के लिए, हमें सभी इमेज को टेंसर में बदलना होगा और लेबल (क्लास नंबर) के लिए भी टेंसर बनाना होगा। अधिकांश न्यूरल नेटवर्क फ्रेमवर्क में इमेज के साथ काम करने के लिए सरल टूल्स होते हैं:\n", "* Tensorflow में, `tf.keras.preprocessing.image_dataset_from_directory` का उपयोग करें\n", "* PyTorch में, `torchvision.datasets.ImageFolder` का उपयोग करें\n", "\n", @@ -144,7 +166,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "अब हमें डेटासेट को ट्रेन और टेस्ट भागों में विभाजित करना है:\n" + "अब हमें डेटासेट को ट्रेन और टेस्ट भागों में विभाजित करना होगा:\n" ] }, { @@ -160,7 +182,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "अब चलिए हमारे डेटासेट में टेन्सर्स के आकार को प्रिंट करते हैं। अगर आपने सबकुछ सही तरीके से किया है, तो ट्रेनिंग एलिमेंट्स का आकार होना चाहिए:\n", + "अब चलिए हमारे डेटासेट में टेन्सर्स का आकार प्रिंट करते हैं। अगर आपने सबकुछ सही किया है, तो ट्रेनिंग एलिमेंट्स का आकार होना चाहिए:\n", " * Tensorflow के लिए `(batch_size,image_size,image_size,3)`, PyTorch के लिए `batch_size,3,image_size,image_size`\n", " * लेबल्स के लिए `batch_size`\n", "\n", @@ -233,9 +255,9 @@ "* परतों के बीच सक्रियण फ़ंक्शन (ReLU) और मैक्स पूलिंग को न भूलें।\n", "* अंतिम वर्गीकरणकर्ता छिपी हुई परतों के साथ या बिना हो सकता है, लेकिन आउटपुट न्यूरॉन्स की संख्या कक्षाओं की संख्या के बराबर होनी चाहिए।\n", "\n", - "एक महत्वपूर्ण बात यह है कि अंतिम परत पर सक्रियण फ़ंक्शन + हानि फ़ंक्शन सही होना चाहिए:\n", - "* Tensorflow में, आप सक्रियण के रूप में `softmax` और हानि के रूप में `sparse_categorical_crossentropy` का उपयोग कर सकते हैं। स्पार्स श्रेणीगत क्रॉस-एंट्रोपी और गैर-स्पार्स के बीच का अंतर यह है कि पहला आउटपुट को कक्षा की संख्या के रूप में अपेक्षित करता है, न कि वन-हॉट वेक्टर के रूप में।\n", - "* PyTorch में, आप अंतिम परत को सक्रियण फ़ंक्शन के बिना रख सकते हैं और `CrossEntropyLoss` हानि फ़ंक्शन का उपयोग कर सकते हैं। यह फ़ंक्शन स्वचालित रूप से softmax लागू करता है।\n" + "एक महत्वपूर्ण बात यह है कि अंतिम परत पर सक्रियण फ़ंक्शन और लॉस फ़ंक्शन सही होना चाहिए:\n", + "* Tensorflow में, आप सक्रियण के रूप में `softmax` और लॉस के रूप में `sparse_categorical_crossentropy` का उपयोग कर सकते हैं। स्पार्स कैटेगोरिकल क्रॉस-एंट्रोपी और नॉन-स्पार्स के बीच अंतर यह है कि पहला आउटपुट को कक्षा की संख्या के रूप में अपेक्षित करता है, न कि वन-हॉट वेक्टर के रूप में।\n", + "* PyTorch में, आप अंतिम परत को सक्रियण फ़ंक्शन के बिना रख सकते हैं और `CrossEntropyLoss` लॉस फ़ंक्शन का उपयोग कर सकते हैं। यह फ़ंक्शन स्वचालित रूप से softmax लागू करता है।\n" ] }, { @@ -253,9 +275,9 @@ "source": [ "## न्यूरल नेटवर्क को प्रशिक्षित करें\n", "\n", - "अब हम न्यूरल नेटवर्क को प्रशिक्षित करने के लिए तैयार हैं। प्रशिक्षण के दौरान, कृपया प्रत्येक युग पर ट्रेन और टेस्ट डेटा की सटीकता एकत्र करें, और फिर सटीकता को प्लॉट करें ताकि यह देखा जा सके कि कहीं ओवरफिटिंग तो नहीं हो रही है।\n", + "अब हम न्यूरल नेटवर्क को प्रशिक्षित करने के लिए तैयार हैं। प्रशिक्षण के दौरान, कृपया प्रत्येक epoch पर ट्रेन और टेस्ट डेटा की सटीकता एकत्र करें, और फिर सटीकता को प्लॉट करें ताकि यह देखा जा सके कि कहीं ओवरफिटिंग तो नहीं हो रही है।\n", "\n", - "> प्रशिक्षण को तेज करने के लिए, आपको GPU का उपयोग करना होगा यदि उपलब्ध हो। जबकि TensorFlow/Keras स्वचालित रूप से GPU का उपयोग करेगा, PyTorch में आपको प्रशिक्षण के दौरान मॉडल और डेटा दोनों को `.to()` विधि का उपयोग करके GPU पर ले जाना होगा ताकि GPU एक्सेलेरेशन का लाभ उठाया जा सके।\n" + "> प्रशिक्षण को तेज करने के लिए, यदि GPU उपलब्ध हो तो उसका उपयोग करें। जबकि TensorFlow/Keras स्वचालित रूप से GPU का उपयोग करेगा, PyTorch में आपको प्रशिक्षण के दौरान मॉडल और डेटा दोनों को `.to()` मेथड का उपयोग करके GPU पर ले जाना होगा ताकि GPU एक्सेलेरेशन का लाभ उठाया जा सके।\n" ] }, { @@ -293,20 +315,20 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "ओवरफिटिंग के बारे में आप क्या कह सकते हैं? मॉडल की सटीकता सुधारने के लिए क्या किया जा सकता है?\n", + "ओवरफिटिंग के बारे में क्या कहा जा सकता है? मॉडल की सटीकता सुधारने के लिए क्या किया जा सकता है?\n", "\n", "## वैकल्पिक: टॉप-3 सटीकता की गणना करें\n", "\n", - "इस अभ्यास में, हम उच्च संख्या वाले वर्गों (35) के साथ वर्गीकरण कर रहे थे, इसलिए हमारा परिणाम - लगभग 50% सत्यापन सटीकता - काफी अच्छा है। मानक ImageNet डेटासेट में और भी अधिक - 1000 वर्ग होते हैं।\n", + "इस अभ्यास में, हम 35 वर्गों के साथ वर्गीकरण कर रहे थे, इसलिए हमारा परिणाम - लगभग 50% सत्यापन सटीकता - काफी अच्छा है। मानक ImageNet डेटासेट में और भी अधिक वर्ग होते हैं - 1000।\n", "\n", - "ऐसे मामलों में यह सुनिश्चित करना कठिन होता है कि मॉडल **हमेशा** सही वर्ग की भविष्यवाणी करे। कुछ मामलों में दो नस्लें एक-दूसरे से बहुत मिलती-जुलती होती हैं, और मॉडल बहुत समान संभावनाएं लौटाता है (जैसे, 0.45 और 0.43)। यदि हम मानक सटीकता को मापते हैं, तो इसे गलत मामला माना जाएगा, भले ही मॉडल ने बहुत छोटा गलती की हो। इस कारण से, हम अक्सर एक अन्य मीट्रिक मापते हैं - मॉडल की सबसे संभावित 3 भविष्यवाणियों के भीतर सटीकता।\n", + "ऐसे मामलों में यह सुनिश्चित करना कठिन होता है कि मॉडल **हमेशा** सही वर्ग की भविष्यवाणी करे। कुछ मामलों में दो नस्लें एक-दूसरे से बहुत मिलती-जुलती होती हैं, और मॉडल बहुत समान संभावनाएं लौटाता है (जैसे, 0.45 और 0.43)। यदि हम मानक सटीकता को मापते हैं, तो इसे गलत मामला माना जाएगा, भले ही मॉडल ने बहुत छोटा गलती की हो। इस कारण से, हम अक्सर एक और मीट्रिक मापते हैं - मॉडल की सबसे संभावित तीन भविष्यवाणियों के भीतर सटीकता।\n", "\n", - "हम मामले को सटीक मानते हैं यदि लक्ष्य लेबल मॉडल की टॉप-3 भविष्यवाणियों के भीतर शामिल है।\n", + "हम उस मामले को सटीक मानते हैं यदि लक्ष्य लेबल मॉडल की टॉप-3 भविष्यवाणियों में शामिल है।\n", "\n", "टेस्ट डेटासेट पर टॉप-3 सटीकता की गणना करने के लिए, आपको मैन्युअल रूप से डेटासेट पर जाना होगा, न्यूरल नेटवर्क लागू करना होगा ताकि भविष्यवाणी प्राप्त हो सके, और फिर गणना करनी होगी। कुछ सुझाव:\n", "\n", - "* Tensorflow में, `tf.nn.in_top_k` फ़ंक्शन का उपयोग करें यह देखने के लिए कि क्या `predictions` (मॉडल का आउटपुट) टॉप-k में हैं (पैरामीटर के रूप में `k=3` पास करें), `targets` के संदर्भ में। यह फ़ंक्शन बूलियन मानों का एक टेंसर लौटाता है, जिसे `tf.cast` का उपयोग करके `int` में बदला जा सकता है, और फिर `tf.reduce_sum` का उपयोग करके जोड़ा जा सकता है।\n", - "* PyTorch में, आप `torch.topk` फ़ंक्शन का उपयोग कर सकते हैं ताकि उच्चतम संभावनाओं वाले वर्गों के इंडेक्स प्राप्त कर सकें, और फिर देख सकें कि सही वर्ग उनमें शामिल है या नहीं। अधिक सुझावों के लिए [यह](https://gist.github.com/weiaicunzai/2a5ae6eac6712c70bde0630f3e76b77b) देखें।\n" + "* Tensorflow में, `tf.nn.in_top_k` फ़ंक्शन का उपयोग करें यह देखने के लिए कि क्या `predictions` (मॉडल का आउटपुट) `targets` के संदर्भ में टॉप-k में हैं (पैरामीटर के रूप में `k=3` पास करें)। यह फ़ंक्शन बूलियन मानों का एक टेंसर लौटाता है, जिसे `tf.cast` का उपयोग करके `int` में परिवर्तित किया जा सकता है, और फिर `tf.reduce_sum` का उपयोग करके जोड़ा जा सकता है।\n", + "* PyTorch में, आप `torch.topk` फ़ंक्शन का उपयोग कर सकते हैं ताकि उच्चतम संभावनाओं वाले वर्गों के इंडेक्स प्राप्त कर सकें, और फिर देख सकते हैं कि सही वर्ग उनमें शामिल है या नहीं। अधिक सुझावों के लिए [यह](https://gist.github.com/weiaicunzai/2a5ae6eac6712c70bde0630f3e76b77b) देखें।\n" ] }, { @@ -324,7 +346,7 @@ "source": [ "## वैकल्पिक: बिल्ली बनाम कुत्ते वर्गीकरण बनाना\n", "\n", - "हम यह भी देखना चाहते हैं कि हमारे द्विआधारी बिल्ली बनाम कुत्ते वर्गीकरण का उसी डेटासेट पर कितना सटीक परिणाम होगा। इसे करने के लिए, हमें लेबल्स को समायोजित करना होगा:\n" + "हम यह भी देखना चाहते हैं कि हमारे बाइनरी बिल्ली बनाम कुत्ते वर्गीकरण का प्रदर्शन उसी डेटासेट पर कितना सटीक होगा। इसे करने के लिए, हमें लेबल्स को समायोजित करना होगा:\n" ] }, { @@ -376,8 +398,8 @@ "version": "3.9.5" }, "coopTranslator": { - "original_hash": "1de3ae931831253c3198d899da48bfe5", - "translation_date": "2025-08-31T14:33:05+00:00", + "original_hash": "df7d1f7da8d2617b76acd93115776ca4", + "translation_date": "2025-10-03T14:31:49+00:00", "source_file": "lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb", "language_code": "hi" } diff --git a/translations/hi/lessons/4-ComputerVision/07-ConvNets/lab/README.md b/translations/hi/lessons/4-ComputerVision/07-ConvNets/lab/README.md index 1feaf3f3..d0c9c05a 100644 --- a/translations/hi/lessons/4-ComputerVision/07-ConvNets/lab/README.md +++ b/translations/hi/lessons/4-ComputerVision/07-ConvNets/lab/README.md @@ -1,27 +1,27 @@ -# पालतू जानवरों के चेहरे की श्रेणीकरण +# पालतू जानवरों के चेहरों का वर्गीकरण [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) से लैब असाइनमेंट। ## कार्य -कल्पना करें कि आपको एक पालतू नर्सरी के लिए एक एप्लिकेशन विकसित करनी है जो सभी पालतू जानवरों को सूचीबद्ध करे। ऐसी एप्लिकेशन की एक शानदार विशेषता यह होगी कि वह तस्वीर से स्वचालित रूप से नस्ल की पहचान कर सके। यह कार्य न्यूरल नेटवर्क का उपयोग करके सफलतापूर्वक किया जा सकता है। +कल्पना करें कि आपको एक पालतू जानवरों की नर्सरी के लिए एक एप्लिकेशन विकसित करनी है ताकि सभी पालतू जानवरों को सूचीबद्ध किया जा सके। ऐसी एप्लिकेशन की एक शानदार विशेषता यह होगी कि वह तस्वीर से स्वचालित रूप से नस्ल की पहचान कर सके। यह कार्य न्यूरल नेटवर्क्स का उपयोग करके सफलतापूर्वक किया जा सकता है। -आपको **Pet Faces** डेटासेट का उपयोग करके बिल्लियों और कुत्तों की विभिन्न नस्लों को वर्गीकृत करने के लिए एक कन्वोल्यूशनल न्यूरल नेटवर्क को प्रशिक्षित करना होगा। +आपको **Pet Faces** डेटासेट का उपयोग करके बिल्लियों और कुत्तों की विभिन्न नस्लों को वर्गीकृत करने के लिए एक कॉन्वोल्यूशनल न्यूरल नेटवर्क को प्रशिक्षित करना होगा। ## डेटासेट -हम **Pet Faces** डेटासेट का उपयोग करेंगे, जो [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/) पालतू जानवरों के डेटासेट से लिया गया है। इसमें कुत्तों और बिल्लियों की 35 विभिन्न नस्लें शामिल हैं। +हम [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/) का उपयोग करेंगे, जिसमें कुत्तों और बिल्लियों की 37 विभिन्न नस्लों की छवियां शामिल हैं। -![हम जिस डेटासेट से निपटेंगे](../../../../../../lessons/4-ComputerVision/07-ConvNets/lab/images/data.png) +![हम जिस डेटासेट पर काम करेंगे](../../../../../../translated_images/data.50b2a9d5484bdbf0f52f5765b381cec9efe2bd296a98f007f90bedb6ac67f2a8.hi.png) डेटासेट डाउनलोड करने के लिए, इस कोड स्निपेट का उपयोग करें: @@ -31,13 +31,17 @@ CO_OP_TRANSLATOR_METADATA: !rm images.tar.gz ``` +**नोट:** Oxford-IIIT Pet Dataset की छवियां फाइलनाम के अनुसार व्यवस्थित हैं (जैसे, `Abyssinian_1.jpg`, `Bengal_2.jpg`)। नोटबुक में इन छवियों को नस्ल-विशिष्ट सबडायरेक्टरी में व्यवस्थित करने के लिए कोड शामिल है ताकि वर्गीकरण आसान हो सके। + ## प्रारंभिक नोटबुक -लैब शुरू करने के लिए [PetFaces.ipynb](../../../../../../lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb) खोलें। +लैब शुरू करने के लिए [PetFaces.ipynb](PetFaces.ipynb) खोलें। ## निष्कर्ष -आपने छवि वर्गीकरण की एक अपेक्षाकृत जटिल समस्या को शुरुआत से हल किया है! यहां काफी सारी श्रेणियां थीं, और फिर भी आप उचित सटीकता प्राप्त करने में सक्षम रहे! यह भी समझ में आता है कि शीर्ष-k सटीकता को मापा जाए, क्योंकि कुछ श्रेणियों को भ्रमित करना आसान है जो इंसानों के लिए भी स्पष्ट रूप से अलग नहीं हैं। +आपने छवि वर्गीकरण की एक अपेक्षाकृत जटिल समस्या को शुरुआत से हल किया है! यहां काफी सारी श्रेणियां थीं, और फिर भी आप उचित सटीकता प्राप्त करने में सक्षम रहे! यह भी समझ में आता है कि टॉप-k सटीकता को मापा जाए, क्योंकि कुछ श्रेणियों को भ्रमित करना आसान है जो मानव दृष्टि से भी स्पष्ट रूप से अलग नहीं हैं। + +--- **अस्वीकरण**: यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hk/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb b/translations/hk/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb index 4ced072b..99128bd8 100644 --- a/translations/hk/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb +++ b/translations/hk/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb @@ -10,7 +10,9 @@ "\n", "### 獲取數據\n", "\n", - "在這次作業中,我們將專注於一個相對簡單的分類任務——寵物面部的分類。這個數據集包含從 [Oxford-IIIT Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/) 中裁剪出的寵物面部。讓我們先開始載入並視覺化這個數據集。\n" + "在這次作業中,我們將專注於一個相對簡單的分類任務——寵物面部的分類。我們將使用 [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/),該數據集包含 37 種不同品種的狗和貓的圖片。讓我們從下載並可視化數據集開始。\n", + "\n", + "**注意:** Oxford-IIIT Pet Dataset 包含完整的寵物圖片。提取後的文件夾中,圖片將按照品種進行組織。\n" ] }, { @@ -86,6 +88,24 @@ "metadata": {}, "outputs": [], "source": [ + "# Note: The Oxford-IIIT Pet Dataset extracts to a folder named 'images'\n", + "# Images are named by breed (e.g., 'Abyssinian_1.jpg')\n", + "# We need to organize them into breed-specific subdirectories\n", + "import os\n", + "from collections import defaultdict\n", + "\n", + "# Organize images by breed\n", + "if not os.path.exists('petfaces'):\n", + " os.makedirs('petfaces')\n", + " for img_file in os.listdir('images'):\n", + " if img_file.endswith(('.jpg', '.png')):\n", + " # Extract breed name from filename (everything before the last underscore and number)\n", + " breed = '_'.join(img_file.split('_')[:-1])\n", + " breed_dir = os.path.join('petfaces', breed)\n", + " if not os.path.exists(breed_dir):\n", + " os.makedirs(breed_dir)\n", + " os.rename(os.path.join('images', img_file), os.path.join(breed_dir, img_file))\n", + "\n", "for cls in os.listdir('petfaces'):\n", " print(cls)\n", " display_images([Image.open(os.path.join('petfaces',cls,x)) \n", @@ -96,7 +116,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "讓我們也定義我們數據集中的類別數:\n" + "讓我們也定義我們數據集中的類別數量:\n" ] }, { @@ -126,11 +146,11 @@ "source": [ "## 為深度學習準備數據集\n", "\n", - "在開始訓練我們的神經網絡之前,我們需要將所有圖片轉換為張量,並創建與標籤(類別編號)對應的張量。大多數神經網絡框架都提供了簡單的工具來處理圖片:\n", + "在開始訓練我們的神經網絡之前,我們需要將所有圖片轉換為張量,並且還需要創建與標籤(類別編號)相對應的張量。大多數神經網絡框架都提供了簡單的工具來處理圖片:\n", "* 在 Tensorflow 中,使用 `tf.keras.preprocessing.image_dataset_from_directory`\n", "* 在 PyTorch 中,使用 `torchvision.datasets.ImageFolder`\n", "\n", - "正如你從上面的圖片中看到的,它們的比例都接近正方形,因此我們需要將所有圖片調整為正方形大小。此外,我們還可以將圖片組織成小批量處理。\n" + "如上圖所示,所有圖片的比例都接近正方形,因此我們需要將所有圖片調整為正方形大小。此外,我們還可以將圖片組織成小批量。\n" ] }, { @@ -146,7 +166,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "現在我們需要將數據集分成訓練部分和測試部分:\n" + "現在我們需要將數據集分為訓練部分和測試部分:\n" ] }, { @@ -162,11 +182,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "現在讓我們列印數據集中張量的大小。如果你已正確完成所有步驟,訓練元素的大小應該是:\n", - " * 對於 Tensorflow,應為 `(batch_size,image_size,image_size,3)`;對於 PyTorch,應為 `batch_size,3,image_size,image_size`\n", - " * 標籤的大小應為 `batch_size`\n", - "\n", - "標籤應包含類別的數字。\n" + "現在讓我們打印數據集中張量的大小。如果你一切都做對了,訓練元素的大小應該是:\n", + " * 對於 Tensorflow,應該是 `(batch_size,image_size,image_size,3)`,對於 PyTorch,應該是 `batch_size,3,image_size,image_size`\n", + " * 標籤應該是 `batch_size`\n", + " \n", + " 標籤應該包含類別的數字。\n" ] }, { @@ -230,14 +250,14 @@ "source": [ "## 定義神經網絡\n", "\n", - "對於圖像分類,你可能需要定義一個具有多層的卷積神經網絡。需要注意的事項:\n", - "* 記住金字塔架構,即隨著網絡加深,濾波器的數量應該增加\n", - "* 別忘了在層之間加入激活函數(ReLU)和最大池化(Max Pooling)\n", + "對於圖像分類,您可能需要定義一個具有多層的卷積神經網絡。需要注意的事項:\n", + "* 請記住金字塔架構,即隨著網絡加深,濾波器的數量應該增加\n", + "* 不要忘記在層之間使用激活函數(例如 ReLU)以及最大池化(Max Pooling)\n", "* 最終的分類器可以有或沒有隱藏層,但輸出神經元的數量應該等於類別的數量。\n", "\n", - "一個重要的事情是要正確設置最後一層的激活函數和損失函數:\n", - "* 在 Tensorflow 中,你可以使用 `softmax` 作為激活函數,並使用 `sparse_categorical_crossentropy` 作為損失函數。稀疏分類交叉熵和非稀疏交叉熵的區別在於,前者期望輸出為類別的編號,而不是 one-hot 向量。\n", - "* 在 PyTorch 中,你可以在最後一層不使用激活函數,並使用 `CrossEntropyLoss` 作為損失函數。這個函數會自動應用 softmax。\n" + "一個重要的點是要正確設置最後一層的激活函數和損失函數:\n", + "* 在 Tensorflow 中,您可以使用 `softmax` 作為激活函數,並使用 `sparse_categorical_crossentropy` 作為損失函數。稀疏分類交叉熵和非稀疏交叉熵的區別在於前者期望輸出為類別的編號,而不是 one-hot 向量。\n", + "* 在 PyTorch 中,最後一層可以不使用激活函數,並使用 `CrossEntropyLoss` 作為損失函數。此函數會自動應用 softmax。\n" ] }, { @@ -255,9 +275,9 @@ "source": [ "## 訓練神經網絡\n", "\n", - "現在我們準備好訓練神經網絡了。在訓練過程中,請在每個訓練週期收集訓練和測試數據的準確率,然後繪製準確率圖表,以檢查是否出現過度擬合的情況。\n", + "現在我們準備好訓練神經網絡了。在訓練過程中,請在每個 epoch 收集訓練數據和測試數據的準確率,然後繪製準確率圖表,以檢查是否存在過擬合的情況。\n", "\n", - "> 為了加快訓練速度,如果有可用的 GPU,請使用它。雖然 TensorFlow/Keras 會自動使用 GPU,但在 PyTorch 中,你需要使用 `.to()` 方法將模型和數據移動到 GPU 上,才能充分利用 GPU 的加速功能。\n" + "> 為了加快訓練速度,如果有 GPU 可用,請使用 GPU。雖然 TensorFlow/Keras 會自動使用 GPU,但在 PyTorch 中,您需要在訓練過程中使用 `.to()` 方法將模型和數據移動到 GPU 上,以利用 GPU 的加速功能。\n" ] }, { @@ -295,20 +315,20 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "什麼是過度擬合?如何提升模型的準確性?\n", + "關於過度擬合,你可以怎麼說?如何提高模型的準確性?\n", "\n", - "## 可選:計算 Top-3 準確率\n", + "## 可選:計算 Top3 準確率\n", "\n", - "在這個練習中,我們處理的是一個分類問題,且類別數量相當多(35個類別),因此我們的結果——大約50%的驗證準確率——已經相當不錯了。標準的 ImageNet 數據集甚至有更多類別——多達1000個。\n", + "在這個練習中,我們處理的是具有相當多類別(35類)的分類問題,因此我們的結果——大約50%的驗證準確率——已經相當不錯了。標準的 ImageNet 數據集甚至有更多類別——1000類。\n", "\n", - "在這種情況下,很難保證模型**總是**能正確預測類別。有時候,兩個品種可能非常相似,模型給出的概率也非常接近(例如,0.45 和 0.43)。如果我們只測量標準準確率,這種情況會被視為錯誤,即使模型只犯了一個很小的錯誤。因此,我們經常會測量另一個指標——模型在最可能的前三個預測中的準確率。\n", + "在這種情況下,很難保證模型**總是**正確地預測類別。有些情況下,兩個品種非常相似,而模型返回的概率也非常接近(例如,0.45 和 0.43)。如果我們測量標準準確率,這將被視為錯誤案例,即使模型只犯了很小的錯誤。因此,我們經常測量另一個指標——模型最可能的前三個預測中的準確率。\n", "\n", - "如果目標標籤包含在模型的前三個預測中,我們就認為這個案例是準確的。\n", + "如果目標標籤包含在模型的前三個預測中,我們就認為該案例是準確的。\n", "\n", - "要計算測試數據集上的 Top-3 準確率,你需要手動遍歷數據集,應用神經網絡進行預測,然後進行計算。一些提示如下:\n", + "要在測試數據集上計算 top-3 準確率,你需要手動遍歷數據集,應用神經網絡進行預測,然後進行計算。一些提示:\n", "\n", - "* 在 Tensorflow 中,可以使用 `tf.nn.in_top_k` 函數來檢查 `predictions`(模型的輸出)是否在 top-k(將 `k=3` 作為參數)中,並與 `targets` 進行比較。該函數返回一個布爾值的張量,可以使用 `tf.cast` 將其轉換為 `int`,然後使用 `tf.reduce_sum` 進行累加。\n", - "* 在 PyTorch 中,可以使用 `torch.topk` 函數來獲取具有最高概率的類別索引,然後檢查正確的類別是否包含在其中。更多提示請參考[這裡](https://gist.github.com/weiaicunzai/2a5ae6eac6712c70bde0630f3e76b77b)。\n" + "* 在 Tensorflow 中,使用 `tf.nn.in_top_k` 函數來檢查 `predictions`(模型的輸出)是否在 top-k(將 `k=3` 作為參數),相對於 `targets`。此函數返回布爾值的張量,可以使用 `tf.cast` 轉換為 `int`,然後使用 `tf.reduce_sum` 累加。\n", + "* 在 PyTorch 中,你可以使用 `torch.topk` 函數獲取具有最高概率的類別索引,然後檢查正確的類別是否屬於其中。參考[這裡](https://gist.github.com/weiaicunzai/2a5ae6eac6712c70bde0630f3e76b77b)獲取更多提示。\n" ] }, { @@ -352,7 +372,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n---\n\n**免責聲明**: \n本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始語言的文件應被視為權威來源。對於重要信息,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。\n" + "\n---\n\n**免責聲明**: \n本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於重要信息,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。\n" ] } ], @@ -378,8 +398,8 @@ "version": "3.9.5" }, "coopTranslator": { - "original_hash": "1de3ae931831253c3198d899da48bfe5", - "translation_date": "2025-08-31T09:36:15+00:00", + "original_hash": "df7d1f7da8d2617b76acd93115776ca4", + "translation_date": "2025-10-03T14:29:39+00:00", "source_file": "lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb", "language_code": "hk" } diff --git a/translations/hk/lessons/4-ComputerVision/07-ConvNets/lab/README.md b/translations/hk/lessons/4-ComputerVision/07-ConvNets/lab/README.md index 5bfccc7c..67abbd7d 100644 --- a/translations/hk/lessons/4-ComputerVision/07-ConvNets/lab/README.md +++ b/translations/hk/lessons/4-ComputerVision/07-ConvNets/lab/README.md @@ -1,25 +1,25 @@ # 寵物面孔分類 -來自 [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) 的實驗課題。 +來自 [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) 的實驗作業。 ## 任務 -假設你需要開發一個寵物托管應用程式,用來記錄所有的寵物。這個應用程式的一個重要功能是能夠根據照片自動辨識寵物的品種。這可以通過神經網絡成功實現。 +假設你需要開發一個寵物托管應用程式,用於記錄所有寵物。這樣的應用程式的一個重要功能就是能夠從照片中自動識別寵物的品種。這可以通過神經網絡成功實現。 -你需要訓練一個卷積神經網絡,使用 **Pet Faces** 數據集來分類不同品種的貓和狗。 +你需要訓練一個卷積神經網絡來分類不同品種的貓和狗,使用 **Pet Faces** 數據集。 ## 數據集 -我們將使用 **Pet Faces** 數據集,該數據集源自 [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/) 寵物數據集。它包含 35 種不同品種的狗和貓。 +我們將使用 [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/),該數據集包含37種不同品種的狗和貓的圖片。 ![我們將處理的數據集](../../../../../../translated_images/data.50b2a9d5484bdbf0f52f5765b381cec9efe2bd296a98f007f90bedb6ac67f2a8.hk.png) @@ -31,13 +31,17 @@ CO_OP_TRANSLATOR_METADATA: !rm images.tar.gz ``` -## 啟動筆記本 +**注意:** Oxford-IIIT Pet Dataset 的圖片是根據文件名組織的(例如,`Abyssinian_1.jpg`,`Bengal_2.jpg`)。筆記本中包含代碼,用於將這些圖片整理到按品種分類的子目錄中,以便於分類。 -通過打開 [PetFaces.ipynb](../../../../../../lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb) 開始實驗。 +## 開始筆記本 + +通過打開 [PetFaces.ipynb](PetFaces.ipynb) 開始實驗。 ## 收穫 -你已經成功解決了一個相對複雜的圖像分類問題!儘管有很多類別,你仍然能夠獲得合理的準確率!此外,測量 top-k 準確率也是有意義的,因為有些類別即使對人類來說也不容易區分。 +你已經從零開始解決了一個相對複雜的圖像分類問題!儘管有很多類別,你仍然能夠獲得合理的準確率!同時,測量 top-k 準確率也是有意義的,因為有些類別即使對人類來說也不容易區分。 + +--- **免責聲明**: -本文件使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤釋概不負責。 \ No newline at end of file +本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於重要信息,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。 \ No newline at end of file diff --git a/translations/hr/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb b/translations/hr/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb index 8ef7fed6..f130731e 100644 --- a/translations/hr/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb +++ b/translations/hr/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb @@ -10,7 +10,9 @@ "\n", "### Dobivanje podataka\n", "\n", - "U ovom zadatku usredotočit ćemo se na relativno jednostavan zadatak klasifikacije - klasifikaciju lica kućnih ljubimaca. Ovaj skup podataka sastoji se od izrezanih lica iz [Oxford-IIIT skupa podataka](https://www.robots.ox.ac.uk/~vgg/data/pets/). Započnimo učitavanjem i vizualizacijom skupa podataka.\n" + "U ovom zadatku ćemo se usredotočiti na relativno jednostavan zadatak klasifikacije - klasifikaciju lica kućnih ljubimaca. Koristit ćemo [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/), koji sadrži slike 37 različitih pasmina pasa i mačaka. Započnimo preuzimanjem i vizualizacijom skupa podataka.\n", + "\n", + "**Napomena:** Oxford-IIIT Pet Dataset sadrži slike cijelih kućnih ljubimaca. Slike će biti organizirane po pasminama u izdvojenoj mapi.\n" ] }, { @@ -77,7 +79,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Sada prijeđimo sve poddirektorije razreda i prikažimo prve slike svake klase:\n" + "Sada ćemo proći kroz sve poddirektorije razreda i prikazati prvih nekoliko slika svakog razreda:\n" ] }, { @@ -86,6 +88,24 @@ "metadata": {}, "outputs": [], "source": [ + "# Note: The Oxford-IIIT Pet Dataset extracts to a folder named 'images'\n", + "# Images are named by breed (e.g., 'Abyssinian_1.jpg')\n", + "# We need to organize them into breed-specific subdirectories\n", + "import os\n", + "from collections import defaultdict\n", + "\n", + "# Organize images by breed\n", + "if not os.path.exists('petfaces'):\n", + " os.makedirs('petfaces')\n", + " for img_file in os.listdir('images'):\n", + " if img_file.endswith(('.jpg', '.png')):\n", + " # Extract breed name from filename (everything before the last underscore and number)\n", + " breed = '_'.join(img_file.split('_')[:-1])\n", + " breed_dir = os.path.join('petfaces', breed)\n", + " if not os.path.exists(breed_dir):\n", + " os.makedirs(breed_dir)\n", + " os.rename(os.path.join('images', img_file), os.path.join(breed_dir, img_file))\n", + "\n", "for cls in os.listdir('petfaces'):\n", " print(cls)\n", " display_images([Image.open(os.path.join('petfaces',cls,x)) \n", @@ -126,11 +146,11 @@ "source": [ "## Priprema skupa podataka za duboko učenje\n", "\n", - "Za početak treniranja naše neuronske mreže, potrebno je sve slike pretvoriti u tenzore, kao i kreirati tenzore koji odgovaraju oznakama (brojevima klasa). Većina okvira za neuronske mreže sadrži jednostavne alate za rad sa slikama:\n", - "* U Tensorflowu, koristite `tf.keras.preprocessing.image_dataset_from_directory`\n", - "* U PyTorchu, koristite `torchvision.datasets.ImageFolder`\n", + "Kako bismo započeli treniranje naše neuronske mreže, potrebno je pretvoriti sve slike u tenzore, kao i stvoriti tenzore koji odgovaraju oznakama (brojevima klasa). Većina okvira za neuronske mreže sadrži jednostavne alate za rad sa slikama:\n", + "* U Tensorflowu koristite `tf.keras.preprocessing.image_dataset_from_directory`\n", + "* U PyTorchu koristite `torchvision.datasets.ImageFolder`\n", "\n", - "Kao što ste vidjeli na slikama iznad, sve imaju omjer blizu kvadratnog, pa je potrebno promijeniti veličinu svih slika na kvadratni format. Također, možemo organizirati slike u mini serije.\n" + "Kao što ste vidjeli na slikama iznad, sve su približno kvadratnog omjera, pa je potrebno promijeniti veličinu svih slika na kvadratni format. Također, možemo organizirati slike u mini serije.\n" ] }, { @@ -162,9 +182,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Sada ispisujemo veličinu tenzora u našem skupu podataka. Ako ste sve ispravno napravili, veličina elemenata za treniranje trebala bi biti\n", + "Sada ćemo ispisati veličinu tenzora u našem skupu podataka. Ako ste sve ispravno napravili, veličina elemenata za treniranje trebala bi biti\n", " * `(batch_size,image_size,image_size,3)` za Tensorflow, `batch_size,3,image_size,image_size` za PyTorch\n", - " * `batch_size` za Oznake\n", + " * `batch_size` za oznake\n", " \n", " Oznake bi trebale sadržavati brojeve klasa.\n" ] @@ -230,14 +250,14 @@ "source": [ "## Definirajte neuronsku mrežu\n", "\n", - "Za klasifikaciju slika, vjerojatno biste trebali definirati konvolucijsku neuronsku mrežu s nekoliko slojeva. Na što treba obratiti pažnju:\n", - "* Imajte na umu piramidalnu arhitekturu, tj. broj filtera treba se povećavati kako idete dublje.\n", - "* Ne zaboravite aktivacijske funkcije između slojeva (ReLU) i Max Pooling.\n", - "* Završni klasifikator može biti s ili bez skrivenih slojeva, ali broj izlaznih neurona treba biti jednak broju klasa.\n", + "Za klasifikaciju slika, vjerojatno biste trebali definirati konvolucijsku neuronsku mrežu s nekoliko slojeva. Na što obratiti pažnju:\n", + "* Imajte na umu piramidalnu arhitekturu, tj. broj filtera trebao bi se povećavati kako idete dublje.\n", + "* Ne zaboravite funkcije aktivacije između slojeva (ReLU) i Max Pooling.\n", + "* Završni klasifikator može biti s ili bez skrivenih slojeva, ali broj izlaznih neurona mora biti jednak broju klasa.\n", "\n", - "Važno je pravilno postaviti aktivacijsku funkciju na zadnjem sloju + funkciju gubitka:\n", - "* U Tensorflowu možete koristiti `softmax` kao aktivaciju i `sparse_categorical_crossentropy` kao funkciju gubitka. Razlika između sparse kategorijske unakrsne entropije i nesparse verzije je u tome što prva očekuje izlaz kao broj klase, a ne kao one-hot vektor.\n", - "* U PyTorchu možete imati završni sloj bez aktivacijske funkcije i koristiti funkciju gubitka `CrossEntropyLoss`. Ova funkcija automatski primjenjuje softmax.\n" + "Važno je pravilno postaviti funkciju aktivacije na posljednjem sloju + funkciju gubitka:\n", + "* U Tensorflowu možete koristiti `softmax` kao funkciju aktivacije i `sparse_categorical_crossentropy` kao funkciju gubitka. Razlika između sparse categorical cross-entropy i nesparse verzije je u tome što prva očekuje izlaz kao broj klase, a ne kao one-hot vektor.\n", + "* U PyTorchu završni sloj može biti bez funkcije aktivacije, a možete koristiti funkciju gubitka `CrossEntropyLoss`. Ova funkcija automatski primjenjuje softmax.\n" ] }, { @@ -257,7 +277,7 @@ "\n", "Sada smo spremni za treniranje neuronske mreže. Tijekom treninga, molimo vas da prikupljate točnost na treniranim i testnim podacima za svaki epoch, a zatim prikažete točnost kako biste vidjeli postoji li prekomjerno prilagođavanje.\n", "\n", - "> Za ubrzanje treninga, trebate koristiti GPU ako je dostupan. Dok TensorFlow/Keras automatski koristi GPU, u PyTorchu morate premjestiti i model i podatke na GPU tijekom treninga koristeći metodu `.to()` kako biste iskoristili prednosti GPU ubrzanja.\n" + "> Kako biste ubrzali trening, trebate koristiti GPU ako je dostupan. Dok će TensorFlow/Keras automatski koristiti GPU, u PyTorchu morate premjestiti i model i podatke na GPU tijekom treninga koristeći metodu `.to()` kako biste iskoristili prednosti ubrzanja putem GPU-a.\n" ] }, { @@ -299,16 +319,16 @@ "\n", "## Opcionalno: Izračunajte Top3 točnost\n", "\n", - "U ovom zadatku bavili smo se klasifikacijom s prilično velikim brojem klasa (35), pa je naš rezultat - oko 50% točnosti validacije - prilično dobar. Standardni ImageNet dataset ima čak i više - 1000 klasa.\n", + "U ovom zadatku bavili smo se klasifikacijom s prilično velikim brojem klasa (35), pa je naš rezultat - oko 50% točnosti validacije - prilično dobar. Standardni ImageNet skup podataka ima čak i više - 1000 klasa.\n", "\n", - "U takvim slučajevima teško je osigurati da model **uvijek** točno predvidi klasu. Postoje situacije kada su dvije pasmine vrlo slične jedna drugoj, a model vraća vrlo slične vjerojatnosti (npr., 0.45 i 0.43). Ako mjerimo standardnu točnost, to će se smatrati pogrešnim slučajem, iako je model napravio vrlo malu grešku. Zbog toga često mjerimo drugu metriku - točnost unutar top 3 najvjerojatnije predikcije modela.\n", + "U takvim slučajevima teško je osigurati da model **uvijek** točno predviđa klasu. Postoje situacije kada su dvije pasmine vrlo slične jedna drugoj, a model vraća vrlo slične vjerojatnosti (npr., 0.45 i 0.43). Ako mjerimo standardnu točnost, to će se smatrati pogrešnim slučajem, iako je model napravio vrlo malu grešku. Zbog toga često mjerimo drugu metriku - točnost unutar top 3 najvjerojatnijih predikcija modela.\n", "\n", - "Slučaj smatramo točnim ako je ciljana oznaka sadržana unutar top 3 predikcije modela.\n", + "Slučaj smatramo točnim ako se ciljana oznaka nalazi unutar top 3 predikcije modela.\n", "\n", - "Da biste izračunali top-3 točnost na testnom datasetu, trebate ručno proći kroz dataset, primijeniti neuronsku mrežu kako biste dobili predikciju, a zatim napraviti izračune. Nekoliko savjeta:\n", + "Za izračunavanje top-3 točnosti na testnom skupu podataka, potrebno je ručno pregledati skup podataka, primijeniti neuronsku mrežu za dobivanje predikcije i zatim napraviti izračune. Nekoliko savjeta:\n", "\n", - "* U Tensorflowu, koristite funkciju `tf.nn.in_top_k` kako biste provjerili jesu li `predictions` (izlaz modela) u top-k (proslijedite `k=3` kao parametar), s obzirom na `targets`. Ova funkcija vraća tensor vrijednosti tipa boolean, koje se mogu pretvoriti u `int` pomoću `tf.cast`, a zatim akumulirati pomoću `tf.reduce_sum`.\n", - "* U PyTorchu, možete koristiti funkciju `torch.topk` kako biste dobili indekse klasa s najvišim vjerojatnostima, a zatim provjeriti pripada li točna klasa njima. Pogledajte [ovdje](https://gist.github.com/weiaicunzai/2a5ae6eac6712c70bde0630f3e76b77b) za više savjeta.\n" + "* U Tensorflowu, koristite funkciju `tf.nn.in_top_k` kako biste provjerili jesu li `predictions` (izlaz modela) u top-k (proslijedite `k=3` kao parametar), u odnosu na `targets`. Ova funkcija vraća tensor vrijednosti tipa boolean, koje se mogu pretvoriti u `int` pomoću `tf.cast`, a zatim akumulirati pomoću `tf.reduce_sum`.\n", + "* U PyTorchu, možete koristiti funkciju `torch.topk` za dobivanje indeksa klasa s najvišim vjerojatnostima, a zatim provjeriti pripada li točna klasa među njima. Pogledajte [ovdje](https://gist.github.com/weiaicunzai/2a5ae6eac6712c70bde0630f3e76b77b) za više savjeta.\n" ] }, { @@ -326,7 +346,7 @@ "source": [ "## Opcionalno: Izgradnja klasifikacije mačke vs. psi\n", "\n", - "Također želimo vidjeti koliko bi točna bila naša binarna klasifikacija mačke vs. psi na istom skupu podataka. Da bismo to učinili, trebamo prilagoditi oznake:\n" + "Također želimo vidjeti koliko bi naša binarna klasifikacija mačke vs. psi bila točna na istom skupu podataka. Da bismo to učinili, trebamo prilagoditi oznake:\n" ] }, { @@ -352,7 +372,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n---\n\n**Odricanje od odgovornosti**: \nOvaj dokument je preveden korištenjem AI usluge za prevođenje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadržavati pogreške ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati mjerodavnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane stručnjaka. Ne preuzimamo odgovornost za bilo kakve nesporazume ili pogrešne interpretacije proizašle iz korištenja ovog prijevoda.\n" + "\n---\n\n**Odricanje od odgovornosti**: \nOvaj dokument je preveden pomoću AI usluge za prevođenje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadržavati pogreške ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane stručnjaka. Ne preuzimamo odgovornost za nesporazume ili pogrešna tumačenja koja mogu proizaći iz korištenja ovog prijevoda.\n" ] } ], @@ -378,8 +398,8 @@ "version": "3.9.5" }, "coopTranslator": { - "original_hash": "1de3ae931831253c3198d899da48bfe5", - "translation_date": "2025-08-30T07:18:56+00:00", + "original_hash": "df7d1f7da8d2617b76acd93115776ca4", + "translation_date": "2025-10-03T14:48:01+00:00", "source_file": "lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb", "language_code": "hr" } diff --git a/translations/hr/lessons/4-ComputerVision/07-ConvNets/lab/README.md b/translations/hr/lessons/4-ComputerVision/07-ConvNets/lab/README.md index 2def87d4..002e25f4 100644 --- a/translations/hr/lessons/4-ComputerVision/07-ConvNets/lab/README.md +++ b/translations/hr/lessons/4-ComputerVision/07-ConvNets/lab/README.md @@ -1,29 +1,29 @@ # Klasifikacija lica kućnih ljubimaca -Laboratorijska vježba iz [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners). +Laboratorijska vježba iz [AI za početnike](https://github.com/microsoft/ai-for-beginners). ## Zadatak -Zamislite da trebate razviti aplikaciju za vrtić za kućne ljubimce kako biste katalogizirali sve ljubimce. Jedna od sjajnih značajki takve aplikacije bila bi automatsko prepoznavanje pasmine s fotografije. To se može uspješno postići korištenjem neuronskih mreža. +Zamislite da trebate razviti aplikaciju za vrtić za kućne ljubimce kako biste katalogizirali sve ljubimce. Jedna od sjajnih značajki takve aplikacije bila bi automatsko prepoznavanje pasmine s fotografije. Ovo se može uspješno postići korištenjem neuronskih mreža. -Potrebno je trenirati konvolucijsku neuronsku mrežu za klasifikaciju različitih pasmina mačaka i pasa koristeći **Pet Faces** dataset. +Vaš zadatak je trenirati konvolucijsku neuronsku mrežu za klasifikaciju različitih pasmina mačaka i pasa koristeći **Pet Faces** skup podataka. -## Dataset +## Skup podataka -Koristit ćemo **Pet Faces** dataset, izveden iz [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/) dataset-a za kućne ljubimce. Sadrži 35 različitih pasmina pasa i mačaka. +Koristit ćemo [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/), koji sadrži slike 37 različitih pasmina pasa i mačaka. -![Dataset s kojim ćemo raditi](../../../../../../translated_images/data.50b2a9d5484bdbf0f52f5765b381cec9efe2bd296a98f007f90bedb6ac67f2a8.hr.png) +![Skup podataka s kojim ćemo raditi](../../../../../../translated_images/data.50b2a9d5484bdbf0f52f5765b381cec9efe2bd296a98f007f90bedb6ac67f2a8.hr.png) -Za preuzimanje dataset-a, koristite ovaj isječak koda: +Za preuzimanje skupa podataka, koristite ovaj isječak koda: ```python !wget https://thor.robots.ox.ac.uk/~vgg/data/pets/images.tar.gz @@ -31,13 +31,17 @@ Za preuzimanje dataset-a, koristite ovaj isječak koda: !rm images.tar.gz ``` -## Početak rada s bilježnicom +**Napomena:** Slike u Oxford-IIIT Pet Datasetu organizirane su prema nazivima datoteka (npr. `Abyssinian_1.jpg`, `Bengal_2.jpg`). Notebook uključuje kod za organizaciju ovih slika u poddirektorije specifične za pasmine radi lakše klasifikacije. -Započnite laboratorij otvaranjem [PetFaces.ipynb](../../../../../../lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb) +## Početni Notebook + +Započnite laboratorij otvaranjem [PetFaces.ipynb](PetFaces.ipynb) ## Zaključak -Riješili ste relativno složen problem klasifikacije slika od nule! Bilo je prilično mnogo klasa, a ipak ste uspjeli postići razumnu točnost! Također ima smisla mjeriti top-k točnost, jer je lako zamijeniti neke klase koje čak ni ljudima nisu jasno različite. +Riješili ste relativno složen problem klasifikacije slika od nule! Postojalo je prilično mnogo klasa, a ipak ste uspjeli postići razumnu točnost! Također ima smisla mjeriti top-k točnost, jer je lako zamijeniti neke klase koje čak i ljudima nisu jasno različite. -**Odricanje od odgovornosti**: -Ovaj dokument je preveden pomoću AI usluge za prevođenje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadržavati pogreške ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za kritične informacije preporučuje se profesionalni prijevod od strane čovjeka. Ne preuzimamo odgovornost za nesporazume ili pogrešna tumačenja koja mogu proizaći iz korištenja ovog prijevoda. \ No newline at end of file +--- + +**Izjava o odricanju odgovornosti**: +Ovaj dokument je preveden pomoću AI usluge za prevođenje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadržavati pogreške ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane stručnjaka. Ne preuzimamo odgovornost za nesporazume ili pogrešna tumačenja koja mogu proizaći iz korištenja ovog prijevoda. \ No newline at end of file diff --git a/translations/hu/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb b/translations/hu/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb index d5febcbb..0e23403c 100644 --- a/translations/hu/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb +++ b/translations/hu/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb @@ -10,7 +10,9 @@ "\n", "### Az adatok beszerzése\n", "\n", - "Ebben a feladatban egy viszonylag egyszerű osztályozási feladatra koncentrálunk - háziállatok arcainak osztályozására. Ez az adatállomány kivágott arcokat tartalmaz az [Oxford-IIIT Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/) adatbázisból. Kezdjük azzal, hogy betöltjük és vizualizáljuk az adatokat.\n" + "Ebben a feladatban egy viszonylag egyszerű osztályozási feladatra koncentrálunk - háziállatok arcainak osztályozására. Az [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/) adathalmazt fogjuk használni, amely 37 különböző kutya- és macskafajta képeit tartalmazza. Kezdjük az adathalmaz letöltésével és vizualizálásával.\n", + "\n", + "**Megjegyzés:** Az Oxford-IIIT Pet Dataset teljes háziállat képeket tartalmaz. A képek az adott fajta szerint lesznek rendszerezve a kicsomagolt mappában.\n" ] }, { @@ -46,7 +48,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Általános függvényt fogunk definiálni, hogy képek sorozatát jelenítsük meg egy listából:\n" + "Meghatározunk egy általános függvényt, amely képek sorozatát jeleníti meg egy listából:\n" ] }, { @@ -77,7 +79,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Most nézzük meg az összes osztály almappáját, és ábrázoljuk az egyes osztályok első néhány képét:\n" + "Most nézzük meg az összes osztály alkönyvtárát, és ábrázoljuk az egyes osztályok első néhány képét:\n" ] }, { @@ -86,6 +88,24 @@ "metadata": {}, "outputs": [], "source": [ + "# Note: The Oxford-IIIT Pet Dataset extracts to a folder named 'images'\n", + "# Images are named by breed (e.g., 'Abyssinian_1.jpg')\n", + "# We need to organize them into breed-specific subdirectories\n", + "import os\n", + "from collections import defaultdict\n", + "\n", + "# Organize images by breed\n", + "if not os.path.exists('petfaces'):\n", + " os.makedirs('petfaces')\n", + " for img_file in os.listdir('images'):\n", + " if img_file.endswith(('.jpg', '.png')):\n", + " # Extract breed name from filename (everything before the last underscore and number)\n", + " breed = '_'.join(img_file.split('_')[:-1])\n", + " breed_dir = os.path.join('petfaces', breed)\n", + " if not os.path.exists(breed_dir):\n", + " os.makedirs(breed_dir)\n", + " os.rename(os.path.join('images', img_file), os.path.join(breed_dir, img_file))\n", + "\n", "for cls in os.listdir('petfaces'):\n", " print(cls)\n", " display_images([Image.open(os.path.join('petfaces',cls,x)) \n", @@ -96,7 +116,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Határozzuk meg az osztályok számát az adatállományunkban:\n" + "Határozzuk meg a datasetünkben lévő osztályok számát is:\n" ] }, { @@ -126,11 +146,11 @@ "source": [ "## Adatkészlet előkészítése mélytanuláshoz\n", "\n", - "Ahhoz, hogy elkezdhessük a neurális hálózatunk tanítását, az összes képet tensorokká kell alakítanunk, valamint létre kell hoznunk a tensorokat, amelyek a címkékhez (osztályszámokhoz) tartoznak. A legtöbb neurális hálózat keretrendszer egyszerű eszközöket kínál a képek kezeléséhez:\n", + "Ahhoz, hogy elkezdjük a neurális hálózatunk tanítását, minden képet tenzorokká kell alakítanunk, valamint létre kell hoznunk a címkékhez (osztályszámokhoz) tartozó tenzorokat is. A legtöbb neurális hálózati keretrendszer egyszerű eszközöket kínál a képek kezeléséhez:\n", "* Tensorflow-ban használja a `tf.keras.preprocessing.image_dataset_from_directory` függvényt\n", "* PyTorch-ban használja a `torchvision.datasets.ImageFolder` osztályt\n", "\n", - "Ahogy a fenti képeken látható, mindegyikük közel négyzetes képarányú, ezért az összes képet négyzetes méretre kell átméretezni. Emellett a képeket minibatch-ekbe is rendezhetjük.\n" + "Ahogy a fenti képeken látható, mindegyikük közel négyzetes képarányú, ezért minden képet négyzetes méretre kell átméretezni. Emellett a képeket minibatch-ekbe is rendezhetjük.\n" ] }, { @@ -162,7 +182,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Most nézzük meg a tenzorok méretét az adatainkban. Ha mindent helyesen csináltál, a tanító elemek mérete a következő kell legyen:\n", + "Most nyomtassuk ki a tenzorok méretét az adatainkban. Ha mindent helyesen csináltál, a tanító elemek mérete a következő kell legyen:\n", " * `(batch_size,image_size,image_size,3)` Tensorflow esetén, `batch_size,3,image_size,image_size` PyTorch esetén\n", " * `batch_size` a címkék esetén\n", " \n", @@ -230,13 +250,13 @@ "source": [ "## Neurális hálózat definiálása\n", "\n", - "Képosztályozáshoz valószínűleg egy több rétegből álló konvolúciós neurális hálózatot kell definiálnod. Mire érdemes figyelni:\n", - "* Tartsd szem előtt a piramis architektúrát, azaz a szűrők számának növekednie kell, ahogy mélyebbre haladsz.\n", + "Képfelismeréshez valószínűleg egy konvolúciós neurális hálózatot kell definiálnod, amely több rétegből áll. Mire érdemes figyelni:\n", + "* Tartsd szem előtt a piramis architektúrát, azaz a szűrők száma növekedjen, ahogy mélyebbre haladsz.\n", "* Ne felejtsd el a rétegek közötti aktivációs függvényeket (ReLU) és a Max Poolingot.\n", - "* A végső osztályozó lehet rejtett rétegekkel vagy anélkül, de a kimeneti neuronok számának meg kell egyeznie az osztályok számával.\n", + "* A végső osztályozó lehet rejtett rétegekkel vagy anélkül, de az output neuronok számának meg kell egyeznie az osztályok számával.\n", "\n", - "Fontos, hogy az utolsó réteg aktivációs függvényét és a veszteségfüggvényt helyesen válaszd meg:\n", - "* Tensorflow-ban használhatod a `softmax`-ot aktivációként, és a `sparse_categorical_crossentropy`-t veszteségként. A különbség a sparse kategóriális keresztentrópia és a nem-sparse változata között az, hogy az előbbi az osztály számát várja kimenetként, nem pedig one-hot vektort.\n", + "Fontos, hogy a legutolsó réteg aktivációs függvényét és a veszteségfüggvényt helyesen válaszd meg:\n", + "* Tensorflow-ban használhatod a `softmax` aktivációs függvényt és a `sparse_categorical_crossentropy` veszteségfüggvényt. A különbség a sparse és a nem-sparse kategóriális keresztentrópia között az, hogy az előbbi az osztály számát várja el outputként, nem pedig one-hot vektort.\n", "* PyTorch-ban a végső réteg lehet aktivációs függvény nélkül, és használhatod a `CrossEntropyLoss` veszteségfüggvényt. Ez a függvény automatikusan alkalmazza a softmaxot.\n" ] }, @@ -255,9 +275,9 @@ "source": [ "## Tanítsd a neurális hálózatot\n", "\n", - "Most készen állunk arra, hogy betanítsuk a neurális hálózatot. A tanítás során gyűjtsd össze a pontosságot a tanító és teszt adatokon minden egyes epoch alatt, majd ábrázold a pontosságot, hogy megállapíthasd, van-e túlillesztés.\n", + "Most készen állunk a neurális hálózat tanítására. A tanítás során gyűjtsd össze a pontosságot a tanító és teszt adatokon minden epoch alatt, majd ábrázold a pontosságot, hogy megállapíthasd, van-e túltanulás.\n", "\n", - "> A tanítás felgyorsítása érdekében használd a GPU-t, ha elérhető. Míg a TensorFlow/Keras automatikusan használja a GPU-t, PyTorch esetében a modell és az adatok GPU-ra mozgatása szükséges a `.to()` metódus segítségével, hogy kihasználhasd a GPU gyorsítását.\n" + "> A tanítás felgyorsítása érdekében használd a GPU-t, ha elérhető. Míg a TensorFlow/Keras automatikusan használja a GPU-t, PyTorch esetében a modellt és az adatokat is át kell helyezni a GPU-ra a `.to()` metódus segítségével, hogy kihasználhasd a GPU gyorsítását.\n" ] }, { @@ -295,19 +315,19 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Mit mondhatunk a túltanulásról? Mit tehetünk a modell pontosságának javítása érdekében?\n", + "Mit mondhatunk a túlillesztésről? Mit tehetünk a modell pontosságának javítása érdekében?\n", "\n", "## Opcionális: Számítsd ki a Top3 pontosságot\n", "\n", "Ebben a gyakorlatban egy olyan osztályozási feladattal foglalkoztunk, amelyben meglehetősen sok osztály (35) szerepelt, így az eredményünk - körülbelül 50%-os validációs pontosság - elég jónak mondható. A standard ImageNet adatbázisban még ennél is több osztály van - 1000.\n", "\n", - "Ilyen esetekben nehéz biztosítani, hogy a modell **mindig** helyesen jósolja meg az osztályt. Vannak olyan esetek, amikor két fajta nagyon hasonlít egymásra, és a modell nagyon hasonló valószínűségeket ad vissza (pl. 0.45 és 0.43). Ha a standard pontosságot mérjük, ez hibás esetnek számít, annak ellenére, hogy a modell csak egy nagyon kis hibát vétett. Ezért gyakran mérünk egy másik metrikát is - a pontosságot a modell három legvalószínűbb előrejelzése között.\n", + "Ilyen esetekben nehéz biztosítani, hogy a modell **mindig** helyesen jósolja meg az osztályt. Vannak olyan esetek, amikor két fajta nagyon hasonlít egymásra, és a modell nagyon hasonló valószínűségeket ad vissza (pl. 0.45 és 0.43). Ha a standard pontosságot mérjük, ez hibás esetnek számít, annak ellenére, hogy a modell csak egy nagyon kis hibát követett el. Ezért gyakran mérünk egy másik metrikát is - a pontosságot a modell három legvalószínűbb előrejelzése között.\n", "\n", "Egy esetet pontosnak tekintünk, ha a célcímke szerepel a modell három legvalószínűbb előrejelzése között.\n", "\n", - "A top-3 pontosság kiszámításához a tesztadatkészleten manuálisan kell végigmenni az adatokon, alkalmazni a neurális hálót az előrejelzéshez, majd elvégezni a számításokat. Néhány tipp:\n", + "A top-3 pontosság kiszámításához a tesztadatokon manuálisan kell végigmenni az adathalmazon, alkalmazni a neurális hálót az előrejelzéshez, majd elvégezni a számításokat. Néhány tipp:\n", "\n", - "* Tensorflow-ban használd a `tf.nn.in_top_k` függvényt, hogy megnézd, a `predictions` (a modell kimenete) benne van-e a top-k-ban (add meg a `k=3` paramétert), a `targets`-hez viszonyítva. Ez a függvény egy logikai értékeket tartalmazó tenzort ad vissza, amelyet `tf.cast` segítségével `int`-é lehet alakítani, majd `tf.reduce_sum` segítségével összegezni.\n", + "* Tensorflow-ban használd a `tf.nn.in_top_k` függvényt, hogy megnézd, a `predictions` (a modell kimenete) benne van-e a top-k-ban (add meg a `k=3` paramétert), a `targets`-hez viszonyítva. Ez a függvény egy logikai értékeket tartalmazó tenzort ad vissza, amelyet `tf.cast` segítségével `int`-é lehet alakítani, majd `tf.reduce_sum`-mal összegezni.\n", "* PyTorch-ban használhatod a `torch.topk` függvényt, hogy megkapd a legnagyobb valószínűségekkel rendelkező osztályok indexeit, majd megnézheted, hogy a helyes osztály szerepel-e közöttük. További tippekért lásd [ezt](https://gist.github.com/weiaicunzai/2a5ae6eac6712c70bde0630f3e76b77b).\n" ] }, @@ -324,9 +344,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Opcionális: Macskák és kutyák osztályozásának elkészítése\n", + "## Opcionális: Macskák vs. Kutyák osztályozásának felépítése\n", "\n", - "Szeretnénk azt is megnézni, hogy mennyire pontos lenne a bináris macskák vs. kutyák osztályozás ugyanazon az adathalmazon. Ehhez a címkéket kell módosítanunk:\n" + "Szeretnénk megnézni, mennyire pontos lenne a bináris macskák vs. kutyák osztályozás ugyanazon az adathalmazon. Ehhez módosítanunk kell a címkéket:\n" ] }, { @@ -352,7 +372,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n---\n\n**Felelősségkizárás**: \nEz a dokumentum az [Co-op Translator](https://github.com/Azure/co-op-translator) AI fordítási szolgáltatás segítségével készült. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális, emberi fordítást igénybe venni. Nem vállalunk felelősséget a fordítás használatából eredő félreértésekért vagy téves értelmezésekért.\n" + "\n---\n\n**Felelősség kizárása**: \nEz a dokumentum az [Co-op Translator](https://github.com/Azure/co-op-translator) AI fordítási szolgáltatás segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Fontos információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.\n" ] } ], @@ -378,8 +398,8 @@ "version": "3.9.5" }, "coopTranslator": { - "original_hash": "1de3ae931831253c3198d899da48bfe5", - "translation_date": "2025-08-29T13:28:43+00:00", + "original_hash": "df7d1f7da8d2617b76acd93115776ca4", + "translation_date": "2025-10-03T14:44:37+00:00", "source_file": "lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb", "language_code": "hu" } diff --git a/translations/hu/lessons/4-ComputerVision/07-ConvNets/lab/README.md b/translations/hu/lessons/4-ComputerVision/07-ConvNets/lab/README.md index 9edfd2db..8c6fc497 100644 --- a/translations/hu/lessons/4-ComputerVision/07-ConvNets/lab/README.md +++ b/translations/hu/lessons/4-ComputerVision/07-ConvNets/lab/README.md @@ -1,8 +1,8 @@ # Klasifikasi Wajah Hewan Peliharaan -Tugas Lab dari [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners). +Tugas Lab dari [Kurikulum AI untuk Pemula](https://github.com/microsoft/ai-for-beginners). ## Tugas -Bayangkan Anda perlu mengembangkan aplikasi untuk tempat penitipan hewan peliharaan guna mencatat semua hewan. Salah satu fitur hebat dari aplikasi semacam itu adalah kemampuan untuk secara otomatis mengenali ras dari sebuah foto. Hal ini dapat dilakukan dengan sukses menggunakan jaringan saraf. +Bayangkan Anda perlu mengembangkan aplikasi untuk tempat penitipan hewan peliharaan guna mengkatalog semua hewan. Salah satu fitur hebat dari aplikasi semacam itu adalah kemampuan untuk secara otomatis mengenali ras dari sebuah foto. Hal ini dapat dilakukan dengan sukses menggunakan jaringan saraf. Anda perlu melatih jaringan saraf konvolusi untuk mengklasifikasikan berbagai ras kucing dan anjing menggunakan dataset **Pet Faces**. ## Dataset -Kita akan menggunakan dataset **Pet Faces**, yang berasal dari dataset hewan peliharaan [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/). Dataset ini berisi 35 ras berbeda dari anjing dan kucing. +Kita akan menggunakan [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/), yang berisi gambar dari 37 ras anjing dan kucing yang berbeda. ![Dataset yang akan kita gunakan](../../../../../../translated_images/data.50b2a9d5484bdbf0f52f5765b381cec9efe2bd296a98f007f90bedb6ac67f2a8.id.png) @@ -31,6 +31,8 @@ Untuk mengunduh dataset, gunakan cuplikan kode berikut: !rm images.tar.gz ``` +**Catatan:** Gambar dalam Oxford-IIIT Pet Dataset diorganisasi berdasarkan nama file (misalnya, `Abyssinian_1.jpg`, `Bengal_2.jpg`). Notebook ini mencakup kode untuk mengorganisasi gambar-gambar tersebut ke dalam subdirektori berdasarkan ras untuk mempermudah klasifikasi. + ## Memulai Notebook Mulailah lab dengan membuka [PetFaces.ipynb](PetFaces.ipynb) @@ -42,4 +44,4 @@ Anda telah menyelesaikan masalah yang cukup kompleks dalam klasifikasi gambar da --- **Penafian**: -Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berupaya untuk memberikan hasil yang akurat, harap diperhatikan bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang berwenang. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan manusia profesional. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file +Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diketahui bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan manusia profesional. Kami tidak bertanggung jawab atas kesalahpahaman atau interpretasi yang keliru yang timbul dari penggunaan terjemahan ini. \ No newline at end of file diff --git a/translations/it/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb b/translations/it/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb index cac64b7a..e64d91ce 100644 --- a/translations/it/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb +++ b/translations/it/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb @@ -6,11 +6,13 @@ "source": [ "# Classificazione dei volti degli animali domestici\n", "\n", - "Compito pratico tratto dal [Curriculum AI per Principianti](https://github.com/microsoft/ai-for-beginners).\n", + "Compito del laboratorio tratto dal [Curriculum AI per principianti](https://github.com/microsoft/ai-for-beginners).\n", "\n", "### Ottenere i dati\n", "\n", - "In questo compito, ci concentreremo su un'attività di classificazione relativamente semplice: la classificazione dei volti degli animali domestici. Questo dataset è composto da volti ritagliati dal [Dataset Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/). Iniziamo caricando e visualizzando il dataset.\n" + "In questo compito, ci concentreremo su un compito di classificazione relativamente semplice: la classificazione dei volti degli animali domestici. Utilizzeremo il [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/), che contiene immagini di 37 diverse razze di cani e gatti. Iniziamo scaricando e visualizzando il dataset.\n", + "\n", + "**Nota:** L'Oxford-IIIT Pet Dataset contiene immagini complete degli animali domestici. Le immagini saranno organizzate per razza nella cartella estratta.\n" ] }, { @@ -86,6 +88,24 @@ "metadata": {}, "outputs": [], "source": [ + "# Note: The Oxford-IIIT Pet Dataset extracts to a folder named 'images'\n", + "# Images are named by breed (e.g., 'Abyssinian_1.jpg')\n", + "# We need to organize them into breed-specific subdirectories\n", + "import os\n", + "from collections import defaultdict\n", + "\n", + "# Organize images by breed\n", + "if not os.path.exists('petfaces'):\n", + " os.makedirs('petfaces')\n", + " for img_file in os.listdir('images'):\n", + " if img_file.endswith(('.jpg', '.png')):\n", + " # Extract breed name from filename (everything before the last underscore and number)\n", + " breed = '_'.join(img_file.split('_')[:-1])\n", + " breed_dir = os.path.join('petfaces', breed)\n", + " if not os.path.exists(breed_dir):\n", + " os.makedirs(breed_dir)\n", + " os.rename(os.path.join('images', img_file), os.path.join(breed_dir, img_file))\n", + "\n", "for cls in os.listdir('petfaces'):\n", " print(cls)\n", " display_images([Image.open(os.path.join('petfaces',cls,x)) \n", @@ -130,7 +150,7 @@ "* In Tensorflow, usa `tf.keras.preprocessing.image_dataset_from_directory`\n", "* In PyTorch, usa `torchvision.datasets.ImageFolder`\n", "\n", - "Come hai visto dalle immagini sopra, tutte hanno un rapporto d'aspetto vicino al quadrato, quindi dobbiamo ridimensionare tutte le immagini a una dimensione quadrata. Inoltre, possiamo organizzare le immagini in minibatch.\n" + "Come hai visto dalle immagini sopra, tutte hanno un rapporto vicino a quello quadrato, quindi dobbiamo ridimensionare tutte le immagini a dimensioni quadrate. Inoltre, possiamo organizzare le immagini in minibatch.\n" ] }, { @@ -162,11 +182,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Ora stampiamo la dimensione dei tensori nel nostro dataset. Se hai fatto tutto correttamente, la dimensione degli elementi di addestramento dovrebbe essere\n", + "Ora stampiamo la dimensione dei tensori nel nostro dataset. Se hai fatto tutto correttamente, la dimensione degli elementi di addestramento dovrebbe essere:\n", " * `(batch_size,image_size,image_size,3)` per Tensorflow, `batch_size,3,image_size,image_size` per PyTorch\n", " * `batch_size` per le etichette\n", - " \n", - " Le etichette dovrebbero contenere i numeri delle classi.\n" + "\n", + "Le etichette dovrebbero contenere i numeri delle classi.\n" ] }, { @@ -235,8 +255,8 @@ "* Non dimenticare le funzioni di attivazione tra gli strati (ReLU) e il Max Pooling.\n", "* Il classificatore finale può essere con o senza strati nascosti, ma il numero di neuroni in uscita deve essere uguale al numero di classi.\n", "\n", - "È importante impostare correttamente la funzione di attivazione nell'ultimo strato + la funzione di perdita:\n", - "* In Tensorflow, puoi usare `softmax` come funzione di attivazione e `sparse_categorical_crossentropy` come funzione di perdita. La differenza tra sparse categorical cross-entropy e quella non sparse è che la prima si aspetta l'output come numero di classe e non come vettore one-hot.\n", + "È importante scegliere correttamente la funzione di attivazione nell'ultimo strato + la funzione di perdita:\n", + "* In Tensorflow, puoi utilizzare `softmax` come funzione di attivazione e `sparse_categorical_crossentropy` come funzione di perdita. La differenza tra sparse categorical cross-entropy e quella non-sparse è che la prima si aspetta l'output come numero di classe e non come vettore one-hot.\n", "* In PyTorch, puoi avere l'ultimo strato senza funzione di attivazione e utilizzare la funzione di perdita `CrossEntropyLoss`. Questa funzione applica automaticamente softmax.\n" ] }, @@ -299,9 +319,9 @@ "\n", "## Opzionale: Calcolare l'accuratezza Top3\n", "\n", - "In questo esercizio, ci siamo occupati di una classificazione con un numero piuttosto alto di classi (35), quindi il nostro risultato - circa il 50% di accuratezza nella validazione - è abbastanza buono. Il dataset standard ImageNet ha ancora più classi - 1000.\n", + "In questo esercizio, ci siamo occupati di una classificazione con un numero piuttosto elevato di classi (35), quindi il nostro risultato - circa il 50% di accuratezza nella validazione - è abbastanza buono. Il dataset standard ImageNet ha ancora più classi - 1000.\n", "\n", - "In casi come questi, è difficile garantire che il modello **sempre** predica correttamente la classe. Ci sono situazioni in cui due razze sono molto simili tra loro e il modello restituisce probabilità molto simili (ad esempio, 0.45 e 0.43). Se misuriamo l'accuratezza standard, questo sarà considerato un errore, anche se il modello ha commesso un errore molto piccolo. Per questo motivo, spesso misuriamo un'altra metrica: l'accuratezza entro le prime 3 previsioni più probabili del modello.\n", + "In questi casi è difficile garantire che il modello **preveda sempre** correttamente la classe. Ci sono situazioni in cui due razze sono molto simili tra loro e il modello restituisce probabilità molto simili (ad esempio, 0.45 e 0.43). Se misuriamo l'accuratezza standard, questo sarà considerato un errore, anche se il modello ha commesso un errore molto piccolo. Per questo motivo, spesso misuriamo un'altra metrica: l'accuratezza entro le prime 3 previsioni più probabili del modello.\n", "\n", "Consideriamo il caso accurato se l'etichetta target è contenuta nelle prime 3 previsioni del modello.\n", "\n", @@ -324,7 +344,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Opzionale: Costruire la classificazione Gatti vs. Cani\n", + "## Facoltativo: Costruire la classificazione Gatti vs. Cani\n", "\n", "Vogliamo anche verificare quanto sia accurata la nostra classificazione binaria gatti vs. cani sullo stesso dataset. Per farlo, dobbiamo modificare le etichette:\n" ] @@ -352,7 +372,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n---\n\n**Disclaimer**: \nQuesto documento è stato tradotto utilizzando il servizio di traduzione automatica [Co-op Translator](https://github.com/Azure/co-op-translator). Sebbene ci impegniamo per garantire l'accuratezza, si prega di notare che le traduzioni automatiche possono contenere errori o imprecisioni. Il documento originale nella sua lingua nativa dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale effettuata da un traduttore umano. Non siamo responsabili per eventuali incomprensioni o interpretazioni errate derivanti dall'uso di questa traduzione.\n" + "\n---\n\n**Disclaimer**: \nQuesto documento è stato tradotto utilizzando il servizio di traduzione AI [Co-op Translator](https://github.com/Azure/co-op-translator). Sebbene ci impegniamo per garantire l'accuratezza, si prega di notare che le traduzioni automatiche possono contenere errori o imprecisioni. Il documento originale nella sua lingua nativa dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale effettuata da un traduttore umano. Non siamo responsabili per eventuali incomprensioni o interpretazioni errate derivanti dall'uso di questa traduzione.\n" ] } ], @@ -378,8 +398,8 @@ "version": "3.9.5" }, "coopTranslator": { - "original_hash": "1de3ae931831253c3198d899da48bfe5", - "translation_date": "2025-08-28T12:59:19+00:00", + "original_hash": "df7d1f7da8d2617b76acd93115776ca4", + "translation_date": "2025-10-03T14:35:44+00:00", "source_file": "lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb", "language_code": "it" } diff --git a/translations/it/lessons/4-ComputerVision/07-ConvNets/lab/README.md b/translations/it/lessons/4-ComputerVision/07-ConvNets/lab/README.md index a1922e41..885bfa10 100644 --- a/translations/it/lessons/4-ComputerVision/07-ConvNets/lab/README.md +++ b/translations/it/lessons/4-ComputerVision/07-ConvNets/lab/README.md @@ -1,25 +1,25 @@ -# Classificazione dei Volti degli Animali Domestici +# Classificazione delle Facce degli Animali Domestici -Compito del laboratorio tratto dal [Curriculum AI per Principianti](https://github.com/microsoft/ai-for-beginners). +Compito del laboratorio tratto dal [Curriculum AI for Beginners](https://github.com/microsoft/ai-for-beginners). ## Compito -Immagina di dover sviluppare un'applicazione per un asilo per animali domestici per catalogare tutti gli animali. Una delle funzionalità più utili di tale applicazione sarebbe identificare automaticamente la razza da una fotografia. Questo può essere fatto con successo utilizzando le reti neurali. +Immagina di dover sviluppare un'applicazione per un asilo per animali domestici per catalogare tutti gli animali. Una delle funzionalità più utili di tale applicazione sarebbe identificare automaticamente la razza da una fotografia. Questo può essere fatto con successo utilizzando reti neurali. -Devi addestrare una rete neurale convoluzionale per classificare diverse razze di gatti e cani utilizzando il dataset **Pet Faces**. +Devi addestrare una rete neurale convoluzionale per classificare le diverse razze di gatti e cani utilizzando il dataset **Pet Faces**. ## Il Dataset -Utilizzeremo il dataset **Pet Faces**, derivato dal dataset di animali domestici [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/). Contiene 35 diverse razze di cani e gatti. +Utilizzeremo il [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/), che contiene immagini di 37 diverse razze di cani e gatti. ![Dataset con cui lavoreremo](../../../../../../translated_images/data.50b2a9d5484bdbf0f52f5765b381cec9efe2bd296a98f007f90bedb6ac67f2a8.it.png) @@ -31,13 +31,17 @@ Per scaricare il dataset, utilizza questo frammento di codice: !rm images.tar.gz ``` +**Nota:** Le immagini del dataset Oxford-IIIT Pet sono organizzate per nome file (ad esempio, `Abyssinian_1.jpg`, `Bengal_2.jpg`). Il notebook include codice per organizzare queste immagini in sottodirectory specifiche per razza, rendendo più semplice la classificazione. + ## Notebook di Partenza -Inizia il laboratorio aprendo [PetFaces.ipynb](../../../../../../lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb) +Inizia il laboratorio aprendo [PetFaces.ipynb](PetFaces.ipynb) ## Conclusione -Hai risolto un problema relativamente complesso di classificazione delle immagini da zero! C'erano molte classi, e sei comunque riuscito a ottenere una precisione ragionevole! Ha anche senso misurare la top-k accuracy, perché è facile confondere alcune classi che non sono chiaramente distinguibili nemmeno per gli esseri umani. +Hai risolto un problema relativamente complesso di classificazione delle immagini da zero! C'erano molte classi, e sei comunque riuscito a ottenere una precisione ragionevole! Ha anche senso misurare la precisione top-k, perché è facile confondere alcune classi che non sono chiaramente distinguibili nemmeno per gli esseri umani. + +--- **Disclaimer**: -Questo documento è stato tradotto utilizzando il servizio di traduzione automatica [Co-op Translator](https://github.com/Azure/co-op-translator). Sebbene ci impegniamo per garantire l'accuratezza, si prega di notare che le traduzioni automatiche potrebbero contenere errori o imprecisioni. Il documento originale nella sua lingua nativa dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale effettuata da un esperto umano. Non siamo responsabili per eventuali fraintendimenti o interpretazioni errate derivanti dall'uso di questa traduzione. \ No newline at end of file +Questo documento è stato tradotto utilizzando il servizio di traduzione automatica [Co-op Translator](https://github.com/Azure/co-op-translator). Sebbene ci impegniamo per garantire l'accuratezza, si prega di notare che le traduzioni automatiche possono contenere errori o imprecisioni. Il documento originale nella sua lingua nativa dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale effettuata da un traduttore umano. Non siamo responsabili per eventuali incomprensioni o interpretazioni errate derivanti dall'uso di questa traduzione. \ No newline at end of file diff --git a/translations/ja/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb b/translations/ja/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb index 3827a885..78945010 100644 --- a/translations/ja/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb +++ b/translations/ja/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb @@ -6,11 +6,13 @@ "source": [ "# ペットの顔の分類\n", "\n", - "[AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) のラボ課題。\n", + "[AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) の課題。\n", "\n", "### データの取得\n", "\n", - "この課題では、比較的シンプルな分類タスクであるペットの顔の分類に取り組みます。このデータセットは、[Oxford-IIIT Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/) から切り取られた顔の画像で構成されています。それでは、データセットを読み込み、可視化するところから始めましょう。\n" + "この課題では、比較的簡単な分類タスクであるペットの顔の分類に焦点を当てます。使用するデータセットは、37種類の犬と猫の品種の画像を含む [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/) です。まずはデータセットをダウンロードして可視化してみましょう。\n", + "\n", + "**注意:** Oxford-IIIT Pet Dataset にはペット全体の画像が含まれています。抽出されたフォルダー内では、画像が品種ごとに整理されています。\n" ] }, { @@ -46,7 +48,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "リストから一連の画像を表示するための汎用関数を定義します。\n" + "私たちはリストから一連の画像を表示するための汎用関数を定義します。\n" ] }, { @@ -86,6 +88,24 @@ "metadata": {}, "outputs": [], "source": [ + "# Note: The Oxford-IIIT Pet Dataset extracts to a folder named 'images'\n", + "# Images are named by breed (e.g., 'Abyssinian_1.jpg')\n", + "# We need to organize them into breed-specific subdirectories\n", + "import os\n", + "from collections import defaultdict\n", + "\n", + "# Organize images by breed\n", + "if not os.path.exists('petfaces'):\n", + " os.makedirs('petfaces')\n", + " for img_file in os.listdir('images'):\n", + " if img_file.endswith(('.jpg', '.png')):\n", + " # Extract breed name from filename (everything before the last underscore and number)\n", + " breed = '_'.join(img_file.split('_')[:-1])\n", + " breed_dir = os.path.join('petfaces', breed)\n", + " if not os.path.exists(breed_dir):\n", + " os.makedirs(breed_dir)\n", + " os.rename(os.path.join('images', img_file), os.path.join(breed_dir, img_file))\n", + "\n", "for cls in os.listdir('petfaces'):\n", " print(cls)\n", " display_images([Image.open(os.path.join('petfaces',cls,x)) \n", @@ -126,9 +146,9 @@ "source": [ "## ディープラーニング用データセットの準備\n", "\n", - "ニューラルネットワークのトレーニングを始めるには、すべての画像をテンソルに変換し、ラベル(クラス番号)に対応するテンソルも作成する必要があります。ほとんどのニューラルネットワークフレームワークには、画像を扱うための簡単なツールが含まれています:\n", - "* Tensorflowでは、`tf.keras.preprocessing.image_dataset_from_directory`を使用します\n", - "* PyTorchでは、`torchvision.datasets.ImageFolder`を使用します\n", + "ニューラルネットワークのトレーニングを開始するには、すべての画像をテンソルに変換し、ラベル(クラス番号)に対応するテンソルも作成する必要があります。ほとんどのニューラルネットワークフレームワークには、画像を扱うための簡単なツールが含まれています:\n", + "* Tensorflowでは、`tf.keras.preprocessing.image_dataset_from_directory` を使用します\n", + "* PyTorchでは、`torchvision.datasets.ImageFolder` を使用します\n", "\n", "上記の画像からわかるように、すべての画像はほぼ正方形の比率に近いので、すべての画像を正方形サイズにリサイズする必要があります。また、画像をミニバッチに整理することもできます。\n" ] @@ -146,7 +166,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "今、データセットを訓練用とテスト用に分割する必要があります。\n" + "今、データセットをトレーニング部分とテスト部分に分割する必要があります。\n" ] }, { @@ -162,9 +182,10 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "データセット内のテンソルのサイズを表示してみましょう。すべて正しく実行されていれば、トレーニング要素のサイズは以下のようになるはずです:\n", - " * Tensorflowの場合は `(batch_size,image_size,image_size,3)`、PyTorchの場合は `batch_size,3,image_size,image_size`\n", - " * ラベルは `batch_size`\n", + "では、データセット内のテンソルのサイズを出力してみましょう。すべて正しく実行されていれば、トレーニング要素のサイズは以下のようになります:\n", + " * Tensorflowの場合、`(batch_size,image_size,image_size,3)` \n", + " * PyTorchの場合、`batch_size,3,image_size,image_size`\n", + " * ラベルの場合、`batch_size`\n", "\n", "ラベルにはクラスの番号が含まれている必要があります。\n" ] @@ -231,13 +252,13 @@ "## ニューラルネットワークの定義\n", "\n", "画像分類を行う場合、いくつかの層を持つ畳み込みニューラルネットワークを定義するのが一般的です。注意すべきポイントは以下の通りです:\n", - "* ピラミッド構造を意識すること。つまり、層が深くなるにつれてフィルターの数を増やす。\n", - "* 層間に活性化関数(ReLU)やMax Poolingを忘れずに入れる。\n", + "* ピラミッド構造を意識すること。つまり、層が深くなるにつれてフィルターの数を増やすべきです。\n", + "* 層間に活性化関数(ReLU)やMax Poolingを忘れないようにしましょう。\n", "* 最終的な分類器は隠れ層があってもなくても構いませんが、出力ニューロンの数はクラス数と一致させる必要があります。\n", "\n", - "重要なのは、最後の層の活性化関数と損失関数を正しく設定することです:\n", + "特に重要なのは、最後の層の活性化関数と損失関数を正しく設定することです:\n", "* Tensorflowでは、活性化関数として`softmax`を使用し、損失関数として`sparse_categorical_crossentropy`を使用できます。sparse categorical cross-entropyと通常のcategorical cross-entropyの違いは、前者がクラス番号を出力として期待するのに対し、後者はone-hotベクトルを期待する点です。\n", - "* PyTorchでは、最終層に活性化関数を使用せず、損失関数として`CrossEntropyLoss`を使用できます。この関数は自動的にsoftmaxを適用します。\n" + "* PyTorchでは、最終層に活性化関数を設定せず、損失関数として`CrossEntropyLoss`を使用できます。この関数は自動的にsoftmaxを適用します。\n" ] }, { @@ -255,9 +276,9 @@ "source": [ "## ニューラルネットワークの訓練\n", "\n", - "これでニューラルネットワークの訓練を開始する準備が整いました。訓練中は各エポックごとに訓練データとテストデータの精度を収集し、精度をプロットして過学習が発生していないか確認してください。\n", + "これでニューラルネットワークの訓練を開始する準備が整いました。訓練中は各エポックごとに訓練データとテストデータの精度を収集し、精度をプロットして過学習が発生しているか確認してください。\n", "\n", - "> 訓練を高速化するために、利用可能であればGPUを使用する必要があります。TensorFlow/Kerasでは自動的にGPUが使用されますが、PyTorchでは訓練中にモデルとデータの両方を`.to()`メソッドを使ってGPUに移動させる必要があります。これによりGPUの加速を活用できます。\n" + "> 訓練を高速化するために、GPUが利用可能であれば使用してください。TensorFlow/Kerasでは自動的にGPUが使用されますが、PyTorchでは訓練中にモデルとデータの両方を`.to()`メソッドを使ってGPUに移動させる必要があります。これによりGPUの高速化を活用できます。\n" ] }, { @@ -295,20 +316,20 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "過学習について何が言えますか?モデルの精度を向上させるためには何ができるでしょうか?\n", + "過学習について何が言えるでしょうか?モデルの精度を向上させるためには何ができるでしょうか?\n", "\n", "## オプション: Top3精度を計算する\n", "\n", - "この演習では、35クラスというかなり多いクラス数を持つ分類問題に取り組みました。そのため、約50%の検証精度という結果はかなり良いものです。標準的なImageNetデータセットではさらに多く、1000クラスがあります。\n", + "この演習では、かなり多くのクラス(35クラス)を扱う分類問題に取り組んでいました。そのため、約50%の検証精度という結果はかなり良いものです。標準的なImageNetデータセットではさらに多く、1000クラスがあります。\n", "\n", - "このような場合、モデルが**常に**正確にクラスを予測することを保証するのは難しいです。例えば、2つの犬種が非常に似ている場合、モデルが非常に近い確率(例: 0.45と0.43)を返すことがあります。標準的な精度を測定すると、このケースは誤りとみなされますが、モデルは非常に小さなミスしかしていません。このため、モデルの最も可能性の高い予測トップ3の中で正解ラベルが含まれているかどうかを測定する別の指標をよく使用します。\n", + "このような場合、モデルが**常に**クラスを正確に予測することを保証するのは難しいです。例えば、2つの犬種が非常に似ている場合、モデルが非常に近い確率(例: 0.45と0.43)を返すことがあります。標準的な精度を測定すると、このケースは誤りとみなされますが、モデルは非常に小さなミスしかしていません。このため、モデルの予測の中で最も確率が高い上位3つの中に正解ラベルが含まれているかどうかを測定する別の指標をよく使用します。\n", "\n", - "ターゲットラベルがモデルのトップ3予測の中に含まれている場合、そのケースを正確とみなします。\n", + "ターゲットラベルがモデルの予測の上位3つに含まれている場合、そのケースを正確とみなします。\n", "\n", - "テストデータセットでトップ3精度を計算するには、データセットを手動で確認し、ニューラルネットワークを適用して予測を取得し、その後計算を行う必要があります。いくつかのヒント:\n", + "テストデータセットでTop-3精度を計算するには、データセットを手動で確認し、ニューラルネットワークを適用して予測を取得し、その後計算を行う必要があります。いくつかのヒント:\n", "\n", - "* TensorFlowでは、`tf.nn.in_top_k`関数を使用して、`predictions`(モデルの出力)が`targets`に対してトップk(パラメータとして`k=3`を渡す)に含まれているかどうかを確認できます。この関数はブール値のテンソルを返し、それを`tf.cast`を使って`int`に変換し、`tf.reduce_sum`を使って累積することができます。\n", - "* PyTorchでは、`torch.topk`関数を使用して、確率が高いクラスのインデックスを取得し、正しいクラスがそれらに含まれているかどうかを確認できます。詳細は[こちら](https://gist.github.com/weiaicunzai/2a5ae6eac6712c70bde0630f3e76b77b)を参照してください。\n" + "* TensorFlowでは、`tf.nn.in_top_k`関数を使用して、`predictions`(モデルの出力)が`targets`に対して上位k(パラメータとして`k=3`を渡す)に含まれているかどうかを確認できます。この関数はブール値のテンソルを返し、それを`tf.cast`を使用して`int`に変換し、`tf.reduce_sum`を使用して累積することができます。\n", + "* PyTorchでは、`torch.topk`関数を使用して、確率が高いクラスのインデックスを取得し、正しいクラスがそれらに含まれているかどうかを確認できます。詳細については[こちら](https://gist.github.com/weiaicunzai/2a5ae6eac6712c70bde0630f3e76b77b)を参照してください。\n" ] }, { @@ -324,9 +345,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## オプション: 猫 vs 犬の分類を構築する\n", + "## オプション: 猫 vs 犬の分類を構築\n", "\n", - "同じデータセットで、猫 vs 犬の二値分類がどれほど正確かを確認したいと思います。そのためには、ラベルを調整する必要があります:\n" + "同じデータセットで猫 vs 犬の二値分類の精度を確認したいと思います。そのためには、ラベルを調整する必要があります:\n" ] }, { @@ -352,7 +373,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n---\n\n**免責事項**: \nこの文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があることをご承知ください。元の言語で記載された文書が正式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤解釈について、当方は一切の責任を負いません。\n" + "\n---\n\n**免責事項**: \nこの文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があります。元の言語で記載された文書を正式な情報源としてお考えください。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤解について、当方は責任を負いません。\n" ] } ], @@ -378,8 +399,8 @@ "version": "3.9.5" }, "coopTranslator": { - "original_hash": "1de3ae931831253c3198d899da48bfe5", - "translation_date": "2025-08-30T09:04:37+00:00", + "original_hash": "df7d1f7da8d2617b76acd93115776ca4", + "translation_date": "2025-10-03T14:30:44+00:00", "source_file": "lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb", "language_code": "ja" } diff --git a/translations/ja/lessons/4-ComputerVision/07-ConvNets/lab/README.md b/translations/ja/lessons/4-ComputerVision/07-ConvNets/lab/README.md index d607fb81..89286f21 100644 --- a/translations/ja/lessons/4-ComputerVision/07-ConvNets/lab/README.md +++ b/translations/ja/lessons/4-ComputerVision/07-ConvNets/lab/README.md @@ -1,8 +1,8 @@ -# 반려동물 얼굴 분류 +# 애완동물 얼굴 분류 [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners)에서 제공하는 실습 과제입니다. ## 과제 -반려동물 보육원을 위한 애플리케이션을 개발해야 한다고 상상해보세요. 이 애플리케이션의 훌륭한 기능 중 하나는 사진을 통해 자동으로 품종을 식별하는 것입니다. 이는 신경망을 사용하여 성공적으로 구현할 수 있습니다. +애완동물 보육원을 위한 애플리케이션을 개발해야 한다고 상상해보세요. 이러한 애플리케이션의 훌륭한 기능 중 하나는 사진을 통해 품종을 자동으로 식별하는 것입니다. 이는 신경망을 사용하여 성공적으로 구현할 수 있습니다. **Pet Faces** 데이터셋을 사용하여 고양이와 개의 다양한 품종을 분류하는 컨볼루션 신경망을 훈련해야 합니다. ## 데이터셋 -우리는 [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/) 반려동물 데이터셋에서 파생된 **Pet Faces** 데이터셋을 사용할 것입니다. 이 데이터셋은 35가지의 서로 다른 개와 고양이 품종을 포함하고 있습니다. +우리는 [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/)을 사용할 것입니다. 이 데이터셋은 37가지 다른 품종의 개와 고양이 이미지를 포함하고 있습니다. ![우리가 다룰 데이터셋](../../../../../../translated_images/data.50b2a9d5484bdbf0f52f5765b381cec9efe2bd296a98f007f90bedb6ac67f2a8.ko.png) @@ -31,13 +31,17 @@ CO_OP_TRANSLATOR_METADATA: !rm images.tar.gz ``` +**참고:** Oxford-IIIT Pet Dataset의 이미지는 파일 이름(예: `Abyssinian_1.jpg`, `Bengal_2.jpg`)으로 정리되어 있습니다. 노트북에는 이러한 이미지를 품종별 하위 디렉토리로 정리하여 분류를 더 쉽게 할 수 있도록 하는 코드가 포함되어 있습니다. + ## 시작 노트북 -[PetFaces.ipynb](../../../../../../lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb)를 열어 실습을 시작하세요. +[PetFaces.ipynb](PetFaces.ipynb)를 열어 실습을 시작하세요. -## 주요 성과 +## 주요 학습 내용 -여러분은 이미지를 분류하는 비교적 복잡한 문제를 처음부터 해결했습니다! 클래스가 꽤 많았음에도 불구하고 합리적인 정확도를 얻을 수 있었습니다. 또한, top-k 정확도를 측정하는 것도 의미가 있습니다. 왜냐하면 인간조차도 명확히 구분하기 어려운 클래스들이 있기 때문입니다. +여러분은 이미지를 분류하는 비교적 복잡한 문제를 처음부터 해결했습니다! 클래스가 꽤 많았음에도 불구하고 합리적인 정확도를 얻을 수 있었습니다! 또한, top-k 정확도를 측정하는 것이 합리적입니다. 왜냐하면 인간에게도 명확히 구분되지 않는 일부 클래스는 혼동하기 쉽기 때문입니다. + +--- **면책 조항**: -이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있으나, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서의 원어 버전이 권위 있는 출처로 간주되어야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다. \ No newline at end of file +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있으나, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서의 원어 버전을 권위 있는 자료로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/lt/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb b/translations/lt/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb index a405b97b..9367ef38 100644 --- a/translations/lt/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb +++ b/translations/lt/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb @@ -10,7 +10,9 @@ "\n", "### Duomenų gavimas\n", "\n", - "Šiame darbe mes susitelksime į palyginti paprastą klasifikavimo užduotį – naminių gyvūnų veidų klasifikavimą. Šis duomenų rinkinys susideda iš iškirptų veidų iš [Oxford-IIIT duomenų rinkinio](https://www.robots.ox.ac.uk/~vgg/data/pets/). Pradėkime nuo duomenų įkėlimo ir vizualizavimo.\n" + "Šiame užduotyje mes susitelksime į palyginti paprastą klasifikavimo užduotį – naminių gyvūnų veidų klasifikavimą. Naudosime [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/), kuriame yra 37 skirtingų šunų ir kačių veislių vaizdai. Pradėkime atsisiųsdami ir vizualizuodami duomenų rinkinį.\n", + "\n", + "**Pastaba:** Oxford-IIIT Pet Dataset sudaro pilni naminių gyvūnų vaizdai. Išskleistame aplanke vaizdai bus suskirstyti pagal veisles.\n" ] }, { @@ -77,7 +79,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Dabar pereikime per visus klasės aplankus ir nubrėžkime pirmuosius kelis kiekvienos klasės vaizdus:\n" + "Dabar pereikime per visus klasių aplankus ir nubrėžkime pirmuosius kelis kiekvienos klasės vaizdus:\n" ] }, { @@ -86,6 +88,24 @@ "metadata": {}, "outputs": [], "source": [ + "# Note: The Oxford-IIIT Pet Dataset extracts to a folder named 'images'\n", + "# Images are named by breed (e.g., 'Abyssinian_1.jpg')\n", + "# We need to organize them into breed-specific subdirectories\n", + "import os\n", + "from collections import defaultdict\n", + "\n", + "# Organize images by breed\n", + "if not os.path.exists('petfaces'):\n", + " os.makedirs('petfaces')\n", + " for img_file in os.listdir('images'):\n", + " if img_file.endswith(('.jpg', '.png')):\n", + " # Extract breed name from filename (everything before the last underscore and number)\n", + " breed = '_'.join(img_file.split('_')[:-1])\n", + " breed_dir = os.path.join('petfaces', breed)\n", + " if not os.path.exists(breed_dir):\n", + " os.makedirs(breed_dir)\n", + " os.rename(os.path.join('images', img_file), os.path.join(breed_dir, img_file))\n", + "\n", "for cls in os.listdir('petfaces'):\n", " print(cls)\n", " display_images([Image.open(os.path.join('petfaces',cls,x)) \n", @@ -96,7 +116,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Apibrėžkime ir klasių skaičių mūsų duomenų rinkinyje:\n" + "Taip pat apibrėžkime klasių skaičių mūsų duomenų rinkinyje:\n" ] }, { @@ -124,13 +144,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Pasiruošimas duomenų rinkiniui giluminiam mokymuisi\n", + "## Duomenų rinkinio paruošimas giluminiam mokymuisi\n", "\n", - "Norėdami pradėti treniruoti mūsų neuroninį tinklą, turime visas nuotraukas konvertuoti į tensorius, taip pat sukurti tensorius, atitinkančius žymes (klasių numerius). Dauguma neuroninių tinklų sistemų turi paprastus įrankius darbui su vaizdais:\n", + "Norėdami pradėti mokyti mūsų neuroninį tinklą, turime konvertuoti visas nuotraukas į tensorius, taip pat sukurti tensorius, atitinkančius etiketes (klasių numerius). Dauguma neuroninių tinklų sistemų turi paprastus įrankius darbui su vaizdais:\n", "* Tensorflow naudokite `tf.keras.preprocessing.image_dataset_from_directory`\n", "* PyTorch naudokite `torchvision.datasets.ImageFolder`\n", "\n", - "Kaip matėte iš aukščiau pateiktų paveikslėlių, visi jie yra artimi kvadrato proporcijai, todėl turime pakeisti visų vaizdų dydį į kvadratinį. Taip pat galime organizuoti vaizdus į mini partijas.\n" + "Kaip matėte iš aukščiau pateiktų nuotraukų, visos jos yra artimos kvadratinio vaizdo proporcijai, todėl turime pakeisti visų vaizdų dydį į kvadratinį. Be to, galime organizuoti vaizdus į mažas partijas (minibatches).\n" ] }, { @@ -162,11 +182,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Dabar atspausdinkime tensorių dydžius mūsų duomenų rinkinyje. Jei viską atlikote teisingai, mokymo elementų dydis turėtų būti:\n", + "Dabar atspausdinkime tensorių dydžius mūsų duomenų rinkinyje. Jei viską atlikote teisingai, treniravimo elementų dydis turėtų būti:\n", " * `(batch_size,image_size,image_size,3)` Tensorflow atveju, `batch_size,3,image_size,image_size` PyTorch atveju\n", " * `batch_size` etiketėms\n", - " \n", - " Etiketės turėtų turėti klasių numerius.\n" + "\n", + "Etiketės turėtų turėti klasių numerius.\n" ] }, { @@ -230,12 +250,12 @@ "source": [ "## Apibrėžkite neuroninį tinklą\n", "\n", - "Vaizdų klasifikavimui greičiausiai reikėtų apibrėžti konvoliucinį neuroninį tinklą su keliais sluoksniais. Į ką reikėtų atkreipti dėmesį:\n", + "Vaizdų klasifikavimui rekomenduojama apibrėžti konvoliucinį neuroninį tinklą su keliais sluoksniais. Į ką reikėtų atkreipti dėmesį:\n", "* Nepamirškite piramidės architektūros, t. y. filtrų skaičius turėtų didėti, kai einate gilyn.\n", - "* Nepamirškite aktyvacijos funkcijų tarp sluoksnių (ReLU) ir maksimaliojo kaupimo (Max Pooling).\n", + "* Nepamirškite aktyvacijos funkcijų tarp sluoksnių (ReLU) ir Max Pooling.\n", "* Galutinis klasifikatorius gali būti su paslėptais sluoksniais arba be jų, tačiau išvesties neuronų skaičius turėtų būti lygus klasių skaičiui.\n", "\n", - "Svarbu teisingai parinkti aktyvacijos funkciją paskutiniame sluoksnyje ir nuostolių funkciją:\n", + "Svarbu teisingai pasirinkti aktyvacijos funkciją paskutiniame sluoksnyje ir nuostolių funkciją:\n", "* Tensorflow aplinkoje galite naudoti `softmax` kaip aktyvacijos funkciją ir `sparse_categorical_crossentropy` kaip nuostolių funkciją. Skirtumas tarp sparse kategorinės kryžminės entropijos ir nesparse yra tas, kad pirmoji tikisi išvesties kaip klasės numerio, o ne kaip vieno karšto vektoriaus.\n", "* PyTorch aplinkoje galutinis sluoksnis gali būti be aktyvacijos funkcijos, o nuostolių funkcijai naudokite `CrossEntropyLoss`. Ši funkcija automatiškai taiko softmax.\n" ] @@ -255,9 +275,9 @@ "source": [ "## Treniruokite neuroninį tinklą\n", "\n", - "Dabar esame pasiruošę treniruoti neuroninį tinklą. Mokymo metu, prašome rinkti tikslumo duomenis tiek treniravimo, tiek testavimo rinkiniuose kiekviename epochoje, o vėliau nubraižykite tikslumo grafiką, kad pamatytumėte, ar nėra per didelio pritaikymo.\n", + "Dabar esame pasiruošę treniruoti neuroninį tinklą. Mokymo metu prašome rinkti tikslumo duomenis tiek treniravimo, tiek testavimo rinkiniuose kiekviename epochoje, o vėliau nubraižyti tikslumo grafiką, kad pamatytumėte, ar nėra per didelio pritaikymo.\n", "\n", - "> Norėdami paspartinti mokymą, turite naudoti GPU, jei jis yra prieinamas. Nors TensorFlow/Keras automatiškai naudos GPU, PyTorch aplinkoje tiek modelį, tiek duomenis reikia perkelti į GPU mokymo metu naudojant `.to()` metodą, kad galėtumėte pasinaudoti GPU pagreitinimu.\n" + "> Norėdami pagreitinti mokymą, turite naudoti GPU, jei jis yra prieinamas. Nors TensorFlow/Keras automatiškai naudos GPU, PyTorch aplinkoje tiek modelį, tiek duomenis mokymo metu reikia perkelti į GPU naudojant `.to()` metodą, kad būtų pasinaudota GPU pagreitinimu.\n" ] }, { @@ -295,20 +315,20 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Ką galima pasakyti apie permokymą? Ką galima padaryti, kad pagerintumėte modelio tikslumą?\n", + "Ką galima pasakyti apie permokymą? Ką galima padaryti, kad pagerintume modelio tikslumą?\n", "\n", - "## Pasirinktinai: Apskaičiuokite Top3 Tikslumą\n", + "## Pasirinktinai: Apskaičiuokite Top-3 Tikslumą\n", "\n", - "Šioje užduotyje dirbome su klasifikacija, kurioje yra gana daug klasių (35), todėl mūsų rezultatas - apie 50% validacijos tikslumas - yra gana geras. Standartiniame ImageNet duomenų rinkinyje yra dar daugiau - 1000 klasių.\n", + "Šiame pratime dirbome su klasifikacija, kurioje yra gana daug klasių (35), todėl mūsų rezultatas – apie 50% validacijos tikslumas – yra gana geras. Standartinis ImageNet duomenų rinkinys turi dar daugiau – 1000 klasių.\n", "\n", - "Tokiais atvejais sunku užtikrinti, kad modelis **visada** teisingai nuspėtų klasę. Yra atvejų, kai dvi veislės yra labai panašios viena į kitą, ir modelis grąžina labai panašias tikimybes (pvz., 0.45 ir 0.43). Jei matuosime standartinį tikslumą, tai bus laikoma klaida, nors modelis padarė labai nedidelę klaidą. Todėl dažnai matuojame kitą metriką - tikslumą tarp trijų labiausiai tikėtinų modelio prognozių.\n", + "Tokiais atvejais sunku užtikrinti, kad modelis **visada** teisingai nuspėtų klasę. Yra situacijų, kai dvi veislės yra labai panašios viena į kitą, ir modelis pateikia labai panašias tikimybes (pvz., 0.45 ir 0.43). Jei matuosime standartinį tikslumą, tai bus laikoma klaida, nors modelis padarė labai nedidelę klaidą. Dėl to dažnai matuojame kitą metriką – tikslumą pagal top 3 labiausiai tikėtinas modelio prognozes.\n", "\n", - "Atvejis laikomas tiksliu, jei tikslinė etiketė yra tarp trijų geriausių modelio prognozių.\n", + "Atvejis laikomas teisingu, jei tikslinė etiketė yra tarp top 3 modelio prognozių.\n", "\n", - "Norėdami apskaičiuoti top-3 tikslumą testavimo duomenų rinkinyje, turite rankiniu būdu peržiūrėti duomenų rinkinį, pritaikyti neuroninį tinklą, kad gautumėte prognozę, ir tada atlikti skaičiavimus. Keletas užuominų:\n", + "Norėdami apskaičiuoti top-3 tikslumą testavimo duomenų rinkinyje, turite rankiniu būdu peržiūrėti duomenų rinkinį, pritaikyti neuroninį tinklą, kad gautumėte prognozę, ir tada atlikti skaičiavimus. Keletas patarimų:\n", "\n", - "* Tensorflow aplinkoje naudokite `tf.nn.in_top_k` funkciją, kad patikrintumėte, ar `predictions` (modelio išvestis) yra tarp top-k (nurodykite `k=3` kaip parametrą), atsižvelgiant į `targets`. Ši funkcija grąžina boolean reikšmių tensorą, kurį galima konvertuoti į `int` naudojant `tf.cast`, o tada sumuoti naudojant `tf.reduce_sum`.\n", - "* PyTorch aplinkoje galite naudoti `torch.topk` funkciją, kad gautumėte klasių su didžiausiomis tikimybėmis indeksus, ir tada patikrinti, ar teisinga klasė yra tarp jų. Daugiau užuominų rasite [čia](https://gist.github.com/weiaicunzai/2a5ae6eac6712c70bde0630f3e76b77b).\n" + "* Tensorflow aplinkoje naudokite `tf.nn.in_top_k` funkciją, kad patikrintumėte, ar `predictions` (modelio išvestis) yra tarp top-k (nurodykite `k=3` kaip parametrą), atsižvelgiant į `targets`. Ši funkcija grąžina boolean reikšmių tensorių, kurį galima konvertuoti į `int` naudojant `tf.cast`, o tada sumuoti naudojant `tf.reduce_sum`.\n", + "* PyTorch aplinkoje galite naudoti `torch.topk` funkciją, kad gautumėte klasių indeksus su didžiausiomis tikimybėmis, ir tada patikrinti, ar teisinga klasė yra tarp jų. Žr. [čia](https://gist.github.com/weiaicunzai/2a5ae6eac6712c70bde0630f3e76b77b) daugiau patarimų.\n" ] }, { @@ -352,7 +372,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n---\n\n**Atsakomybės apribojimas**: \nŠis dokumentas buvo išverstas naudojant AI vertimo paslaugą [Co-op Translator](https://github.com/Azure/co-op-translator). Nors siekiame tikslumo, prašome atkreipti dėmesį, kad automatiniai vertimai gali turėti klaidų ar netikslumų. Originalus dokumentas jo gimtąja kalba turėtų būti laikomas autoritetingu šaltiniu. Dėl svarbios informacijos rekomenduojama profesionali žmogaus vertimo paslauga. Mes neprisiimame atsakomybės už nesusipratimus ar klaidingus interpretavimus, atsiradusius naudojant šį vertimą.\n" + "\n---\n\n**Atsakomybės atsisakymas**: \nŠis dokumentas buvo išverstas naudojant AI vertimo paslaugą [Co-op Translator](https://github.com/Azure/co-op-translator). Nors stengiamės užtikrinti tikslumą, prašome atkreipti dėmesį, kad automatiniai vertimai gali turėti klaidų ar netikslumų. Originalus dokumentas jo gimtąja kalba turėtų būti laikomas autoritetingu šaltiniu. Kritinei informacijai rekomenduojama naudoti profesionalų žmogaus vertimą. Mes neprisiimame atsakomybės už nesusipratimus ar neteisingus aiškinimus, kylančius dėl šio vertimo naudojimo.\n" ] } ], @@ -378,8 +398,8 @@ "version": "3.9.5" }, "coopTranslator": { - "original_hash": "1de3ae931831253c3198d899da48bfe5", - "translation_date": "2025-08-31T12:41:16+00:00", + "original_hash": "df7d1f7da8d2617b76acd93115776ca4", + "translation_date": "2025-10-03T14:51:38+00:00", "source_file": "lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb", "language_code": "lt" } diff --git a/translations/lt/lessons/4-ComputerVision/07-ConvNets/lab/README.md b/translations/lt/lessons/4-ComputerVision/07-ConvNets/lab/README.md index b283b53e..deb09cfa 100644 --- a/translations/lt/lessons/4-ComputerVision/07-ConvNets/lab/README.md +++ b/translations/lt/lessons/4-ComputerVision/07-ConvNets/lab/README.md @@ -1,25 +1,25 @@ -# Naminių Gyvūnų Veidų Klasifikacija +# Naminių gyvūnų veidų klasifikacija -Laboratorinis darbas iš [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners). +Laboratorinis darbas iš [AI pradedantiesiems mokymo programos](https://github.com/microsoft/ai-for-beginners). ## Užduotis -Įsivaizduokite, kad jums reikia sukurti programą gyvūnų darželiui, kuri kataloguotų visus gyvūnus. Viena iš puikių tokios programos funkcijų būtų automatiškai nustatyti veislę iš nuotraukos. Tai galima sėkmingai atlikti naudojant neuroninius tinklus. +Įsivaizduokite, kad jums reikia sukurti programą gyvūnų darželiui, kad būtų galima kataloguoti visus gyvūnus. Viena iš puikių tokios programos funkcijų būtų automatiškai nustatyti veislę iš nuotraukos. Tai galima sėkmingai atlikti naudojant neuroninius tinklus. Jums reikia išmokyti konvoliucinį neuroninį tinklą klasifikuoti skirtingas kačių ir šunų veisles naudojant **Pet Faces** duomenų rinkinį. ## Duomenų rinkinys -Naudosime **Pet Faces** duomenų rinkinį, kuris yra sukurtas remiantis [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/) gyvūnų duomenų rinkiniu. Jame yra 35 skirtingos šunų ir kačių veislės. +Naudosime [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/), kuriame yra 37 skirtingų šunų ir kačių veislių nuotraukos. ![Duomenų rinkinys, su kuriuo dirbsime](../../../../../../translated_images/data.50b2a9d5484bdbf0f52f5765b381cec9efe2bd296a98f007f90bedb6ac67f2a8.lt.png) @@ -31,15 +31,17 @@ Norėdami atsisiųsti duomenų rinkinį, naudokite šį kodo fragmentą: !rm images.tar.gz ``` -## Pradinis Užrašų Knygelės Failas +**Pastaba:** Oxford-IIIT Pet Dataset nuotraukos yra organizuotos pagal failo pavadinimą (pvz., `Abyssinian_1.jpg`, `Bengal_2.jpg`). Užrašų knygelėje yra kodas, kuris organizuoja šias nuotraukas į veislei specifinius aplankus, kad būtų lengviau klasifikuoti. -Pradėkite laboratorinį darbą atidarę [PetFaces.ipynb](PetFaces.ipynb) +## Pradžios užrašų knygelė -## Išvada +Pradėkite laboratorinį darbą atidarydami [PetFaces.ipynb](PetFaces.ipynb) -Jūs išsprendėte gana sudėtingą vaizdų klasifikavimo problemą nuo nulio! Buvo nemažai klasių, tačiau jums vis tiek pavyko pasiekti pagrįstą tikslumą! Taip pat verta išmatuoti top-k tikslumą, nes kai kurias klases lengva supainioti, ypač tas, kurios net žmonėms nėra aiškiai skirtingos. +## Rezultatas + +Jūs išsprendėte gana sudėtingą vaizdų klasifikavimo problemą nuo nulio! Buvo nemažai klasių, tačiau vis tiek pavyko pasiekti pagrįstą tikslumą! Taip pat verta matuoti top-k tikslumą, nes kai kurias klases lengva supainioti, ypač tas, kurios net žmonėms nėra aiškiai skirtingos. --- -**Atsakomybės apribojimas**: -Šis dokumentas buvo išverstas naudojant AI vertimo paslaugą [Co-op Translator](https://github.com/Azure/co-op-translator). Nors siekiame tikslumo, prašome atkreipti dėmesį, kad automatiniai vertimai gali turėti klaidų ar netikslumų. Originalus dokumentas jo gimtąja kalba turėtų būti laikomas autoritetingu šaltiniu. Kritinei informacijai rekomenduojama naudoti profesionalų žmogaus vertimą. Mes neprisiimame atsakomybės už nesusipratimus ar klaidingus interpretavimus, atsiradusius dėl šio vertimo naudojimo. \ No newline at end of file +**Atsakomybės atsisakymas**: +Šis dokumentas buvo išverstas naudojant AI vertimo paslaugą [Co-op Translator](https://github.com/Azure/co-op-translator). Nors siekiame tikslumo, prašome atkreipti dėmesį, kad automatiniai vertimai gali turėti klaidų ar netikslumų. Originalus dokumentas jo gimtąja kalba turėtų būti laikomas autoritetingu šaltiniu. Kritinei informacijai rekomenduojama naudoti profesionalų žmogaus vertimą. Mes neprisiimame atsakomybės už nesusipratimus ar neteisingus interpretavimus, atsiradusius dėl šio vertimo naudojimo. \ No newline at end of file diff --git a/translations/mo/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb b/translations/mo/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb index a73e367b..29d95846 100644 --- a/translations/mo/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb +++ b/translations/mo/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb @@ -8,9 +8,11 @@ "\n", "來自 [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) 的實驗作業。\n", "\n", - "### 獲取數據\n", + "### 獲取資料\n", "\n", - "在這次作業中,我們將專注於一個相對簡單的分類任務——寵物臉部的分類。這個數據集包含從 [Oxford-IIIT Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/) 中裁剪出的臉部圖像。讓我們從載入並可視化這個數據集開始吧。\n" + "在這次作業中,我們將專注於一個相對簡單的分類任務——寵物臉部的分類。我們會使用 [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/),該資料集包含 37 種不同品種的狗和貓的圖片。讓我們從下載並視覺化資料集開始。\n", + "\n", + "**注意:** Oxford-IIIT Pet Dataset 包含完整的寵物圖片。提取後的資料夾中,圖片會按照品種進行整理。\n" ] }, { @@ -46,7 +48,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "我們將定義通用函數以顯示列表中的一系列圖像:\n" + "我們將定義通用函數來顯示列表中的一系列圖像:\n" ] }, { @@ -86,6 +88,24 @@ "metadata": {}, "outputs": [], "source": [ + "# Note: The Oxford-IIIT Pet Dataset extracts to a folder named 'images'\n", + "# Images are named by breed (e.g., 'Abyssinian_1.jpg')\n", + "# We need to organize them into breed-specific subdirectories\n", + "import os\n", + "from collections import defaultdict\n", + "\n", + "# Organize images by breed\n", + "if not os.path.exists('petfaces'):\n", + " os.makedirs('petfaces')\n", + " for img_file in os.listdir('images'):\n", + " if img_file.endswith(('.jpg', '.png')):\n", + " # Extract breed name from filename (everything before the last underscore and number)\n", + " breed = '_'.join(img_file.split('_')[:-1])\n", + " breed_dir = os.path.join('petfaces', breed)\n", + " if not os.path.exists(breed_dir):\n", + " os.makedirs(breed_dir)\n", + " os.rename(os.path.join('images', img_file), os.path.join(breed_dir, img_file))\n", + "\n", "for cls in os.listdir('petfaces'):\n", " print(cls)\n", " display_images([Image.open(os.path.join('petfaces',cls,x)) \n", @@ -96,7 +116,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "讓我們也定義我們數據集中的類別數:\n" + "讓我們也定義我們數據集中的類別數量:\n" ] }, { @@ -126,11 +146,11 @@ "source": [ "## 為深度學習準備數據集\n", "\n", - "在開始訓練我們的神經網絡之前,我們需要將所有圖片轉換為張量,並創建與標籤(類別編號)對應的張量。大多數神經網絡框架都提供了處理圖片的簡便工具:\n", + "在開始訓練我們的神經網絡之前,我們需要將所有圖片轉換為張量,並且還需要創建與標籤(類別編號)相對應的張量。大多數神經網絡框架都提供了簡單的工具來處理圖片:\n", "* 在 Tensorflow 中,使用 `tf.keras.preprocessing.image_dataset_from_directory`\n", "* 在 PyTorch 中,使用 `torchvision.datasets.ImageFolder`\n", "\n", - "如上圖所示,所有圖片的比例都接近正方形,因此我們需要將所有圖片調整為正方形大小。此外,我們還可以將圖片組織成小批量處理。\n" + "如上圖所示,所有圖片的比例都接近正方形,因此我們需要將所有圖片調整為正方形大小。此外,我們還可以將圖片組織成小批量。\n" ] }, { @@ -165,8 +185,8 @@ "現在讓我們列印資料集中張量的大小。如果你已正確完成所有步驟,訓練元素的大小應該是:\n", " * Tensorflow 的格式為 `(batch_size,image_size,image_size,3)`,PyTorch 的格式為 `batch_size,3,image_size,image_size`\n", " * 標籤的大小為 `batch_size`\n", - "\n", - "標籤應包含類別的數字。\n" + " \n", + " 標籤應包含類別的數字。\n" ] }, { @@ -230,14 +250,14 @@ "source": [ "## 定義一個神經網路\n", "\n", - "對於圖像分類,你可能需要定義一個具有多層結構的卷積神經網路。需要注意的事項:\n", - "* 記住金字塔結構,也就是說,隨著網路加深,濾波器的數量應該增加。\n", - "* 不要忘記在層與層之間加入激活函數(例如 ReLU)以及最大池化(Max Pooling)。\n", - "* 最終的分類器可以有隱藏層,也可以沒有,但輸出的神經元數量應該等於分類的類別數。\n", + "對於圖像分類,您可能需要定義一個具有多層的卷積神經網路。需要注意的事項:\n", + "* 請記住金字塔結構,也就是說,隨著網路加深,濾波器的數量應該增加。\n", + "* 不要忘記在層之間加入激活函數(如 ReLU)以及最大池化(Max Pooling)。\n", + "* 最終的分類器可以有隱藏層,也可以沒有,但輸出神經元的數量應該等於類別的數量。\n", "\n", "一個重要的點是要正確設置最後一層的激活函數和損失函數:\n", - "* 在 Tensorflow 中,你可以使用 `softmax` 作為激活函數,並使用 `sparse_categorical_crossentropy` 作為損失函數。稀疏分類交叉熵(sparse categorical cross-entropy)與非稀疏的區別在於,前者的輸出是類別的數字,而不是 one-hot 向量。\n", - "* 在 PyTorch 中,你可以讓最後一層沒有激活函數,並使用 `CrossEntropyLoss` 作為損失函數。這個函數會自動應用 softmax。\n" + "* 在 TensorFlow 中,您可以使用 `softmax` 作為激活函數,並使用 `sparse_categorical_crossentropy` 作為損失函數。稀疏分類交叉熵(sparse categorical cross-entropy)與非稀疏的區別在於,前者期望輸出為類別的數字,而不是 one-hot 向量。\n", + "* 在 PyTorch 中,最終層可以不使用激活函數,並使用 `CrossEntropyLoss` 作為損失函數。該函數會自動應用 softmax。\n" ] }, { @@ -255,9 +275,9 @@ "source": [ "## 訓練神經網路\n", "\n", - "現在我們準備好訓練神經網路了。在訓練過程中,請在每個 epoch 收集訓練數據和測試數據的準確率,然後繪製準確率圖表,以檢查是否有過擬合的情況。\n", + "現在我們準備好訓練神經網路了。在訓練過程中,請在每個訓練週期收集訓練和測試數據的準確率,然後繪製準確率圖表以檢查是否有過度擬合的情況。\n", "\n", - "> 為了加快訓練速度,如果有 GPU 可用,請務必使用它。雖然 TensorFlow/Keras 會自動使用 GPU,但在 PyTorch 中,你需要使用 `.to()` 方法將模型和數據移動到 GPU 上,才能利用 GPU 的加速功能。\n" + "> 為了加快訓練速度,如果有 GPU 可用,請使用 GPU。雖然 TensorFlow/Keras 會自動使用 GPU,但在 PyTorch 中,您需要在訓練過程中使用 `.to()` 方法將模型和數據移動到 GPU 上,以充分利用 GPU 的加速功能。\n" ] }, { @@ -295,20 +315,20 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "什麼是過度擬合?如何提高模型的準確性?\n", + "關於過度擬合,你可以說什麼?如何改善模型的準確性?\n", "\n", "## 可選:計算 Top3 準確率\n", "\n", - "在這次練習中,我們處理的是具有相當多類別(35類)的分類問題,因此我們的結果——大約50%的驗證準確率——已經相當不錯了。標準的 ImageNet 數據集甚至有更多類別——1000類。\n", + "在這個練習中,我們處理的是具有相當多類別(35類)的分類問題,因此我們的結果——大約50%的驗證準確率——已經相當不錯了。標準的 ImageNet 數據集甚至有更多類別——1000類。\n", "\n", - "在這種情況下,很難保證模型**總是**能正確預測類別。有些情況下,兩個品種可能非常相似,而模型返回的概率也非常接近(例如,0.45 和 0.43)。如果我們測量標準準確率,這將被視為錯誤案例,儘管模型只犯了很小的錯誤。因此,我們通常會測量另一個指標——模型最可能的前三個預測中的準確率。\n", + "在這種情況下,很難保證模型**總是**正確預測類別。有些情況下,兩個品種非常相似,模型可能返回非常接近的概率(例如,0.45 和 0.43)。如果我們測量標準準確率,這將被視為錯誤案例,即使模型只犯了很小的錯誤。因此,我們通常會測量另一個指標——模型最可能的前三個預測中的準確率。\n", "\n", - "如果目標標籤包含在模型的前三個預測中,我們就認為這個案例是準確的。\n", + "如果目標標籤包含在模型的前三個預測中,我們就認為該案例是準確的。\n", "\n", - "要在測試數據集上計算 Top-3 準確率,您需要手動遍歷數據集,應用神經網絡以獲得預測,然後進行計算。一些提示:\n", + "要在測試數據集上計算 top-3 準確率,你需要手動遍歷數據集,應用神經網絡進行預測,然後進行計算。一些提示:\n", "\n", - "* 在 Tensorflow 中,可以使用 `tf.nn.in_top_k` 函數來檢查 `predictions`(模型的輸出)是否在 top-k(將 `k=3` 作為參數),相對於 `targets`。此函數返回布爾值的張量,可以使用 `tf.cast` 轉換為 `int`,然後使用 `tf.reduce_sum` 累積。\n", - "* 在 PyTorch 中,可以使用 `torch.topk` 函數獲取具有最高概率的類別索引,然後檢查正確的類別是否屬於其中。請參考[這裡](https://gist.github.com/weiaicunzai/2a5ae6eac6712c70bde0630f3e76b77b)以獲得更多提示。\n" + "* 在 Tensorflow 中,使用 `tf.nn.in_top_k` 函數來檢查 `predictions`(模型的輸出)是否在 top-k(將 `k=3` 作為參數),相對於 `targets`。此函數返回布爾值的張量,可以使用 `tf.cast` 轉換為 `int`,然後使用 `tf.reduce_sum` 累積。\n", + "* 在 PyTorch 中,你可以使用 `torch.topk` 函數獲取具有最高概率的類別索引,然後檢查正確的類別是否屬於其中。參考 [這裡](https://gist.github.com/weiaicunzai/2a5ae6eac6712c70bde0630f3e76b77b) 獲取更多提示。\n" ] }, { @@ -324,9 +344,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## 可選:建立貓狗分類\n", + "## 可選:建立貓 vs. 狗分類\n", "\n", - "我們也希望了解在相同的數據集上,我們的二元貓狗分類的準確性如何。為此,我們需要調整標籤:\n" + "我們也想看看在同一個數據集上,我們的二元貓 vs. 狗分類的準確度如何。為此,我們需要調整標籤:\n" ] }, { @@ -352,7 +372,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n---\n\n**免責聲明**: \n本文件已使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋不承擔責任。\n" + "\n---\n\n**免責聲明**: \n本文件已使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們努力確保翻譯的準確性,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。\n" ] } ], @@ -378,8 +398,8 @@ "version": "3.9.5" }, "coopTranslator": { - "original_hash": "1de3ae931831253c3198d899da48bfe5", - "translation_date": "2025-08-28T10:54:27+00:00", + "original_hash": "df7d1f7da8d2617b76acd93115776ca4", + "translation_date": "2025-10-03T14:29:08+00:00", "source_file": "lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb", "language_code": "mo" } diff --git a/translations/mo/lessons/4-ComputerVision/07-ConvNets/lab/README.md b/translations/mo/lessons/4-ComputerVision/07-ConvNets/lab/README.md index 3f6854b3..35304d0f 100644 --- a/translations/mo/lessons/4-ComputerVision/07-ConvNets/lab/README.md +++ b/translations/mo/lessons/4-ComputerVision/07-ConvNets/lab/README.md @@ -1,29 +1,29 @@ -# 寵物臉部分類 +# 寵物面孔分類 來自 [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) 的實驗作業。 ## 任務 -想像一下,你需要為寵物托育中心開發一個應用程式,用來記錄所有的寵物。這樣的應用程式其中一個很棒的功能就是能夠自動從照片中辨識寵物的品種。這可以透過神經網路成功實現。 +想像一下,你需要開發一個寵物托育應用程式,用來記錄所有的寵物。這樣的應用程式其中一個很棒的功能就是能夠透過照片自動辨識寵物的品種。這可以透過神經網絡成功實現。 -你需要訓練一個卷積神經網路,使用 **Pet Faces** 資料集來分類不同品種的貓和狗。 +你需要訓練一個卷積神經網絡來分類不同品種的貓和狗,使用 **Pet Faces** 數據集。 -## 資料集 +## 數據集 -我們將使用 **Pet Faces** 資料集,這是從 [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/) 寵物資料集中衍生出來的。該資料集包含 35 種不同品種的狗和貓。 +我們將使用 [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/),該數據集包含 37 種不同品種的狗和貓的圖片。 -![我們將處理的資料集](../../../../../../translated_images/data.50b2a9d5484bdbf0f52f5765b381cec9efe2bd296a98f007f90bedb6ac67f2a8.mo.png) +![我們將處理的數據集](../../../../../../translated_images/data.50b2a9d5484bdbf0f52f5765b381cec9efe2bd296a98f007f90bedb6ac67f2a8.mo.png) -要下載資料集,請使用以下程式碼片段: +要下載數據集,請使用以下程式碼片段: ```python !wget https://thor.robots.ox.ac.uk/~vgg/data/pets/images.tar.gz @@ -31,13 +31,17 @@ CO_OP_TRANSLATOR_METADATA: !rm images.tar.gz ``` -## 開始使用 Notebook +**注意:** Oxford-IIIT Pet Dataset 的圖片是根據檔名組織的(例如,`Abyssinian_1.jpg`,`Bengal_2.jpg`)。筆記本中包含了將這些圖片整理到品種特定子目錄的程式碼,以便於分類。 -通過打開 [PetFaces.ipynb](../../../../../../lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb) 開始這次實驗。 +## 開始筆記本 + +通過打開 [PetFaces.ipynb](PetFaces.ipynb) 開始實驗。 ## 收穫 -你已經從零開始解決了一個相對複雜的影像分類問題!雖然有相當多的分類,但你仍然能夠獲得合理的準確率!此外,測量 top-k 準確率也是有意義的,因為有些分類即使對人類來說也不容易區分清楚。 +你已經從零開始解決了一個相對複雜的圖像分類問題!儘管有很多類別,你仍然能夠獲得合理的準確率!此外,測量 top-k 準確率也是有意義的,因為有些類別即使對人類來說也不容易區分,容易混淆。 + +--- **免責聲明**: -本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而產生的任何誤解或錯誤解讀概不負責。 \ No newline at end of file +本文件已使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們努力確保翻譯的準確性,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵資訊,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋不承擔責任。 \ No newline at end of file diff --git a/translations/mr/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb b/translations/mr/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb index 2f0c445f..1f5ff208 100644 --- a/translations/mr/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb +++ b/translations/mr/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb @@ -10,7 +10,9 @@ "\n", "### डेटा मिळवणे\n", "\n", - "या असाइनमेंटमध्ये, आपण तुलनेने सोप्या वर्गीकरणाच्या कार्यावर लक्ष केंद्रित करू - पाळीव प्राण्यांच्या चेहऱ्यांचे वर्गीकरण. हा डेटासेट [Oxford-IIIT Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/) मधून कापलेल्या चेहऱ्यांचा समावेश करतो. चला, डेटासेट लोड करून त्याचे दृश्यरूप पाहण्यास सुरुवात करूया.\n" + "या असाइनमेंटमध्ये आपण तुलनेने सोप्या वर्गीकरण कार्यावर लक्ष केंद्रित करू - पाळीव प्राण्यांच्या चेहऱ्यांचे वर्गीकरण. आपण [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/) वापरणार आहोत, ज्यामध्ये 37 वेगवेगळ्या जातींच्या कुत्रे आणि मांजरींच्या प्रतिमा आहेत. चला डेटा डाउनलोड करून त्याचे दृश्यांकन करण्यास सुरुवात करूया.\n", + "\n", + "**टीप:** Oxford-IIIT Pet Dataset मध्ये संपूर्ण पाळीव प्राण्यांच्या प्रतिमा आहेत. एक्स्ट्रॅक्ट केलेल्या फोल्डरमध्ये प्रतिमा जातींनुसार व्यवस्थित केल्या जातील.\n" ] }, { @@ -46,7 +48,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "आम्ही यादीतील प्रतिमांची मालिका प्रदर्शित करण्यासाठी सामान्य फंक्शन परिभाषित करू.\n" + "आम्ही यादीतील प्रतिमांची मालिका प्रदर्शित करण्यासाठी सामान्य फंक्शन परिभाषित करू:\n" ] }, { @@ -86,6 +88,24 @@ "metadata": {}, "outputs": [], "source": [ + "# Note: The Oxford-IIIT Pet Dataset extracts to a folder named 'images'\n", + "# Images are named by breed (e.g., 'Abyssinian_1.jpg')\n", + "# We need to organize them into breed-specific subdirectories\n", + "import os\n", + "from collections import defaultdict\n", + "\n", + "# Organize images by breed\n", + "if not os.path.exists('petfaces'):\n", + " os.makedirs('petfaces')\n", + " for img_file in os.listdir('images'):\n", + " if img_file.endswith(('.jpg', '.png')):\n", + " # Extract breed name from filename (everything before the last underscore and number)\n", + " breed = '_'.join(img_file.split('_')[:-1])\n", + " breed_dir = os.path.join('petfaces', breed)\n", + " if not os.path.exists(breed_dir):\n", + " os.makedirs(breed_dir)\n", + " os.rename(os.path.join('images', img_file), os.path.join(breed_dir, img_file))\n", + "\n", "for cls in os.listdir('petfaces'):\n", " print(cls)\n", " display_images([Image.open(os.path.join('petfaces',cls,x)) \n", @@ -95,7 +115,9 @@ { "cell_type": "markdown", "metadata": {}, - "source": [] + "source": [ + "आपल्या डेटासेटमधील वर्गांची संख्या देखील परिभाषित करूया:\n" + ] }, { "cell_type": "code", @@ -124,11 +146,11 @@ "source": [ "## डीप लर्निंगसाठी डेटासेट तयार करणे\n", "\n", - "आपले न्यूरल नेटवर्क प्रशिक्षण सुरू करण्यासाठी, आपल्याला सर्व प्रतिमा टेन्सर्समध्ये रूपांतरित कराव्या लागतील आणि लेबल्स (वर्ग क्रमांक) साठी संबंधित टेन्सर्स तयार करावे लागतील. बहुतेक न्यूरल नेटवर्क फ्रेमवर्कमध्ये प्रतिमांसाठी सोप्या साधनांचा समावेश असतो:\n", + "आपले न्यूरल नेटवर्क प्रशिक्षण सुरू करण्यासाठी, आपल्याला सर्व प्रतिमा टेन्सर्समध्ये रूपांतरित करणे आवश्यक आहे, तसेच लेबल्स (वर्ग क्रमांक) संबंधित टेन्सर्स तयार करणे आवश्यक आहे. बहुतेक न्यूरल नेटवर्क फ्रेमवर्कमध्ये प्रतिमांसाठी सोपे टूल्स असतात:\n", "* Tensorflow मध्ये, `tf.keras.preprocessing.image_dataset_from_directory` वापरा\n", "* PyTorch मध्ये, `torchvision.datasets.ImageFolder` वापरा\n", "\n", - "वरील चित्रांमधून तुम्ही पाहिले असेल की, सर्व चित्रे जवळजवळ चौकोनी गुणोत्तरात आहेत, त्यामुळे आपल्याला सर्व प्रतिमा चौकोनी आकारात बदलणे आवश्यक आहे. तसेच, आपण प्रतिमा मिनीबॅचेसमध्ये आयोजित करू शकतो.\n" + "वर दिलेल्या चित्रांमधून तुम्ही पाहिले असेल, सर्व चित्रे जवळपास चौकोनी प्रमाणात आहेत, त्यामुळे आपल्याला सर्व प्रतिमा चौकोनी आकारात बदलणे आवश्यक आहे. तसेच, आपण प्रतिमा मिनीबॅचेसमध्ये व्यवस्थित करू शकतो.\n" ] }, { @@ -234,8 +256,8 @@ "* अंतिम वर्गीकरणकर्ता लपवलेल्या स्तरांसह किंवा त्याशिवाय असू शकतो, परंतु आउटपुट न्यूरॉन्सची संख्या वर्गांच्या संख्येसारखीच असली पाहिजे.\n", "\n", "शेवटच्या स्तरावर सक्रियता फंक्शन + लॉस फंक्शन योग्य मिळवणे महत्त्वाचे आहे:\n", - "* Tensorflow मध्ये, तुम्ही सक्रियता म्हणून `softmax` वापरू शकता, आणि लॉस म्हणून `sparse_categorical_crossentropy`. Sparse categorical cross-entropy आणि non-sparse यामधील फरक म्हणजे पूर्वीचे आउटपुट वर्ग क्रमांक म्हणून अपेक्षित असते, one-hot vector म्हणून नाही.\n", - "* PyTorch मध्ये, तुम्ही अंतिम स्तर सक्रियता फंक्शनशिवाय ठेवू शकता, आणि `CrossEntropyLoss` लॉस फंक्शन वापरू शकता. हे फंक्शन आपोआप softmax लागू करते.\n" + "* Tensorflow मध्ये, तुम्ही सक्रियता म्हणून `softmax` वापरू शकता आणि लॉस म्हणून `sparse_categorical_crossentropy` वापरू शकता. sparse categorical cross-entropy आणि non-sparse यामधील फरक म्हणजे पूर्वीचे आउटपुट वर्ग क्रमांक म्हणून अपेक्षित असते, one-hot vector म्हणून नाही.\n", + "* PyTorch मध्ये, तुम्ही अंतिम स्तर सक्रियता फंक्शनशिवाय ठेवू शकता आणि `CrossEntropyLoss` लॉस फंक्शन वापरू शकता. हे फंक्शन आपोआप softmax लागू करते.\n" ] }, { @@ -251,11 +273,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## न्यूरल नेटवर्क प्रशिक्षण द्या\n", + "## न्यूरल नेटवर्क प्रशिक्षित करा\n", "\n", - "आता आपण न्यूरल नेटवर्क प्रशिक्षणासाठी तयार आहोत. प्रशिक्षणादरम्यान, प्रत्येक epoch वर train आणि test डेटावरची अचूकता गोळा करा आणि नंतर अचूकतेचा आलेख तयार करा, जेणेकरून overfitting आहे का ते पाहता येईल.\n", + "आता आपण न्यूरल नेटवर्क प्रशिक्षित करण्यासाठी तयार आहोत. प्रशिक्षणादरम्यान, कृपया प्रत्येक epoch वर ट्रेन आणि टेस्ट डेटावर अचूकता गोळा करा आणि नंतर अचूकतेचे प्लॉट तयार करा जेणेकरून ओव्हरफिटिंग आहे का ते पाहता येईल.\n", "\n", - "> प्रशिक्षणाचा वेग वाढवण्यासाठी, GPU उपलब्ध असल्यास त्याचा वापर करा. TensorFlow/Keras आपोआप GPU वापरेल, परंतु PyTorch मध्ये GPU चा फायदा घेण्यासाठी, प्रशिक्षणादरम्यान मॉडेल आणि डेटा दोन्ही `.to()` पद्धतीचा वापर करून GPU वर हलवावे लागेल.\n" + "> प्रशिक्षणाचा वेग वाढवण्यासाठी, GPU उपलब्ध असल्यास त्याचा वापर करणे आवश्यक आहे. TensorFlow/Keras स्वयंचलितपणे GPU वापरेल, परंतु PyTorch मध्ये GPU acceleration चा फायदा घेण्यासाठी प्रशिक्षणादरम्यान मॉडेल आणि डेटा दोन्ही `.to()` पद्धतीचा वापर करून GPU वर हलवावे लागेल.\n" ] }, { @@ -293,20 +315,20 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "ओव्हरफिटिंगबद्दल तुम्ही काय सांगू शकता? मॉडेलची अचूकता सुधारण्यासाठी काय करता येईल?\n", + "ओव्हरफिटिंग म्हणजे काय? मॉडेलची अचूकता सुधारण्यासाठी काय करता येईल?\n", "\n", "## पर्यायी: टॉप-3 अचूकता मोजा\n", "\n", - "या सरावामध्ये, आपण 35 वर्गांसह उच्च संख्येच्या वर्गीकरणाशी व्यवहार करत होतो, त्यामुळे आपला निकाल - सुमारे 50% सत्यापन अचूकता - खूप चांगला आहे. स्टँडर्ड ImageNet डेटासेटमध्ये याहूनही जास्त - 1000 वर्ग असतात.\n", + "या व्यायामात, आपण 35 वर्गांसह वर्गीकरण करत होतो, त्यामुळे आपला निकाल - सुमारे 50% व्हॅलिडेशन अचूकता - खूप चांगला आहे. मानक ImageNet डेटासेटमध्ये याहून अधिक - 1000 वर्ग असतात.\n", "\n", - "अशा परिस्थितीत, मॉडेलने **नेहमीच** वर्ग अचूकपणे ओळखावा याची खात्री करणे कठीण असते. काही वेळा दोन जाती एकमेकांशी खूपच साधर्म्य असतात, आणि मॉडेल अगदी जवळजवळ समान शक्यता परत करते (उदा., 0.45 आणि 0.43). जर आपण मानक अचूकता मोजली, तर ती चुकीची केस मानली जाईल, जरी मॉडेलने खूपच लहान चूक केली असेल. यामुळे, आपण अनेकदा दुसरी मेट्रिक मोजतो - मॉडेलच्या टॉप 3 सर्वाधिक संभाव्य अंदाजांमध्ये अचूकता.\n", + "अशा परिस्थितीत, मॉडेलने **नेहमीच** वर्ग योग्यरित्या ओळखावा याची खात्री करणे कठीण असते. काही वेळा दोन जाती एकमेकांशी खूपच साम्य असतात, आणि मॉडेल अतिशय जवळच्या शक्यता परत करते (उदा., 0.45 आणि 0.43). जर आपण मानक अचूकता मोजली, तर ती चुकीची केस मानली जाईल, जरी मॉडेलने खूप छोटा चुका केला असेल. त्यामुळे, आपण अनेकदा दुसरी मेट्रिक मोजतो - मॉडेलच्या सर्वाधिक शक्यतांच्या टॉप 3 अंदाजांमध्ये अचूकता.\n", "\n", "जर लक्ष्य लेबल मॉडेलच्या टॉप 3 अंदाजांमध्ये समाविष्ट असेल, तर आपण त्या केसला अचूक मानतो.\n", "\n", - "टेस्ट डेटासेटवर टॉप-3 अचूकता मोजण्यासाठी, तुम्हाला डेटासेटवर मॅन्युअली जावे लागेल, न्यूरल नेटवर्क लागू करावे लागेल जेणेकरून अंदाज मिळतील, आणि नंतर गणना करावी लागेल. काही सूचना:\n", + "टेस्ट डेटासेटवर टॉप-3 अचूकता मोजण्यासाठी, तुम्हाला डेटासेटवर मॅन्युअली जावे लागेल, न्यूरल नेटवर्क लागू करावे लागेल जेणेकरून अंदाज मिळेल, आणि नंतर गणना करावी लागेल. काही सूचना:\n", "\n", - "* Tensorflow मध्ये, `tf.nn.in_top_k` फंक्शन वापरा, जे पाहते की `predictions` (मॉडेलचे आउटपुट) टॉप-k मध्ये आहेत का (`k=3` पॅरामीटर म्हणून पास करा), `targets` च्या संदर्भात. हे फंक्शन बूलियन व्हॅल्यूजचा टेन्सर परत करते, ज्याला `tf.cast` वापरून `int` मध्ये रूपांतरित करता येते, आणि नंतर `tf.reduce_sum` वापरून एकत्रित करता येते.\n", - "* PyTorch मध्ये, तुम्ही `torch.topk` फंक्शन वापरू शकता, ज्यामुळे उच्च शक्यतांच्या वर्गांचे इंडेक्स मिळतात, आणि नंतर योग्य वर्ग त्यामध्ये आहे का ते पाहू शकता. अधिक सूचनांसाठी [हे](https://gist.github.com/weiaicunzai/2a5ae6eac6712c70bde0630f3e76b77b) पहा.\n" + "* Tensorflow मध्ये, `tf.nn.in_top_k` फंक्शन वापरा जेणेकरून `predictions` (मॉडेलचे आउटपुट) टॉप-k मध्ये आहेत का हे पाहता येईल (पॅरामीटर म्हणून `k=3` पास करा), `targets` च्या संदर्भात. हे फंक्शन बूलियन व्हॅल्यूजचा टेन्सर परत करते, ज्याला `tf.cast` वापरून `int` मध्ये रूपांतरित करता येते, आणि नंतर `tf.reduce_sum` वापरून जमा करता येते.\n", + "* PyTorch मध्ये, तुम्ही `torch.topk` फंक्शन वापरून उच्च शक्यतांच्या वर्गांचे इंडेक्स मिळवू शकता, आणि नंतर योग्य वर्ग त्यामध्ये आहे का ते पाहू शकता. अधिक सूचनांसाठी [हे](https://gist.github.com/weiaicunzai/2a5ae6eac6712c70bde0630f3e76b77b) पहा.\n" ] }, { @@ -324,7 +346,7 @@ "source": [ "## पर्यायी: मांजरे विरुद्ध कुत्रे वर्गीकरण तयार करा\n", "\n", - "आम्हाला हे देखील पाहायचे आहे की आमच्या द्विआधारी मांजरे विरुद्ध कुत्रे वर्गीकरणाचे अचूकता याच डेटासेटवर किती चांगले असेल. हे करण्यासाठी, आपल्याला लेबल्स समायोजित करावे लागतील:\n" + "आम्हाला हे देखील पाहायचे आहे की आमचे द्विआधारी मांजरे विरुद्ध कुत्रे वर्गीकरण त्याच डेटासेटवर किती अचूक असेल. हे करण्यासाठी, आपल्याला लेबल्स समायोजित करणे आवश्यक आहे:\n" ] }, { @@ -350,7 +372,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n---\n\n**अस्वीकरण**: \nहा दस्तऐवज AI भाषांतर सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) चा वापर करून भाषांतरित करण्यात आला आहे. आम्ही अचूकतेसाठी प्रयत्नशील असलो तरी कृपया लक्षात ठेवा की स्वयंचलित भाषांतरांमध्ये त्रुटी किंवा अचूकतेचा अभाव असू शकतो. मूळ भाषेतील दस्तऐवज हा अधिकृत स्रोत मानला जावा. महत्त्वाच्या माहितीसाठी व्यावसायिक मानवी भाषांतराची शिफारस केली जाते. या भाषांतराचा वापर करून निर्माण होणाऱ्या कोणत्याही गैरसमज किंवा चुकीच्या अर्थासाठी आम्ही जबाबदार राहणार नाही.\n" + "\n---\n\n**अस्वीकरण**: \nहा दस्तऐवज AI भाषांतर सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) वापरून भाषांतरित करण्यात आला आहे. आम्ही अचूकतेसाठी प्रयत्नशील असलो तरी कृपया लक्षात ठेवा की स्वयंचलित भाषांतरांमध्ये त्रुटी किंवा अचूकतेचा अभाव असू शकतो. मूळ भाषेतील दस्तऐवज हा अधिकृत स्रोत मानला जावा. महत्त्वाच्या माहितीसाठी व्यावसायिक मानवी भाषांतराची शिफारस केली जाते. या भाषांतराचा वापर करून निर्माण झालेल्या कोणत्याही गैरसमज किंवा चुकीच्या अर्थासाठी आम्ही जबाबदार राहणार नाही.\n" ] } ], @@ -376,8 +398,8 @@ "version": "3.9.5" }, "coopTranslator": { - "original_hash": "1de3ae931831253c3198d899da48bfe5", - "translation_date": "2025-08-28T07:47:01+00:00", + "original_hash": "df7d1f7da8d2617b76acd93115776ca4", + "translation_date": "2025-10-03T14:32:58+00:00", "source_file": "lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb", "language_code": "mr" } diff --git a/translations/mr/lessons/4-ComputerVision/07-ConvNets/lab/README.md b/translations/mr/lessons/4-ComputerVision/07-ConvNets/lab/README.md index 8cfa684c..ddd68412 100644 --- a/translations/mr/lessons/4-ComputerVision/07-ConvNets/lab/README.md +++ b/translations/mr/lessons/4-ComputerVision/07-ConvNets/lab/README.md @@ -1,8 +1,8 @@ -# အိမ်မွေးတိရစ္ဆာန် မျက်နှာများ အမျိုးအစားခွဲခြင်း +# အိမ်မွေးတိရစ္ဆာန်မျက်နှာများ အမျိုးအစားခွဲခြားခြင်း -[AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) မှ လက်တွေ့လေ့ကျင့်ခန်း။ +[AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) မှ Lab Assignment။ ## တာဝန် -သင်သည် အိမ်မွေးတိရစ္ဆာန် စောင့်ရှောက်ရေးအတွက် အိမ်မွေးတိရစ္ဆာန်များကို စာရင်းသွင်းရန် အက်ပ်တစ်ခု ဖန်တီးရန် လိုအပ်သည်ဟု စိတ်ကူးပါစေ။ ထိုအက်ပ်၏ အထူးအင်္ဂါရပ်တစ်ခုမှာ ဓာတ်ပုံမှ အမျိုးအစားကို အလိုအလျောက် ရှာဖွေနိုင်ခြင်းဖြစ်မည်။ ၎င်းကို နယူးရယ်နက်ဝက်များ (neural networks) အသုံးပြု၍ အောင်မြင်စွာ ပြုလုပ်နိုင်ပါသည်။ +သင်သည် အိမ်မွေးတိရစ္ဆာန်များကို စုစည်းရန်အတွက် application တစ်ခု ဖန်တီးရန်လိုအပ်သည်ဟု စဉ်းစားပါ။ ထို application ၏ အထူးအင်္ဂါရပ်တစ်ခုမှာ ဓာတ်ပုံမှ အမျိုးအစားကို အလိုအလျောက် ရှာဖွေခြင်းဖြစ်နိုင်ပါသည်။ ဤအရာကို နယူးရယ်နက်ဝက်များကို အသုံးပြု၍ အောင်မြင်စွာ ပြုလုပ်နိုင်ပါသည်။ -သင်သည် **Pet Faces** ဒေတာစနစ်ကို အသုံးပြု၍ ကြောင်နှင့် ခွေး အမျိုးအစားများကို ခွဲခြားနိုင်ရန် convolutional neural network တစ်ခုကို လေ့ကျင့်ရမည်။ +သင်သည် **Pet Faces** dataset ကို အသုံးပြု၍ ကြောင်များနှင့် ခွေးများ၏ အမျိုးအစားများကို ခွဲခြားရန် convolutional neural network တစ်ခုကို လေ့ကျင့်ရန်လိုအပ်ပါသည်။ -## ဒေတာစနစ် +## Dataset -ကျွန်ုပ်တို့သည် [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/) အိမ်မွေးတိရစ္ဆာန် ဒေတာစနစ်မှ ဆင်းသက်လာသော **Pet Faces** ဒေတာစနစ်ကို အသုံးပြုမည်။ ၎င်းတွင် ခွေးနှင့် ကြောင် အမျိုးအစား ၃၅ မျိုး ပါဝင်သည်။ +ကျွန်ုပ်တို့သည် [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/) ကို အသုံးပြုမည်ဖြစ်ပြီး၊ ၎င်းတွင် ခွေးနှင့် ကြောင်အမျိုးအစား ၃၇ မျိုး၏ ဓာတ်ပုံများ ပါဝင်ပါသည်။ -![ကျွန်ုပ်တို့ကိုင်တွယ်မည့် ဒေတာ](../../../../../../translated_images/data.50b2a9d5484bdbf0f52f5765b381cec9efe2bd296a98f007f90bedb6ac67f2a8.my.png) +![ကျွန်ုပ်တို့ကို ကိုင်တွယ်ရမည့် Dataset](../../../../../../translated_images/data.50b2a9d5484bdbf0f52f5765b381cec9efe2bd296a98f007f90bedb6ac67f2a8.my.png) -ဒေတာစနစ်ကို ဒေါင်းလုဒ်လုပ်ရန် အောက်ပါ ကုဒ်ကို အသုံးပြုပါ- +Dataset ကို download လုပ်ရန် အောက်ပါ code snippet ကို အသုံးပြုပါ: ```python !wget https://thor.robots.ox.ac.uk/~vgg/data/pets/images.tar.gz @@ -31,13 +31,17 @@ CO_OP_TRANSLATOR_METADATA: !rm images.tar.gz ``` -## စတင်ရန် Notebook +**မှတ်ချက်:** Oxford-IIIT Pet Dataset ၏ ဓာတ်ပုံများကို filename (ဥပမာ - `Abyssinian_1.jpg`, `Bengal_2.jpg`) အလိုက် စီစဉ်ထားပါသည်။ Notebook တွင် ဤဓာတ်ပုံများကို classification လုပ်ရန် အလွယ်ကူဆုံးဖြစ်စေရန် အမျိုးအစား-specific subdirectories များသို့ စီစဉ်ရန် code ပါဝင်သည်။ -[PetFaces.ipynb](../../../../../../lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb) ကို ဖွင့်၍ လက်တွေ့လေ့ကျင့်ခန်းကို စတင်ပါ။ +## Notebook စတင်ခြင်း -## အဓိက အချက် +Lab ကို [PetFaces.ipynb](PetFaces.ipynb) ဖွင့်၍ စတင်ပါ။ -သင်သည် ပုံမှန်အခြေခံမှ စတင်၍ ပုံရိပ်ခွဲခြားမှု၏ အတော်လေး ရှုပ်ထွေးသော ပြဿနာကို ဖြေရှင်းနိုင်ခဲ့ပါပြီ! အတန်းများ အတော်များများ ရှိသော်လည်း သင့်အနေဖြင့် သင့်လျော်သော တိကျမှုကို ရရှိနိုင်ခဲ့ပါသည်။ ထို့အပြင် လူသားများအတွက်ပါ အလွန်တူညီသော အတန်းများကို ခွဲခြားရန် ခက်ခဲနိုင်သောကြောင့် top-k accuracy ကို တိုင်းတာခြင်းသည် အဓိကကျပါသည်။ +## အဓိကအချက် + +သင်သည် image classification အတွက် အခြေခံမှ စ၍ တော်တော်လေး ရှုပ်ထွေးသော ပြဿနာကို ဖြေရှင်းနိုင်ခဲ့ပါသည်! အမျိုးအစားများ အတော်များစွာ ရှိခဲ့ပြီး၊ သင်သည် သင့်လျော်သော တိကျမှုကို ရရှိနိုင်ခဲ့ပါသည်! ထို့အပြင် top-k accuracy ကို တိုင်းတာခြင်းသည်လည်း make sense ဖြစ်ပါသည်၊ အကြောင်းမှာ လူသားများအတွက်ပင် အလွန်တူညီသော အမျိုးအစားများကို ရှုပ်ထွေးနိုင်သောကြောင့် ဖြစ်ပါသည်။ + +--- **အကြောင်းကြားချက်**: -ဤစာရွက်စာတမ်းကို AI ဘာသာပြန်ဝန်ဆောင်မှု [Co-op Translator](https://github.com/Azure/co-op-translator) ကို အသုံးပြု၍ ဘာသာပြန်ထားပါသည်။ ကျွန်ုပ်တို့သည် တိကျမှုအတွက် ကြိုးစားနေသော်လည်း၊ အလိုအလျောက် ဘာသာပြန်မှုများတွင် အမှားများ သို့မဟုတ် မမှန်ကန်မှုများ ပါဝင်နိုင်သည်ကို သတိပြုပါ။ မူရင်းစာရွက်စာတမ်းကို ၎င်း၏ မူရင်းဘာသာစကားဖြင့် အာဏာတရားရှိသော အရင်းအမြစ်အဖြစ် သတ်မှတ်သင့်ပါသည်။ အရေးကြီးသော အချက်အလက်များအတွက် လူ့ဘာသာပြန်ပညာရှင်များမှ ပရော်ဖက်ရှင်နယ် ဘာသာပြန်မှုကို အကြံပြုပါသည်။ ဤဘာသာပြန်မှုကို အသုံးပြုခြင်းမှ ဖြစ်ပေါ်လာသော အလွဲအမှားများ သို့မဟုတ် အနားလွဲမှုများအတွက် ကျွန်ုပ်တို့သည် တာဝန်မယူပါ။ \ No newline at end of file +ဤစာရွက်စာတမ်းကို AI ဘာသာပြန်ဝန်ဆောင်မှု [Co-op Translator](https://github.com/Azure/co-op-translator) ကို အသုံးပြု၍ ဘာသာပြန်ထားပါသည်။ ကျွန်ုပ်တို့သည် တိကျမှုအတွက် ကြိုးစားနေသော်လည်း အလိုအလျောက် ဘာသာပြန်မှုများတွင် အမှားများ သို့မဟုတ် မမှန်ကန်မှုများ ပါဝင်နိုင်သည်ကို သတိပြုပါ။ မူရင်းဘာသာစကားဖြင့် ရေးသားထားသော စာရွက်စာတမ်းကို အာဏာတရ အရင်းအမြစ်အဖြစ် သတ်မှတ်သင့်ပါသည်။ အရေးကြီးသော အချက်အလက်များအတွက် လူက ဘာသာပြန်မှုကို အကြံပြုပါသည်။ ဤဘာသာပြန်မှုကို အသုံးပြုခြင်းမှ ဖြစ်ပေါ်လာသော အလွဲအမှားများ သို့မဟုတ် အနားလွဲမှုများအတွက် ကျွန်ုပ်တို့သည် တာဝန်မယူပါ။ \ No newline at end of file diff --git a/translations/ne/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb b/translations/ne/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb index 5be95a09..3ee71297 100644 --- a/translations/ne/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb +++ b/translations/ne/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb @@ -8,9 +8,11 @@ "\n", "[AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) बाट ल्याब असाइनमेन्ट।\n", "\n", - "### डाटा प्राप्त गर्दै\n", + "### डेटा प्राप्त गर्दै\n", "\n", - "यस असाइनमेन्टमा, हामी तुलनात्मक रूपमा सरल वर्गीकरण कार्यमा केन्द्रित हुनेछौं - पाल्तु जनावरको अनुहारको वर्गीकरण। यो डाटासेट [Oxford-IIIT Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/) बाट काटिएका अनुहारहरूको समावेश गर्दछ। आउनुहोस्, डाटासेट लोड गरेर र भिजुअलाइज गरेर सुरु गरौं।\n" + "यस असाइनमेन्टमा, हामी तुलनात्मक रूपमा सरल वर्गीकरण कार्यमा ध्यान केन्द्रित गर्नेछौं - पाल्तु जनावरको अनुहारको वर्गीकरण। हामी [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/) प्रयोग गर्नेछौं, जसमा कुकुर र बिरालोका ३७ विभिन्न प्रजातिका छविहरू समावेश छन्। सुरु गरौं डेटा डाउनलोड गरेर र त्यसलाई दृश्यात्मक रूपमा हेरेर।\n", + "\n", + "**नोट:** Oxford-IIIT Pet Dataset मा पाल्तु जनावरको पूर्ण छविहरू समावेश छन्। निकालिएको फोल्डरमा छविहरू प्रजाति अनुसार व्यवस्थित गरिनेछ।\n" ] }, { @@ -86,6 +88,24 @@ "metadata": {}, "outputs": [], "source": [ + "# Note: The Oxford-IIIT Pet Dataset extracts to a folder named 'images'\n", + "# Images are named by breed (e.g., 'Abyssinian_1.jpg')\n", + "# We need to organize them into breed-specific subdirectories\n", + "import os\n", + "from collections import defaultdict\n", + "\n", + "# Organize images by breed\n", + "if not os.path.exists('petfaces'):\n", + " os.makedirs('petfaces')\n", + " for img_file in os.listdir('images'):\n", + " if img_file.endswith(('.jpg', '.png')):\n", + " # Extract breed name from filename (everything before the last underscore and number)\n", + " breed = '_'.join(img_file.split('_')[:-1])\n", + " breed_dir = os.path.join('petfaces', breed)\n", + " if not os.path.exists(breed_dir):\n", + " os.makedirs(breed_dir)\n", + " os.rename(os.path.join('images', img_file), os.path.join(breed_dir, img_file))\n", + "\n", "for cls in os.listdir('petfaces'):\n", " print(cls)\n", " display_images([Image.open(os.path.join('petfaces',cls,x)) \n", @@ -95,7 +115,9 @@ { "cell_type": "markdown", "metadata": {}, - "source": [] + "source": [ + "हामी हाम्रो डेटासेटमा कक्षाहरूको संख्या पनि परिभाषित गरौं:\n" + ] }, { "cell_type": "code", @@ -122,13 +144,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## डीप लर्निङको लागि डेटासेट तयार गर्दै\n", + "## डीप लर्निङका लागि डेटासेट तयार गर्दै\n", "\n", - "हाम्रो न्युरल नेटवर्कलाई प्रशिक्षण दिन सुरु गर्न, हामीले सबै छविहरूलाई टेन्सरमा रूपान्तरण गर्नुपर्छ, र लेबलहरू (क्लास नम्बरहरू) सँग सम्बन्धित टेन्सरहरू पनि सिर्जना गर्नुपर्छ। अधिकांश न्युरल नेटवर्क फ्रेमवर्कहरूले छविहरूसँग काम गर्नका लागि सरल उपकरणहरू समावेश गर्छन्:\n", + "हाम्रो न्युरल नेटवर्कलाई प्रशिक्षण दिन सुरु गर्न, हामीले सबै छविहरूलाई टेन्सरमा रूपान्तरण गर्न आवश्यक छ, साथै लेबलहरू (क्लास नम्बरहरू) सँग सम्बन्धित टेन्सरहरू पनि सिर्जना गर्नुपर्छ। अधिकांश न्युरल नेटवर्क फ्रेमवर्कहरूले छविहरूलाई व्यवस्थापन गर्नका लागि सरल उपकरणहरू समावेश गर्छन्:\n", "* Tensorflow मा, `tf.keras.preprocessing.image_dataset_from_directory` प्रयोग गर्नुहोस्\n", "* PyTorch मा, `torchvision.datasets.ImageFolder` प्रयोग गर्नुहोस्\n", "\n", - "जस्तो तपाईंले माथिका चित्रहरूबाट देख्नुभएको छ, ती सबै लगभग वर्गाकार छवि अनुपातमा छन्, त्यसैले हामीले सबै छविहरूलाई वर्गाकार आकारमा पुनःआकार दिनुपर्छ। साथै, हामी छविहरूलाई मिनिब्याचहरूमा व्यवस्थित गर्न सक्छौं।\n" + "जस्तो कि माथिका चित्रहरूबाट देख्न सकिन्छ, तिनीहरू सबै लगभग वर्गाकार छवि अनुपातमा छन्, त्यसैले हामीले सबै छविहरूलाई वर्गाकार आकारमा पुन: आकार दिन आवश्यक छ। साथै, हामी छविहरूलाई मिनिब्याचहरूमा व्यवस्थित गर्न सक्छौं।\n" ] }, { @@ -144,7 +166,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "अब हामीले डेटासेटलाई प्रशिक्षण र परीक्षण भागमा विभाजन गर्न आवश्यक छ:\n" + "अब हामीले डेटासेटलाई ट्रेन र टेस्ट भागमा विभाजन गर्न आवश्यक छ:\n" ] }, { @@ -160,8 +182,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "अब हाम्रो डेटासेटमा रहेका टेन्सरहरूको आकार प्रिन्ट गरौं। यदि तपाईंले सबै कुरा सही तरिकाले गर्नुभएको छ भने, प्रशिक्षण तत्वहरूको आकार यस्तो हुनुपर्छ:\n", - " * Tensorflow को लागि `(batch_size,image_size,image_size,3)`, PyTorch को लागि `batch_size,3,image_size,image_size`\n", + "अब हाम्रो डेटासेटमा रहेका टेन्सरहरूको आकार प्रिन्ट गरौं। यदि तपाईंले सबै कुरा सही रूपमा गर्नुभएको छ भने, प्रशिक्षण तत्वहरूको आकार यस प्रकारको हुनुपर्छ:\n", + " * Tensorflow को लागि `(batch_size,image_size,image_size,3)` र PyTorch को लागि `batch_size,3,image_size,image_size`\n", " * लेबलहरूको लागि `batch_size`\n", "\n", "लेबलहरूले कक्षाहरूको संख्या समावेश गर्नुपर्छ।\n" @@ -228,14 +250,14 @@ "source": [ "## न्यूरल नेटवर्क परिभाषित गर्नुहोस्\n", "\n", - "तस्वीर वर्गीकरणको लागि, तपाईंले सम्भवतः धेरै तहहरू भएको एक कनभोल्युसनल न्यूरल नेटवर्क परिभाषित गर्नुपर्छ। ध्यान दिनुपर्ने कुराहरू:\n", - "* पिरामिड आर्किटेक्चरलाई ध्यानमा राख्नुहोस्, अर्थात् तहहरू गहिरो हुँदै जाँदा फिल्टरहरूको संख्या बढ्नुपर्छ।\n", - "* तहहरू बीचमा सक्रियता कार्यहरू (ReLU) र अधिकतम पूलिङ (Max Pooling) बिर्सनु हुँदैन।\n", - "* अन्तिम वर्गीकरणकर्ता लुकेका तहहरू सहित वा बिना हुन सक्छ, तर आउटपुट न्यूरोनहरूको संख्या कक्षाहरूको संख्यासँग बराबर हुनुपर्छ।\n", + "तस्बिर वर्गीकरणको लागि, तपाईंले सम्भवतः धेरै तहहरू भएको एक कनभोल्युसनल न्यूरल नेटवर्क परिभाषित गर्नुपर्छ। ध्यान दिनुपर्ने कुराहरू:\n", + "* पिरामिड आर्किटेक्चरलाई ध्यानमा राख्नुहोस्, अर्थात् तहहरू गहिरो जाँदा फिल्टरहरूको संख्या बढ्नुपर्छ।\n", + "* तहहरू बीच सक्रियता कार्यहरू (ReLU) र अधिकतम पूलिङ (Max Pooling) बिर्सनु हुँदैन।\n", + "* अन्तिम वर्गीकरणकर्ता लुकेका तहहरू सहित वा बिना हुन सक्छ, तर आउटपुट न्यूरोनहरूको संख्या वर्गहरूको संख्यासँग बराबर हुनुपर्छ।\n", "\n", - "एक महत्त्वपूर्ण कुरा भनेको अन्तिम तहमा सक्रियता कार्य + हानिको कार्य (loss function) सही हुनु हो:\n", - "* Tensorflow मा, तपाईंले सक्रियता कार्यको रूपमा `softmax` र हानिको रूपमा `sparse_categorical_crossentropy` प्रयोग गर्न सक्नुहुन्छ। Sparse categorical cross-entropy र non-sparse को बीचको फरक भनेको पहिलोले आउटपुटलाई कक्षाको संख्या (class number) को रूपमा अपेक्षा गर्छ, नकि one-hot भेक्टरको रूपमा।\n", - "* PyTorch मा, तपाईंले अन्तिम तहलाई सक्रियता कार्य बिना राख्न सक्नुहुन्छ, र `CrossEntropyLoss` हानिको कार्य प्रयोग गर्न सक्नुहुन्छ। यो कार्यले स्वचालित रूपमा softmax लागू गर्छ।\n" + "अन्तिम तहमा सक्रियता कार्य + हानिको कार्य सही बनाउनु महत्त्वपूर्ण छ:\n", + "* Tensorflow मा, तपाईं `softmax` लाई सक्रियता कार्यको रूपमा प्रयोग गर्न सक्नुहुन्छ, र `sparse_categorical_crossentropy` लाई हानिको रूपमा। स्पार्स क्याटेगोरिकल क्रस-एन्ट्रोपी र गैर-स्पार्सको बीचको फरक भनेको स्पार्सले आउटपुटलाई वर्गको संख्या (एक-हट भेक्टर होइन) को रूपमा अपेक्षा गर्छ।\n", + "* PyTorch मा, तपाईं अन्तिम तहलाई सक्रियता कार्य बिना राख्न सक्नुहुन्छ, र `CrossEntropyLoss` हानिको कार्य प्रयोग गर्न सक्नुहुन्छ। यो कार्यले स्वचालित रूपमा softmax लागू गर्छ।\n" ] }, { @@ -253,7 +275,7 @@ "source": [ "## न्युरल नेटवर्कलाई प्रशिक्षण दिनुहोस्\n", "\n", - "अब हामी न्युरल नेटवर्कलाई प्रशिक्षण दिन तयार छौं। प्रशिक्षणको क्रममा, प्रत्येक इपोकमा ट्रेन र टेस्ट डाटामा एक्युरेसी सङ्कलन गर्नुहोस्, र त्यसपछि एक्युरेसीको ग्राफ बनाउनुहोस् ताकि ओभरफिटिङ छ कि छैन भनेर हेर्न सकियोस्।\n", + "अब हामी न्युरल नेटवर्कलाई प्रशिक्षण दिन तयार छौं। प्रशिक्षणको क्रममा, कृपया प्रत्येक इपोकमा ट्रेन र टेस्ट डाटामा सटीकता संकलन गर्नुहोस्, र त्यसपछि सटीकतामा आधारित ग्राफ बनाउनुहोस् ताकि ओभरफिटिङ भएको छ कि छैन हेर्न सकियोस्।\n", "\n", "> प्रशिक्षणलाई छिटो बनाउन, GPU उपलब्ध भएमा प्रयोग गर्नु आवश्यक छ। TensorFlow/Keras ले GPU स्वचालित रूपमा प्रयोग गर्नेछ, तर PyTorch मा GPU को फाइदा लिनको लागि प्रशिक्षणको क्रममा मोडेल र डाटालाई `.to()` मेथड प्रयोग गरेर GPU मा सार्नुपर्छ।\n" ] @@ -297,16 +319,16 @@ "\n", "## वैकल्पिक: टप-३ शुद्धता गणना गर्नुहोस्\n", "\n", - "यस अभ्यासमा, हामी धेरै उच्च संख्याका वर्गहरू (३५) सहितको वर्गीकरणसँग काम गरिरहेका थियौं, त्यसैले हाम्रो परिणाम - लगभग ५०% मान्यता शुद्धता - निकै राम्रो हो। मानक ImageNet डेटासेटमा अझ धेरै - १००० वर्गहरू हुन्छन्।\n", + "यस अभ्यासमा, हामी धेरै उच्च संख्याका वर्गहरू (३५) भएको वर्गीकरणसँग काम गरिरहेका थियौं, त्यसैले हाम्रो नतिजा - लगभग ५०% मान्यता शुद्धता - निकै राम्रो हो। मानक ImageNet डेटासेटमा अझ धेरै वर्गहरू छन् - १०००।\n", "\n", - "यस्ता अवस्थामा मोडेलले **सधैं** सही वर्गको भविष्यवाणी गर्ने सुनिश्चित गर्न गाह्रो हुन्छ। केही अवस्थामा दुई प्रजातिहरू एकअर्कासँग धेरै मिल्दोजुल्दो हुन्छन्, र मोडेलले धेरै मिल्दोजुल्दो सम्भावनाहरू फर्काउँछ (जस्तै, ०.४५ र ०.४३)। यदि हामी मानक शुद्धता मापन गर्छौं भने, यसलाई गलत मानिनेछ, यद्यपि मोडेलले धेरै सानो गल्ती गरेको छ। यस कारणले, हामी प्रायः अर्को मेट्रिक मापन गर्छौं - मोडेलको सबैभन्दा सम्भावित तीन भविष्यवाणीहरूभित्रको शुद्धता।\n", + "यस्ता अवस्थामा मोडेलले **सधैं** सही वर्गको भविष्यवाणी गर्ने सुनिश्चित गर्न गाह्रो हुन्छ। केही अवस्थामा दुई प्रजातिहरू एकअर्कासँग धेरै मिल्दोजुल्दो हुन्छन्, र मोडेलले धेरै मिल्दोजुल्दो सम्भावनाहरू फर्काउँछ (जस्तै, ०.४५ र ०.४३)। यदि हामी मानक शुद्धता मापन गर्छौं भने, यो गलत मानिन्छ, यद्यपि मोडेलले धेरै सानो गल्ती गरेको छ। यस कारणले गर्दा, हामी प्रायः अर्को मेट्रिक मापन गर्छौं - मोडेलको सबैभन्दा सम्भावित तीन भविष्यवाणीहरू भित्रको शुद्धता।\n", "\n", - "यदि लक्ष्य लेबल मोडेलको टप-३ भविष्यवाणीहरूभित्र समावेश छ भने हामी उक्त केसलाई सही मान्छौं।\n", + "हामी यो केसलाई सही मान्छौं यदि लक्ष्य लेबल मोडेलको टप-३ भविष्यवाणीहरू भित्र समावेश छ भने।\n", "\n", - "टेस्ट डेटासेटमा टप-३ शुद्धता गणना गर्न, तपाईंले डेटासेटलाई म्यानुअली हेर्नु पर्नेछ, न्युरल नेटवर्कलाई लागू गरेर भविष्यवाणी प्राप्त गर्नु पर्नेछ, र त्यसपछि गणना गर्नु पर्नेछ। केही सुझावहरू:\n", + "टेस्ट डेटासेटमा टप-३ शुद्धता गणना गर्न, तपाईंले डेटासेटलाई म्यानुअली हेर्नु पर्नेछ, न्युरल नेटवर्क लागू गरेर भविष्यवाणी प्राप्त गर्नु पर्नेछ, र त्यसपछि गणना गर्नु पर्नेछ। केही सुझावहरू:\n", "\n", - "* Tensorflow मा, `tf.nn.in_top_k` प्रयोग गर्नुहोस् ताकि `predictions` (मोडेलको आउटपुट) टप-k मा छ कि छैन हेर्न सकियोस् (प्यारामिटरको रूपमा `k=3` पास गर्नुहोस्), `targets` को सन्दर्भमा। यो फङ्सनले बूलियन मानहरूको टेन्सर फर्काउँछ, जसलाई `tf.cast` प्रयोग गरेर `int` मा परिवर्तन गर्न सकिन्छ, र त्यसपछि `tf.reduce_sum` प्रयोग गरेर जम्मा गर्न सकिन्छ।\n", - "* PyTorch मा, तपाईं `torch.topk` फङ्सन प्रयोग गर्न सक्नुहुन्छ ताकि उच्च सम्भावनाका वर्गहरूको इन्डेक्स प्राप्त गर्न सकियोस्, र त्यसपछि सही वर्ग तीमध्ये समावेश छ कि छैन हेर्न सकियोस्। थप सुझावहरूको लागि [यो](https://gist.github.com/weiaicunzai/2a5ae6eac6712c70bde0630f3e76b77b) हेर्नुहोस्।\n" + "* Tensorflow मा, `tf.nn.in_top_k` फङ्सन प्रयोग गरेर हेर्न सकिन्छ कि `predictions` (मोडेलको आउटपुट) टप-k भित्र छ कि छैन (प्यारामिटरको रूपमा `k=3` पास गर्नुहोस्), `targets` को सन्दर्भमा। यो फङ्सनले बूलियन मानहरूको टेन्सर फर्काउँछ, जसलाई `tf.cast` प्रयोग गरेर `int` मा परिवर्तन गर्न सकिन्छ, र त्यसपछि `tf.reduce_sum` प्रयोग गरेर जम्मा गर्न सकिन्छ।\n", + "* PyTorch मा, तपाईं `torch.topk` फङ्सन प्रयोग गरेर उच्च सम्भावनाहरू भएका वर्गहरूको इन्डेक्स प्राप्त गर्न सक्नुहुन्छ, र त्यसपछि सही वर्ग तिनीहरूमा समावेश छ कि छैन हेर्न सक्नुहुन्छ। थप सुझावहरूको लागि [यो](https://gist.github.com/weiaicunzai/2a5ae6eac6712c70bde0630f3e76b77b) हेर्नुहोस्।\n" ] }, { @@ -324,7 +346,7 @@ "source": [ "## वैकल्पिक: बिरालो बनाम कुकुर वर्गीकरण निर्माण गर्नुहोस्\n", "\n", - "हामी पनि हेर्न चाहन्छौं कि हाम्रो द्विपक्षीय बिरालो बनाम कुकुर वर्गीकरण उही डेटासेटमा कति सही हुनेछ। यसलाई गर्नका लागि, हामीले लेबलहरू समायोजन गर्नुपर्छ:\n" + "हामी हाम्रो द्विपक्षीय बिरालो बनाम कुकुर वर्गीकरणको सटीकता सोही डेटासेटमा कस्तो हुन्छ हेर्न चाहन्छौं। यसलाई गर्नका लागि, हामीले लेबलहरू समायोजन गर्न आवश्यक छ:\n" ] }, { @@ -350,7 +372,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n---\n\n**अस्वीकरण**: \nयो दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) प्रयोग गरेर अनुवाद गरिएको हो। हामी शुद्धताको लागि प्रयास गर्छौं, तर कृपया ध्यान दिनुहोस् कि स्वचालित अनुवादमा त्रुटिहरू वा अशुद्धताहरू हुन सक्छ। यसको मूल भाषा मा रहेको मूल दस्तावेज़लाई आधिकारिक स्रोत मानिनुपर्छ। महत्वपूर्ण जानकारीको लागि, व्यावसायिक मानव अनुवाद सिफारिस गरिन्छ। यस अनुवादको प्रयोगबाट उत्पन्न हुने कुनै पनि गलतफहमी वा गलत व्याख्याको लागि हामी जिम्मेवार हुने छैनौं।\n" + "\n---\n\n**अस्वीकरण**: \nयो दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) प्रयोग गरेर अनुवाद गरिएको हो। हामी यथासम्भव शुद्धता सुनिश्चित गर्न प्रयास गर्छौं, तर कृपया ध्यान दिनुहोस् कि स्वचालित अनुवादमा त्रुटिहरू वा अशुद्धताहरू हुन सक्छ। मूल दस्तावेज़ यसको मातृभाषामा आधिकारिक स्रोत मानिनुपर्छ। महत्वपूर्ण जानकारीको लागि, व्यावसायिक मानव अनुवाद सिफारिस गरिन्छ। यस अनुवादको प्रयोगबाट उत्पन्न हुने कुनै पनि गलतफहमी वा गलत व्याख्याको लागि हामी जिम्मेवार हुनेछैनौं।\n" ] } ], @@ -376,8 +398,8 @@ "version": "3.9.5" }, "coopTranslator": { - "original_hash": "1de3ae931831253c3198d899da48bfe5", - "translation_date": "2025-08-28T07:47:42+00:00", + "original_hash": "df7d1f7da8d2617b76acd93115776ca4", + "translation_date": "2025-10-03T14:33:33+00:00", "source_file": "lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb", "language_code": "ne" } diff --git a/translations/ne/lessons/4-ComputerVision/07-ConvNets/lab/README.md b/translations/ne/lessons/4-ComputerVision/07-ConvNets/lab/README.md index 38527726..09c919ff 100644 --- a/translations/ne/lessons/4-ComputerVision/07-ConvNets/lab/README.md +++ b/translations/ne/lessons/4-ComputerVision/07-ConvNets/lab/README.md @@ -1,29 +1,29 @@ -# पाल्तु जनावरहरूको अनुहारको वर्गीकरण +# पाल्तु जनावरको अनुहारको वर्गीकरण [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) बाट ल्याब असाइनमेन्ट। ## कार्य -कल्पना गर्नुहोस् कि तपाईंले पाल्तु जनावरहरूको नर्सरीको लागि सबै जनावरहरूको सूची बनाउन एउटा एप्लिकेसन विकास गर्नुपर्नेछ। यस्तो एप्लिकेसनको एक उत्कृष्ट विशेषता भनेको फोटोबाट स्वचालित रूपमा प्रजाति पत्ता लगाउने क्षमता हुनेछ। यो कार्य न्यूरल नेटवर्कहरूको प्रयोग गरेर सफलतापूर्वक गर्न सकिन्छ। +कल्पना गर्नुहोस् कि तपाईंले पाल्तु जनावरको नर्सरीको लागि सबै जनावरहरूको सूची तयार गर्न एप्लिकेसन विकास गर्नुपर्नेछ। यस्तो एप्लिकेसनको एक उत्कृष्ट विशेषता फोटोबाट स्वतः प्रजाति पत्ता लगाउने क्षमता हुनेछ। यो कार्य न्यूरल नेटवर्कको प्रयोग गरेर सफलतापूर्वक गर्न सकिन्छ। -तपाईंले **Pet Faces** डाटासेट प्रयोग गरेर बिरालो र कुकुरका विभिन्न प्रजातिहरूलाई वर्गीकरण गर्न एक कनभोल्युसनल न्यूरल नेटवर्क प्रशिक्षण गर्नुपर्नेछ। +तपाईंले **Pet Faces** डेटासेटको प्रयोग गरेर बिरालो र कुकुरका विभिन्न प्रजातिहरूलाई वर्गीकरण गर्न एक convolutional neural network प्रशिक्षण गर्नुपर्नेछ। -## डाटासेट +## डेटासेट -हामी **Pet Faces** डाटासेट प्रयोग गर्नेछौं, जुन [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/) पाल्तु जनावरहरूको डाटासेटबाट लिइएको हो। यसमा कुकुर र बिरालोका ३५ विभिन्न प्रजातिहरू समावेश छन्। +हामी [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/) प्रयोग गर्नेछौं, जसमा कुकुर र बिरालोका ३७ विभिन्न प्रजातिहरूका छविहरू समावेश छन्। -![हामीले प्रयोग गर्ने डाटासेट](../../../../../../translated_images/data.50b2a9d5484bdbf0f52f5765b381cec9efe2bd296a98f007f90bedb6ac67f2a8.ne.png) +![हामीले प्रयोग गर्ने डेटासेट](../../../../../../translated_images/data.50b2a9d5484bdbf0f52f5765b381cec9efe2bd296a98f007f90bedb6ac67f2a8.ne.png) -डाटासेट डाउनलोड गर्न, यो कोड स्निपेट प्रयोग गर्नुहोस्: +डेटासेट डाउनलोड गर्न, यो कोड स्निपेट प्रयोग गर्नुहोस्: ```python !wget https://thor.robots.ox.ac.uk/~vgg/data/pets/images.tar.gz @@ -31,13 +31,17 @@ CO_OP_TRANSLATOR_METADATA: !rm images.tar.gz ``` -## नोटबुक सुरु गर्नुहोस् +**नोट:** Oxford-IIIT Pet Dataset का छविहरू फाइलनामद्वारा व्यवस्थित छन् (जस्तै, `Abyssinian_1.jpg`, `Bengal_2.jpg`)। नोटबुकमा यी छविहरूलाई प्रजाति-विशिष्ट उपनिर्देशिकामा वर्गीकरण गर्न कोड समावेश छ, जसले वर्गीकरणलाई सजिलो बनाउँछ। -[PetFaces.ipynb](../../../../../../lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb) खोल्दै ल्याब सुरु गर्नुहोस्। +## प्रारम्भिक नोटबुक -## मुख्य सिकाइ +ल्याब सुरु गर्न [PetFaces.ipynb](PetFaces.ipynb) खोल्नुहोस्। -तपाईंले सुरुबाट नै छविको वर्गीकरणको जटिल समस्या समाधान गर्नुभयो! धेरै वर्गहरू थिए, तर तपाईंले अझै पनि राम्रो सटीकता प्राप्त गर्न सक्नुभयो! साथै, शीर्ष-k सटीकता मापन गर्नु पनि महत्त्वपूर्ण छ, किनभने केही वर्गहरूलाई छुट्याउन मानिसहरूलाई पनि गाह्रो हुन सक्छ। +## मुख्य कुरा + +तपाईंले स्क्र्याचबाट छवि वर्गीकरणको एकदम जटिल समस्या समाधान गर्नुभएको छ! धेरै वर्गहरू थिए, तर तपाईंले अझै पनि उचित शुद्धता प्राप्त गर्न सक्नुभयो! साथै, top-k accuracy मापन गर्नु पनि उपयुक्त हुन्छ, किनकि केही वर्गहरूलाई छुट्याउन मानिसहरूलाई पनि गाह्रो हुन सक्छ। + +--- **अस्वीकरण**: -यो दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) प्रयोग गरी अनुवाद गरिएको हो। हामी यथासम्भव सटीकता सुनिश्चित गर्न प्रयास गर्छौं, तर कृपया ध्यान दिनुहोस् कि स्वचालित अनुवादहरूमा त्रुटि वा अशुद्धता हुन सक्छ। यसको मूल भाषामा रहेको मूल दस्तावेजलाई आधिकारिक स्रोत मानिनुपर्छ। महत्वपूर्ण जानकारीका लागि, व्यावसायिक मानव अनुवाद सिफारिस गरिन्छ। यस अनुवादको प्रयोगबाट उत्पन्न हुने कुनै पनि गलतफहमी वा गलत व्याख्याको लागि हामी जिम्मेवार हुने छैनौं। \ No newline at end of file +यो दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) प्रयोग गरेर अनुवाद गरिएको छ। हामी यथार्थताको लागि प्रयास गर्छौं, तर कृपया ध्यान दिनुहोस् कि स्वचालित अनुवादहरूमा त्रुटिहरू वा अशुद्धताहरू हुन सक्छ। यसको मूल भाषा मा रहेको मूल दस्तावेज़लाई आधिकारिक स्रोत मानिनुपर्छ। महत्वपूर्ण जानकारीको लागि, व्यावसायिक मानव अनुवाद सिफारिस गरिन्छ। यस अनुवादको प्रयोगबाट उत्पन्न हुने कुनै पनि गलतफहमी वा गलत व्याख्याको लागि हामी जिम्मेवार हुने छैनौं। \ No newline at end of file diff --git a/translations/nl/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb b/translations/nl/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb index 768d722c..8a744094 100644 --- a/translations/nl/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb +++ b/translations/nl/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb @@ -10,7 +10,9 @@ "\n", "### Het verkrijgen van de data\n", "\n", - "In deze opdracht richten we ons op een relatief eenvoudige classificatietaak - classificatie van gezichten van huisdieren. Deze dataset bestaat uit uitgeknipte gezichten uit de [Oxford-IIIT Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/). Laten we beginnen met het laden en visualiseren van de dataset.\n" + "In deze opdracht richten we ons op een relatief eenvoudige classificatietaak: de classificatie van gezichten van huisdieren. We maken gebruik van de [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/), die afbeeldingen bevat van 37 verschillende rassen van honden en katten. Laten we beginnen met het downloaden en visualiseren van de dataset.\n", + "\n", + "**Opmerking:** De Oxford-IIIT Pet Dataset bevat volledige afbeeldingen van huisdieren. De afbeeldingen worden in de uitgepakte map georganiseerd per ras.\n" ] }, { @@ -86,6 +88,24 @@ "metadata": {}, "outputs": [], "source": [ + "# Note: The Oxford-IIIT Pet Dataset extracts to a folder named 'images'\n", + "# Images are named by breed (e.g., 'Abyssinian_1.jpg')\n", + "# We need to organize them into breed-specific subdirectories\n", + "import os\n", + "from collections import defaultdict\n", + "\n", + "# Organize images by breed\n", + "if not os.path.exists('petfaces'):\n", + " os.makedirs('petfaces')\n", + " for img_file in os.listdir('images'):\n", + " if img_file.endswith(('.jpg', '.png')):\n", + " # Extract breed name from filename (everything before the last underscore and number)\n", + " breed = '_'.join(img_file.split('_')[:-1])\n", + " breed_dir = os.path.join('petfaces', breed)\n", + " if not os.path.exists(breed_dir):\n", + " os.makedirs(breed_dir)\n", + " os.rename(os.path.join('images', img_file), os.path.join(breed_dir, img_file))\n", + "\n", "for cls in os.listdir('petfaces'):\n", " print(cls)\n", " display_images([Image.open(os.path.join('petfaces',cls,x)) \n", @@ -127,10 +147,10 @@ "## Dataset voorbereiden voor Deep Learning\n", "\n", "Om te beginnen met het trainen van ons neuraal netwerk, moeten we alle afbeeldingen omzetten naar tensors en ook tensors maken die overeenkomen met labels (klassenummers). De meeste frameworks voor neurale netwerken bevatten eenvoudige tools om met afbeeldingen te werken:\n", - "* In Tensorflow kun je `tf.keras.preprocessing.image_dataset_from_directory` gebruiken\n", - "* In PyTorch kun je `torchvision.datasets.ImageFolder` gebruiken\n", + "* In Tensorflow, gebruik `tf.keras.preprocessing.image_dataset_from_directory`\n", + "* In PyTorch, gebruik `torchvision.datasets.ImageFolder`\n", "\n", - "Zoals je hebt gezien in de bovenstaande afbeeldingen, hebben ze allemaal een beeldverhouding die dicht bij vierkant ligt. Daarom moeten we alle afbeeldingen aanpassen naar een vierkante grootte. Daarnaast kunnen we de afbeeldingen organiseren in minibatches.\n" + "Zoals je hebt gezien in de bovenstaande afbeeldingen, hebben ze allemaal een beeldverhouding die dicht bij vierkant ligt, dus we moeten alle afbeeldingen naar een vierkante grootte aanpassen. Daarnaast kunnen we de afbeeldingen organiseren in minibatches.\n" ] }, { @@ -146,7 +166,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Nu moeten we de dataset scheiden in train- en testgedeeltes:\n" + "Nu moeten we de dataset opdelen in train- en testgedeeltes:\n" ] }, { @@ -232,11 +252,11 @@ "\n", "Voor beeldclassificatie kun je het beste een convolutioneel neuraal netwerk met meerdere lagen definiëren. Waar je op moet letten:\n", "* Houd rekening met de piramide-architectuur, d.w.z. het aantal filters moet toenemen naarmate je dieper gaat.\n", - "* Vergeet niet de activatiefuncties tussen de lagen (ReLU) en Max Pooling.\n", + "* Vergeet niet om activatiefuncties tussen de lagen toe te voegen (ReLU) en Max Pooling.\n", "* De uiteindelijke classifier kan met of zonder verborgen lagen zijn, maar het aantal outputneuronen moet gelijk zijn aan het aantal klassen.\n", "\n", - "Een belangrijk punt is om de activatiefunctie in de laatste laag + verliesfunctie correct te krijgen:\n", - "* In Tensorflow kun je `softmax` gebruiken als activatie en `sparse_categorical_crossentropy` als verliesfunctie. Het verschil tussen sparse categorische cross-entropy en de niet-sparse variant is dat de eerste de output verwacht als het nummer van de klasse, en niet als een one-hot vector.\n", + "Een belangrijk punt is om de activatiefunctie in de laatste laag + verliesfunctie correct te kiezen:\n", + "* In Tensorflow kun je `softmax` gebruiken als activatie en `sparse_categorical_crossentropy` als verliesfunctie. Het verschil tussen sparse categorical cross-entropy en de niet-sparse variant is dat de eerste de output verwacht als het nummer van de klasse, en niet als een one-hot vector.\n", "* In PyTorch kun je de laatste laag zonder activatiefunctie hebben en de verliesfunctie `CrossEntropyLoss` gebruiken. Deze functie past automatisch softmax toe.\n" ] }, @@ -253,11 +273,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Het Neuraal Netwerk Trainen\n", + "## Train het Neuraal Netwerk\n", "\n", - "Nu zijn we klaar om het neuraal netwerk te trainen. Verzamel tijdens de training de nauwkeurigheid op zowel de trainings- als testgegevens bij elke epoch, en plot vervolgens de nauwkeurigheid om te zien of er sprake is van overfitting.\n", + "Nu zijn we klaar om het neuraal netwerk te trainen. Tijdens de training, verzamel de nauwkeurigheid op zowel de trainings- als testdata bij elke epoch, en maak vervolgens een grafiek van de nauwkeurigheid om te zien of er sprake is van overfitting.\n", "\n", - "> Om de training te versnellen, moet je een GPU gebruiken als die beschikbaar is. Terwijl TensorFlow/Keras automatisch de GPU zal gebruiken, moet je in PyTorch zowel het model als de data naar de GPU verplaatsen tijdens de training met behulp van de `.to()`-methode om te profiteren van GPU-versnelling.\n" + "> Om de training te versnellen, moet je een GPU gebruiken als deze beschikbaar is. Terwijl TensorFlow/Keras automatisch de GPU zal gebruiken, moet je in PyTorch zowel het model als de data naar de GPU verplaatsen tijdens de training met behulp van de `.to()`-methode om te profiteren van GPU-versnelling.\n" ] }, { @@ -299,16 +319,16 @@ "\n", "## Optioneel: Bereken Top-3 Nauwkeurigheid\n", "\n", - "In deze oefening werkten we met classificatie waarbij het aantal klassen vrij hoog was (35), dus ons resultaat - ongeveer 50% validatienauwkeurigheid - is behoorlijk goed. De standaard ImageNet-dataset heeft zelfs nog meer - 1000 klassen.\n", + "In deze oefening hebben we gewerkt met classificatie waarbij er een behoorlijk groot aantal klassen is (35), dus ons resultaat - ongeveer 50% validatienauwkeurigheid - is best goed. De standaard ImageNet dataset heeft zelfs nog meer - 1000 klassen.\n", "\n", - "In zulke gevallen is het moeilijk om ervoor te zorgen dat het model **altijd** de juiste klasse voorspelt. Er zijn situaties waarin twee rassen erg op elkaar lijken, en het model zeer vergelijkbare waarschijnlijkheden retourneert (bijvoorbeeld 0,45 en 0,43). Als we de standaardnauwkeurigheid meten, wordt dit als een fout beschouwd, ook al heeft het model een zeer kleine fout gemaakt. Daarom meten we vaak een andere metriek - een nauwkeurigheid binnen de top 3 meest waarschijnlijke voorspellingen van het model.\n", + "In zulke gevallen is het moeilijk om ervoor te zorgen dat het model **altijd** de juiste klasse voorspelt. Er zijn situaties waarin twee rassen erg op elkaar lijken en het model zeer vergelijkbare waarschijnlijkheden retourneert (bijvoorbeeld 0.45 en 0.43). Als we de standaard nauwkeurigheid meten, wordt dit als een fout beschouwd, ook al heeft het model slechts een kleine vergissing gemaakt. Daarom meten we vaak een andere metriek - een nauwkeurigheid binnen de top 3 meest waarschijnlijke voorspellingen van het model.\n", "\n", - "We beschouwen het geval als accuraat als het doel-label zich binnen de top 3 voorspellingen van het model bevindt.\n", + "We beschouwen het geval als nauwkeurig als het doel-label zich bevindt binnen de top 3 voorspellingen van het model.\n", "\n", "Om de top-3 nauwkeurigheid op de testdataset te berekenen, moet je handmatig de dataset doorlopen, het neurale netwerk toepassen om de voorspelling te krijgen, en vervolgens de berekeningen uitvoeren. Enkele tips:\n", "\n", - "* In Tensorflow kun je de functie `tf.nn.in_top_k` gebruiken om te controleren of de `predictions` (output van het model) in de top-k zitten (geef `k=3` als parameter), met betrekking tot de `targets`. Deze functie retourneert een tensor van booleaanse waarden, die kunnen worden omgezet naar `int` met behulp van `tf.cast`, en vervolgens kunnen worden opgeteld met `tf.reduce_sum`.\n", - "* In PyTorch kun je de functie `torch.topk` gebruiken om indices te krijgen van klassen met de hoogste waarschijnlijkheden, en vervolgens controleren of de juiste klasse daartussen zit. Zie [dit](https://gist.github.com/weiaicunzai/2a5ae6eac6712c70bde0630f3e76b77b) voor meer tips.\n" + "* In Tensorflow kun je de functie `tf.nn.in_top_k` gebruiken om te controleren of de `predictions` (output van het model) zich in de top-k bevinden (geef `k=3` als parameter), met betrekking tot de `targets`. Deze functie retourneert een tensor van booleaanse waarden, die kan worden omgezet naar `int` met `tf.cast`, en vervolgens opgeteld met `tf.reduce_sum`.\n", + "* In PyTorch kun je de functie `torch.topk` gebruiken om indices te krijgen van klassen met de hoogste waarschijnlijkheden, en vervolgens controleren of de juiste klasse daartussen zit. Zie [deze](https://gist.github.com/weiaicunzai/2a5ae6eac6712c70bde0630f3e76b77b) voor meer tips.\n" ] }, { @@ -326,7 +346,7 @@ "source": [ "## Optioneel: Bouw een classificatie voor katten versus honden\n", "\n", - "We willen ook zien hoe nauwkeurig onze binaire classificatie van katten versus honden zou zijn op dezelfde dataset. Om dit te doen, moeten we de labels aanpassen:\n" + "We willen ook zien hoe nauwkeurig onze binaire classificatie voor katten versus honden zou zijn op dezelfde dataset. Om dit te doen, moeten we de labels aanpassen:\n" ] }, { @@ -352,7 +372,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n---\n\n**Disclaimer**: \nDit document is vertaald met behulp van de AI-vertalingsservice [Co-op Translator](https://github.com/Azure/co-op-translator). Hoewel we streven naar nauwkeurigheid, dient u zich ervan bewust te zijn dat geautomatiseerde vertalingen fouten of onnauwkeurigheden kunnen bevatten. Het originele document in zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling.\n" + "\n---\n\n**Disclaimer**: \nDit document is vertaald met behulp van de AI-vertalingsservice [Co-op Translator](https://github.com/Azure/co-op-translator). Hoewel we streven naar nauwkeurigheid, dient u zich ervan bewust te zijn dat geautomatiseerde vertalingen fouten of onnauwkeurigheden kunnen bevatten. Het originele document in de oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling.\n" ] } ], @@ -378,8 +398,8 @@ "version": "3.9.5" }, "coopTranslator": { - "original_hash": "1de3ae931831253c3198d899da48bfe5", - "translation_date": "2025-08-28T20:30:46+00:00", + "original_hash": "df7d1f7da8d2617b76acd93115776ca4", + "translation_date": "2025-10-03T14:40:44+00:00", "source_file": "lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb", "language_code": "nl" } diff --git a/translations/nl/lessons/4-ComputerVision/07-ConvNets/lab/README.md b/translations/nl/lessons/4-ComputerVision/07-ConvNets/lab/README.md index 7bdbafd2..6005fe1a 100644 --- a/translations/nl/lessons/4-ComputerVision/07-ConvNets/lab/README.md +++ b/translations/nl/lessons/4-ComputerVision/07-ConvNets/lab/README.md @@ -1,15 +1,15 @@ # Classificatie van Huisdiergezichten -Labopdracht uit de [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners). +Labopdracht uit [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners). ## Taak @@ -19,11 +19,11 @@ Je moet een convolutioneel neuraal netwerk trainen om verschillende rassen van k ## De Dataset -We zullen de **Pet Faces** dataset gebruiken, afgeleid van de [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/) huisdieren-dataset. Deze bevat 35 verschillende rassen van honden en katten. +We gebruiken de [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/), die afbeeldingen bevat van 37 verschillende rassen van honden en katten. ![Dataset waarmee we werken](../../../../../../translated_images/data.50b2a9d5484bdbf0f52f5765b381cec9efe2bd296a98f007f90bedb6ac67f2a8.nl.png) -Gebruik de volgende codefragment om de dataset te downloaden: +Om de dataset te downloaden, gebruik deze codefragment: ```python !wget https://thor.robots.ox.ac.uk/~vgg/data/pets/images.tar.gz @@ -31,15 +31,17 @@ Gebruik de volgende codefragment om de dataset te downloaden: !rm images.tar.gz ``` +**Opmerking:** De afbeeldingen in de Oxford-IIIT Pet Dataset zijn georganiseerd op bestandsnaam (bijv. `Abyssinian_1.jpg`, `Bengal_2.jpg`). Het notebook bevat code om deze afbeeldingen te organiseren in ras-specifieke submappen voor eenvoudigere classificatie. + ## Start Notebook -Begin het lab door [PetFaces.ipynb](PetFaces.ipynb) te openen. +Begin de labopdracht door [PetFaces.ipynb](PetFaces.ipynb) te openen. ## Belangrijkste Leerpunten -Je hebt een relatief complex probleem van beeldclassificatie vanaf nul opgelost! Er waren behoorlijk veel klassen, en je hebt toch een redelijke nauwkeurigheid weten te behalen! Het is ook logisch om de top-k nauwkeurigheid te meten, omdat het gemakkelijk is om sommige klassen te verwarren die zelfs voor mensen niet duidelijk verschillend zijn. +Je hebt een relatief complex probleem van beeldclassificatie vanaf nul opgelost! Er waren behoorlijk veel klassen, en je hebt toch een redelijke nauwkeurigheid weten te behalen! Het is ook zinvol om de top-k nauwkeurigheid te meten, omdat het gemakkelijk is om sommige klassen te verwarren die zelfs voor mensen niet duidelijk verschillend zijn. --- **Disclaimer**: -Dit document is vertaald met behulp van de AI-vertalingsservice [Co-op Translator](https://github.com/Azure/co-op-translator). Hoewel we ons best doen voor nauwkeurigheid, dient u zich ervan bewust te zijn dat geautomatiseerde vertalingen fouten of onnauwkeurigheden kunnen bevatten. Het originele document in zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. \ No newline at end of file +Dit document is vertaald met behulp van de AI-vertalingsservice [Co-op Translator](https://github.com/Azure/co-op-translator). Hoewel we streven naar nauwkeurigheid, dient u zich ervan bewust te zijn dat geautomatiseerde vertalingen fouten of onnauwkeurigheden kunnen bevatten. Het originele document in de oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling. \ No newline at end of file diff --git a/translations/no/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb b/translations/no/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb index 7569e8a4..50185ce7 100644 --- a/translations/no/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb +++ b/translations/no/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb @@ -10,7 +10,9 @@ "\n", "### Hente data\n", "\n", - "I denne oppgaven skal vi fokusere på en relativt enkel klassifiseringsoppgave – klassifisering av kjæledyrs ansikter. Dette datasettet består av utskårne ansikter fra [Oxford-IIIT Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/). La oss starte med å laste inn og visualisere datasettet.\n" + "I denne oppgaven skal vi fokusere på en relativt enkel klassifiseringsoppgave – klassifisering av kjæledyrs ansikter. Vi skal bruke [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/), som inneholder bilder av 37 forskjellige hunde- og katteraser. La oss starte med å laste ned og visualisere datasettet.\n", + "\n", + "**Merk:** Oxford-IIIT Pet Dataset inneholder bilder av hele kjæledyret. Bildene vil være organisert etter rase i den utpakkede mappen.\n" ] }, { @@ -77,7 +79,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Nå la oss gå gjennom alle underkatalogene for klasser og plotte de første bildene av hver klasse:\n" + "La oss nå gå gjennom alle klassens underkataloger og plotte de første bildene av hver klasse:\n" ] }, { @@ -86,6 +88,24 @@ "metadata": {}, "outputs": [], "source": [ + "# Note: The Oxford-IIIT Pet Dataset extracts to a folder named 'images'\n", + "# Images are named by breed (e.g., 'Abyssinian_1.jpg')\n", + "# We need to organize them into breed-specific subdirectories\n", + "import os\n", + "from collections import defaultdict\n", + "\n", + "# Organize images by breed\n", + "if not os.path.exists('petfaces'):\n", + " os.makedirs('petfaces')\n", + " for img_file in os.listdir('images'):\n", + " if img_file.endswith(('.jpg', '.png')):\n", + " # Extract breed name from filename (everything before the last underscore and number)\n", + " breed = '_'.join(img_file.split('_')[:-1])\n", + " breed_dir = os.path.join('petfaces', breed)\n", + " if not os.path.exists(breed_dir):\n", + " os.makedirs(breed_dir)\n", + " os.rename(os.path.join('images', img_file), os.path.join(breed_dir, img_file))\n", + "\n", "for cls in os.listdir('petfaces'):\n", " print(cls)\n", " display_images([Image.open(os.path.join('petfaces',cls,x)) \n", @@ -95,7 +115,9 @@ { "cell_type": "markdown", "metadata": {}, - "source": [] + "source": [ + "La oss også definere antall klasser i datasettet vårt:\n" + ] }, { "cell_type": "code", @@ -128,7 +150,7 @@ "* I Tensorflow, bruk `tf.keras.preprocessing.image_dataset_from_directory`\n", "* I PyTorch, bruk `torchvision.datasets.ImageFolder`\n", "\n", - "Som du har sett fra bildene ovenfor, har alle en nær kvadratisk bildeforhold, så vi må endre størrelsen på alle bilder til kvadratisk størrelse. I tillegg kan vi organisere bildene i minibatcher.\n" + "Som du har sett fra bildene ovenfor, har alle en bildeforhold som er nær kvadratisk, så vi må endre størrelsen på alle bilder til kvadratisk størrelse. I tillegg kan vi organisere bildene i minibatcher.\n" ] }, { @@ -164,7 +186,7 @@ " * `(batch_size,image_size,image_size,3)` for Tensorflow, `batch_size,3,image_size,image_size` for PyTorch\n", " * `batch_size` for etiketter\n", " \n", - " Etiketter bør inneholde antall klasser.\n" + " Etiketter bør inneholde klassenumre.\n" ] }, { @@ -228,14 +250,14 @@ "source": [ "## Definer et nevralt nettverk\n", "\n", - "For bildeklassifisering bør du sannsynligvis definere et konvolusjonelt nevralt nettverk med flere lag. Hva du bør være oppmerksom på:\n", + "For bildeklassifisering bør du sannsynligvis definere et konvolusjonsnevralt nettverk med flere lag. Hva du bør være oppmerksom på:\n", "* Husk pyramidearkitekturen, dvs. antall filtre bør øke jo dypere du går.\n", "* Ikke glem aktiveringsfunksjoner mellom lagene (ReLU) og Max Pooling.\n", - "* Den endelige klassifisereren kan være med eller uten skjulte lag, men antall utgangsnevroner bør være lik antall klasser.\n", + "* Den endelige klassifisereren kan være med eller uten skjulte lag, men antall utgangsneuroner bør være lik antall klasser.\n", "\n", "En viktig ting er å få aktiveringsfunksjonen på det siste laget + tapsfunksjonen riktig:\n", - "* I Tensorflow kan du bruke `softmax` som aktivering og `sparse_categorical_crossentropy` som tap. Forskjellen mellom sparse kategorisk krysstap og ikke-sparse er at den første forventer utgangen som klassens nummer, og ikke som en one-hot vektor.\n", - "* I PyTorch kan du ha det siste laget uten aktiveringsfunksjon og bruke `CrossEntropyLoss` som tapsfunksjon. Denne funksjonen anvender softmax automatisk.\n" + "* I Tensorflow kan du bruke `softmax` som aktivering og `sparse_categorical_crossentropy` som tapsfunksjon. Forskjellen mellom sparse categorical cross-entropy og den ikke-sparse er at den førstnevnte forventer utgangen som klassens nummer, og ikke som en one-hot vektor.\n", + "* I PyTorch kan du ha det siste laget uten aktiveringsfunksjon og bruke tapsfunksjonen `CrossEntropyLoss`. Denne funksjonen anvender softmax automatisk.\n" ] }, { @@ -253,9 +275,9 @@ "source": [ "## Tren det nevrale nettverket\n", "\n", - "Nå er vi klare til å trene det nevrale nettverket. Under treningen, samle inn nøyaktighet på trenings- og testdata for hver epoke, og deretter plott nøyaktigheten for å se om det oppstår overtilpasning.\n", + "Nå er vi klare til å trene det nevrale nettverket. Under treningen, vennligst samle inn nøyaktighet på trenings- og testdata for hver epoke, og deretter plott nøyaktigheten for å se om det er overtilpasning.\n", "\n", - "> For å raskere gjennomføre treningen, bør du bruke GPU hvis tilgjengelig. Mens TensorFlow/Keras automatisk vil bruke GPU, må du i PyTorch flytte både modellen og dataene til GPU under treningen ved hjelp av `.to()`-metoden for å dra nytte av GPU-akselerasjon.\n" + "> For å øke hastigheten på treningen, må du bruke GPU hvis tilgjengelig. Mens TensorFlow/Keras automatisk vil bruke GPU, må du i PyTorch flytte både modellen og dataene til GPU under treningen ved hjelp av `.to()`-metoden for å dra nytte av GPU-akselerasjon.\n" ] }, { @@ -299,13 +321,13 @@ "\n", "I denne øvelsen jobbet vi med klassifisering med et ganske høyt antall klasser (35), så vårt resultat - rundt 50% valideringsnøyaktighet - er ganske bra. Det standard ImageNet-datasettet har enda flere - 1000 klasser.\n", "\n", - "I slike tilfeller er det vanskelig å sikre at modellen **alltid** korrekt forutsier klassen. Det finnes tilfeller der to raser er veldig like hverandre, og modellen returnerer svært like sannsynligheter (f.eks. 0.45 og 0.43). Hvis vi måler standard nøyaktighet, vil det bli betraktet som en feil, selv om modellen gjorde en veldig liten feil. Derfor måler vi ofte en annen metrikk - en nøyaktighet innenfor de tre mest sannsynlige forutsigelsene til modellen.\n", + "I slike tilfeller er det vanskelig å sikre at modellen **alltid** korrekt forutsier klassen. Det finnes tilfeller der to raser er svært like hverandre, og modellen returnerer svært like sannsynligheter (f.eks. 0.45 og 0.43). Hvis vi måler standard nøyaktighet, vil dette bli betraktet som en feil, selv om modellen gjorde en veldig liten feil. Derfor måler vi ofte en annen metrikk - en nøyaktighet innenfor de tre mest sannsynlige forutsigelsene til modellen.\n", "\n", "Vi anser tilfellet som korrekt hvis måletiketten er inneholdt blant de tre mest sannsynlige modellforutsigelsene.\n", "\n", - "For å beregne top-3 nøyaktighet på testdatasettet, må du manuelt gå gjennom datasettet, bruke nevralt nettverk for å få forutsigelsen, og deretter gjøre beregningene. Noen tips:\n", + "For å beregne top-3-nøyaktighet på testdatasettet, må du manuelt gå gjennom datasettet, bruke nevralt nettverk for å få forutsigelsen, og deretter gjøre beregningene. Noen tips:\n", "\n", - "* I Tensorflow, bruk funksjonen `tf.nn.in_top_k` for å se om `predictions` (utgangen fra modellen) er blant de topp-k (pass `k=3` som parameter), med hensyn til `targets`. Denne funksjonen returnerer en tensor av boolske verdier, som kan konverteres til `int` ved hjelp av `tf.cast`, og deretter akkumuleres ved hjelp av `tf.reduce_sum`.\n", + "* I Tensorflow, bruk funksjonen `tf.nn.in_top_k` for å se om `predictions` (modellens output) er blant de topp-k (pass `k=3` som parameter), med hensyn til `targets`. Denne funksjonen returnerer en tensor av boolske verdier, som kan konverteres til `int` ved hjelp av `tf.cast`, og deretter akkumuleres ved hjelp av `tf.reduce_sum`.\n", "* I PyTorch, kan du bruke funksjonen `torch.topk` for å få indekser for klasser med høyest sannsynligheter, og deretter se om den korrekte klassen tilhører dem. Se [dette](https://gist.github.com/weiaicunzai/2a5ae6eac6712c70bde0630f3e76b77b) for flere tips.\n" ] }, @@ -350,7 +372,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n---\n\n**Ansvarsfraskrivelse**: \nDette dokumentet er oversatt ved hjelp av AI-oversettelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selv om vi streber etter nøyaktighet, vær oppmerksom på at automatiserte oversettelser kan inneholde feil eller unøyaktigheter. Det originale dokumentet på sitt opprinnelige språk bør anses som den autoritative kilden. For kritisk informasjon anbefales profesjonell menneskelig oversettelse. Vi er ikke ansvarlige for eventuelle misforståelser eller feiltolkninger som oppstår ved bruk av denne oversettelsen.\n" + "\n---\n\n**Ansvarsfraskrivelse**: \nDette dokumentet er oversatt ved hjelp av AI-oversettelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selv om vi tilstreber nøyaktighet, vær oppmerksom på at automatiserte oversettelser kan inneholde feil eller unøyaktigheter. Det originale dokumentet på sitt opprinnelige språk bør anses som den autoritative kilden. For kritisk informasjon anbefales profesjonell menneskelig oversettelse. Vi er ikke ansvarlige for misforståelser eller feiltolkninger som oppstår ved bruk av denne oversettelsen.\n" ] } ], @@ -376,8 +398,8 @@ "version": "3.9.5" }, "coopTranslator": { - "original_hash": "1de3ae931831253c3198d899da48bfe5", - "translation_date": "2025-08-28T16:25:02+00:00", + "original_hash": "df7d1f7da8d2617b76acd93115776ca4", + "translation_date": "2025-10-03T14:39:40+00:00", "source_file": "lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb", "language_code": "no" } diff --git a/translations/no/lessons/4-ComputerVision/07-ConvNets/lab/README.md b/translations/no/lessons/4-ComputerVision/07-ConvNets/lab/README.md index 70bc621d..75ddc421 100644 --- a/translations/no/lessons/4-ComputerVision/07-ConvNets/lab/README.md +++ b/translations/no/lessons/4-ComputerVision/07-ConvNets/lab/README.md @@ -1,8 +1,8 @@ # Klasyfikacja Twarzy Zwierząt Domowych -Zadanie laboratoryjne z [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners). +Zadanie laboratoryjne z [Kursu AI dla Początkujących](https://github.com/microsoft/ai-for-beginners). ## Zadanie -Wyobraź sobie, że musisz stworzyć aplikację dla przedszkola dla zwierząt, która kataloguje wszystkie zwierzęta. Jedną z świetnych funkcji takiej aplikacji byłoby automatyczne rozpoznawanie rasy na podstawie fotografii. Można to skutecznie osiągnąć za pomocą sieci neuronowych. +Wyobraź sobie, że musisz stworzyć aplikację dla przedszkola dla zwierząt, aby katalogować wszystkie zwierzęta. Jedną z świetnych funkcji takiej aplikacji byłoby automatyczne rozpoznawanie rasy na podstawie fotografii. Można to skutecznie osiągnąć za pomocą sieci neuronowych. Twoim zadaniem jest wytrenowanie konwolucyjnej sieci neuronowej do klasyfikacji różnych ras kotów i psów, korzystając z zestawu danych **Pet Faces**. ## Zestaw Danych -Użyjemy zestawu danych **Pet Faces**, który pochodzi z [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/) pets dataset. Zawiera on 35 różnych ras psów i kotów. +Użyjemy [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/), który zawiera obrazy 37 różnych ras psów i kotów. -![Zestaw danych, z którym będziemy pracować](../../../../../../lessons/4-ComputerVision/07-ConvNets/lab/images/data.png) +![Zestaw danych, z którym będziemy pracować](../../../../../../translated_images/data.50b2a9d5484bdbf0f52f5765b381cec9efe2bd296a98f007f90bedb6ac67f2a8.pl.png) Aby pobrać zestaw danych, użyj tego fragmentu kodu: @@ -31,13 +31,17 @@ Aby pobrać zestaw danych, użyj tego fragmentu kodu: !rm images.tar.gz ``` +**Uwaga:** Obrazy w zestawie danych Oxford-IIIT Pet Dataset są zorganizowane według nazw plików (np. `Abyssinian_1.jpg`, `Bengal_2.jpg`). Notebook zawiera kod do organizacji tych obrazów w podkatalogi specyficzne dla ras, co ułatwia klasyfikację. + ## Rozpoczęcie Pracy z Notebookiem -Rozpocznij pracę z laboratorium, otwierając [PetFaces.ipynb](../../../../../../lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb) +Rozpocznij pracę z laboratorium, otwierając [PetFaces.ipynb](PetFaces.ipynb) ## Wnioski -Rozwiązałeś stosunkowo złożony problem klasyfikacji obrazów od podstaw! Było całkiem sporo klas, a mimo to udało Ci się osiągnąć rozsądną dokładność! Warto również zmierzyć top-k accuracy, ponieważ łatwo pomylić niektóre klasy, które nawet dla ludzi nie są wyraźnie różne. +Rozwiązałeś stosunkowo złożony problem klasyfikacji obrazów od podstaw! Było całkiem sporo klas, a mimo to udało Ci się osiągnąć rozsądną dokładność! Warto również zmierzyć dokładność top-k, ponieważ łatwo pomylić niektóre klasy, które nawet dla ludzi nie są wyraźnie różne. + +--- **Zastrzeżenie**: -Ten dokument został przetłumaczony za pomocą usługi tłumaczenia AI [Co-op Translator](https://github.com/Azure/co-op-translator). Chociaż dokładamy wszelkich starań, aby zapewnić poprawność tłumaczenia, prosimy pamiętać, że automatyczne tłumaczenia mogą zawierać błędy lub nieścisłości. Oryginalny dokument w jego rodzimym języku powinien być uznawany za autorytatywne źródło. W przypadku informacji o kluczowym znaczeniu zaleca się skorzystanie z profesjonalnego tłumaczenia przez człowieka. Nie ponosimy odpowiedzialności za jakiekolwiek nieporozumienia lub błędne interpretacje wynikające z użycia tego tłumaczenia. \ No newline at end of file +Ten dokument został przetłumaczony za pomocą usługi tłumaczenia AI [Co-op Translator](https://github.com/Azure/co-op-translator). Chociaż dokładamy wszelkich starań, aby tłumaczenie było precyzyjne, prosimy pamiętać, że automatyczne tłumaczenia mogą zawierać błędy lub nieścisłości. Oryginalny dokument w jego języku źródłowym powinien być uznawany za autorytatywne źródło. W przypadku informacji o kluczowym znaczeniu zaleca się skorzystanie z profesjonalnego tłumaczenia wykonanego przez człowieka. Nie ponosimy odpowiedzialności za jakiekolwiek nieporozumienia lub błędne interpretacje wynikające z użycia tego tłumaczenia. \ No newline at end of file diff --git a/translations/pt/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb b/translations/pt/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb index e0b6068e..2dddec56 100644 --- a/translations/pt/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb +++ b/translations/pt/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb @@ -10,7 +10,9 @@ "\n", "### Obtendo os Dados\n", "\n", - "Neste trabalho, vamos focar numa tarefa de classificação relativamente simples - classificação de rostos de animais de estimação. Este conjunto de dados consiste em recortes de rostos do [Conjunto de Dados Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/). Vamos começar por carregar e visualizar o conjunto de dados.\n" + "Neste trabalho, vamos concentrar-nos numa tarefa de classificação relativamente simples - a classificação de rostos de animais de estimação. Utilizaremos o [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/), que contém imagens de 37 raças diferentes de cães e gatos. Vamos começar por fazer o download e visualizar o conjunto de dados.\n", + "\n", + "**Nota:** O Oxford-IIIT Pet Dataset contém imagens completas de animais de estimação. As imagens serão organizadas por raça na pasta extraída.\n" ] }, { @@ -77,7 +79,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Agora vamos percorrer todos os subdiretórios de classes e plotar as primeiras imagens de cada classe:\n" + "Agora vamos percorrer todos os subdiretórios das classes e plotar as primeiras imagens de cada classe:\n" ] }, { @@ -86,6 +88,24 @@ "metadata": {}, "outputs": [], "source": [ + "# Note: The Oxford-IIIT Pet Dataset extracts to a folder named 'images'\n", + "# Images are named by breed (e.g., 'Abyssinian_1.jpg')\n", + "# We need to organize them into breed-specific subdirectories\n", + "import os\n", + "from collections import defaultdict\n", + "\n", + "# Organize images by breed\n", + "if not os.path.exists('petfaces'):\n", + " os.makedirs('petfaces')\n", + " for img_file in os.listdir('images'):\n", + " if img_file.endswith(('.jpg', '.png')):\n", + " # Extract breed name from filename (everything before the last underscore and number)\n", + " breed = '_'.join(img_file.split('_')[:-1])\n", + " breed_dir = os.path.join('petfaces', breed)\n", + " if not os.path.exists(breed_dir):\n", + " os.makedirs(breed_dir)\n", + " os.rename(os.path.join('images', img_file), os.path.join(breed_dir, img_file))\n", + "\n", "for cls in os.listdir('petfaces'):\n", " print(cls)\n", " display_images([Image.open(os.path.join('petfaces',cls,x)) \n", @@ -124,13 +144,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Preparar o conjunto de dados para Deep Learning\n", + "## Preparação do conjunto de dados para Deep Learning\n", "\n", "Para começar a treinar a nossa rede neural, precisamos converter todas as imagens em tensores e também criar tensores correspondentes aos rótulos (números das classes). A maioria dos frameworks de redes neurais contém ferramentas simples para lidar com imagens:\n", "* No Tensorflow, use `tf.keras.preprocessing.image_dataset_from_directory`\n", "* No PyTorch, use `torchvision.datasets.ImageFolder`\n", "\n", - "Como pode ver nas imagens acima, todas têm uma proporção próxima de quadrado, por isso precisamos redimensionar todas as imagens para um tamanho quadrado. Além disso, podemos organizar as imagens em minibatches.\n" + "Como pode ver nas imagens acima, todas têm uma proporção próxima de quadrada, por isso precisamos redimensionar todas as imagens para um tamanho quadrado. Além disso, podemos organizar as imagens em minibatches.\n" ] }, { @@ -166,7 +186,7 @@ " * `(batch_size,image_size,image_size,3)` para Tensorflow, `batch_size,3,image_size,image_size` para PyTorch\n", " * `batch_size` para Labels\n", " \n", - " Os Labels devem conter os números das classes.\n" + " Os Labels devem conter números das classes.\n" ] }, { @@ -230,14 +250,14 @@ "source": [ "## Definir uma rede neural\n", "\n", - "Para classificação de imagens, provavelmente deve-se definir uma rede neural convolucional com várias camadas. O que deve ter em atenção:\n", + "Para classificação de imagens, é recomendável definir uma rede neural convolucional com várias camadas. O que deve ter em atenção:\n", "* Tenha em mente a arquitetura em pirâmide, ou seja, o número de filtros deve aumentar à medida que aprofunda.\n", "* Não se esqueça das funções de ativação entre as camadas (ReLU) e do Max Pooling.\n", "* O classificador final pode ter ou não camadas ocultas, mas o número de neurónios de saída deve ser igual ao número de classes.\n", "\n", "É importante acertar na função de ativação da última camada + função de perda:\n", - "* No Tensorflow, pode usar `softmax` como ativação e `sparse_categorical_crossentropy` como função de perda. A diferença entre a perda categórica cruzada esparsa e a não esparsa é que a primeira espera a saída como o número da classe, e não como um vetor one-hot.\n", - "* No PyTorch, pode ter a última camada sem função de ativação e usar a função de perda `CrossEntropyLoss`. Esta função aplica softmax automaticamente.\n" + "* No Tensorflow, pode usar `softmax` como função de ativação e `sparse_categorical_crossentropy` como função de perda. A diferença entre sparse categorical cross-entropy e a versão não-sparse é que a primeira espera a saída como o número da classe, e não como um vetor one-hot.\n", + "* No PyTorch, pode ter a camada final sem função de ativação e usar a função de perda `CrossEntropyLoss`. Esta função aplica softmax automaticamente.\n" ] }, { @@ -257,7 +277,7 @@ "\n", "Agora estamos prontos para treinar a rede neural. Durante o treino, por favor, recolha a precisão nos dados de treino e teste em cada época e, em seguida, faça um gráfico da precisão para verificar se há overfitting.\n", "\n", - "> Para acelerar o treino, é necessário usar GPU, se disponível. Enquanto o TensorFlow/Keras utiliza automaticamente a GPU, no PyTorch é necessário mover tanto o modelo como os dados para a GPU durante o treino utilizando o método `.to()` para aproveitar a aceleração da GPU.\n" + "> Para acelerar o treino, é necessário usar GPU, se disponível. Enquanto o TensorFlow/Keras utiliza automaticamente a GPU, no PyTorch é necessário mover tanto o modelo como os dados para a GPU durante o treino utilizando o método `.to()` para tirar proveito da aceleração da GPU.\n" ] }, { @@ -297,18 +317,18 @@ "source": [ "O que pode dizer sobre overfitting? O que pode ser feito para melhorar a precisão do modelo?\n", "\n", - "## Opcional: Calcular a Precisão Top3\n", + "## Opcional: Calcular Top3 Accuracy\n", "\n", "Neste exercício, estávamos a lidar com classificação com um número bastante elevado de classes (35), por isso o nosso resultado - cerca de 50% de precisão na validação - é bastante bom. O conjunto de dados padrão do ImageNet tem ainda mais - 1000 classes.\n", "\n", - "Nestes casos, é difícil garantir que o modelo **sempre** prevê corretamente a classe. Há situações em que duas raças são muito semelhantes entre si, e o modelo retorna probabilidades muito próximas (por exemplo, 0.45 e 0.43). Se medirmos a precisão padrão, isso será considerado um erro, mesmo que o modelo tenha cometido um erro muito pequeno. Por isso, muitas vezes medimos outra métrica - uma precisão dentro das 3 previsões mais prováveis do modelo.\n", + "Nestes casos, é difícil garantir que o modelo **sempre** prevê corretamente a classe. Há situações em que duas raças são muito semelhantes entre si, e o modelo devolve probabilidades muito próximas (por exemplo, 0.45 e 0.43). Se medirmos a precisão padrão, será considerado um erro, mesmo que o modelo tenha cometido um erro muito pequeno. Por isso, muitas vezes medimos outra métrica - uma precisão dentro das 3 previsões mais prováveis do modelo.\n", "\n", - "Consideramos o caso como correto se o rótulo alvo estiver contido nas 3 principais previsões do modelo.\n", + "Consideramos o caso como correto se o rótulo alvo estiver contido nas 3 previsões principais do modelo.\n", "\n", - "Para calcular a precisão top-3 no conjunto de dados de teste, é necessário percorrer manualmente o conjunto de dados, aplicar a rede neural para obter a previsão e, em seguida, fazer os cálculos. Algumas dicas:\n", + "Para calcular a top-3 accuracy no conjunto de dados de teste, é necessário percorrer manualmente o conjunto de dados, aplicar a rede neural para obter a previsão e depois fazer os cálculos. Algumas dicas:\n", "\n", - "* No Tensorflow, use a função `tf.nn.in_top_k` para verificar se as `predictions` (saída do modelo) estão no top-k (passe `k=3` como parâmetro), em relação aos `targets`. Esta função retorna um tensor de valores booleanos, que pode ser convertido em `int` usando `tf.cast`, e depois acumulado usando `tf.reduce_sum`.\n", - "* No PyTorch, pode usar a função `torch.topk` para obter os índices das classes com maiores probabilidades e, em seguida, verificar se a classe correta pertence a elas. Veja [isto](https://gist.github.com/weiaicunzai/2a5ae6eac6712c70bde0630f3e76b77b) para mais dicas.\n" + "* No Tensorflow, use a função `tf.nn.in_top_k` para verificar se as `predictions` (saída do modelo) estão no top-k (passe `k=3` como parâmetro), em relação aos `targets`. Esta função devolve um tensor de valores booleanos, que pode ser convertido em `int` usando `tf.cast`, e depois acumulado usando `tf.reduce_sum`.\n", + "* No PyTorch, pode usar a função `torch.topk` para obter os índices das classes com maiores probabilidades e depois verificar se a classe correta pertence a elas. Veja [isto](https://gist.github.com/weiaicunzai/2a5ae6eac6712c70bde0630f3e76b77b) para mais dicas.\n" ] }, { @@ -352,7 +372,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n---\n\n**Aviso Legal**: \nEste documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, é importante notar que traduções automáticas podem conter erros ou imprecisões. O documento original na sua língua nativa deve ser considerado a fonte autoritária. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações incorretas decorrentes da utilização desta tradução.\n" + "\n---\n\n**Aviso**: \nEste documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos pela precisão, tenha em atenção que traduções automáticas podem conter erros ou imprecisões. O documento original na sua língua nativa deve ser considerado a fonte autoritária. Para informações críticas, recomenda-se uma tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações incorretas decorrentes da utilização desta tradução.\n" ] } ], @@ -378,8 +398,8 @@ "version": "3.9.5" }, "coopTranslator": { - "original_hash": "1de3ae931831253c3198d899da48bfe5", - "translation_date": "2025-08-31T11:38:33+00:00", + "original_hash": "df7d1f7da8d2617b76acd93115776ca4", + "translation_date": "2025-10-03T14:34:44+00:00", "source_file": "lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb", "language_code": "pt" } diff --git a/translations/pt/lessons/4-ComputerVision/07-ConvNets/lab/README.md b/translations/pt/lessons/4-ComputerVision/07-ConvNets/lab/README.md index 59ebc38a..9d0bb91f 100644 --- a/translations/pt/lessons/4-ComputerVision/07-ConvNets/lab/README.md +++ b/translations/pt/lessons/4-ComputerVision/07-ConvNets/lab/README.md @@ -1,27 +1,27 @@ # Classificação de Rostos de Animais de Estimação -Trabalho de Laboratório do [Currículo de IA para Iniciantes](https://github.com/microsoft/ai-for-beginners). +Trabalho de laboratório do [Currículo de IA para Iniciantes](https://github.com/microsoft/ai-for-beginners). ## Tarefa Imagine que precisa desenvolver uma aplicação para um berçário de animais de estimação para catalogar todos os animais. Uma das grandes funcionalidades de tal aplicação seria identificar automaticamente a raça a partir de uma fotografia. Isto pode ser feito com sucesso utilizando redes neuronais. -Precisa treinar uma rede neuronal convolucional para classificar diferentes raças de cães e gatos utilizando o dataset **Pet Faces**. +Precisa treinar uma rede neuronal convolucional para classificar diferentes raças de gatos e cães utilizando o dataset **Pet Faces**. ## O Dataset -Vamos utilizar o dataset **Pet Faces**, derivado do dataset de animais de estimação [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/). Este contém 35 raças diferentes de cães e gatos. +Vamos utilizar o [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/), que contém imagens de 37 raças diferentes de cães e gatos. -![Dataset com o qual iremos trabalhar](../../../../../../lessons/4-ComputerVision/07-ConvNets/lab/images/data.png) +![Dataset com que iremos trabalhar](../../../../../../translated_images/data.50b2a9d5484bdbf0f52f5765b381cec9efe2bd296a98f007f90bedb6ac67f2a8.pt.png) Para descarregar o dataset, utilize este trecho de código: @@ -31,13 +31,17 @@ Para descarregar o dataset, utilize este trecho de código: !rm images.tar.gz ``` +**Nota:** As imagens do Oxford-IIIT Pet Dataset estão organizadas por nome de ficheiro (por exemplo, `Abyssinian_1.jpg`, `Bengal_2.jpg`). O notebook inclui código para organizar estas imagens em subdiretórios específicos de cada raça para facilitar a classificação. + ## Notebook Inicial -Comece o laboratório abrindo [PetFaces.ipynb](../../../../../../lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb) +Comece o laboratório abrindo [PetFaces.ipynb](PetFaces.ipynb) ## Conclusão Conseguiu resolver um problema relativamente complexo de classificação de imagens do zero! Havia bastantes classes, e ainda assim conseguiu obter uma precisão razoável! Também faz sentido medir a precisão top-k, porque é fácil confundir algumas classes que não são claramente diferentes, mesmo para seres humanos. -**Aviso Legal**: -Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, é importante notar que traduções automáticas podem conter erros ou imprecisões. O documento original na sua língua nativa deve ser considerado a fonte autoritária. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações incorretas decorrentes do uso desta tradução. \ No newline at end of file +--- + +**Aviso**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automáticas podem conter erros ou imprecisões. O documento original na sua língua nativa deve ser considerado a fonte autoritária. Para informações críticas, recomenda-se uma tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações incorretas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/ro/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb b/translations/ro/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb index e89d1d27..56a8f4e5 100644 --- a/translations/ro/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb +++ b/translations/ro/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb @@ -6,11 +6,13 @@ "source": [ "# Clasificarea Fețelor Animalelor de Companie\n", "\n", - "Temă de laborator din [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners).\n", + "Temă de laborator din [Curriculum AI pentru Începători](https://github.com/microsoft/ai-for-beginners).\n", "\n", "### Obținerea Datelor\n", "\n", - "În această temă, ne vom concentra pe o sarcină de clasificare relativ simplă - clasificarea fețelor animalelor de companie. Acest set de date constă în fețe decupate din [Oxford-IIIT Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/). Să începem prin a încărca și vizualiza setul de date.\n" + "În această temă, ne vom concentra pe o sarcină relativ simplă de clasificare - clasificarea fețelor animalelor de companie. Vom folosi [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/), care conține imagini ale 37 de rase diferite de câini și pisici. Să începem prin descărcarea și vizualizarea setului de date.\n", + "\n", + "**Notă:** Setul de date Oxford-IIIT Pet conține imagini complete ale animalelor de companie. Imaginile vor fi organizate pe rase în folderul extras.\n" ] }, { @@ -86,6 +88,24 @@ "metadata": {}, "outputs": [], "source": [ + "# Note: The Oxford-IIIT Pet Dataset extracts to a folder named 'images'\n", + "# Images are named by breed (e.g., 'Abyssinian_1.jpg')\n", + "# We need to organize them into breed-specific subdirectories\n", + "import os\n", + "from collections import defaultdict\n", + "\n", + "# Organize images by breed\n", + "if not os.path.exists('petfaces'):\n", + " os.makedirs('petfaces')\n", + " for img_file in os.listdir('images'):\n", + " if img_file.endswith(('.jpg', '.png')):\n", + " # Extract breed name from filename (everything before the last underscore and number)\n", + " breed = '_'.join(img_file.split('_')[:-1])\n", + " breed_dir = os.path.join('petfaces', breed)\n", + " if not os.path.exists(breed_dir):\n", + " os.makedirs(breed_dir)\n", + " os.rename(os.path.join('images', img_file), os.path.join(breed_dir, img_file))\n", + "\n", "for cls in os.listdir('petfaces'):\n", " print(cls)\n", " display_images([Image.open(os.path.join('petfaces',cls,x)) \n", @@ -130,7 +150,7 @@ "* În Tensorflow, folosiți `tf.keras.preprocessing.image_dataset_from_directory`\n", "* În PyTorch, folosiți `torchvision.datasets.ImageFolder`\n", "\n", - "Așa cum ați observat din imaginile de mai sus, toate au un raport apropiat de cel al imaginilor pătrate, așa că trebuie să redimensionăm toate imaginile la dimensiunea pătrată. De asemenea, putem organiza imaginile în minibatch-uri.\n" + "După cum ați observat din imaginile de mai sus, toate au un raport apropiat de cel al imaginilor pătrate, așa că trebuie să redimensionăm toate imaginile la dimensiunea pătrată. De asemenea, putem organiza imaginile în minibatch-uri.\n" ] }, { @@ -230,14 +250,14 @@ "source": [ "## Definirea unei rețele neuronale\n", "\n", - "Pentru clasificarea imaginilor, ar trebui să definești probabil o rețea neuronală convoluțională cu mai multe straturi. Ce trebuie să ai în vedere:\n", - "* Ține cont de arhitectura piramidală, adică numărul de filtre ar trebui să crească pe măsură ce mergi mai adânc.\n", - "* Nu uita funcțiile de activare între straturi (ReLU) și Max Pooling.\n", + "Pentru clasificarea imaginilor, ar trebui să definiți probabil o rețea neuronală convoluțională cu mai multe straturi. Ce trebuie să aveți în vedere:\n", + "* Țineți cont de arhitectura piramidală, adică numărul de filtre ar trebui să crească pe măsură ce mergeți mai adânc.\n", + "* Nu uitați funcțiile de activare între straturi (ReLU) și Max Pooling.\n", "* Clasificatorul final poate fi cu sau fără straturi ascunse, dar numărul de neuroni de ieșire trebuie să fie egal cu numărul de clase.\n", "\n", - "Un aspect important este să alegi corect funcția de activare pentru ultimul strat + funcția de pierdere:\n", - "* În Tensorflow, poți folosi `softmax` ca funcție de activare și `sparse_categorical_crossentropy` ca funcție de pierdere. Diferența dintre sparse categorical cross-entropy și cea non-sparse este că prima așteaptă ca ieșirea să fie numărul clasei, nu un vector one-hot.\n", - "* În PyTorch, poți avea stratul final fără funcție de activare și să folosești funcția de pierdere `CrossEntropyLoss`. Această funcție aplică automat softmax.\n" + "Un aspect important este să setați corect funcția de activare pe ultimul strat + funcția de pierdere:\n", + "* În Tensorflow, puteți utiliza `softmax` ca funcție de activare și `sparse_categorical_crossentropy` ca funcție de pierdere. Diferența dintre sparse categorical cross-entropy și varianta non-sparse este că prima așteaptă ieșirea sub formă de număr al clasei, și nu ca vector one-hot.\n", + "* În PyTorch, puteți avea stratul final fără funcție de activare și să utilizați funcția de pierdere `CrossEntropyLoss`. Această funcție aplică automat softmax.\n" ] }, { @@ -255,9 +275,9 @@ "source": [ "## Antrenează Rețeaua Neurală\n", "\n", - "Acum suntem pregătiți să antrenăm rețeaua neurală. În timpul antrenamentului, te rog să colectezi acuratețea pe datele de antrenament și test pentru fiecare epocă, apoi să reprezinți grafic acuratețea pentru a verifica dacă apare overfitting.\n", + "Acum suntem pregătiți să antrenăm rețeaua neurală. În timpul antrenării, te rog să colectezi acuratețea pe datele de antrenament și test la fiecare epocă, și apoi să reprezinți grafic acuratețea pentru a verifica dacă există supraînvățare.\n", "\n", - "> Pentru a accelera antrenamentul, este necesar să folosești GPU, dacă este disponibil. În timp ce TensorFlow/Keras va utiliza automat GPU-ul, în PyTorch trebuie să muți atât modelul, cât și datele pe GPU în timpul antrenamentului folosind metoda `.to()` pentru a beneficia de accelerarea oferită de GPU.\n" + "> Pentru a accelera procesul de antrenare, trebuie să folosești GPU dacă este disponibil. În timp ce TensorFlow/Keras va utiliza automat GPU-ul, în PyTorch trebuie să muți atât modelul, cât și datele pe GPU în timpul antrenării folosind metoda `.to()` pentru a beneficia de accelerarea GPU.\n" ] }, { @@ -295,20 +315,20 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Ce poți spune despre overfitting? Ce se poate face pentru a îmbunătăți acuratețea modelului?\n", + "Ce poți spune despre supraînvățare? Ce se poate face pentru a îmbunătăți acuratețea modelului?\n", "\n", - "## Opțional: Calcularea Acurateței Top-3\n", + "## Opțional: Calculați Acuratețea Top3\n", "\n", - "În acest exercițiu, am lucrat cu o clasificare care implică un număr destul de mare de clase (35), așa că rezultatul nostru - aproximativ 50% acuratețe pe setul de validare - este destul de bun. Setul de date standard ImageNet are chiar mai multe clase - 1000.\n", + "În acest exercițiu, ne-am ocupat de clasificare cu un număr destul de mare de clase (35), astfel încât rezultatul nostru - aproximativ 50% acuratețe pe setul de validare - este destul de bun. Dataset-ul standard ImageNet are chiar mai multe - 1000 de clase.\n", "\n", - "În astfel de cazuri, este dificil să ne asigurăm că modelul **întotdeauna** prezice corect clasa. Există situații în care două rase sunt foarte similare între ele, iar modelul returnează probabilități foarte apropiate (de exemplu, 0.45 și 0.43). Dacă măsurăm acuratețea standard, acest caz va fi considerat greșit, chiar dacă modelul a făcut o greșeală foarte mică. Din acest motiv, măsurăm adesea o altă metrică - o acuratețe în cadrul celor mai probabile 3 predicții ale modelului.\n", + "În astfel de cazuri, este dificil să ne asigurăm că modelul **întotdeauna** prezice corect clasa. Există situații în care două rase sunt foarte asemănătoare între ele, iar modelul returnează probabilități foarte apropiate (de exemplu, 0.45 și 0.43). Dacă măsurăm acuratețea standard, acest caz va fi considerat greșit, chiar dacă modelul a făcut o eroare foarte mică. De aceea, măsurăm adesea o altă metrică - acuratețea în cadrul celor mai probabile 3 predicții ale modelului.\n", "\n", "Considerăm cazul ca fiind corect dacă eticheta țintă se află în primele 3 predicții ale modelului.\n", "\n", - "Pentru a calcula acuratețea top-3 pe setul de date de testare, trebuie să parcurgi manual setul de date, să aplici rețeaua neuronală pentru a obține predicția și apoi să faci calculele. Câteva sugestii:\n", + "Pentru a calcula acuratețea top-3 pe setul de date de testare, trebuie să parcurgeți manual setul de date, să aplicați rețeaua neuronală pentru a obține predicția și apoi să faceți calculele. Câteva sugestii:\n", "\n", - "* În Tensorflow, folosește funcția `tf.nn.in_top_k` pentru a verifica dacă `predictions` (ieșirea modelului) se află în top-k (transmite `k=3` ca parametru), în raport cu `targets`. Această funcție returnează un tensor de valori booleene, care pot fi convertite în `int` folosind `tf.cast`, și apoi acumulate folosind `tf.reduce_sum`.\n", - "* În PyTorch, poți folosi funcția `torch.topk` pentru a obține indicii claselor cu cele mai mari probabilități și apoi să verifici dacă clasa corectă se află printre acestea. Vezi [aici](https://gist.github.com/weiaicunzai/2a5ae6eac6712c70bde0630f3e76b77b) pentru mai multe sugestii.\n" + "* În Tensorflow, utilizați funcția `tf.nn.in_top_k` pentru a verifica dacă `predictions` (ieșirea modelului) se află în top-k (treceți `k=3` ca parametru), în raport cu `targets`. Această funcție returnează un tensor de valori booleene, care poate fi convertit în `int` folosind `tf.cast`, și apoi acumulat folosind `tf.reduce_sum`.\n", + "* În PyTorch, puteți utiliza funcția `torch.topk` pentru a obține indicii claselor cu cele mai mari probabilități și apoi să verificați dacă clasa corectă se află printre acestea. Consultați [acest](https://gist.github.com/weiaicunzai/2a5ae6eac6712c70bde0630f3e76b77b) link pentru mai multe sugestii.\n" ] }, { @@ -326,7 +346,7 @@ "source": [ "## Opțional: Construirea clasificării Pisici vs. Câini\n", "\n", - "De asemenea, vrem să vedem cât de precisă ar fi clasificarea noastră binară pisici vs. câini pe același set de date. Pentru a face acest lucru, trebuie să ajustăm etichetele:\n" + "De asemenea, dorim să vedem cât de precisă ar fi clasificarea noastră binară Pisici vs. Câini pe același set de date. Pentru a face acest lucru, trebuie să ajustăm etichetele:\n" ] }, { @@ -352,7 +372,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n---\n\n**Declinare de responsabilitate**: \nAcest document a fost tradus folosind serviciul de traducere AI [Co-op Translator](https://github.com/Azure/co-op-translator). Deși ne străduim să asigurăm acuratețea, vă rugăm să rețineți că traducerile automate pot conține erori sau inexactități. Documentul original în limba sa natală ar trebui considerat sursa autoritară. Pentru informații critice, se recomandă traducerea profesională realizată de un specialist uman. Nu ne asumăm responsabilitatea pentru eventualele neînțelegeri sau interpretări greșite care pot apărea din utilizarea acestei traduceri.\n" + "\n---\n\n**Declinare de responsabilitate**: \nAcest document a fost tradus folosind serviciul de traducere AI [Co-op Translator](https://github.com/Azure/co-op-translator). Deși ne străduim să asigurăm acuratețea, vă rugăm să fiți conștienți că traducerile automate pot conține erori sau inexactități. Documentul original în limba sa natală ar trebui considerat sursa autoritară. Pentru informații critice, se recomandă traducerea profesională realizată de un specialist. Nu ne asumăm responsabilitatea pentru eventualele neînțelegeri sau interpretări greșite care pot apărea din utilizarea acestei traduceri.\n" ] } ], @@ -378,8 +398,8 @@ "version": "3.9.5" }, "coopTranslator": { - "original_hash": "1de3ae931831253c3198d899da48bfe5", - "translation_date": "2025-08-29T23:13:16+00:00", + "original_hash": "df7d1f7da8d2617b76acd93115776ca4", + "translation_date": "2025-10-03T14:46:17+00:00", "source_file": "lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb", "language_code": "ro" } diff --git a/translations/ro/lessons/4-ComputerVision/07-ConvNets/lab/README.md b/translations/ro/lessons/4-ComputerVision/07-ConvNets/lab/README.md index ec545874..a0953ccd 100644 --- a/translations/ro/lessons/4-ComputerVision/07-ConvNets/lab/README.md +++ b/translations/ro/lessons/4-ComputerVision/07-ConvNets/lab/README.md @@ -1,29 +1,29 @@ # Clasificarea Fețelor Animalelor de Companie -Temă de laborator din [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners). +Temă de laborator din [Curriculum AI pentru Începători](https://github.com/microsoft/ai-for-beginners). ## Sarcina -Imaginează-ți că trebuie să dezvolți o aplicație pentru o grădiniță de animale de companie, pentru a cataloga toate animalele. Una dintre funcționalitățile grozave ale unei astfel de aplicații ar fi identificarea automată a rasei dintr-o fotografie. Acest lucru poate fi realizat cu succes folosind rețele neuronale. +Imaginează-ți că trebuie să dezvolți o aplicație pentru o grădiniță de animale de companie pentru a cataloga toate animalele. Una dintre funcțiile grozave ale unei astfel de aplicații ar fi identificarea automată a rasei dintr-o fotografie. Acest lucru poate fi realizat cu succes folosind rețele neuronale. -Trebuie să antrenezi o rețea neuronală convoluțională pentru a clasifica diferite rase de pisici și câini utilizând setul de date **Pet Faces**. +Trebuie să antrenezi o rețea neuronală convoluțională pentru a clasifica diferite rase de pisici și câini utilizând dataset-ul **Pet Faces**. -## Setul de Date +## Dataset-ul -Vom folosi setul de date **Pet Faces**, derivat din setul de date pentru animale de companie [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/). Acesta conține 35 de rase diferite de câini și pisici. +Vom folosi [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/), care conține imagini ale 37 de rase diferite de câini și pisici. -![Setul de date cu care vom lucra](../../../../../../translated_images/data.50b2a9d5484bdbf0f52f5765b381cec9efe2bd296a98f007f90bedb6ac67f2a8.ro.png) +![Dataset-ul cu care vom lucra](../../../../../../translated_images/data.50b2a9d5484bdbf0f52f5765b381cec9efe2bd296a98f007f90bedb6ac67f2a8.ro.png) -Pentru a descărca setul de date, folosește acest fragment de cod: +Pentru a descărca dataset-ul, folosește acest fragment de cod: ```python !wget https://thor.robots.ox.ac.uk/~vgg/data/pets/images.tar.gz @@ -31,13 +31,17 @@ Pentru a descărca setul de date, folosește acest fragment de cod: !rm images.tar.gz ``` +**Notă:** Imaginile din Oxford-IIIT Pet Dataset sunt organizate după numele fișierului (de exemplu, `Abyssinian_1.jpg`, `Bengal_2.jpg`). Notebook-ul include cod pentru organizarea acestor imagini în subdirectoare specifice rasei pentru o clasificare mai ușoară. + ## Notebook-ul de Start -Începe laboratorul deschizând [PetFaces.ipynb](../../../../../../lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb) +Începe laboratorul deschizând [PetFaces.ipynb](PetFaces.ipynb) ## Concluzie Ai rezolvat o problemă relativ complexă de clasificare a imaginilor de la zero! Au fost destul de multe clase, și totuși ai reușit să obții o acuratețe rezonabilă! De asemenea, are sens să măsori acuratețea top-k, deoarece este ușor să confunzi unele clase care nu sunt clar diferite nici măcar pentru oameni. +--- + **Declinare de responsabilitate**: -Acest document a fost tradus folosind serviciul de traducere AI [Co-op Translator](https://github.com/Azure/co-op-translator). Deși ne străduim să asigurăm acuratețea, vă rugăm să fiți conștienți că traducerile automate pot conține erori sau inexactități. Documentul original în limba sa natală ar trebui considerat sursa autoritară. Pentru informații critice, se recomandă traducerea profesională realizată de un specialist uman. Nu ne asumăm responsabilitatea pentru eventualele neînțelegeri sau interpretări greșite care pot apărea din utilizarea acestei traduceri. \ No newline at end of file +Acest document a fost tradus folosind serviciul de traducere AI [Co-op Translator](https://github.com/Azure/co-op-translator). Deși ne străduim să asigurăm acuratețea, vă rugăm să fiți conștienți că traducerile automate pot conține erori sau inexactități. Documentul original în limba sa maternă ar trebui considerat sursa autoritară. Pentru informații critice, se recomandă traducerea profesională realizată de un specialist. Nu ne asumăm responsabilitatea pentru eventualele neînțelegeri sau interpretări greșite care pot apărea din utilizarea acestei traduceri. \ No newline at end of file diff --git a/translations/ru/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb b/translations/ru/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb index 89cb1d45..0eadf5ea 100644 --- a/translations/ru/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb +++ b/translations/ru/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb @@ -10,7 +10,9 @@ "\n", "### Получение данных\n", "\n", - "В этом задании мы сосредоточимся на относительно простой задаче классификации — классификации лиц домашних животных. Этот набор данных состоит из вырезанных лиц из [Oxford-IIIT Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/). Давайте начнем с загрузки и визуализации набора данных.\n" + "В этом задании мы сосредоточимся на относительно простой задаче — классификации лиц домашних животных. Мы будем использовать [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/), который содержит изображения 37 различных пород собак и кошек. Давайте начнем с загрузки и визуализации набора данных.\n", + "\n", + "**Примечание:** Набор данных Oxford-IIIT Pet Dataset содержит изображения домашних животных целиком. В извлеченной папке изображения будут организованы по породам.\n" ] }, { @@ -46,7 +48,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Мы определим универсальную функцию для отображения серии изображений из списка:\n" + "Мы определим общую функцию для отображения серии изображений из списка:\n" ] }, { @@ -77,7 +79,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Теперь давайте пройдемся по всем подкаталогам классов и построим графики первых нескольких изображений каждого класса:\n" + "Теперь давайте пройдем по всем подкаталогам классов и построим графики первых нескольких изображений каждого класса:\n" ] }, { @@ -86,6 +88,24 @@ "metadata": {}, "outputs": [], "source": [ + "# Note: The Oxford-IIIT Pet Dataset extracts to a folder named 'images'\n", + "# Images are named by breed (e.g., 'Abyssinian_1.jpg')\n", + "# We need to organize them into breed-specific subdirectories\n", + "import os\n", + "from collections import defaultdict\n", + "\n", + "# Organize images by breed\n", + "if not os.path.exists('petfaces'):\n", + " os.makedirs('petfaces')\n", + " for img_file in os.listdir('images'):\n", + " if img_file.endswith(('.jpg', '.png')):\n", + " # Extract breed name from filename (everything before the last underscore and number)\n", + " breed = '_'.join(img_file.split('_')[:-1])\n", + " breed_dir = os.path.join('petfaces', breed)\n", + " if not os.path.exists(breed_dir):\n", + " os.makedirs(breed_dir)\n", + " os.rename(os.path.join('images', img_file), os.path.join(breed_dir, img_file))\n", + "\n", "for cls in os.listdir('petfaces'):\n", " print(cls)\n", " display_images([Image.open(os.path.join('petfaces',cls,x)) \n", @@ -230,13 +250,13 @@ "source": [ "## Определение нейронной сети\n", "\n", - "Для классификации изображений, скорее всего, вам нужно определить сверточную нейронную сеть с несколькими слоями. На что стоит обратить внимание:\n", + "Для классификации изображений лучше всего определить сверточную нейронную сеть с несколькими слоями. На что стоит обратить внимание:\n", "* Учитывайте пирамидальную архитектуру, то есть количество фильтров должно увеличиваться с углублением сети.\n", "* Не забывайте про функции активации между слоями (ReLU) и Max Pooling.\n", "* Финальный классификатор может быть с скрытыми слоями или без них, но количество выходных нейронов должно соответствовать количеству классов.\n", "\n", - "Важно правильно настроить функцию активации на последнем слое и функцию потерь:\n", - "* В Tensorflow можно использовать `softmax` в качестве функции активации и `sparse_categorical_crossentropy` в качестве функции потерь. Разница между sparse categorical cross-entropy и обычной заключается в том, что первая ожидает выход в виде номера класса, а не в виде one-hot вектора.\n", + "Важно правильно выбрать функцию активации на последнем слое и функцию потерь:\n", + "* В Tensorflow можно использовать `softmax` как функцию активации и `sparse_categorical_crossentropy` как функцию потерь. Разница между sparse categorical cross-entropy и обычной заключается в том, что первая ожидает выход в виде номера класса, а не в виде one-hot вектора.\n", "* В PyTorch финальный слой может быть без функции активации, а в качестве функции потерь можно использовать `CrossEntropyLoss`. Эта функция автоматически применяет softmax.\n" ] }, @@ -255,9 +275,9 @@ "source": [ "## Обучение нейронной сети\n", "\n", - "Теперь мы готовы приступить к обучению нейронной сети. Во время обучения собирайте данные об accuracy на обучающем и тестовом наборах на каждой эпохе, а затем постройте график accuracy, чтобы проверить, нет ли переобучения.\n", + "Теперь мы готовы обучить нейронную сеть. Во время обучения собирайте данные о точности на обучающей и тестовой выборках на каждой эпохе, а затем постройте график точности, чтобы проверить, есть ли переобучение.\n", "\n", - "> Чтобы ускорить процесс обучения, необходимо использовать GPU, если он доступен. В то время как TensorFlow/Keras автоматически используют GPU, в PyTorch нужно вручную перенести как модель, так и данные на GPU во время обучения с помощью метода `.to()`, чтобы воспользоваться ускорением GPU.\n" + "> Чтобы ускорить обучение, необходимо использовать GPU, если он доступен. В то время как TensorFlow/Keras автоматически используют GPU, в PyTorch нужно переместить как модель, так и данные на GPU во время обучения с помощью метода `.to()`, чтобы воспользоваться ускорением GPU.\n" ] }, { @@ -295,20 +315,20 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Что можно сказать о переобучении? Что можно сделать для улучшения точности модели?\n", + "Что можно сказать о переобучении? Что можно сделать для повышения точности модели?\n", "\n", "## Опционально: Рассчитать Top-3 точность\n", "\n", - "В этом упражнении мы работали с классификацией, где было довольно много классов (35), поэтому наш результат - около 50% точности на валидации - довольно хороший. Стандартный набор данных ImageNet содержит еще больше - 1000 классов.\n", + "В этом упражнении мы работали с классификацией, где довольно большое количество классов (35), поэтому наш результат — около 50% точности на валидации — довольно хороший. Стандартный набор данных ImageNet содержит еще больше — 1000 классов.\n", "\n", - "В таких случаях сложно гарантировать, что модель **всегда** правильно предсказывает класс. Бывают ситуации, когда две породы очень похожи друг на друга, и модель возвращает очень близкие вероятности (например, 0.45 и 0.43). Если мы измеряем стандартную точность, это будет считаться ошибкой, даже если модель допустила совсем небольшую погрешность. Поэтому часто измеряют другую метрику - точность в пределах трех наиболее вероятных предсказаний модели.\n", + "В таких случаях сложно гарантировать, что модель **всегда** правильно предсказывает класс. Бывают ситуации, когда две породы очень похожи друг на друга, и модель возвращает очень близкие вероятности (например, 0.45 и 0.43). Если мы измеряем стандартную точность, это будет считаться ошибкой, хотя модель допустила совсем небольшую погрешность. Поэтому часто измеряют другую метрику — точность в пределах трех наиболее вероятных предсказаний модели.\n", "\n", - "Мы считаем случай точным, если целевая метка содержится в топ-3 предсказаниях модели.\n", + "Мы считаем случай точным, если целевая метка содержится в трех наиболее вероятных предсказаниях модели.\n", "\n", - "Чтобы вычислить top-3 точность на тестовом наборе данных, нужно вручную пройтись по набору данных, применить нейронную сеть для получения предсказаний, а затем выполнить расчеты. Несколько подсказок:\n", + "Чтобы вычислить top-3 точность на тестовом наборе данных, вам нужно вручную пройтись по набору данных, применить нейронную сеть для получения предсказаний, а затем выполнить расчеты. Несколько подсказок:\n", "\n", - "* В Tensorflow используйте функцию `tf.nn.in_top_k`, чтобы проверить, находятся ли `predictions` (выход модели) в топ-k (передайте `k=3` в качестве параметра) относительно `targets`. Эта функция возвращает тензор булевых значений, который можно преобразовать в `int` с помощью `tf.cast`, а затем накопить с использованием `tf.reduce_sum`.\n", - "* В PyTorch можно использовать функцию `torch.topk`, чтобы получить индексы классов с наибольшими вероятностями, а затем проверить, принадлежит ли правильный класс этим индексам. Смотрите [здесь](https://gist.github.com/weiaicunzai/2a5ae6eac6712c70bde0630f3e76b77b) для дополнительных подсказок.\n" + "* В Tensorflow используйте функцию `tf.nn.in_top_k`, чтобы проверить, находятся ли `predictions` (выход модели) в top-k (передайте `k=3` в качестве параметра) относительно `targets`. Эта функция возвращает тензор булевых значений, который можно преобразовать в `int` с помощью `tf.cast`, а затем накопить с использованием `tf.reduce_sum`.\n", + "* В PyTorch можно использовать функцию `torch.topk`, чтобы получить индексы классов с наибольшими вероятностями, а затем проверить, принадлежит ли правильный класс к этим индексам. Смотрите [здесь](https://gist.github.com/weiaicunzai/2a5ae6eac6712c70bde0630f3e76b77b) для дополнительных подсказок.\n" ] }, { @@ -324,9 +344,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Дополнительно: Создание классификации \"Кошки против собак\"\n", + "## Дополнительно: Создание классификации «Кошки против собак»\n", "\n", - "Мы также хотим проверить, насколько точной будет наша бинарная классификация \"кошки против собак\" на том же наборе данных. Для этого нам нужно изменить метки:\n" + "Мы также хотим проверить, насколько точной будет наша бинарная классификация «кошки против собак» на том же наборе данных. Для этого нам нужно изменить метки:\n" ] }, { @@ -352,7 +372,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n---\n\n**Отказ от ответственности**: \nЭтот документ был переведен с помощью сервиса автоматического перевода [Co-op Translator](https://github.com/Azure/co-op-translator). Несмотря на наши усилия по обеспечению точности, пожалуйста, учитывайте, что автоматические переводы могут содержать ошибки или неточности. Оригинальный документ на его родном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется профессиональный перевод человеком. Мы не несем ответственности за любые недоразумения или неправильные интерпретации, возникшие в результате использования данного перевода.\n" + "\n---\n\n**Отказ от ответственности**: \nЭтот документ был переведен с использованием сервиса автоматического перевода [Co-op Translator](https://github.com/Azure/co-op-translator). Хотя мы стремимся к точности, пожалуйста, учитывайте, что автоматические переводы могут содержать ошибки или неточности. Оригинальный документ на его родном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется профессиональный перевод человеком. Мы не несем ответственности за любые недоразумения или неправильные интерпретации, возникшие в результате использования данного перевода.\n" ] } ], @@ -378,8 +398,8 @@ "version": "3.9.5" }, "coopTranslator": { - "original_hash": "1de3ae931831253c3198d899da48bfe5", - "translation_date": "2025-08-28T10:53:49+00:00", + "original_hash": "df7d1f7da8d2617b76acd93115776ca4", + "translation_date": "2025-10-03T14:26:28+00:00", "source_file": "lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb", "language_code": "ru" } diff --git a/translations/ru/lessons/4-ComputerVision/07-ConvNets/lab/README.md b/translations/ru/lessons/4-ComputerVision/07-ConvNets/lab/README.md index aeadf0ed..0b5f83b8 100644 --- a/translations/ru/lessons/4-ComputerVision/07-ConvNets/lab/README.md +++ b/translations/ru/lessons/4-ComputerVision/07-ConvNets/lab/README.md @@ -1,25 +1,25 @@ # Классификация лиц домашних животных -Лабораторная работа из [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners). +Лабораторная работа из [Учебной программы "ИИ для начинающих"](https://github.com/microsoft/ai-for-beginners). ## Задача -Представьте, что вам нужно разработать приложение для питомника, чтобы каталогизировать всех животных. Одной из замечательных функций такого приложения может быть автоматическое определение породы по фотографии. Это можно успешно реализовать с помощью нейронных сетей. +Представьте, что вам нужно разработать приложение для питомника, чтобы каталогизировать всех животных. Одной из замечательных функций такого приложения могла бы быть автоматическая идентификация породы по фотографии. Это можно успешно реализовать с помощью нейронных сетей. Вам нужно обучить сверточную нейронную сеть для классификации различных пород кошек и собак, используя набор данных **Pet Faces**. ## Набор данных -Мы будем использовать набор данных **Pet Faces**, созданный на основе [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/) набора данных о домашних животных. Он содержит 35 различных пород собак и кошек. +Мы будем использовать [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/), который содержит изображения 37 различных пород собак и кошек. ![Набор данных, с которым мы будем работать](../../../../../../translated_images/data.50b2a9d5484bdbf0f52f5765b381cec9efe2bd296a98f007f90bedb6ac67f2a8.ru.png) @@ -31,13 +31,17 @@ CO_OP_TRANSLATOR_METADATA: !rm images.tar.gz ``` +**Примечание:** Изображения в наборе данных Oxford-IIIT Pet Dataset организованы по имени файла (например, `Abyssinian_1.jpg`, `Bengal_2.jpg`). В ноутбуке есть код, который организует эти изображения в подкаталоги, соответствующие породам, для упрощения классификации. + ## Начало работы с ноутбуком -Начните лабораторную работу, открыв [PetFaces.ipynb](../../../../../../lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb) +Начните лабораторную работу, открыв [PetFaces.ipynb](PetFaces.ipynb) ## Итог -Вы решили достаточно сложную задачу классификации изображений с нуля! Было довольно много классов, и вам удалось достичь разумной точности! Также имеет смысл измерить top-k точность, так как легко перепутать некоторые классы, которые даже для человека не очевидно различимы. +Вы решили достаточно сложную задачу классификации изображений с нуля! Было довольно много классов, и вам все равно удалось достичь разумной точности! Также имеет смысл измерять точность top-k, потому что легко спутать некоторые классы, которые даже для человека не очевидно различимы. + +--- **Отказ от ответственности**: -Этот документ был переведен с использованием сервиса автоматического перевода [Co-op Translator](https://github.com/Azure/co-op-translator). Хотя мы стремимся к точности, пожалуйста, учитывайте, что автоматические переводы могут содержать ошибки или неточности. Оригинальный документ на его родном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется профессиональный перевод человеком. Мы не несем ответственности за любые недоразумения или неправильные интерпретации, возникающие в результате использования данного перевода. \ No newline at end of file +Этот документ был переведен с помощью сервиса автоматического перевода [Co-op Translator](https://github.com/Azure/co-op-translator). Несмотря на наши усилия обеспечить точность, автоматические переводы могут содержать ошибки или неточности. Оригинальный документ на его родном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется профессиональный перевод человеком. Мы не несем ответственности за любые недоразумения или неправильные интерпретации, возникшие в результате использования данного перевода. \ No newline at end of file diff --git a/translations/sk/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb b/translations/sk/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb index ee02048a..172a94df 100644 --- a/translations/sk/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb +++ b/translations/sk/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb @@ -4,13 +4,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Klasifikácia tvárí domácich miláčikov\n", + "# Klasifikácia tvárí domácich zvierat\n", "\n", "Laboratórna úloha z [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners).\n", "\n", - "### Získavanie údajov\n", + "### Získanie údajov\n", "\n", - "V tejto úlohe sa zameriame na relatívne jednoduchú klasifikačnú úlohu - klasifikáciu tvárí domácich miláčikov. Tento dataset pozostáva z výrezov tvárí z [Oxford-IIIT Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/). Začnime načítaním a vizualizáciou datasetu.\n" + "V tejto úlohe sa zameriame na relatívne jednoduchú klasifikačnú úlohu - klasifikáciu tvárí domácich zvierat. Použijeme [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/), ktorý obsahuje obrázky 37 rôznych plemien psov a mačiek. Začnime stiahnutím a vizualizáciou datasetu.\n", + "\n", + "**Note:** Dataset Oxford-IIIT Pet obsahuje kompletné obrázky domácich zvierat. Obrázky budú v extrahovanom priečinku usporiadané podľa plemien.\n" ] }, { @@ -46,7 +48,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Definujeme generickú funkciu na zobrazenie série obrázkov zo zoznamu:\n" + "Definujeme všeobecnú funkciu na zobrazenie série obrázkov zo zoznamu:\n" ] }, { @@ -86,6 +88,24 @@ "metadata": {}, "outputs": [], "source": [ + "# Note: The Oxford-IIIT Pet Dataset extracts to a folder named 'images'\n", + "# Images are named by breed (e.g., 'Abyssinian_1.jpg')\n", + "# We need to organize them into breed-specific subdirectories\n", + "import os\n", + "from collections import defaultdict\n", + "\n", + "# Organize images by breed\n", + "if not os.path.exists('petfaces'):\n", + " os.makedirs('petfaces')\n", + " for img_file in os.listdir('images'):\n", + " if img_file.endswith(('.jpg', '.png')):\n", + " # Extract breed name from filename (everything before the last underscore and number)\n", + " breed = '_'.join(img_file.split('_')[:-1])\n", + " breed_dir = os.path.join('petfaces', breed)\n", + " if not os.path.exists(breed_dir):\n", + " os.makedirs(breed_dir)\n", + " os.rename(os.path.join('images', img_file), os.path.join(breed_dir, img_file))\n", + "\n", "for cls in os.listdir('petfaces'):\n", " print(cls)\n", " display_images([Image.open(os.path.join('petfaces',cls,x)) \n", @@ -96,7 +116,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Definujme tiež počet tried v našej dátovej množine:\n" + "Poďme tiež definovať počet tried v našej dátovej sade:\n" ] }, { @@ -162,7 +182,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Teraz si vypíšme veľkosti tenzorov v našej dátovej sade. Ak ste všetko vykonali správne, veľkosti tréningových prvkov by mali byť:\n", + "Teraz si vypíšme veľkosť tenzorov v našej dátovej sade. Ak ste všetko urobili správne, veľkosť tréningových prvkov by mala byť:\n", " * `(batch_size,image_size,image_size,3)` pre Tensorflow, `batch_size,3,image_size,image_size` pre PyTorch\n", " * `batch_size` pre štítky\n", " \n", @@ -228,16 +248,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Definovanie neurónovej siete\n", + "## Definujte neurónovú sieť\n", "\n", - "Pre klasifikáciu obrázkov by ste pravdepodobne mali definovať konvolučnú neurónovú sieť s viacerými vrstvami. Na čo si dať pozor:\n", - "* Majte na pamäti pyramídovú architektúru, t.j. počet filtrov by sa mal zvyšovať, čím hlbšie idete.\n", + "Pre klasifikáciu obrázkov by ste mali pravdepodobne definovať konvolučnú neurónovú sieť s viacerými vrstvami. Na čo si dať pozor:\n", + "* Pamätajte na pyramídovú architektúru, t.j. počet filtrov by sa mal zvyšovať, čím idete hlbšie.\n", "* Nezabudnite na aktivačné funkcie medzi vrstvami (ReLU) a Max Pooling.\n", "* Konečný klasifikátor môže byť s alebo bez skrytých vrstiev, ale počet výstupných neurónov by mal byť rovný počtu tried.\n", "\n", - "Dôležité je správne nastaviť aktivačnú funkciu na poslednej vrstve + stratovú funkciu:\n", - "* V Tensorflow môžete použiť `softmax` ako aktivačnú funkciu a `sparse_categorical_crossentropy` ako stratu. Rozdiel medzi sparse kategóriovou krížovou entropiou a nekategóriovou je v tom, že prvá očakáva výstup ako číslo triedy, a nie ako one-hot vektor.\n", - "* V PyTorch môžete mať poslednú vrstvu bez aktivačnej funkcie a použiť stratovú funkciu `CrossEntropyLoss`. Táto funkcia automaticky aplikuje softmax.\n" + "Dôležité je správne nastaviť aktivačnú funkciu na poslednej vrstve + funkciu straty:\n", + "* V Tensorflow môžete použiť `softmax` ako aktivačnú funkciu a `sparse_categorical_crossentropy` ako funkciu straty. Rozdiel medzi sparse categorical cross-entropy a nesparse verziou je v tom, že prvá očakáva výstup ako číslo triedy, nie ako one-hot vektor.\n", + "* V PyTorch môžete mať poslednú vrstvu bez aktivačnej funkcie a použiť funkciu straty `CrossEntropyLoss`. Táto funkcia automaticky aplikuje softmax.\n" ] }, { @@ -255,9 +275,9 @@ "source": [ "## Trénovanie neurónovej siete\n", "\n", - "Teraz sme pripravení na trénovanie neurónovej siete. Počas trénovania zbierajte presnosť na tréningových a testovacích dátach v každej epoche a následne vykreslite presnosť, aby ste zistili, či dochádza k pretrénovaniu.\n", + "Teraz sme pripravení na trénovanie neurónovej siete. Počas trénovania prosím zbierajte presnosť na tréningových a testovacích dátach v každej epoche a následne vykreslite presnosť, aby ste zistili, či dochádza k preťaženiu modelu.\n", "\n", - "> Na urýchlenie trénovania je potrebné použiť GPU, ak je dostupné. Zatiaľ čo TensorFlow/Keras automaticky využijú GPU, v PyTorch je potrebné presunúť model aj dáta na GPU počas trénovania pomocou metódy `.to()`, aby ste využili akceleráciu GPU.\n" + "> Na urýchlenie trénovania je potrebné použiť GPU, ak je k dispozícii. Zatiaľ čo TensorFlow/Keras automaticky využije GPU, v PyTorch je potrebné presunúť model aj dáta na GPU počas trénovania pomocou metódy `.to()`, aby ste mohli využiť akceleráciu GPU.\n" ] }, { @@ -297,17 +317,17 @@ "source": [ "Čo môžete povedať o overfittingu? Čo sa dá urobiť na zlepšenie presnosti modelu?\n", "\n", - "## Voliteľné: Vypočítajte Top3 presnosť\n", + "## Voliteľné: Výpočet Top3 presnosti\n", "\n", - "V tomto cvičení sme sa zaoberali klasifikáciou s pomerne vysokým počtom tried (35), takže náš výsledok - približne 50% validačná presnosť - je celkom dobrý. Štandardný dataset ImageNet má dokonca ešte viac - 1000 tried.\n", + "V tomto cvičení sme sa zaoberali klasifikáciou s pomerne vysokým počtom tried (35), takže náš výsledok - približne 50% validačná presnosť - je celkom dobrý. Štandardná ImageNet databáza má dokonca ešte viac - 1000 tried.\n", "\n", - "V takýchto prípadoch je ťažké zabezpečiť, aby model **vždy** správne predpovedal triedu. Existujú situácie, keď sú dve plemená veľmi podobné a model vráti veľmi podobné pravdepodobnosti (napr. 0.45 a 0.43). Ak meriame štandardnú presnosť, bude to považované za nesprávny prípad, aj keď model urobil len malú chybu. Preto často meriame inú metriku - presnosť v rámci top 3 najpravdepodobnejších predpovedí modelu.\n", + "V takýchto prípadoch je ťažké zabezpečiť, aby model **vždy** správne predpovedal triedu. Existujú situácie, keď sú dve plemená veľmi podobné a model vráti veľmi podobné pravdepodobnosti (napr. 0,45 a 0,43). Ak meriame štandardnú presnosť, bude to považované za nesprávny prípad, aj keď model urobil len veľmi malú chybu. Preto často meriame inú metriku - presnosť v rámci top 3 najpravdepodobnejších predpovedí modelu.\n", "\n", - "Prípad považujeme za presný, ak cieľový štítok je obsiahnutý v top 3 predpovediach modelu.\n", + "Prípad považujeme za presný, ak cieľová značka je obsiahnutá v top 3 predpovediach modelu.\n", "\n", - "Na výpočet top-3 presnosti na testovacom datasete je potrebné manuálne prejsť dataset, aplikovať neurónovú sieť na získanie predpovede a potom vykonať výpočty. Niekoľko tipov:\n", + "Na výpočet top-3 presnosti na testovacej množine je potrebné manuálne prejsť dataset, aplikovať neurónovú sieť na získanie predpovede a potom vykonať výpočty. Niekoľko tipov:\n", "\n", - "* V Tensorflow použite funkciu `tf.nn.in_top_k` na zistenie, či `predictions` (výstup modelu) sú v top-k (zadajte `k=3` ako parameter) vzhľadom na `targets`. Táto funkcia vráti tenzor boolean hodnôt, ktoré je možné konvertovať na `int` pomocou `tf.cast` a potom akumulovať pomocou `tf.reduce_sum`.\n", + "* V Tensorflow použite funkciu `tf.nn.in_top_k`, aby ste zistili, či `predictions` (výstup modelu) sú v top-k (zadajte `k=3` ako parameter) vzhľadom na `targets`. Táto funkcia vráti tenzor s hodnotami typu boolean, ktoré je možné konvertovať na `int` pomocou `tf.cast` a následne akumulovať pomocou `tf.reduce_sum`.\n", "* V PyTorch môžete použiť funkciu `torch.topk` na získanie indexov tried s najvyššími pravdepodobnosťami a potom zistiť, či správna trieda patrí medzi ne. Pozrite si [toto](https://gist.github.com/weiaicunzai/2a5ae6eac6712c70bde0630f3e76b77b) pre ďalšie tipy.\n" ] }, @@ -324,9 +344,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Voliteľné: Vytvorte klasifikáciu Mačky vs. Psy\n", + "## Voliteľné: Vytvorte klasifikáciu mačky vs. psy\n", "\n", - "Chceme tiež zistiť, aká presná by bola naša binárna klasifikácia mačky vs. psy na rovnakom datasete. Aby sme to dosiahli, musíme upraviť štítky:\n" + "Chceme tiež zistiť, aká presná by bola naša binárna klasifikácia mačky vs. psy na rovnakom datasete. Na to musíme upraviť štítky:\n" ] }, { @@ -352,7 +372,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n---\n\n**Upozornenie**: \nTento dokument bol preložený pomocou služby AI prekladu [Co-op Translator](https://github.com/Azure/co-op-translator). Aj keď sa snažíme o presnosť, prosím, berte na vedomie, že automatizované preklady môžu obsahovať chyby alebo nepresnosti. Pôvodný dokument v jeho rodnom jazyku by mal byť považovaný za autoritatívny zdroj. Pre kritické informácie sa odporúča profesionálny ľudský preklad. Nie sme zodpovední za žiadne nedorozumenia alebo nesprávne interpretácie vyplývajúce z použitia tohto prekladu.\n" + "\n---\n\n**Upozornenie**: \nTento dokument bol preložený pomocou služby AI prekladu [Co-op Translator](https://github.com/Azure/co-op-translator). Hoci sa snažíme o presnosť, prosím, berte na vedomie, že automatizované preklady môžu obsahovať chyby alebo nepresnosti. Pôvodný dokument v jeho rodnom jazyku by mal byť považovaný za autoritatívny zdroj. Pre kritické informácie sa odporúča profesionálny ľudský preklad. Nenesieme zodpovednosť za akékoľvek nedorozumenia alebo nesprávne interpretácie vyplývajúce z použitia tohto prekladu.\n" ] } ], @@ -378,8 +398,8 @@ "version": "3.9.5" }, "coopTranslator": { - "original_hash": "1de3ae931831253c3198d899da48bfe5", - "translation_date": "2025-08-29T23:12:42+00:00", + "original_hash": "df7d1f7da8d2617b76acd93115776ca4", + "translation_date": "2025-10-03T14:45:44+00:00", "source_file": "lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb", "language_code": "sk" } diff --git a/translations/sk/lessons/4-ComputerVision/07-ConvNets/lab/README.md b/translations/sk/lessons/4-ComputerVision/07-ConvNets/lab/README.md index 068d33e3..6e361640 100644 --- a/translations/sk/lessons/4-ComputerVision/07-ConvNets/lab/README.md +++ b/translations/sk/lessons/4-ComputerVision/07-ConvNets/lab/README.md @@ -1,29 +1,29 @@ -# Klasifikácia tvárí domácich miláčikov +# Klasifikácia tvárí domácich zvierat Laboratórna úloha z [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners). ## Úloha -Predstavte si, že potrebujete vyvinúť aplikáciu pre škôlku domácich miláčikov na katalogizáciu všetkých zvierat. Jednou z vynikajúcich funkcií takejto aplikácie by bolo automatické rozpoznávanie plemena z fotografie. Toto je možné úspešne dosiahnuť pomocou neurónových sietí. +Predstavte si, že potrebujete vyvinúť aplikáciu pre škôlku domácich zvierat na katalogizáciu všetkých zvierat. Jednou z výnimočných funkcií takejto aplikácie by bolo automatické rozpoznanie plemena z fotografie. Toto je možné úspešne dosiahnuť pomocou neurónových sietí. -Vašou úlohou je natrénovať konvolučnú neurónovú sieť na klasifikáciu rôznych plemien mačiek a psov pomocou datasetu **Pet Faces**. +Vašou úlohou je vytrénovať konvolučnú neurónovú sieť na klasifikáciu rôznych plemien mačiek a psov pomocou datasetu **Pet Faces**. ## Dataset -Použijeme dataset **Pet Faces**, ktorý je odvodený z datasetu domácich miláčikov [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/). Obsahuje 35 rôznych plemien psov a mačiek. +Použijeme [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/), ktorý obsahuje obrázky 37 rôznych plemien psov a mačiek. ![Dataset, s ktorým budeme pracovať](../../../../../../translated_images/data.50b2a9d5484bdbf0f52f5765b381cec9efe2bd296a98f007f90bedb6ac67f2a8.sk.png) -Na stiahnutie datasetu použite tento úryvok kódu: +Na stiahnutie datasetu použite tento kód: ```python !wget https://thor.robots.ox.ac.uk/~vgg/data/pets/images.tar.gz @@ -31,13 +31,17 @@ Na stiahnutie datasetu použite tento úryvok kódu: !rm images.tar.gz ``` +**Poznámka:** Obrázky v Oxford-IIIT Pet Dataset sú organizované podľa názvu súboru (napr. `Abyssinian_1.jpg`, `Bengal_2.jpg`). Notebook obsahuje kód na usporiadanie týchto obrázkov do podadresárov podľa plemien pre jednoduchšiu klasifikáciu. + ## Začiatok práce s notebookom -Začnite laboratórnu úlohu otvorením [PetFaces.ipynb](../../../../../../lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb) +Začnite laboratórnu úlohu otvorením [PetFaces.ipynb](PetFaces.ipynb) ## Záver -Vyriešili ste pomerne zložitý problém klasifikácie obrázkov od základov! Bolo tu veľa tried, a napriek tomu ste dokázali dosiahnuť rozumnú presnosť! Má tiež zmysel merať top-k presnosť, pretože je ľahké zameniť niektoré triedy, ktoré nie sú jasne odlišné ani pre ľudské oko. +Podarilo sa vám vyriešiť pomerne zložitý problém klasifikácie obrázkov od základu! Bolo tu veľa tried, a napriek tomu ste dokázali dosiahnuť rozumnú presnosť! Má tiež zmysel merať top-k presnosť, pretože je ľahké zameniť niektoré triedy, ktoré nie sú jasne odlišné ani pre ľudí. + +--- **Upozornenie**: -Tento dokument bol preložený pomocou služby AI prekladu [Co-op Translator](https://github.com/Azure/co-op-translator). Aj keď sa snažíme o presnosť, prosím, berte na vedomie, že automatizované preklady môžu obsahovať chyby alebo nepresnosti. Pôvodný dokument v jeho rodnom jazyku by mal byť považovaný za autoritatívny zdroj. Pre kritické informácie sa odporúča profesionálny ľudský preklad. Nie sme zodpovední za akékoľvek nedorozumenia alebo nesprávne interpretácie vyplývajúce z použitia tohto prekladu. \ No newline at end of file +Tento dokument bol preložený pomocou služby AI prekladu [Co-op Translator](https://github.com/Azure/co-op-translator). Hoci sa snažíme o presnosť, prosím, uvedomte si, že automatizované preklady môžu obsahovať chyby alebo nepresnosti. Pôvodný dokument v jeho pôvodnom jazyku by mal byť považovaný za autoritatívny zdroj. Pre kritické informácie sa odporúča profesionálny ľudský preklad. Nezodpovedáme za žiadne nedorozumenia alebo nesprávne interpretácie vyplývajúce z použitia tohto prekladu. \ No newline at end of file diff --git a/translations/sl/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb b/translations/sl/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb index 8e15e922..6822da4f 100644 --- a/translations/sl/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb +++ b/translations/sl/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb @@ -4,13 +4,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Klasifikacija obrazov hišnih ljubljenčkov\n", + "# Razvrščanje obrazov hišnih ljubljenčkov\n", "\n", - "Laboratorijska naloga iz [Učnega načrta za začetnike v umetni inteligenci](https://github.com/microsoft/ai-for-beginners).\n", + "Laboratorijska naloga iz [Učnega načrta za začetnike v AI](https://github.com/microsoft/ai-for-beginners).\n", "\n", "### Pridobivanje podatkov\n", "\n", - "V tej nalogi se bomo osredotočili na razmeroma preprosto nalogo klasifikacije - klasifikacijo obrazov hišnih ljubljenčkov. Ta podatkovni niz vsebuje izrezane obraze iz [Oxford-IIIT podatkovnega niza](https://www.robots.ox.ac.uk/~vgg/data/pets/). Začnimo z nalaganjem in vizualizacijo podatkovnega niza.\n" + "V tej nalogi se bomo osredotočili na razmeroma preprosto nalogo razvrščanja - razvrščanje obrazov hišnih ljubljenčkov. Uporabili bomo [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/), ki vsebuje slike 37 različnih pasem psov in mačk. Začnimo z nalaganjem in vizualizacijo podatkovnega nabora.\n", + "\n", + "**Opomba:** Oxford-IIIT Pet Dataset vsebuje slike celotnih hišnih ljubljenčkov. Slike bodo v izvlečeni mapi organizirane po pasmah.\n" ] }, { @@ -46,7 +48,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Opredelili bomo splošno funkcijo za prikaz serije slik iz seznama:\n" + "Opredelili bomo generično funkcijo za prikaz serije slik iz seznama:\n" ] }, { @@ -86,6 +88,24 @@ "metadata": {}, "outputs": [], "source": [ + "# Note: The Oxford-IIIT Pet Dataset extracts to a folder named 'images'\n", + "# Images are named by breed (e.g., 'Abyssinian_1.jpg')\n", + "# We need to organize them into breed-specific subdirectories\n", + "import os\n", + "from collections import defaultdict\n", + "\n", + "# Organize images by breed\n", + "if not os.path.exists('petfaces'):\n", + " os.makedirs('petfaces')\n", + " for img_file in os.listdir('images'):\n", + " if img_file.endswith(('.jpg', '.png')):\n", + " # Extract breed name from filename (everything before the last underscore and number)\n", + " breed = '_'.join(img_file.split('_')[:-1])\n", + " breed_dir = os.path.join('petfaces', breed)\n", + " if not os.path.exists(breed_dir):\n", + " os.makedirs(breed_dir)\n", + " os.rename(os.path.join('images', img_file), os.path.join(breed_dir, img_file))\n", + "\n", "for cls in os.listdir('petfaces'):\n", " print(cls)\n", " display_images([Image.open(os.path.join('petfaces',cls,x)) \n", @@ -124,13 +144,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Priprava nabora podatkov za globoko učenje\n", + "## Priprava podatkovnega nabora za globoko učenje\n", "\n", "Za začetek treniranja naše nevronske mreže moramo vse slike pretvoriti v tenzorje, prav tako pa ustvariti tenzorje, ki ustrezajo oznakam (številkam razredov). Večina ogrodij za nevronske mreže vsebuje preprosta orodja za delo s slikami:\n", "* V Tensorflow uporabite `tf.keras.preprocessing.image_dataset_from_directory`\n", "* V PyTorch uporabite `torchvision.datasets.ImageFolder`\n", "\n", - "Kot ste videli na zgornjih slikah, imajo vse slike razmeroma kvadratno razmerje, zato moramo vse slike spremeniti na kvadratno velikost. Prav tako lahko slike organiziramo v mini serije.\n" + "Kot ste videli na zgornjih slikah, imajo vse približno kvadratno razmerje, zato moramo vse slike spremeniti na kvadratno velikost. Prav tako lahko slike organiziramo v mini serije.\n" ] }, { @@ -146,7 +166,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Zdaj moramo razdeliti podatkovni niz na učni in testni del:\n" + "Zdaj moramo razdeliti podatkovni niz na dele za učenje in testiranje:\n" ] }, { @@ -162,7 +182,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Zdaj natisnimo velikost tenzorjev v našem podatkovnem naboru. Če ste vse naredili pravilno, bi morala biti velikost učnih elementov:\n", + "Zdaj natisnimo velikost tenzorjev v našem naboru podatkov. Če ste vse naredili pravilno, bi morala biti velikost elementov za učenje:\n", " * `(batch_size,image_size,image_size,3)` za Tensorflow, `batch_size,3,image_size,image_size` za PyTorch\n", " * `batch_size` za oznake\n", " \n", @@ -228,16 +248,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Določite nevronsko mrežo\n", + "## Definirajte nevronsko mrežo\n", "\n", "Za razvrščanje slik je priporočljivo definirati konvolucijsko nevronsko mrežo z več plastmi. Na kaj morate biti pozorni:\n", "* Upoštevajte piramidno arhitekturo, tj. število filtrov naj se povečuje, ko greste globlje.\n", "* Ne pozabite na aktivacijske funkcije med plastmi (ReLU) in Max Pooling.\n", - "* Končni klasifikator je lahko z ali brez skritih plasti, vendar mora število izhodnih nevronov ustrezati številu razredov.\n", + "* Končni klasifikator lahko vključuje ali ne vključuje skritih plasti, vendar mora biti število izhodnih nevronov enako številu razredov.\n", "\n", - "Pomembno je pravilno nastaviti aktivacijsko funkcijo na zadnji plasti + funkcijo izgube:\n", - "* V Tensorflow lahko uporabite `softmax` kot aktivacijo in `sparse_categorical_crossentropy` kot funkcijo izgube. Razlika med sparse categorical cross-entropy in nesparse različico je v tem, da prva pričakuje izhod kot številko razreda, ne pa kot one-hot vektor.\n", - "* V PyTorch lahko zadnjo plast pustite brez aktivacijske funkcije in uporabite funkcijo izgube `CrossEntropyLoss`. Ta funkcija samodejno uporabi softmax.\n" + "Pomembno je pravilno nastaviti aktivacijsko funkcijo v zadnji plasti + funkcijo izgube:\n", + "* V Tensorflowu lahko uporabite `softmax` kot aktivacijsko funkcijo in `sparse_categorical_crossentropy` kot funkcijo izgube. Razlika med sparse categorical cross-entropy in nesparse različico je v tem, da prva pričakuje izhod kot številko razreda, ne kot one-hot vektor.\n", + "* V PyTorchu lahko zadnja plast nima aktivacijske funkcije, pri čemer uporabite funkcijo izgube `CrossEntropyLoss`. Ta funkcija samodejno uporabi softmax.\n" ] }, { @@ -255,9 +275,9 @@ "source": [ "## Učite nevronsko mrežo\n", "\n", - "Zdaj smo pripravljeni na učenje nevronske mreže. Med učenjem zbirajte natančnost na učnih in testnih podatkih za vsako epoho, nato pa narišite graf natančnosti, da preverite, ali prihaja do prekomernega prileganja.\n", + "Zdaj smo pripravljeni na učenje nevronske mreže. Med učenjem zbirajte natančnost na učnih in testnih podatkih za vsako epoho ter nato narišite graf natančnosti, da preverite, ali prihaja do prekomernega prileganja.\n", "\n", - "> Za pospešitev učenja morate uporabiti GPU, če je na voljo. Medtem ko TensorFlow/Keras samodejno uporablja GPU, morate v PyTorch-u tako model kot podatke med učenjem premakniti na GPU z uporabo metode `.to()`, da izkoristite pospešek GPU.\n" + "> Za hitrejše učenje morate uporabiti GPU, če je na voljo. Medtem ko TensorFlow/Keras samodejno uporablja GPU, morate v PyTorch-u med učenjem model in podatke premakniti na GPU z uporabo metode `.to()`, da izkoristite pospešek GPU.\n" ] }, { @@ -297,18 +317,18 @@ "source": [ "Kaj lahko povemo o prekomernem prileganju? Kaj lahko storimo za izboljšanje natančnosti modela?\n", "\n", - "## Neobvezno: Izračunajte Top3 natančnost\n", + "## Izbirno: Izračunajte Top3 natančnost\n", "\n", - "V tej vaji smo se ukvarjali s klasifikacijo z dokaj velikim številom razredov (35), zato je naš rezultat - približno 50 % natančnost validacije - kar dober. Standardni ImageNet nabor podatkov ima še več - 1000 razredov.\n", + "V tej vaji smo se ukvarjali s klasifikacijo z dokaj velikim številom razredov (35), zato je naš rezultat - približno 50 % natančnost validacije - precej dober. Standardni ImageNet nabor podatkov ima še več - 1000 razredov.\n", "\n", - "V takšnih primerih je težko zagotoviti, da model **vedno** pravilno napove razred. Obstajajo primeri, ko sta si dve pasmi zelo podobni, in model vrne zelo podobne verjetnosti (npr. 0,45 in 0,43). Če merimo standardno natančnost, bo to obravnavano kot napačen primer, čeprav je model naredil zelo majhno napako. Zato pogosto merimo drugo metriko - natančnost znotraj top 3 najbolj verjetnih napovedi modela.\n", + "V takšnih primerih je težko zagotoviti, da model **vedno** pravilno napove razred. Obstajajo primeri, ko sta dve pasmi zelo podobni, model pa vrne zelo podobne verjetnosti (npr. 0.45 in 0.43). Če merimo standardno natančnost, bo to obravnavano kot napačen primer, čeprav je model naredil zelo majhno napako. Zato pogosto merimo drugo metriko - natančnost znotraj top 3 najbolj verjetnih napovedi modela.\n", "\n", "Primer štejemo za natančen, če je ciljna oznaka vsebovana znotraj top 3 napovedi modela.\n", "\n", "Za izračun top-3 natančnosti na testnem naboru podatkov morate ročno pregledati nabor podatkov, uporabiti nevronsko mrežo za pridobitev napovedi in nato opraviti izračune. Nekaj namigov:\n", "\n", - "* V Tensorflow lahko uporabite funkcijo `tf.nn.in_top_k`, da preverite, ali so `predictions` (izhod modela) v top-k (podajte `k=3` kot parameter) glede na `targets`. Ta funkcija vrne tenzor logičnih vrednosti, ki jih lahko pretvorite v `int` z uporabo `tf.cast`, nato pa jih seštejete z `tf.reduce_sum`.\n", - "* V PyTorch lahko uporabite funkcijo `torch.topk`, da pridobite indekse razredov z najvišjimi verjetnostmi, nato pa preverite, ali pravilni razred spada med njih. Več namigov najdete [tukaj](https://gist.github.com/weiaicunzai/2a5ae6eac6712c70bde0630f3e76b77b).\n" + "* V Tensorflowu uporabite funkcijo `tf.nn.in_top_k`, da preverite, ali so `predictions` (izhod modela) v top-k (podajte `k=3` kot parameter) glede na `targets`. Ta funkcija vrne tenzor logičnih vrednosti, ki jih lahko pretvorite v `int` z uporabo `tf.cast`, nato pa jih seštejete z uporabo `tf.reduce_sum`.\n", + "* V PyTorchu lahko uporabite funkcijo `torch.topk`, da pridobite indekse razredov z najvišjimi verjetnostmi, nato pa preverite, ali pravilni razred spada med njih. Oglejte si [to](https://gist.github.com/weiaicunzai/2a5ae6eac6712c70bde0630f3e76b77b) za več namigov.\n" ] }, { @@ -324,9 +344,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Izbirno: Zgradite klasifikacijo mačke proti psom\n", + "## Neobvezno: Zgradite klasifikacijo mačke proti psi\n", "\n", - "Prav tako želimo preveriti, kako natančna bi bila naša binarna klasifikacija mačke proti psom na istem naboru podatkov. Da to dosežemo, moramo prilagoditi oznake:\n" + "Prav tako želimo preveriti, kako natančna bi bila naša binarna klasifikacija mačke proti psi na istem naboru podatkov. Da to storimo, moramo prilagoditi oznake:\n" ] }, { @@ -352,7 +372,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n---\n\n**Omejitev odgovornosti**: \nTa dokument je bil preveden z uporabo storitve za strojno prevajanje [Co-op Translator](https://github.com/Azure/co-op-translator). Čeprav si prizadevamo za natančnost, vas prosimo, da upoštevate, da lahko avtomatizirani prevodi vsebujejo napake ali netočnosti. Izvirni dokument v njegovem izvirnem jeziku je treba obravnavati kot avtoritativni vir. Za ključne informacije priporočamo strokovno človeško prevajanje. Ne prevzemamo odgovornosti za morebitna nesporazumevanja ali napačne razlage, ki izhajajo iz uporabe tega prevoda.\n" + "\n---\n\n**Omejitev odgovornosti**: \nTa dokument je bil preveden z uporabo storitve za prevajanje z umetno inteligenco [Co-op Translator](https://github.com/Azure/co-op-translator). Čeprav si prizadevamo za natančnost, vas prosimo, da upoštevate, da lahko avtomatski prevodi vsebujejo napake ali netočnosti. Izvirni dokument v njegovem izvirnem jeziku je treba obravnavati kot avtoritativni vir. Za ključne informacije priporočamo profesionalni človeški prevod. Ne prevzemamo odgovornosti za morebitne nesporazume ali napačne razlage, ki izhajajo iz uporabe tega prevoda.\n" ] } ], @@ -378,8 +398,8 @@ "version": "3.9.5" }, "coopTranslator": { - "original_hash": "1de3ae931831253c3198d899da48bfe5", - "translation_date": "2025-08-30T07:19:30+00:00", + "original_hash": "df7d1f7da8d2617b76acd93115776ca4", + "translation_date": "2025-10-03T14:49:10+00:00", "source_file": "lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb", "language_code": "sl" } diff --git a/translations/sl/lessons/4-ComputerVision/07-ConvNets/lab/README.md b/translations/sl/lessons/4-ComputerVision/07-ConvNets/lab/README.md index b3148049..1449bc3a 100644 --- a/translations/sl/lessons/4-ComputerVision/07-ConvNets/lab/README.md +++ b/translations/sl/lessons/4-ComputerVision/07-ConvNets/lab/README.md @@ -1,15 +1,15 @@ # Razvrščanje obrazov hišnih ljubljenčkov -Laboratorijska naloga iz [Učnega načrta za začetnike v umetni inteligenci](https://github.com/microsoft/ai-for-beginners). +Laboratorijska naloga iz [Učnega načrta za začetnike v AI](https://github.com/microsoft/ai-for-beginners). ## Naloga @@ -19,7 +19,7 @@ Vaša naloga je, da usposobite konvolucijsko nevronsko mrežo za razvrščanje r ## Podatkovna zbirka -Uporabili bomo podatkovno zbirko **Pet Faces**, ki je izpeljana iz podatkovne zbirke hišnih ljubljenčkov [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/). Vsebuje 35 različnih pasem psov in mačk. +Uporabili bomo [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/), ki vsebuje slike 37 različnih pasem psov in mačk. ![Podatkovna zbirka, s katero bomo delali](../../../../../../translated_images/data.50b2a9d5484bdbf0f52f5765b381cec9efe2bd296a98f007f90bedb6ac67f2a8.sl.png) @@ -31,13 +31,17 @@ Za prenos podatkovne zbirke uporabite naslednji del kode: !rm images.tar.gz ``` -## Začetek zvezka +**Opomba:** Slike v podatkovni zbirki Oxford-IIIT Pet Dataset so organizirane po imenu datoteke (npr. `Abyssinian_1.jpg`, `Bengal_2.jpg`). Zvezek vključuje kodo za organizacijo teh slik v podimenike, specifične za pasme, kar olajša razvrščanje. -Začnite laboratorijsko nalogo z odpiranjem [PetFaces.ipynb](../../../../../../lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb) +## Začetni zvezek + +Začnite laboratorijsko nalogo z odpiranjem [PetFaces.ipynb](PetFaces.ipynb) ## Ključne ugotovitve -Rešili ste razmeroma zapleten problem razvrščanja slik od začetka! Kljub velikemu številu razredov ste uspeli doseči razumno natančnost! Smiselno je tudi meriti top-k natančnost, saj je enostavno zamenjati nekatere razrede, ki tudi ljudem niso jasno različni. +Rešili ste razmeroma zapleten problem razvrščanja slik od začetka! Kljub velikemu številu razredov ste uspeli doseči razumno natančnost! Smiselno je tudi meriti top-k natančnost, saj je enostavno zamenjati nekatere razrede, ki niso jasno različni niti za ljudi. + +--- **Omejitev odgovornosti**: -Ta dokument je bil preveden z uporabo storitve AI za prevajanje [Co-op Translator](https://github.com/Azure/co-op-translator). Čeprav si prizadevamo za natančnost, vas prosimo, da upoštevate, da lahko avtomatizirani prevodi vsebujejo napake ali netočnosti. Izvirni dokument v njegovem izvirnem jeziku je treba obravnavati kot avtoritativni vir. Za ključne informacije priporočamo profesionalni človeški prevod. Ne prevzemamo odgovornosti za morebitna nesporazumevanja ali napačne razlage, ki bi nastale zaradi uporabe tega prevoda. \ No newline at end of file +Ta dokument je bil preveden z uporabo storitve AI za prevajanje [Co-op Translator](https://github.com/Azure/co-op-translator). Čeprav si prizadevamo za natančnost, vas prosimo, da upoštevate, da lahko avtomatizirani prevodi vsebujejo napake ali netočnosti. Izvirni dokument v njegovem maternem jeziku je treba obravnavati kot avtoritativni vir. Za ključne informacije priporočamo profesionalni človeški prevod. Ne prevzemamo odgovornosti za morebitna nesporazumevanja ali napačne razlage, ki izhajajo iz uporabe tega prevoda. \ No newline at end of file diff --git a/translations/sr/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb b/translations/sr/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb index 0f9f8198..249ec384 100644 --- a/translations/sr/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb +++ b/translations/sr/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb @@ -6,11 +6,13 @@ "source": [ "# Класификација лица кућних љубимаца\n", "\n", - "Лабораторијски задатак из [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners).\n", + "Задатак из лабораторијске вежбе из [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners).\n", "\n", "### Преузимање података\n", "\n", - "У овом задатку ћемо се фокусирати на релативно једноставан задатак класификације - класификацију лица кућних љубимаца. Овај скуп података се састоји од изрезаних лица из [Oxford-IIIT Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/). Хајде да почнемо са учитавањем и визуализацијом скупа података.\n" + "У овом задатку, фокусираћемо се на релативно једноставан задатак класификације - класификацију лица кућних љубимаца. Користићемо [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/), који садржи слике 37 различитих раса паса и мачака. Хајде да почнемо са преузимањем и визуализацијом скупа података.\n", + "\n", + "**Напомена:** Oxford-IIIT Pet Dataset садржи целе слике кућних љубимаца. Слике ће бити организоване по расама у издвојеном фолдеру.\n" ] }, { @@ -46,7 +48,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Дефинисаћемо општу функцију за приказивање серије слика из листе:\n" + "Ми ћемо дефинисати општу функцију за приказ серије слика из листе:\n" ] }, { @@ -86,6 +88,24 @@ "metadata": {}, "outputs": [], "source": [ + "# Note: The Oxford-IIIT Pet Dataset extracts to a folder named 'images'\n", + "# Images are named by breed (e.g., 'Abyssinian_1.jpg')\n", + "# We need to organize them into breed-specific subdirectories\n", + "import os\n", + "from collections import defaultdict\n", + "\n", + "# Organize images by breed\n", + "if not os.path.exists('petfaces'):\n", + " os.makedirs('petfaces')\n", + " for img_file in os.listdir('images'):\n", + " if img_file.endswith(('.jpg', '.png')):\n", + " # Extract breed name from filename (everything before the last underscore and number)\n", + " breed = '_'.join(img_file.split('_')[:-1])\n", + " breed_dir = os.path.join('petfaces', breed)\n", + " if not os.path.exists(breed_dir):\n", + " os.makedirs(breed_dir)\n", + " os.rename(os.path.join('images', img_file), os.path.join(breed_dir, img_file))\n", + "\n", "for cls in os.listdir('petfaces'):\n", " print(cls)\n", " display_images([Image.open(os.path.join('petfaces',cls,x)) \n", @@ -130,7 +150,7 @@ "* У Tensorflow-у, користите `tf.keras.preprocessing.image_dataset_from_directory`\n", "* У PyTorch-у, користите `torchvision.datasets.ImageFolder`\n", "\n", - "Као што сте видели на горњим сликама, све оне имају однос страна близак квадратном, па је потребно променити величину свих слика на квадратни формат. Такође, можемо организовати слике у мини-бачеве.\n" + "Као што сте видели на сликама изнад, све су приближно квадратног односа, па је потребно да променимо величину свих слика на квадратни формат. Такође, можемо организовати слике у мини серије.\n" ] }, { @@ -146,7 +166,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Сада треба да раздвојимо скуп података на делове за тренирање и тестирање:\n" + "Сада треба да поделимо скуп података на делове за обуку и тестирање:\n" ] }, { @@ -162,7 +182,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Сада ћемо исписати величину тензора у нашем скупу података. Ако сте све урадили исправно, величина елемената за тренирање треба да буде\n", + "Сада да испишемо величину тензора у нашем скупу података. Ако сте све урадили исправно, величина елемената за тренинг треба да буде\n", " * `(batch_size,image_size,image_size,3)` за Tensorflow, `batch_size,3,image_size,image_size` за PyTorch\n", " * `batch_size` за Ознаке\n", " \n", @@ -235,9 +255,9 @@ "* Не заборавите функције активације између слојева (ReLU) и Max Pooling.\n", "* Завршни класификатор може бити са или без скривених слојева, али број излазних неурона треба да буде једнак броју класа.\n", "\n", - "Важно је правилно поставити функцију активације на последњем слоју + функцију губитка:\n", - "* У Tensorflow-у можете користити `softmax` као функцију активације и `sparse_categorical_crossentropy` као функцију губитка. Разлика између sparse categorical cross-entropy и не-sparse верзије је у томе што прва очекује излаз као број класе, а не као one-hot вектор.\n", - "* У PyTorch-у можете имати последњи слој без функције активације и користити функцију губитка `CrossEntropyLoss`. Ова функција аутоматски примењује softmax.\n" + "Важна ствар је да правилно подесите функцију активације на последњем слоју + функцију губитка:\n", + "* У Tensorflow-у, можете користити `softmax` као функцију активације и `sparse_categorical_crossentropy` као функцију губитка. Разлика између sparse categorical cross-entropy и неспарсне верзије је у томе што прва очекује излаз као број класе, а не као one-hot вектор.\n", + "* У PyTorch-у, можете имати последњи слој без функције активације и користити функцију губитка `CrossEntropyLoss`. Ова функција аутоматски примењује softmax.\n" ] }, { @@ -255,9 +275,9 @@ "source": [ "## Тренирање неуронске мреже\n", "\n", - "Сада смо спремни да тренирамо неуронску мрежу. Током тренинга, прикупљајте тачност на подацима за тренирање и тестирање у свакој епохи, а затим прикажите графикон тачности како бисте проверили да ли долази до претренираности.\n", + "Сада смо спремни да тренирамо неуронску мрежу. Током тренинга, молимо вас да прикупљате тачност на тренинг и тест подацима за сваку епоху, а затим графички прикажете тачност како бисте видели да ли долази до пренатренираности.\n", "\n", - "> Да бисте убрзали тренинг, потребно је да користите GPU ако је доступан. Док TensorFlow/Keras аутоматски користи GPU, у PyTorch-у је неопходно да и модел и податке преместите на GPU током тренинга користећи `.to()` метод како бисте искористили предности GPU убрзања.\n" + "> Да бисте убрзали тренинг, потребно је да користите GPU ако је доступан. Док TensorFlow/Keras аутоматски користи GPU, у PyTorch-у је потребно да и модел и податке преместите на GPU током тренинга користећи `.to()` метод како бисте искористили предности GPU убрзања.\n" ] }, { @@ -295,20 +315,20 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Шта можете рећи о преопшивању? Шта се може урадити да се побољша тачност модела?\n", + "Шта можете рећи о преопштавању? Шта се може урадити да се побољша тачност модела?\n", "\n", "## Опционо: Израчунати Top3 тачност\n", "\n", - "У овом задатку, радили смо са класификацијом која укључује прилично велики број класа (35), па је наш резултат - око 50% тачности на валидационом сету - прилично добар. Стандардни ImageNet сет података има још више - 1000 класа.\n", + "У овом задатку, радили смо на класификацији са прилично великим бројем класа (35), тако да је наш резултат - око 50% тачности на валидационом сету - прилично добар. Стандардни ImageNet сет података има још више - 1000 класа.\n", "\n", "У таквим случајевима је тешко осигурати да модел **увек** тачно предвиди класу. Постоје ситуације када су две расе веома сличне једна другој, и модел враћа веома сличне вероватноће (нпр., 0.45 и 0.43). Ако меримо стандардну тачност, то ће се сматрати погрешним случајем, иако је модел направио веома малу грешку. Због тога често меримо другу метрику - тачност унутар топ 3 највероватније предвиђене класе модела.\n", "\n", "Сматрамо да је случај тачан ако је циљна ознака садржана унутар топ 3 предвиђања модела.\n", "\n", - "Да бисте израчунали топ-3 тачност на тест сету података, потребно је ручно проћи кроз сет података, применити неуронску мрежу да добијете предвиђање, а затим урадити прорачуне. Неколико савета:\n", + "Да бисте израчунали топ-3 тачност на тест сету, потребно је ручно проћи кроз сет података, применити неуронску мрежу да добијете предвиђање, а затим урадити прорачуне. Неколико савета:\n", "\n", - "* У Tensorflow-у, користите функцију `tf.nn.in_top_k` да проверите да ли су `predictions` (излаз модела) у топ-к (проследите `k=3` као параметар), у односу на `targets`. Ова функција враћа тензор са вредностима типа boolean, који се могу конвертовати у `int` помоћу `tf.cast`, а затим акумулирати помоћу `tf.reduce_sum`.\n", - "* У PyTorch-у, можете користити функцију `torch.topk` да добијете индексе класа са највишим вероватноћама, а затим проверити да ли исправна класа припада њима. Погледајте [овде](https://gist.github.com/weiaicunzai/2a5ae6eac6712c70bde0630f3e76b77b) за више савета.\n" + "* У Tensorflow-у, користите функцију `tf.nn.in_top_k` да проверите да ли су `predictions` (излаз модела) у топ-k (проследите `k=3` као параметар), у односу на `targets`. Ова функција враћа тензор са вредностима типа boolean, који се могу конвертовати у `int` помоћу `tf.cast`, а затим акумулирати помоћу `tf.reduce_sum`.\n", + "* У PyTorch-у, можете користити функцију `torch.topk` да добијете индексе класа са највећим вероватноћама, а затим проверите да ли исправна класа припада њима. Погледајте [овде](https://gist.github.com/weiaicunzai/2a5ae6eac6712c70bde0630f3e76b77b) за више савета.\n" ] }, { @@ -326,7 +346,7 @@ "source": [ "## Опционо: Направите класификацију мачке против паса\n", "\n", - "Желимо да проверимо колико је тачна наша бинарна класификација мачке против паса на истом скупу података. Да бисмо то урадили, потребно је да прилагодимо ознаке:\n" + "Такође желимо да видимо колико би наша бинарна класификација мачке против паса била тачна на истом скупу података. Да бисмо то урадили, потребно је да прилагодимо ознаке:\n" ] }, { @@ -352,7 +372,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n---\n\n**Одрицање од одговорности**: \nОвај документ је преведен коришћењем услуге за превођење помоћу вештачке интелигенције [Co-op Translator](https://github.com/Azure/co-op-translator). Иако се трудимо да обезбедимо тачност, молимо вас да имате у виду да аутоматски преводи могу садржати грешке или нетачности. Оригинални документ на његовом изворном језику треба сматрати меродавним извором. За критичне информације, препоручује се професионални превод од стране људи. Не преузимамо одговорност за било каква погрешна тумачења или неспоразуме који могу настати услед коришћења овог превода.\n" + "\n---\n\n**Одрицање од одговорности**: \nОвај документ је преведен помоћу услуге за превођење уз помоћ вештачке интелигенције [Co-op Translator](https://github.com/Azure/co-op-translator). Иако се трудимо да обезбедимо тачност, молимо вас да имате у виду да аутоматски преводи могу садржати грешке или нетачности. Оригинални документ на његовом изворном језику треба сматрати ауторитативним извором. За критичне информације препоручује се професионални превод од стране људи. Не сносимо одговорност за било каква погрешна тумачења или неспоразуме који могу произаћи из коришћења овог превода.\n" ] } ], @@ -378,8 +398,8 @@ "version": "3.9.5" }, "coopTranslator": { - "original_hash": "1de3ae931831253c3198d899da48bfe5", - "translation_date": "2025-08-29T23:14:23+00:00", + "original_hash": "df7d1f7da8d2617b76acd93115776ca4", + "translation_date": "2025-10-03T14:47:28+00:00", "source_file": "lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb", "language_code": "sr" } diff --git a/translations/sr/lessons/4-ComputerVision/07-ConvNets/lab/README.md b/translations/sr/lessons/4-ComputerVision/07-ConvNets/lab/README.md index c6c4c7b0..6a5e3fc4 100644 --- a/translations/sr/lessons/4-ComputerVision/07-ConvNets/lab/README.md +++ b/translations/sr/lessons/4-ComputerVision/07-ConvNets/lab/README.md @@ -1,8 +1,8 @@ -# Klassificering av husdjurs ansikten +# Klassificering av husdjursansikten -Labuppgift från [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners). +Labuppgift från [AI för nybörjare-kursen](https://github.com/microsoft/ai-for-beginners). ## Uppgift -Föreställ dig att du behöver utveckla en applikation för ett djurpensionat för att katalogisera alla husdjur. En fantastisk funktion i en sådan applikation skulle vara att automatiskt identifiera rasen från ett fotografi. Detta kan framgångsrikt göras med hjälp av neurala nätverk. +Föreställ dig att du behöver utveckla en applikation för ett djurdagis för att katalogisera alla husdjur. En fantastisk funktion i en sådan applikation skulle vara att automatiskt identifiera rasen från ett fotografi. Detta kan framgångsrikt göras med hjälp av neurala nätverk. Du behöver träna ett konvolutionellt neuralt nätverk för att klassificera olika raser av katter och hundar med hjälp av datasetet **Pet Faces**. ## Datasetet -Vi kommer att använda datasetet **Pet Faces**, som är hämtat från [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/) husdjursdataset. Det innehåller 35 olika raser av hundar och katter. +Vi kommer att använda [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/), som innehåller bilder av 37 olika raser av hundar och katter. ![Datasetet vi kommer att arbeta med](../../../../../../translated_images/data.50b2a9d5484bdbf0f52f5765b381cec9efe2bd296a98f007f90bedb6ac67f2a8.sv.png) @@ -31,7 +31,9 @@ För att ladda ner datasetet, använd följande kodsnutt: !rm images.tar.gz ``` -## Starta Notebook +**Obs:** Bilderna i Oxford-IIIT Pet Dataset är organiserade efter filnamn (t.ex. `Abyssinian_1.jpg`, `Bengal_2.jpg`). Notebooken innehåller kod för att organisera dessa bilder i ras-specifika underkataloger för enklare klassificering. + +## Starta Notebooken Börja labben genom att öppna [PetFaces.ipynb](PetFaces.ipynb) @@ -42,4 +44,4 @@ Du har löst ett relativt komplext problem med bildklassificering från grunden! --- **Ansvarsfriskrivning**: -Detta dokument har översatts med hjälp av AI-översättningstjänsten [Co-op Translator](https://github.com/Azure/co-op-translator). Även om vi strävar efter noggrannhet, bör du vara medveten om att automatiserade översättningar kan innehålla fel eller inexaktheter. Det ursprungliga dokumentet på dess originalspråk bör betraktas som den auktoritativa källan. För kritisk information rekommenderas professionell mänsklig översättning. Vi ansvarar inte för eventuella missförstånd eller feltolkningar som uppstår vid användning av denna översättning. \ No newline at end of file +Detta dokument har översatts med hjälp av AI-översättningstjänsten [Co-op Translator](https://github.com/Azure/co-op-translator). Även om vi strävar efter noggrannhet, bör det noteras att automatiserade översättningar kan innehålla fel eller felaktigheter. Det ursprungliga dokumentet på dess originalspråk bör betraktas som den auktoritativa källan. För kritisk information rekommenderas professionell mänsklig översättning. Vi ansvarar inte för eventuella missförstånd eller feltolkningar som uppstår vid användning av denna översättning. \ No newline at end of file diff --git a/translations/sw/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb b/translations/sw/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb index 6eb738e0..e87c37d6 100644 --- a/translations/sw/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb +++ b/translations/sw/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb @@ -6,11 +6,13 @@ "source": [ "# Uainishaji wa Nyuso za Wanyama Kipenzi\n", "\n", - "Kazi ya maabara kutoka [Mtaala wa AI kwa Kompyuta](https://github.com/microsoft/ai-for-beginners).\n", + "Kazi ya Maabara kutoka [Mtaala wa AI kwa Kompyuta](https://github.com/microsoft/ai-for-beginners).\n", "\n", "### Kupata Data\n", "\n", - "Katika kazi hii, tutazingatia jukumu rahisi la uainishaji - uainishaji wa nyuso za wanyama kipenzi. Seti hii ya data inajumuisha nyuso zilizokatwa kutoka [Oxford-IIIT Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/). Hebu tuanze kwa kupakia na kuonyesha seti ya data.\n" + "Katika kazi hii, tutazingatia jukumu rahisi la uainishaji - uainishaji wa nyuso za wanyama kipenzi. Tutatumia [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/), ambayo ina picha za aina 37 tofauti za mbwa na paka. Hebu tuanze kwa kupakua na kuangalia dataset.\n", + "\n", + "**Kumbuka:** Oxford-IIIT Pet Dataset ina picha kamili za wanyama kipenzi. Picha zitapangwa kulingana na aina katika folda iliyotolewa.\n" ] }, { @@ -77,7 +79,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Sasa wacha tupitie folda ndogo za kila darasa na kuchora picha chache za kwanza za kila darasa:\n" + "Sasa hebu pitia folda ndogo za kila darasa na uchore picha chache za kwanza za kila darasa:\n" ] }, { @@ -86,6 +88,24 @@ "metadata": {}, "outputs": [], "source": [ + "# Note: The Oxford-IIIT Pet Dataset extracts to a folder named 'images'\n", + "# Images are named by breed (e.g., 'Abyssinian_1.jpg')\n", + "# We need to organize them into breed-specific subdirectories\n", + "import os\n", + "from collections import defaultdict\n", + "\n", + "# Organize images by breed\n", + "if not os.path.exists('petfaces'):\n", + " os.makedirs('petfaces')\n", + " for img_file in os.listdir('images'):\n", + " if img_file.endswith(('.jpg', '.png')):\n", + " # Extract breed name from filename (everything before the last underscore and number)\n", + " breed = '_'.join(img_file.split('_')[:-1])\n", + " breed_dir = os.path.join('petfaces', breed)\n", + " if not os.path.exists(breed_dir):\n", + " os.makedirs(breed_dir)\n", + " os.rename(os.path.join('images', img_file), os.path.join(breed_dir, img_file))\n", + "\n", "for cls in os.listdir('petfaces'):\n", " print(cls)\n", " display_images([Image.open(os.path.join('petfaces',cls,x)) \n", @@ -124,7 +144,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Kuandaa dataset kwa Deep Learning\n", + "## Kuandaa dataset kwa Kujifunza Kina\n", "\n", "Ili kuanza kufundisha mtandao wetu wa neva, tunahitaji kubadilisha picha zote kuwa tensors, na pia kuunda tensors zinazolingana na lebo (namba za darasa). Mfumo mwingi wa mtandao wa neva una zana rahisi za kushughulikia picha:\n", "* Katika Tensorflow, tumia `tf.keras.preprocessing.image_dataset_from_directory`\n", @@ -146,7 +166,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Sasa tunahitaji kugawanya seti ya data kuwa sehemu za mafunzo na majaribio:\n" + "Sasa tunahitaji kugawanya seti ya data katika sehemu za mafunzo na majaribio:\n" ] }, { @@ -162,11 +182,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Sasa tuangalie ukubwa wa tensors katika seti yetu ya data. Ikiwa umefanya kila kitu kwa usahihi, ukubwa wa vipengele vya mafunzo unapaswa kuwa\n", + "Sasa tuchapishe ukubwa wa tensors katika seti yetu ya data. Ikiwa umefanya kila kitu kwa usahihi, ukubwa wa vipengele vya mafunzo unapaswa kuwa\n", " * `(batch_size,image_size,image_size,3)` kwa Tensorflow, `batch_size,3,image_size,image_size` kwa PyTorch\n", " * `batch_size` kwa Lebo\n", - " \n", - " Lebo zinapaswa kuwa na namba za madarasa.\n" + "\n", + "Lebo zinapaswa kuwa na namba za madarasa.\n" ] }, { @@ -228,10 +248,10 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Eleza mtandao wa neva\n", + "## Kufafanua mtandao wa neva\n", "\n", "Kwa uainishaji wa picha, unapaswa kufafanua mtandao wa neva wa convolutional wenye tabaka kadhaa. Mambo ya kuzingatia:\n", - "* Kumbuka usanifu wa piramidi, yaani idadi ya vichujio inapaswa kuongezeka unavyozama zaidi.\n", + "* Kumbuka usanifu wa piramidi, yaani idadi ya vichujio inapaswa kuongezeka unavyozidi kwenda ndani.\n", "* Usisahau kazi za uanzishaji kati ya tabaka (ReLU) na Max Pooling.\n", "* Kifasiri cha mwisho kinaweza kuwa na au bila tabaka zilizofichwa, lakini idadi ya neurons za matokeo inapaswa kuwa sawa na idadi ya madarasa.\n", "\n", @@ -255,7 +275,7 @@ "source": [ "## Fanya Mazoezi ya Mtandao wa Neural\n", "\n", - "Sasa tuko tayari kufundisha mtandao wa neural. Wakati wa mazoezi, tafadhali kusanya usahihi kwenye data ya mafunzo na majaribio kwa kila kipindi, kisha chora usahihi ili kuona kama kuna overfitting.\n", + "Sasa tuko tayari kufundisha mtandao wa neural. Wakati wa mazoezi, tafadhali kusanya usahihi wa data ya mafunzo na majaribio kwa kila kipindi, kisha chora usahihi ili kuona kama kuna overfitting.\n", "\n", "> Ili kuharakisha mazoezi, unahitaji kutumia GPU ikiwa inapatikana. Ingawa TensorFlow/Keras itatumia GPU moja kwa moja, katika PyTorch unahitaji kuhamisha modeli na data zote kwenye GPU wakati wa mazoezi kwa kutumia njia ya `.to()` ili kufaidika na kasi ya GPU.\n" ] @@ -299,9 +319,9 @@ "\n", "## Hiari: Hesabu Usahihi wa Juu-3\n", "\n", - "Katika zoezi hili, tulikuwa tunashughulika na uainishaji wenye idadi kubwa ya madarasa (35), kwa hivyo matokeo yetu - takriban 50% usahihi wa uthibitishaji - ni mazuri. Dataset ya kawaida ya ImageNet ina hata zaidi - madarasa 1000.\n", + "Katika zoezi hili, tulikuwa tunashughulika na uainishaji wenye idadi kubwa ya madarasa (35), kwa hivyo matokeo yetu - takriban 50% usahihi wa uthibitishaji - ni mazuri sana. Dataset ya kawaida ya ImageNet ina hata zaidi - madarasa 1000.\n", "\n", - "Katika hali kama hizi ni vigumu kuhakikisha kwamba modeli **daima** inatabiri darasa sahihi. Kuna hali ambapo aina mbili zinafanana sana, na modeli inarudisha uwezekano unaofanana sana (mfano, 0.45 na 0.43). Ikiwa tunapima usahihi wa kawaida, itachukuliwa kuwa kesi isiyo sahihi, ingawa modeli ilifanya kosa dogo sana. Kwa sababu hii, mara nyingi tunapima kipimo kingine - usahihi ndani ya utabiri wa juu-3 wa modeli.\n", + "Katika hali kama hizi ni vigumu kuhakikisha kwamba modeli **daima** inatabiri darasa kwa usahihi. Kuna hali ambapo aina mbili zinafanana sana, na modeli inarudisha uwezekano unaofanana sana (mfano, 0.45 na 0.43). Ikiwa tunapima usahihi wa kawaida, itachukuliwa kuwa ni kosa, ingawa modeli ilifanya kosa dogo sana. Kwa sababu hii, mara nyingi tunapima kipimo kingine - usahihi ndani ya utabiri wa juu-3 wa modeli.\n", "\n", "Tunachukulia kesi kuwa sahihi ikiwa lebo lengwa iko ndani ya utabiri wa juu-3 wa modeli.\n", "\n", @@ -352,7 +372,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n---\n\n**Kanusho**: \nHati hii imetafsiriwa kwa kutumia huduma ya tafsiri ya AI [Co-op Translator](https://github.com/Azure/co-op-translator). Ingawa tunajitahidi kwa usahihi, tafadhali fahamu kuwa tafsiri za kiotomatiki zinaweza kuwa na makosa au kutokuwa sahihi. Hati ya asili katika lugha yake ya awali inapaswa kuzingatiwa kama chanzo cha mamlaka. Kwa taarifa muhimu, inashauriwa kutumia tafsiri ya kitaalamu ya binadamu. Hatutawajibika kwa maelewano mabaya au tafsiri zisizo sahihi zinazotokana na matumizi ya tafsiri hii.\n" + "\n---\n\n**Kanusho**: \nHati hii imetafsiriwa kwa kutumia huduma ya tafsiri ya AI [Co-op Translator](https://github.com/Azure/co-op-translator). Ingawa tunajitahidi kuhakikisha usahihi, tafadhali fahamu kuwa tafsiri za kiotomatiki zinaweza kuwa na makosa au kutokuwa sahihi. Hati ya asili katika lugha yake ya awali inapaswa kuzingatiwa kama chanzo cha mamlaka. Kwa taarifa muhimu, tafsiri ya kitaalamu ya binadamu inapendekezwa. Hatutawajibika kwa kutoelewana au tafsiri zisizo sahihi zinazotokana na matumizi ya tafsiri hii.\n" ] } ], @@ -378,8 +398,8 @@ "version": "3.9.5" }, "coopTranslator": { - "original_hash": "1de3ae931831253c3198d899da48bfe5", - "translation_date": "2025-08-29T13:28:05+00:00", + "original_hash": "df7d1f7da8d2617b76acd93115776ca4", + "translation_date": "2025-10-03T14:43:59+00:00", "source_file": "lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb", "language_code": "sw" } diff --git a/translations/sw/lessons/4-ComputerVision/07-ConvNets/lab/README.md b/translations/sw/lessons/4-ComputerVision/07-ConvNets/lab/README.md index 55d9be76..1fd49d0b 100644 --- a/translations/sw/lessons/4-ComputerVision/07-ConvNets/lab/README.md +++ b/translations/sw/lessons/4-ComputerVision/07-ConvNets/lab/README.md @@ -1,29 +1,29 @@ -# Uainishaji wa Nyuso za Wanyama wa Kipenzi +# Uainishaji wa Nyuso za Wanyama Kipenzi Kazi ya Maabara kutoka [Mtaala wa AI kwa Kompyuta](https://github.com/microsoft/ai-for-beginners). ## Kazi -Fikiria unahitaji kuunda programu kwa ajili ya kitalu cha wanyama wa kipenzi ili kuorodhesha wanyama wote. Moja ya vipengele bora vya programu kama hiyo itakuwa kugundua moja kwa moja aina ya mnyama kutoka kwenye picha. Hili linaweza kufanikiwa kwa kutumia mitandao ya neva. +Fikiria unahitaji kuunda programu kwa ajili ya kituo cha kulelea wanyama kipenzi ili kuorodhesha wanyama wote. Moja ya vipengele bora vya programu kama hiyo itakuwa kugundua aina ya mnyama moja kwa moja kutoka kwenye picha. Hili linaweza kufanikiwa kwa kutumia mitandao ya neva. -Unahitaji kufundisha mtandao wa neva wa convolutional ili kuainisha aina tofauti za paka na mbwa kwa kutumia seti ya data ya **Pet Faces**. +Unahitaji kufundisha mtandao wa neva wa convolutional ili kuainisha aina tofauti za paka na mbwa kwa kutumia dataset ya **Nyuso za Wanyama Kipenzi**. -## Seti ya Data +## Dataset -Tutatumia seti ya data ya **Pet Faces**, inayotokana na seti ya data ya wanyama wa kipenzi ya [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/). Inayo aina 35 tofauti za mbwa na paka. +Tutatumia [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/), ambayo ina picha za aina 37 tofauti za mbwa na paka. -![Seti ya data tutakayoshughulikia](../../../../../../translated_images/data.50b2a9d5484bdbf0f52f5765b381cec9efe2bd296a98f007f90bedb6ac67f2a8.sw.png) +![Dataset tutakayoshughulikia](../../../../../../translated_images/data.50b2a9d5484bdbf0f52f5765b381cec9efe2bd296a98f007f90bedb6ac67f2a8.sw.png) -Ili kupakua seti ya data, tumia kipande hiki cha msimbo: +Ili kupakua dataset, tumia kipande hiki cha msimbo: ```python !wget https://thor.robots.ox.ac.uk/~vgg/data/pets/images.tar.gz @@ -31,13 +31,17 @@ Ili kupakua seti ya data, tumia kipande hiki cha msimbo: !rm images.tar.gz ``` -## Kuanzisha Daftari +**Kumbuka:** Picha za Oxford-IIIT Pet Dataset zimepangwa kwa jina la faili (mfano, `Abyssinian_1.jpg`, `Bengal_2.jpg`). Notebook inajumuisha msimbo wa kupanga picha hizi katika folda maalum za aina ili kurahisisha uainishaji. -Anza maabara kwa kufungua [PetFaces.ipynb](../../../../../../lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb) +## Kuanzisha Notebook -## Jambo la Kujifunza +Anza maabara kwa kufungua [PetFaces.ipynb](PetFaces.ipynb) -Umesuluhisha tatizo changamani la uainishaji wa picha kutoka mwanzo! Kulikuwa na madarasa mengi, na bado uliweza kupata usahihi wa kuridhisha! Pia inafaa kupima usahihi wa top-k, kwa sababu ni rahisi kuchanganya baadhi ya madarasa ambayo hata kwa wanadamu si rahisi kuyatofautisha wazi. +## Mafanikio + +Umesuluhisha tatizo gumu la uainishaji wa picha kutoka mwanzo! Kulikuwa na madarasa mengi, na bado uliweza kupata usahihi wa kuridhisha! Pia ina maana kupima usahihi wa top-k, kwa sababu ni rahisi kuchanganya baadhi ya madarasa ambayo hata kwa binadamu si rahisi kutofautisha. + +--- **Kanusho**: -Hati hii imetafsiriwa kwa kutumia huduma ya kutafsiri ya AI [Co-op Translator](https://github.com/Azure/co-op-translator). Ingawa tunajitahidi kuhakikisha usahihi, tafadhali fahamu kuwa tafsiri za kiotomatiki zinaweza kuwa na makosa au kutokuwa sahihi. Hati ya asili katika lugha yake ya awali inapaswa kuzingatiwa kama chanzo cha mamlaka. Kwa taarifa muhimu, tafsiri ya kitaalamu ya binadamu inapendekezwa. Hatutawajibika kwa kutoelewana au tafsiri zisizo sahihi zinazotokana na matumizi ya tafsiri hii. \ No newline at end of file +Hati hii imetafsiriwa kwa kutumia huduma ya tafsiri ya AI [Co-op Translator](https://github.com/Azure/co-op-translator). Ingawa tunajitahidi kuhakikisha usahihi, tafadhali fahamu kuwa tafsiri za kiotomatiki zinaweza kuwa na makosa au kutokuwa sahihi. Hati ya asili katika lugha yake ya awali inapaswa kuzingatiwa kama chanzo cha mamlaka. Kwa taarifa muhimu, tafsiri ya kitaalamu ya binadamu inapendekezwa. Hatutawajibika kwa kutoelewana au tafsiri zisizo sahihi zinazotokana na matumizi ya tafsiri hii. \ No newline at end of file diff --git a/translations/th/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb b/translations/th/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb index 31b7fe25..6312d610 100644 --- a/translations/th/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb +++ b/translations/th/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb @@ -4,13 +4,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# การจำแนกใบหน้าของสัตว์เลี้ยง\n", + "# การจำแนกใบหน้าสัตว์เลี้ยง\n", "\n", "งานในห้องปฏิบัติการจาก [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners).\n", "\n", "### การเตรียมข้อมูล\n", "\n", - "ในงานนี้ เราจะมุ่งเน้นไปที่งานการจำแนกที่ค่อนข้างง่าย - การจำแนกใบหน้าของสัตว์เลี้ยง ชุดข้อมูลนี้ประกอบด้วยใบหน้าที่ถูกตัดออกจาก [Oxford-IIIT Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/). มาเริ่มต้นด้วยการโหลดและแสดงผลชุดข้อมูลกันเถอะ\n" + "ในงานนี้ เราจะมุ่งเน้นไปที่งานการจำแนกที่ค่อนข้างง่าย - การจำแนกใบหน้าสัตว์เลี้ยง เราจะใช้ [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/) ซึ่งประกอบด้วยภาพของสุนัขและแมวจาก 37 สายพันธุ์ที่แตกต่างกัน มาเริ่มต้นด้วยการดาวน์โหลดและแสดงผลข้อมูลชุดนี้กันเถอะ\n", + "\n", + "**หมายเหตุ:** Oxford-IIIT Pet Dataset ประกอบด้วยภาพสัตว์เลี้ยงทั้งตัว ภาพจะถูกจัดเรียงตามสายพันธุ์ในโฟลเดอร์ที่ถูกแยกออกมา\n" ] }, { @@ -77,7 +79,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "ตอนนี้เรามาสำรวจไดเรกทอรีย่อยของแต่ละคลาสและแสดงภาพแรกๆ ของแต่ละคลาส:\n" + "ตอนนี้เรามาสำรวจไดเรกทอรีย่อยของแต่ละคลาสและพล็อตภาพแรกๆ ของแต่ละคลาส:\n" ] }, { @@ -86,6 +88,24 @@ "metadata": {}, "outputs": [], "source": [ + "# Note: The Oxford-IIIT Pet Dataset extracts to a folder named 'images'\n", + "# Images are named by breed (e.g., 'Abyssinian_1.jpg')\n", + "# We need to organize them into breed-specific subdirectories\n", + "import os\n", + "from collections import defaultdict\n", + "\n", + "# Organize images by breed\n", + "if not os.path.exists('petfaces'):\n", + " os.makedirs('petfaces')\n", + " for img_file in os.listdir('images'):\n", + " if img_file.endswith(('.jpg', '.png')):\n", + " # Extract breed name from filename (everything before the last underscore and number)\n", + " breed = '_'.join(img_file.split('_')[:-1])\n", + " breed_dir = os.path.join('petfaces', breed)\n", + " if not os.path.exists(breed_dir):\n", + " os.makedirs(breed_dir)\n", + " os.rename(os.path.join('images', img_file), os.path.join(breed_dir, img_file))\n", + "\n", "for cls in os.listdir('petfaces'):\n", " print(cls)\n", " display_images([Image.open(os.path.join('petfaces',cls,x)) \n", @@ -124,13 +144,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## การเตรียมชุดข้อมูลสำหรับ Deep Learning\n", + "## การเตรียมชุดข้อมูลสำหรับการเรียนรู้เชิงลึก\n", "\n", - "เพื่อเริ่มการฝึกสอนเครือข่ายประสาทเทียม เราจำเป็นต้องแปลงภาพทั้งหมดให้เป็นเทนเซอร์ และสร้างเทนเซอร์ที่สอดคล้องกับป้ายกำกับ (หมายเลขคลาส) เฟรมเวิร์กของเครือข่ายประสาทเทียมส่วนใหญ่มีเครื่องมือที่ใช้งานง่ายสำหรับจัดการกับภาพ:\n", + "เพื่อเริ่มต้นการฝึกฝนเครือข่ายประสาทเทียม เราจำเป็นต้องแปลงภาพทั้งหมดเป็นเทนเซอร์ และสร้างเทนเซอร์ที่สอดคล้องกับป้ายกำกับ (หมายเลขคลาส) เฟรมเวิร์กเครือข่ายประสาทเทียมส่วนใหญ่มีเครื่องมือที่ง่ายต่อการจัดการกับภาพ:\n", "* ใน Tensorflow ใช้ `tf.keras.preprocessing.image_dataset_from_directory`\n", "* ใน PyTorch ใช้ `torchvision.datasets.ImageFolder`\n", "\n", - "จากที่คุณเห็นในภาพด้านบน ภาพทั้งหมดมีอัตราส่วนใกล้เคียงกับสี่เหลี่ยมจัตุรัส ดังนั้นเราจำเป็นต้องปรับขนาดภาพทั้งหมดให้เป็นขนาดสี่เหลี่ยมจัตุรัส นอกจากนี้ เรายังสามารถจัดระเบียบภาพในรูปแบบของมินิแบตช์ได้อีกด้วย\n" + "ดังที่คุณเห็นจากภาพด้านบน ภาพทั้งหมดมีอัตราส่วนใกล้เคียงกับรูปทรงสี่เหลี่ยมจัตุรัส ดังนั้นเราจำเป็นต้องปรับขนาดภาพทั้งหมดให้เป็นขนาดสี่เหลี่ยมจัตุรัส นอกจากนี้ เรายังสามารถจัดระเบียบภาพในรูปแบบมินิแบตช์ได้อีกด้วย\n" ] }, { @@ -162,11 +182,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "ตอนนี้เรามาดูขนาดของเทนเซอร์ในชุดข้อมูลของเรากัน หากคุณทำทุกอย่างถูกต้อง ขนาดขององค์ประกอบการฝึกอบรมควรเป็น\n", + "ตอนนี้เรามาพิมพ์ขนาดของเทนเซอร์ในชุดข้อมูลของเรา หากคุณทำทุกอย่างถูกต้อง ขนาดขององค์ประกอบการฝึกอบรมควรเป็น\n", " * `(batch_size,image_size,image_size,3)` สำหรับ Tensorflow, `batch_size,3,image_size,image_size` สำหรับ PyTorch\n", " * `batch_size` สำหรับ Labels\n", - "\n", - "Labels ควรประกอบด้วยตัวเลขที่แสดงจำนวนคลาส\n" + " \n", + " Labels ควรมีตัวเลขที่แสดงจำนวนคลาส\n" ] }, { @@ -231,13 +251,13 @@ "## กำหนดเครือข่ายประสาทเทียม\n", "\n", "สำหรับการจำแนกภาพ คุณควรพิจารณากำหนดเครือข่ายประสาทเทียมแบบคอนโวลูชันที่มีหลายชั้น สิ่งที่ควรระวัง:\n", - "* คำนึงถึงโครงสร้างแบบพีระมิด เช่น จำนวนฟิลเตอร์ควรเพิ่มขึ้นเมื่อชั้นลึกลง\n", + "* คำนึงถึงโครงสร้างแบบพีระมิด เช่น จำนวนฟิลเตอร์ควรเพิ่มขึ้นเมื่อชั้นลึกลงไป\n", "* อย่าลืมฟังก์ชันการกระตุ้นระหว่างชั้น (ReLU) และ Max Pooling\n", "* ตัวจำแนกสุดท้ายสามารถมีหรือไม่มีชั้นซ่อนก็ได้ แต่จำนวนเซลล์ประสาทในชั้นเอาต์พุตควรเท่ากับจำนวนคลาส\n", "\n", - "สิ่งสำคัญคือการตั้งค่าฟังก์ชันการกระตุ้นในชั้นสุดท้าย + ฟังก์ชันการสูญเสียให้ถูกต้อง:\n", + "สิ่งสำคัญคือการตั้งค่าฟังก์ชันการกระตุ้นในชั้นสุดท้ายและฟังก์ชันการสูญเสียให้ถูกต้อง:\n", "* ใน Tensorflow คุณสามารถใช้ `softmax` เป็นฟังก์ชันการกระตุ้น และ `sparse_categorical_crossentropy` เป็นฟังก์ชันการสูญเสีย ความแตกต่างระหว่าง sparse categorical cross-entropy และแบบไม่ sparse คือแบบแรกคาดหวังผลลัพธ์เป็นหมายเลขคลาส ไม่ใช่เวกเตอร์แบบ one-hot\n", - "* ใน PyTorch คุณสามารถตั้งค่าชั้นสุดท้ายโดยไม่มีฟังก์ชันการกระตุ้น และใช้ฟังก์ชันการสูญเสีย `CrossEntropyLoss` ฟังก์ชันนี้จะใช้ softmax โดยอัตโนมัติ\n" + "* ใน PyTorch คุณสามารถมีชั้นสุดท้ายโดยไม่มีฟังก์ชันการกระตุ้น และใช้ฟังก์ชันการสูญเสีย `CrossEntropyLoss` ฟังก์ชันนี้จะใช้ softmax โดยอัตโนมัติ\n" ] }, { @@ -253,11 +273,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## ฝึกอบรมเครือข่ายประสาทเทียม\n", + "## ฝึกฝนเครือข่ายประสาทเทียม\n", "\n", - "ตอนนี้เราพร้อมที่จะฝึกอบรมเครือข่ายประสาทเทียมแล้ว ในระหว่างการฝึกอบรม โปรดเก็บข้อมูลความแม่นยำ (accuracy) ของข้อมูลการฝึก (train data) และข้อมูลการทดสอบ (test data) ในแต่ละ epoch จากนั้นสร้างกราฟความแม่นยำเพื่อดูว่ามีการ overfitting หรือไม่\n", + "ตอนนี้เราพร้อมที่จะฝึกฝนเครือข่ายประสาทเทียมแล้ว ในระหว่างการฝึกฝน โปรดรวบรวมค่าความแม่นยำของข้อมูลการฝึกและข้อมูลการทดสอบในแต่ละรอบ และจากนั้นสร้างกราฟแสดงค่าความแม่นยำเพื่อดูว่ามีการเกิด overfitting หรือไม่\n", "\n", - "> เพื่อเร่งความเร็วในการฝึกอบรม คุณจำเป็นต้องใช้ GPU หากมีให้ใช้งาน โดย TensorFlow/Keras จะใช้ GPU โดยอัตโนมัติ แต่ใน PyTorch คุณจำเป็นต้องย้ายทั้งโมเดลและข้อมูลไปยัง GPU ระหว่างการฝึกอบรมด้วยวิธี `.to()` เพื่อใช้ประโยชน์จากการเร่งความเร็วของ GPU\n" + "> เพื่อเร่งความเร็วในการฝึกฝน คุณจำเป็นต้องใช้ GPU หากมีให้ใช้งาน ในขณะที่ TensorFlow/Keras จะใช้ GPU โดยอัตโนมัติ ใน PyTorch คุณต้องย้ายทั้งโมเดลและข้อมูลไปยัง GPU ระหว่างการฝึกฝนโดยใช้เมธอด `.to()` เพื่อใช้ประโยชน์จากการเร่งความเร็วของ GPU\n" ] }, { @@ -295,20 +315,20 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "คุณสามารถพูดอะไรเกี่ยวกับการเกิด Overfitting? และมีวิธีใดบ้างที่สามารถปรับปรุงความแม่นยำของโมเดลได้\n", + "คุณสามารถพูดถึงเรื่องการเกิด Overfitting ได้อย่างไร? และมีวิธีใดบ้างที่สามารถปรับปรุงความแม่นยำของโมเดลได้\n", "\n", - "## ตัวเลือกเพิ่มเติม: คำนวณ Top3 Accuracy\n", + "## ตัวเลือก: คำนวณ Top-3 Accuracy\n", "\n", - "ในแบบฝึกหัดนี้ เรากำลังจัดการกับการจำแนกประเภทที่มีจำนวนคลาสค่อนข้างมาก (35 คลาส) ดังนั้นผลลัพธ์ของเรา - ความแม่นยำในการตรวจสอบประมาณ 50% - ถือว่าดีมาก ชุดข้อมูลมาตรฐานอย่าง ImageNet มีจำนวนคลาสมากกว่านี้อีก - ถึง 1000 คลาส\n", + "ในแบบฝึกหัดนี้ เรากำลังจัดการกับการจำแนกประเภทที่มีจำนวนคลาสค่อนข้างมาก (35 คลาส) ดังนั้นผลลัพธ์ของเรา - ความแม่นยำในการตรวจสอบประมาณ 50% - ถือว่าดีทีเดียว ชุดข้อมูลมาตรฐาน ImageNet มีจำนวนคลาสมากกว่านี้อีก - ถึง 1000 คลาส\n", "\n", - "ในกรณีเช่นนี้ การทำให้โมเดล **ทำนายคลาสได้ถูกต้องเสมอ** เป็นเรื่องยาก มีบางกรณีที่สายพันธุ์สองสายพันธุ์มีความคล้ายคลึงกันมาก และโมเดลให้ค่าความน่าจะเป็นที่ใกล้เคียงกัน (เช่น 0.45 และ 0.43) หากเราวัดความแม่นยำแบบมาตรฐาน กรณีนี้จะถือว่าเป็นข้อผิดพลาด แม้ว่าโมเดลจะทำผิดพลาดเพียงเล็กน้อยก็ตาม ด้วยเหตุนี้ เรามักจะวัดอีกหนึ่งตัวชี้วัด - ความแม่นยำภายใน 3 การทำนายที่มีความน่าจะเป็นสูงที่สุดของโมเดล\n", + "ในกรณีเช่นนี้ การทำให้โมเดล **ทำนายคลาสได้ถูกต้องเสมอ** เป็นเรื่องยาก มีบางกรณีที่สายพันธุ์สองสายพันธุ์มีความคล้ายคลึงกันมาก และโมเดลให้ค่าความน่าจะเป็นที่ใกล้เคียงกัน (เช่น 0.45 และ 0.43) หากเราวัดความแม่นยำแบบมาตรฐาน กรณีนี้จะถือว่าเป็นข้อผิดพลาด แม้ว่าโมเดลจะทำผิดพลาดเพียงเล็กน้อยก็ตาม ด้วยเหตุนี้ เรามักจะวัดเมตริกอีกตัวหนึ่ง - ความแม่นยำภายใน 3 การทำนายที่มีความน่าจะเป็นสูงที่สุดของโมเดล\n", "\n", - "เราจะถือว่ากรณีนี้ถูกต้อง หากป้ายกำกับเป้าหมายอยู่ภายใน 3 การทำนายที่มีความน่าจะเป็นสูงที่สุดของโมเดล\n", + "เราจะถือว่ากรณีนี้ถูกต้องหากป้ายกำกับเป้าหมายอยู่ภายใน 3 การทำนายที่มีความน่าจะเป็นสูงที่สุดของโมเดล\n", "\n", - "ในการคำนวณ Top-3 Accuracy บนชุดข้อมูลทดสอบ คุณจำเป็นต้องตรวจสอบชุดข้อมูลด้วยตนเอง ใช้เครือข่ายประสาทเทียมเพื่อรับการทำนาย และจากนั้นทำการคำนวณ คำแนะนำบางประการ:\n", + "ในการคำนวณ Top-3 Accuracy บนชุดข้อมูลทดสอบ คุณจำเป็นต้องตรวจสอบชุดข้อมูลด้วยตนเอง ใช้เครือข่ายประสาทเทียมเพื่อรับการทำนาย และทำการคำนวณตามคำแนะนำดังนี้:\n", "\n", - "* ใน Tensorflow ใช้ฟังก์ชัน `tf.nn.in_top_k` เพื่อตรวจสอบว่า `predictions` (ผลลัพธ์ของโมเดล) อยู่ใน top-k (ส่ง `k=3` เป็นพารามิเตอร์) โดยสัมพันธ์กับ `targets` ฟังก์ชันนี้จะคืนค่า tensor ของค่าบูลีน ซึ่งสามารถแปลงเป็น `int` ด้วย `tf.cast` และสะสมค่าด้วย `tf.reduce_sum`\n", - "* ใน PyTorch คุณสามารถใช้ฟังก์ชัน `torch.topk` เพื่อรับดัชนีของคลาสที่มีความน่าจะเป็นสูงสุด และจากนั้นตรวจสอบว่าคลาสที่ถูกต้องอยู่ในนั้นหรือไม่ ดู [ลิงก์นี้](https://gist.github.com/weiaicunzai/2a5ae6eac6712c70bde0630f3e76b77b) สำหรับคำแนะนำเพิ่มเติม\n" + "* ใน Tensorflow ใช้ฟังก์ชัน `tf.nn.in_top_k` เพื่อตรวจสอบว่า `predictions` (ผลลัพธ์ของโมเดล) อยู่ใน top-k หรือไม่ (ส่ง `k=3` เป็นพารามิเตอร์) โดยเปรียบเทียบกับ `targets` ฟังก์ชันนี้จะคืนค่า tensor ของค่าบูลีน ซึ่งสามารถแปลงเป็น `int` ได้โดยใช้ `tf.cast` และสะสมค่าด้วย `tf.reduce_sum`\n", + "* ใน PyTorch คุณสามารถใช้ฟังก์ชัน `torch.topk` เพื่อรับดัชนีของคลาสที่มีความน่าจะเป็นสูงสุด และตรวจสอบว่าคลาสที่ถูกต้องอยู่ในนั้นหรือไม่ ดู [ลิงก์นี้](https://gist.github.com/weiaicunzai/2a5ae6eac6712c70bde0630f3e76b77b) สำหรับคำแนะนำเพิ่มเติม\n" ] }, { @@ -326,7 +346,7 @@ "source": [ "## ตัวเลือกเพิ่มเติม: สร้างการจำแนกประเภทแมวกับสุนัข\n", "\n", - "เรายังต้องการดูว่าการจำแนกประเภทแบบไบนารีระหว่างแมวกับสุนัขของเราจะมีความแม่นยำเพียงใดบนชุดข้อมูลเดียวกันนี้ ในการทำเช่นนี้ เราจำเป็นต้องปรับเปลี่ยนป้ายกำกับ:\n" + "เราต้องการดูว่าการจำแนกประเภทแบบไบนารีระหว่างแมวกับสุนัขจะมีความแม่นยำแค่ไหนในชุดข้อมูลเดียวกัน เพื่อทำสิ่งนี้ เราจำเป็นต้องปรับป้ายกำกับ:\n" ] }, { @@ -352,7 +372,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n---\n\n**ข้อจำกัดความรับผิดชอบ**: \nเอกสารนี้ได้รับการแปลโดยใช้บริการแปลภาษา AI [Co-op Translator](https://github.com/Azure/co-op-translator) แม้ว่าเราจะพยายามให้การแปลมีความถูกต้อง แต่โปรดทราบว่าการแปลอัตโนมัติอาจมีข้อผิดพลาดหรือความไม่แม่นยำ เอกสารต้นฉบับในภาษาต้นทางควรถือเป็นแหล่งข้อมูลที่เชื่อถือได้ สำหรับข้อมูลที่สำคัญ ขอแนะนำให้ใช้บริการแปลภาษาจากผู้เชี่ยวชาญ เราไม่รับผิดชอบต่อความเข้าใจผิดหรือการตีความที่ผิดพลาดซึ่งเกิดจากการใช้การแปลนี้\n" + "\n---\n\n**ข้อจำกัดความรับผิดชอบ**: \nเอกสารนี้ได้รับการแปลโดยใช้บริการแปลภาษา AI [Co-op Translator](https://github.com/Azure/co-op-translator) แม้ว่าเราจะพยายามให้การแปลมีความถูกต้องมากที่สุด แต่โปรดทราบว่าการแปลอัตโนมัติอาจมีข้อผิดพลาดหรือความไม่ถูกต้อง เอกสารต้นฉบับในภาษาดั้งเดิมควรถือเป็นแหล่งข้อมูลที่เชื่อถือได้ สำหรับข้อมูลที่สำคัญ ขอแนะนำให้ใช้บริการแปลภาษามืออาชีพ เราไม่รับผิดชอบต่อความเข้าใจผิดหรือการตีความผิดที่เกิดจากการใช้การแปลนี้\n" ] } ], @@ -378,8 +398,8 @@ "version": "3.9.5" }, "coopTranslator": { - "original_hash": "1de3ae931831253c3198d899da48bfe5", - "translation_date": "2025-08-29T09:46:38+00:00", + "original_hash": "df7d1f7da8d2617b76acd93115776ca4", + "translation_date": "2025-10-03T14:38:03+00:00", "source_file": "lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb", "language_code": "th" } diff --git a/translations/th/lessons/4-ComputerVision/07-ConvNets/lab/README.md b/translations/th/lessons/4-ComputerVision/07-ConvNets/lab/README.md index e851122b..07740061 100644 --- a/translations/th/lessons/4-ComputerVision/07-ConvNets/lab/README.md +++ b/translations/th/lessons/4-ComputerVision/07-ConvNets/lab/README.md @@ -1,29 +1,29 @@ -# การจำแนกใบหน้าของสัตว์เลี้ยง +# การจำแนกใบหน้าสัตว์เลี้ยง งานในห้องปฏิบัติการจาก [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) -## ภารกิจ +## งานที่ต้องทำ -ลองจินตนาการว่าคุณต้องพัฒนาแอปพลิเคชันสำหรับสถานรับเลี้ยงสัตว์เลี้ยงเพื่อจัดเก็บข้อมูลสัตว์ทั้งหมด หนึ่งในฟีเจอร์ที่ยอดเยี่ยมของแอปพลิเคชันนี้คือการค้นหาสายพันธุ์จากภาพถ่ายโดยอัตโนมัติ ซึ่งสามารถทำได้สำเร็จด้วยการใช้โครงข่ายประสาทเทียม +ลองจินตนาการว่าคุณต้องพัฒนาแอปพลิเคชันสำหรับสถานรับเลี้ยงสัตว์เลี้ยงเพื่อจัดเก็บข้อมูลสัตว์เลี้ยงทั้งหมด หนึ่งในฟีเจอร์ที่ยอดเยี่ยมของแอปพลิเคชันนี้คือการค้นหาสายพันธุ์จากภาพถ่ายโดยอัตโนมัติ ซึ่งสามารถทำได้สำเร็จโดยใช้เครือข่ายประสาทเทียม -คุณจำเป็นต้องฝึกโครงข่ายประสาทเทียมแบบคอนโวลูชันเพื่อจำแนกสายพันธุ์ต่าง ๆ ของแมวและสุนัขโดยใช้ชุดข้อมูล **Pet Faces** +คุณต้องฝึกเครือข่ายประสาทเทียมแบบคอนโวลูชันเพื่อจำแนกสายพันธุ์ต่าง ๆ ของแมวและสุนัขโดยใช้ชุดข้อมูล **Pet Faces** ## ชุดข้อมูล -เราจะใช้ชุดข้อมูล **Pet Faces** ซึ่งได้มาจากชุดข้อมูลสัตว์เลี้ยง [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/) ชุดข้อมูลนี้ประกอบด้วยสายพันธุ์สุนัขและแมวทั้งหมด 35 สายพันธุ์ +เราจะใช้ [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/) ซึ่งมีภาพของสุนัขและแมวจาก 37 สายพันธุ์ที่แตกต่างกัน -![ชุดข้อมูลที่เราจะใช้งาน](../../../../../../translated_images/data.50b2a9d5484bdbf0f52f5765b381cec9efe2bd296a98f007f90bedb6ac67f2a8.th.png) +![ชุดข้อมูลที่เราจะใช้](../../../../../../translated_images/data.50b2a9d5484bdbf0f52f5765b381cec9efe2bd296a98f007f90bedb6ac67f2a8.th.png) -ในการดาวน์โหลดชุดข้อมูล ให้ใช้โค้ดนี้: +เพื่อดาวน์โหลดชุดข้อมูล ให้ใช้โค้ดนี้: ```python !wget https://thor.robots.ox.ac.uk/~vgg/data/pets/images.tar.gz @@ -31,15 +31,17 @@ CO_OP_TRANSLATOR_METADATA: !rm images.tar.gz ``` -## เริ่มต้นด้วย Notebook +**หมายเหตุ:** ภาพในชุดข้อมูล Oxford-IIIT Pet Dataset ถูกจัดเรียงตามชื่อไฟล์ (เช่น `Abyssinian_1.jpg`, `Bengal_2.jpg`) โน้ตบุ๊กนี้มีโค้ดสำหรับจัดระเบียบภาพเหล่านี้ลงในไดเรกทอรีเฉพาะสายพันธุ์เพื่อให้ง่ายต่อการจำแนก -เริ่มต้นการทดลองในห้องปฏิบัติการโดยเปิด [PetFaces.ipynb](PetFaces.ipynb) +## เริ่มต้นโน้ตบุ๊ก + +เริ่มต้นงานในห้องปฏิบัติการโดยเปิด [PetFaces.ipynb](PetFaces.ipynb) ## สิ่งที่ได้เรียนรู้ -คุณได้แก้ปัญหาที่ค่อนข้างซับซ้อนเกี่ยวกับการจำแนกรูปภาพตั้งแต่เริ่มต้น! แม้ว่าจะมีจำนวนคลาสที่ค่อนข้างมาก แต่คุณก็ยังสามารถได้ความแม่นยำที่น่าพอใจ! นอกจากนี้ การวัดความแม่นยำแบบ top-k ก็มีเหตุผล เพราะบางคลาสอาจสร้างความสับสนได้ง่าย แม้แต่สำหรับมนุษย์เองก็ตาม +คุณได้แก้ปัญหาที่ค่อนข้างซับซ้อนเกี่ยวกับการจำแนกภาพตั้งแต่เริ่มต้น! มีคลาสจำนวนมาก และคุณยังสามารถได้ความแม่นยำที่เหมาะสม! นอกจากนี้ยังสมเหตุสมผลที่จะวัดความแม่นยำแบบ top-k เพราะบางคลาสอาจสับสนได้ง่าย ซึ่งแม้แต่มนุษย์เองก็อาจแยกแยะไม่ชัดเจน --- **ข้อจำกัดความรับผิดชอบ**: -เอกสารนี้ได้รับการแปลโดยใช้บริการแปลภาษา AI [Co-op Translator](https://github.com/Azure/co-op-translator) แม้ว่าเราจะพยายามให้การแปลมีความถูกต้อง แต่โปรดทราบว่าการแปลอัตโนมัติอาจมีข้อผิดพลาดหรือความไม่แม่นยำ เอกสารต้นฉบับในภาษาต้นทางควรถือเป็นแหล่งข้อมูลที่เชื่อถือได้ สำหรับข้อมูลที่สำคัญ ขอแนะนำให้ใช้บริการแปลภาษาจากผู้เชี่ยวชาญ เราจะไม่รับผิดชอบต่อความเข้าใจผิดหรือการตีความที่ผิดพลาดซึ่งเกิดจากการใช้การแปลนี้ \ No newline at end of file +เอกสารนี้ได้รับการแปลโดยใช้บริการแปลภาษา AI [Co-op Translator](https://github.com/Azure/co-op-translator) แม้ว่าเราจะพยายามให้การแปลมีความถูกต้องมากที่สุด แต่โปรดทราบว่าการแปลอัตโนมัติอาจมีข้อผิดพลาดหรือความไม่ถูกต้อง เอกสารต้นฉบับในภาษาดั้งเดิมควรถือเป็นแหล่งข้อมูลที่เชื่อถือได้ สำหรับข้อมูลที่สำคัญ ขอแนะนำให้ใช้บริการแปลภาษามนุษย์ที่มีความเชี่ยวชาญ เราไม่รับผิดชอบต่อความเข้าใจผิดหรือการตีความผิดที่เกิดจากการใช้การแปลนี้ \ No newline at end of file diff --git a/translations/tl/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb b/translations/tl/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb index 91f293ca..ccf4a776 100644 --- a/translations/tl/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb +++ b/translations/tl/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb @@ -6,11 +6,13 @@ "source": [ "# Pag-uuri ng Mukha ng Alagang Hayop\n", "\n", - "Takdang-Aralin mula sa [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners).\n", + "Takdang-aralin mula sa [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners).\n", "\n", - "### Pagkuha ng Datos\n", + "### Pagkuha ng Data\n", "\n", - "Sa takdang-araling ito, magtutuon tayo sa isang medyo simpleng gawain ng pag-uuri - ang pag-uuri ng mukha ng alagang hayop. Ang dataset na ito ay binubuo ng mga hiwa-hiwalay na mukha mula sa [Oxford-IIIT Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/). Magsimula tayo sa pag-load at pag-visualize ng dataset.\n" + "Sa takdang-araling ito, magtutuon tayo sa isang medyo simpleng gawain ng pag-uuri - ang pag-uuri ng mukha ng alagang hayop. Gagamitin natin ang [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/), na naglalaman ng mga larawan ng 37 iba't ibang lahi ng aso at pusa. Magsimula tayo sa pag-download at pag-visualize ng dataset.\n", + "\n", + "**Tandaan:** Ang Oxford-IIIT Pet Dataset ay naglalaman ng buong larawan ng mga alagang hayop. Ang mga larawan ay iaayos ayon sa lahi sa na-extract na folder.\n" ] }, { @@ -86,6 +88,24 @@ "metadata": {}, "outputs": [], "source": [ + "# Note: The Oxford-IIIT Pet Dataset extracts to a folder named 'images'\n", + "# Images are named by breed (e.g., 'Abyssinian_1.jpg')\n", + "# We need to organize them into breed-specific subdirectories\n", + "import os\n", + "from collections import defaultdict\n", + "\n", + "# Organize images by breed\n", + "if not os.path.exists('petfaces'):\n", + " os.makedirs('petfaces')\n", + " for img_file in os.listdir('images'):\n", + " if img_file.endswith(('.jpg', '.png')):\n", + " # Extract breed name from filename (everything before the last underscore and number)\n", + " breed = '_'.join(img_file.split('_')[:-1])\n", + " breed_dir = os.path.join('petfaces', breed)\n", + " if not os.path.exists(breed_dir):\n", + " os.makedirs(breed_dir)\n", + " os.rename(os.path.join('images', img_file), os.path.join(breed_dir, img_file))\n", + "\n", "for cls in os.listdir('petfaces'):\n", " print(cls)\n", " display_images([Image.open(os.path.join('petfaces',cls,x)) \n", @@ -126,11 +146,11 @@ "source": [ "## Paghahanda ng dataset para sa Deep Learning\n", "\n", - "Upang masimulan ang pagsasanay ng ating neural network, kailangan nating i-convert ang lahat ng mga larawan sa tensors, at gumawa rin ng mga tensors na tumutugma sa mga label (mga numero ng klase). Karamihan sa mga neural network frameworks ay may simpleng mga tool para sa pagproseso ng mga larawan:\n", + "Para masimulan ang pag-train ng ating neural network, kailangan nating i-convert ang lahat ng larawan sa tensors, at gumawa rin ng tensors na tumutugma sa mga label (mga numero ng klase). Karamihan sa mga neural network frameworks ay may simpleng mga tool para sa pagproseso ng mga larawan:\n", "* Sa Tensorflow, gamitin ang `tf.keras.preprocessing.image_dataset_from_directory`\n", "* Sa PyTorch, gamitin ang `torchvision.datasets.ImageFolder`\n", "\n", - "Tulad ng nakita mo mula sa mga larawan sa itaas, karamihan sa mga ito ay may halos parisukat na ratio ng larawan, kaya kailangan nating i-resize ang lahat ng mga larawan sa parisukat na sukat. Bukod dito, maaari rin nating ayusin ang mga larawan sa minibatches.\n" + "Tulad ng nakita mo sa mga larawan sa itaas, karamihan sa mga ito ay malapit sa square image ratio, kaya kailangan nating i-resize ang lahat ng larawan sa square size. Bukod dito, maaari nating ayusin ang mga larawan sa minibatches.\n" ] }, { @@ -162,11 +182,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Ngayon, ipapakita natin ang laki ng mga tensor sa ating dataset. Kung nagawa mo nang tama ang lahat, ang laki ng mga training elements ay dapat na:\n", + "Ngayon, ipapakita natin ang laki ng mga tensor sa ating dataset. Kung nagawa mo nang tama ang lahat, ang laki ng mga elemento ng pagsasanay ay dapat na\n", " * `(batch_size,image_size,image_size,3)` para sa Tensorflow, `batch_size,3,image_size,image_size` para sa PyTorch\n", " * `batch_size` para sa Labels\n", - " \n", - " Ang Labels ay dapat maglaman ng mga numero ng klase.\n" + "\n", + "Ang Labels ay dapat maglaman ng mga numero ng mga klase.\n" ] }, { @@ -255,9 +275,9 @@ "source": [ "## Sanayin ang Neural Network\n", "\n", - "Ngayon, handa na tayong sanayin ang neural network. Habang nagsasanay, mangyaring kolektahin ang accuracy sa train at test data sa bawat epoch, at pagkatapos ay i-plot ang accuracy upang makita kung may overfitting.\n", + "Ngayon, handa na tayong sanayin ang neural network. Sa panahon ng pagsasanay, mangyaring kolektahin ang accuracy sa train at test data sa bawat epoch, at pagkatapos ay i-plot ang accuracy upang makita kung may overfitting.\n", "\n", - "> Upang mapabilis ang pagsasanay, kailangan mong gumamit ng GPU kung ito ay magagamit. Habang ang TensorFlow/Keras ay awtomatikong gagamit ng GPU, sa PyTorch kailangan mong ilipat ang parehong model at data sa GPU habang nagsasanay gamit ang `.to()` method upang magamit ang bilis ng GPU.\n" + "> Para mapabilis ang pagsasanay, kailangan mong gumamit ng GPU kung available. Habang awtomatikong gagamitin ng TensorFlow/Keras ang GPU, sa PyTorch kailangan mong ilipat ang parehong modelo at data sa GPU sa panahon ng pagsasanay gamit ang `.to()` method upang magamit ang GPU acceleration.\n" ] }, { @@ -295,20 +315,20 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Ano ang masasabi mo tungkol sa overfitting? Ano ang maaaring gawin upang mapabuti ang accuracy ng modelo?\n", + "Ano ang masasabi mo tungkol sa overfitting? Ano ang maaaring gawin upang mapabuti ang katumpakan ng modelo?\n", "\n", "## Opsyonal: Kalkulahin ang Top-3 Accuracy\n", "\n", - "Sa ehersisyong ito, ang ating tinatrabaho ay classification na may medyo mataas na bilang ng mga klase (35), kaya ang ating resulta - humigit-kumulang 50% validation accuracy - ay maituturing na maganda. Ang karaniwang ImageNet dataset ay may mas marami pa - 1000 klase.\n", + "Sa ehersisyong ito, ang ating tinatrabaho ay isang classification na may medyo mataas na bilang ng mga klase (35), kaya ang ating resulta - humigit-kumulang 50% validation accuracy - ay medyo maganda. Ang karaniwang dataset ng ImageNet ay may mas marami pa - 1000 klase.\n", "\n", - "Sa ganitong mga kaso, mahirap tiyakin na ang modelo ay **palaging** tama sa pag-predict ng klase. May mga pagkakataon na ang dalawang breed ay halos magkapareho, at ang modelo ay nagbibigay ng halos magkaparehong probabilidad (hal., 0.45 at 0.43). Kung susukatin natin ang standard accuracy, ito ay ituturing na maling kaso, kahit na napakaliit lang ng pagkakamali ng modelo. Dahil dito, madalas tayong gumagamit ng ibang metric - ang accuracy sa loob ng top 3 pinaka-probable na predictions ng modelo.\n", + "Sa ganitong mga kaso, mahirap tiyakin na ang modelo ay **palaging** tama sa pag-predict ng klase. May mga pagkakataon na ang dalawang breed ay halos magkapareho, at ang modelo ay nagbibigay ng halos magkaparehong probabilidad (hal., 0.45 at 0.43). Kung susukatin natin ang karaniwang accuracy, ito ay ituturing na maling kaso, kahit na napakaliit ng pagkakamali ng modelo. Dahil dito, madalas nating sinusukat ang isa pang metric - ang accuracy sa loob ng top 3 pinaka-probable na prediksyon ng modelo.\n", "\n", - "Itinuturing natin na tama ang kaso kung ang target label ay nasa loob ng top 3 predictions ng modelo.\n", + "Itinuturing nating tama ang kaso kung ang target label ay nasa loob ng top 3 prediksyon ng modelo.\n", "\n", - "Upang makalkula ang top-3 accuracy sa test dataset, kailangan mong manu-manong suriin ang dataset, i-apply ang neural network upang makuha ang prediction, at pagkatapos ay gawin ang mga kalkulasyon. Narito ang ilang mga pahiwatig:\n", + "Upang makalkula ang top-3 accuracy sa test dataset, kailangan mong manu-manong suriin ang dataset, i-apply ang neural network upang makuha ang prediksyon, at pagkatapos ay gawin ang mga kalkulasyon. Ilang mga pahiwatig:\n", "\n", - "* Sa Tensorflow, gamitin ang `tf.nn.in_top_k` function upang makita kung ang `predictions` (output ng modelo) ay nasa top-k (ipasa ang `k=3` bilang parameter), kaugnay ng `targets`. Ang function na ito ay nagbabalik ng tensor ng boolean values, na maaaring i-convert sa `int` gamit ang `tf.cast`, at pagkatapos ay i-accumulate gamit ang `tf.reduce_sum`.\n", - "* Sa PyTorch, maaari mong gamitin ang `torch.topk` function upang makuha ang mga indices ng mga klase na may pinakamataas na probabilidad, at pagkatapos ay tingnan kung ang tamang klase ay kabilang sa mga ito. Tingnan ang [ito](https://gist.github.com/weiaicunzai/2a5ae6eac6712c70bde0630f3e76b77b) para sa karagdagang pahiwatig.\n" + "* Sa Tensorflow, gamitin ang `tf.nn.in_top_k` na function upang makita kung ang `predictions` (output ng modelo) ay nasa top-k (ipasa ang `k=3` bilang parameter), kaugnay sa `targets`. Ang function na ito ay nagbabalik ng tensor ng mga boolean values, na maaaring i-convert sa `int` gamit ang `tf.cast`, at pagkatapos ay i-accumulate gamit ang `tf.reduce_sum`.\n", + "* Sa PyTorch, maaari mong gamitin ang `torch.topk` na function upang makuha ang mga indices ng mga klase na may pinakamataas na probabilidad, at pagkatapos ay tingnan kung ang tamang klase ay kabilang sa mga ito. Tingnan ang [ito](https://gist.github.com/weiaicunzai/2a5ae6eac6712c70bde0630f3e76b77b) para sa higit pang mga pahiwatig.\n" ] }, { @@ -324,9 +344,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Opsyonal: Gumawa ng klasipikasyon ng Pusa vs. Aso\n", + "## Opsyonal: Gumawa ng klasipikasyon ng Pusa laban sa Aso\n", "\n", - "Gusto rin naming makita kung gaano katumpak ang aming binary na klasipikasyon ng pusa vs. aso sa parehong dataset. Para magawa ito, kailangan nating ayusin ang mga label:\n" + "Gusto rin naming makita kung gaano katumpak ang aming binary na klasipikasyon ng pusa laban sa aso sa parehong dataset. Upang gawin ito, kailangan nating ayusin ang mga label:\n" ] }, { @@ -352,7 +372,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n---\n\n**Paunawa**: \nAng dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, tandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang katutubong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na dulot ng paggamit ng pagsasaling ito.\n" + "\n---\n\n**Paunawa**: \nAng dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, mangyaring tandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang katutubong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na dulot ng paggamit ng pagsasaling ito.\n" ] } ], @@ -378,8 +398,8 @@ "version": "3.9.5" }, "coopTranslator": { - "original_hash": "1de3ae931831253c3198d899da48bfe5", - "translation_date": "2025-08-28T03:05:04+00:00", + "original_hash": "df7d1f7da8d2617b76acd93115776ca4", + "translation_date": "2025-10-03T14:43:26+00:00", "source_file": "lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb", "language_code": "tl" } diff --git a/translations/tl/lessons/4-ComputerVision/07-ConvNets/lab/README.md b/translations/tl/lessons/4-ComputerVision/07-ConvNets/lab/README.md index a778dc38..c34966f8 100644 --- a/translations/tl/lessons/4-ComputerVision/07-ConvNets/lab/README.md +++ b/translations/tl/lessons/4-ComputerVision/07-ConvNets/lab/README.md @@ -1,8 +1,8 @@ # Evcil Hayvan Yüzlerinin Sınıflandırılması -[AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) kapsamında bir laboratuvar ödevi. +[AI for Beginners Müfredatı](https://github.com/microsoft/ai-for-beginners) kapsamında bir laboratuvar görevi. ## Görev -Bir evcil hayvan yuvası için tüm evcil hayvanları kataloglayacak bir uygulama geliştirmeniz gerektiğini hayal edin. Böyle bir uygulamanın harika özelliklerinden biri, bir fotoğraftan otomatik olarak cinsin tespit edilmesi olurdu. Bu, sinir ağları kullanılarak başarıyla yapılabilir. +Bir evcil hayvan yuvası için tüm evcil hayvanları kataloglamak amacıyla bir uygulama geliştirmeniz gerektiğini hayal edin. Böyle bir uygulamanın harika özelliklerinden biri, bir fotoğraftan otomatik olarak cinsin keşfedilmesi olacaktır. Bu, sinir ağları kullanılarak başarıyla yapılabilir. -**Pet Faces** veri kümesini kullanarak farklı kedi ve köpek cinslerini sınıflandırmak için bir evrişimli sinir ağı eğitmeniz gerekiyor. +**Pet Faces** veri setini kullanarak farklı kedi ve köpek cinslerini sınıflandırmak için bir evrişimli sinir ağı eğitmeniz gerekiyor. -## Veri Kümesi +## Veri Seti -**Pet Faces** veri kümesini kullanacağız. Bu veri kümesi, [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/) evcil hayvan veri kümesinden türetilmiştir. 35 farklı köpek ve kedi cinsini içerir. +[Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/) veri setini kullanacağız. Bu veri seti, 37 farklı köpek ve kedi cinsine ait görüntüler içerir. -![Ele alacağımız veri kümesi](../../../../../../translated_images/data.50b2a9d5484bdbf0f52f5765b381cec9efe2bd296a98f007f90bedb6ac67f2a8.tr.png) +![Çalışacağımız veri seti](../../../../../../translated_images/data.50b2a9d5484bdbf0f52f5765b381cec9efe2bd296a98f007f90bedb6ac67f2a8.tr.png) -Veri kümesini indirmek için şu kod parçasını kullanın: +Veri setini indirmek için şu kod parçacığını kullanın: ```python !wget https://thor.robots.ox.ac.uk/~vgg/data/pets/images.tar.gz @@ -31,13 +31,17 @@ Veri kümesini indirmek için şu kod parçasını kullanın: !rm images.tar.gz ``` -## Başlangıç Not Defteri +**Not:** Oxford-IIIT Pet Dataset görüntüleri dosya adına göre düzenlenmiştir (örneğin, `Abyssinian_1.jpg`, `Bengal_2.jpg`). Notebook, bu görüntüleri daha kolay sınıflandırma için cinslere özgü alt dizinlere organize etmek üzere kod içerir. -Laboratuvara [PetFaces.ipynb](../../../../../../lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb) dosyasını açarak başlayın. +## Başlangıç Notebook'u + +Laboratuvara [PetFaces.ipynb](PetFaces.ipynb) dosyasını açarak başlayın. ## Çıkarım -Sıfırdan bir görüntü sınıflandırma problemini çözmeyi başardınız! Oldukça fazla sınıf vardı ve yine de makul bir doğruluk elde edebildiniz! Ayrıca, top-k doğruluğunu ölçmek mantıklıdır, çünkü insanlar için bile açıkça farklı olmayan bazı sınıfları karıştırmak kolaydır. +Sıfırdan nispeten karmaşık bir görüntü sınıflandırma problemini çözdünüz! Oldukça fazla sınıf vardı ve yine de makul bir doğruluk elde edebildiniz! Ayrıca, top-k doğruluğu ölçmek mantıklıdır, çünkü bazı sınıfları karıştırmak kolaydır; hatta insanlar için bile açıkça farklı olmayan sınıflar olabilir. + +--- **Feragatname**: -Bu belge, AI çeviri hizmeti [Co-op Translator](https://github.com/Azure/co-op-translator) kullanılarak çevrilmiştir. Doğruluk için çaba göstersek de, otomatik çevirilerin hata veya yanlışlıklar içerebileceğini lütfen unutmayın. Belgenin orijinal dili, yetkili kaynak olarak kabul edilmelidir. Kritik bilgiler için profesyonel insan çevirisi önerilir. Bu çevirinin kullanımından kaynaklanan yanlış anlamalar veya yanlış yorumlamalar için sorumluluk kabul etmiyoruz. \ No newline at end of file +Bu belge, AI çeviri hizmeti [Co-op Translator](https://github.com/Azure/co-op-translator) kullanılarak çevrilmiştir. Doğruluk için çaba göstersek de, otomatik çevirilerin hata veya yanlışlık içerebileceğini lütfen unutmayın. Belgenin orijinal dili, yetkili kaynak olarak kabul edilmelidir. Kritik bilgiler için profesyonel insan çevirisi önerilir. Bu çevirinin kullanımından kaynaklanan yanlış anlamalar veya yanlış yorumlamalar için sorumluluk kabul etmiyoruz. \ No newline at end of file diff --git a/translations/tw/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb b/translations/tw/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb index 39431a98..6245fff1 100644 --- a/translations/tw/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb +++ b/translations/tw/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb @@ -10,7 +10,9 @@ "\n", "### 獲取數據\n", "\n", - "在這次作業中,我們將專注於一個相對簡單的分類任務——寵物臉部的分類。這個數據集包含從 [Oxford-IIIT Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/) 中裁剪出的臉部圖像。讓我們從載入並可視化數據集開始。\n" + "在這次作業中,我們將專注於一個相對簡單的分類任務——寵物臉部的分類。我們將使用 [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/),該數據集包含 37 種不同品種的狗和貓的圖片。讓我們從下載並可視化數據集開始。\n", + "\n", + "**注意:** Oxford-IIIT Pet Dataset 包含完整的寵物圖片。提取後的文件夾中,圖片將按照品種進行整理。\n" ] }, { @@ -46,7 +48,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "我們將定義通用函數以顯示列表中的一系列圖像:\n" + "我們將定義通用函數以從列表中顯示一系列圖像:\n" ] }, { @@ -86,6 +88,24 @@ "metadata": {}, "outputs": [], "source": [ + "# Note: The Oxford-IIIT Pet Dataset extracts to a folder named 'images'\n", + "# Images are named by breed (e.g., 'Abyssinian_1.jpg')\n", + "# We need to organize them into breed-specific subdirectories\n", + "import os\n", + "from collections import defaultdict\n", + "\n", + "# Organize images by breed\n", + "if not os.path.exists('petfaces'):\n", + " os.makedirs('petfaces')\n", + " for img_file in os.listdir('images'):\n", + " if img_file.endswith(('.jpg', '.png')):\n", + " # Extract breed name from filename (everything before the last underscore and number)\n", + " breed = '_'.join(img_file.split('_')[:-1])\n", + " breed_dir = os.path.join('petfaces', breed)\n", + " if not os.path.exists(breed_dir):\n", + " os.makedirs(breed_dir)\n", + " os.rename(os.path.join('images', img_file), os.path.join(breed_dir, img_file))\n", + "\n", "for cls in os.listdir('petfaces'):\n", " print(cls)\n", " display_images([Image.open(os.path.join('petfaces',cls,x)) \n", @@ -96,7 +116,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "讓我們也定義我們數據集中的類別數:\n" + "讓我們也定義我們數據集中的類別數量:\n" ] }, { @@ -124,9 +144,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## 準備深度學習的數據集\n", + "## 為深度學習準備數據集\n", "\n", - "在開始訓練神經網絡之前,我們需要將所有圖片轉換為張量,並且創建與標籤(類別編號)對應的張量。大多數神經網絡框架都提供了簡單的工具來處理圖片:\n", + "在開始訓練我們的神經網絡之前,我們需要將所有圖片轉換為張量,並且還需要創建與標籤(類別編號)對應的張量。大多數神經網絡框架都包含一些簡單的工具來處理圖片:\n", "* 在 Tensorflow 中,使用 `tf.keras.preprocessing.image_dataset_from_directory`\n", "* 在 PyTorch 中,使用 `torchvision.datasets.ImageFolder`\n", "\n", @@ -146,7 +166,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "現在我們需要將數據集分成訓練部分和測試部分:\n" + "現在我們需要將數據集分成訓練集和測試集:\n" ] }, { @@ -165,8 +185,8 @@ "現在讓我們列印資料集中張量的大小。如果你已正確完成所有步驟,訓練元素的大小應該是:\n", " * 對於 Tensorflow,應為 `(batch_size,image_size,image_size,3)`;對於 PyTorch,應為 `batch_size,3,image_size,image_size`\n", " * 標籤的大小應為 `batch_size`\n", - "\n", - "標籤應包含類別的數字。\n" + " \n", + " 標籤應包含類別的數字。\n" ] }, { @@ -228,16 +248,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## 定義一個神經網路\n", + "## 定義神經網路\n", "\n", - "對於圖像分類,你可能需要定義一個具有多層的卷積神經網路。需要注意的事項:\n", - "* 請記住金字塔結構,也就是說,隨著網路加深,濾波器的數量應該增加。\n", - "* 不要忘記在層與層之間加入激活函數(如 ReLU)以及最大池化(Max Pooling)。\n", + "針對影像分類,您可能需要定義一個具有多層的卷積神經網路。需要注意的事項:\n", + "* 請記住金字塔架構,也就是說,隨著網路加深,濾波器的數量應該增加。\n", + "* 別忘了在層之間加入激活函數(例如 ReLU)以及最大池化(Max Pooling)。\n", "* 最終的分類器可以有隱藏層,也可以沒有,但輸出神經元的數量應該等於分類的類別數。\n", "\n", - "一個重要的點是要正確設置最後一層的激活函數和損失函數:\n", - "* 在 Tensorflow 中,你可以使用 `softmax` 作為激活函數,並使用 `sparse_categorical_crossentropy` 作為損失函數。稀疏分類交叉熵(sparse categorical cross-entropy)與非稀疏的區別在於,前者的輸出是類別的數字,而不是 one-hot 向量。\n", - "* 在 PyTorch 中,你可以讓最後一層沒有激活函數,並使用 `CrossEntropyLoss` 作為損失函數。這個函數會自動應用 softmax。\n" + "一個重要的部分是正確設置最後一層的激活函數和損失函數:\n", + "* 在 Tensorflow 中,您可以使用 `softmax` 作為激活函數,並使用 `sparse_categorical_crossentropy` 作為損失函數。稀疏類別交叉熵(sparse categorical cross-entropy)與非稀疏的差異在於前者期望輸出為類別的編號,而不是 one-hot 向量。\n", + "* 在 PyTorch 中,最後一層可以不使用激活函數,並使用 `CrossEntropyLoss` 作為損失函數。此函數會自動應用 softmax。\n" ] }, { @@ -255,9 +275,9 @@ "source": [ "## 訓練神經網路\n", "\n", - "現在我們準備開始訓練神經網路。在訓練過程中,請在每個訓練週期(epoch)收集訓練數據和測試數據的準確率,然後繪製準確率圖表,以檢查是否出現過擬合的情況。\n", + "現在我們準備好訓練神經網路了。在訓練過程中,請在每個訓練週期收集訓練和測試數據的準確率,然後繪製準確率圖表,以檢查是否出現過度擬合的情況。\n", "\n", - "> 為了加快訓練速度,如果有可用的 GPU,請務必使用它。雖然 TensorFlow/Keras 會自動使用 GPU,但在使用 PyTorch 時,您需要在訓練過程中使用 `.to()` 方法將模型和數據移動到 GPU 上,才能利用 GPU 的加速功能。\n" + "> 為了加快訓練速度,如果有 GPU 可用,請使用 GPU。雖然 TensorFlow/Keras 會自動使用 GPU,但在 PyTorch 中,您需要在訓練過程中使用 `.to()` 方法將模型和數據移動到 GPU 上,以充分利用 GPU 的加速功能。\n" ] }, { @@ -301,14 +321,14 @@ "\n", "在這次練習中,我們處理的是具有相當多類別(35類)的分類問題,因此我們的結果——大約50%的驗證準確率——已經相當不錯了。標準的 ImageNet 數據集甚至有更多類別——1000類。\n", "\n", - "在這種情況下,很難保證模型**總是**能正確預測類別。有些情況下,兩個品種可能非常相似,而模型返回的概率也非常接近(例如,0.45 和 0.43)。如果我們測量標準準確率,這將被視為錯誤案例,儘管模型只犯了很小的錯誤。因此,我們經常測量另一個指標——模型最可能的前三個預測中的準確率。\n", + "在這種情況下,很難保證模型**總是**正確預測類別。有些情況下,兩個品種非常相似,模型可能返回非常接近的概率(例如,0.45 和 0.43)。如果我們測量標準準確率,這將被視為錯誤案例,儘管模型只犯了很小的錯誤。因此,我們通常會測量另一個指標——模型最可能的前三個預測中的準確率。\n", "\n", "如果目標標籤包含在模型的前三個預測中,我們就認為該案例是準確的。\n", "\n", - "要在測試數據集上計算 top-3 準確率,您需要手動遍歷數據集,應用神經網絡以獲得預測,然後進行計算。一些提示:\n", + "要在測試數據集上計算 top-3 準確率,您需要手動遍歷數據集,應用神經網絡進行預測,然後進行計算。一些提示:\n", "\n", - "* 在 Tensorflow 中,使用 `tf.nn.in_top_k` 函數來檢查 `predictions`(模型的輸出)是否在 top-k(將 `k=3` 作為參數),相對於 `targets`。此函數返回布爾值的張量,可以使用 `tf.cast` 轉換為 `int`,然後使用 `tf.reduce_sum` 累加。\n", - "* 在 PyTorch 中,您可以使用 `torch.topk` 函數獲取具有最高概率的類別索引,然後檢查正確的類別是否屬於其中。請參考[這裡](https://gist.github.com/weiaicunzai/2a5ae6eac6712c70bde0630f3e76b77b)以獲取更多提示。\n" + "* 在 Tensorflow 中,可以使用 `tf.nn.in_top_k` 函數來檢查 `predictions`(模型的輸出)是否在 top-k(將 `k=3` 作為參數),相對於 `targets`。此函數返回布爾值的張量,可以使用 `tf.cast` 轉換為 `int`,然後使用 `tf.reduce_sum` 累加。\n", + "* 在 PyTorch 中,可以使用 `torch.topk` 函數獲取具有最高概率的類別索引,然後檢查正確的類別是否屬於其中。請參考[這裡](https://gist.github.com/weiaicunzai/2a5ae6eac6712c70bde0630f3e76b77b)以獲取更多提示。\n" ] }, { @@ -326,7 +346,7 @@ "source": [ "## 可選:建立貓 vs. 狗分類\n", "\n", - "我們也想看看在相同的數據集上,我們的二元貓 vs. 狗分類的準確性如何。為此,我們需要調整標籤:\n" + "我們也希望了解在相同的數據集上,我們的二元貓 vs. 狗分類的準確性如何。為此,我們需要調整標籤:\n" ] }, { @@ -352,7 +372,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n---\n\n**免責聲明**: \n本文件已使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們努力確保翻譯的準確性,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵信息,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋不承擔責任。\n" + "\n---\n\n**免責聲明**: \n本文件已使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵資訊,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋不承擔責任。\n" ] } ], @@ -378,8 +398,8 @@ "version": "3.9.5" }, "coopTranslator": { - "original_hash": "1de3ae931831253c3198d899da48bfe5", - "translation_date": "2025-08-31T09:35:15+00:00", + "original_hash": "df7d1f7da8d2617b76acd93115776ca4", + "translation_date": "2025-10-03T14:30:11+00:00", "source_file": "lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb", "language_code": "tw" } diff --git a/translations/tw/lessons/4-ComputerVision/07-ConvNets/lab/README.md b/translations/tw/lessons/4-ComputerVision/07-ConvNets/lab/README.md index f28fee6e..2e8bfd5a 100644 --- a/translations/tw/lessons/4-ComputerVision/07-ConvNets/lab/README.md +++ b/translations/tw/lessons/4-ComputerVision/07-ConvNets/lab/README.md @@ -1,25 +1,25 @@ # 寵物面孔分類 -來自 [AI 初學者課程](https://github.com/microsoft/ai-for-beginners) 的實驗作業。 +來自 [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) 的實驗作業。 ## 任務 -想像一下,你需要開發一個寵物托育應用程式來記錄所有的寵物。這樣的應用程式的一個重要功能就是能夠根據照片自動識別寵物的品種。這可以通過神經網絡成功實現。 +想像一下,你需要開發一個寵物托育應用程式,用來記錄所有的寵物。這樣的應用程式的一個重要功能就是能夠根據照片自動辨識寵物的品種。這可以通過神經網絡成功實現。 -你需要訓練一個卷積神經網絡來使用 **Pet Faces** 數據集分類不同品種的貓和狗。 +你需要訓練一個卷積神經網絡來分類不同品種的貓和狗,使用 **Pet Faces** 數據集。 ## 數據集 -我們將使用 **Pet Faces** 數據集,該數據集源自 [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/) 寵物數據集。它包含 35 種不同品種的狗和貓。 +我們將使用 [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/),該數據集包含 37 種不同品種的狗和貓的圖片。 ![我們將處理的數據集](../../../../../../translated_images/data.50b2a9d5484bdbf0f52f5765b381cec9efe2bd296a98f007f90bedb6ac67f2a8.tw.png) @@ -31,13 +31,17 @@ CO_OP_TRANSLATOR_METADATA: !rm images.tar.gz ``` +**注意:** Oxford-IIIT Pet Dataset 的圖片是按照檔名組織的(例如,`Abyssinian_1.jpg`,`Bengal_2.jpg`)。筆記本中包含了將這些圖片整理到按品種分類的子目錄中的程式碼,以便於分類。 + ## 啟動筆記本 -通過打開 [PetFaces.ipynb](../../../../../../lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb) 開始實驗。 +通過打開 [PetFaces.ipynb](PetFaces.ipynb) 開始實驗。 ## 收穫 -你已經從零開始解決了一個相對複雜的圖像分類問題!儘管有很多類別,你仍然能夠獲得合理的準確率!同時,測量 top-k 準確率也是有意義的,因為有些類別即使對人類來說也不容易區分。 +你已經從零開始解決了一個相對複雜的圖像分類問題!儘管有很多類別,你仍然能夠獲得合理的準確率!此外,測量 top-k 準確率也是有意義的,因為有些類別即使對人類來說也不容易區分,容易混淆。 + +--- **免責聲明**: -本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤讀概不負責。 \ No newline at end of file +本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們努力確保翻譯的準確性,但請注意,自動翻譯可能包含錯誤或不精確之處。原始文件的母語版本應被視為權威來源。對於關鍵資訊,建議使用專業人工翻譯。我們對因使用此翻譯而產生的任何誤解或錯誤解釋不承擔責任。 \ No newline at end of file diff --git a/translations/uk/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb b/translations/uk/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb index 3df1d2a2..0335f54e 100644 --- a/translations/uk/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb +++ b/translations/uk/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb @@ -10,7 +10,9 @@ "\n", "### Отримання даних\n", "\n", - "У цьому завданні ми зосередимося на відносно простій задачі класифікації - класифікації облич домашніх тварин. Цей набір даних складається з вирізаних облич із [Oxford-IIIT Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/). Давайте почнемо з завантаження та візуалізації набору даних.\n" + "У цьому завданні ми зосередимося на відносно простій задачі класифікації — класифікації облич домашніх тварин. Ми будемо використовувати [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/), який містить зображення 37 різних порід собак і котів. Почнемо з завантаження та візуалізації набору даних.\n", + "\n", + "**Примітка:** Набір даних Oxford-IIIT Pet Dataset містить повні зображення домашніх тварин. Зображення будуть організовані за породами у витягнутій папці.\n" ] }, { @@ -86,6 +88,24 @@ "metadata": {}, "outputs": [], "source": [ + "# Note: The Oxford-IIIT Pet Dataset extracts to a folder named 'images'\n", + "# Images are named by breed (e.g., 'Abyssinian_1.jpg')\n", + "# We need to organize them into breed-specific subdirectories\n", + "import os\n", + "from collections import defaultdict\n", + "\n", + "# Organize images by breed\n", + "if not os.path.exists('petfaces'):\n", + " os.makedirs('petfaces')\n", + " for img_file in os.listdir('images'):\n", + " if img_file.endswith(('.jpg', '.png')):\n", + " # Extract breed name from filename (everything before the last underscore and number)\n", + " breed = '_'.join(img_file.split('_')[:-1])\n", + " breed_dir = os.path.join('petfaces', breed)\n", + " if not os.path.exists(breed_dir):\n", + " os.makedirs(breed_dir)\n", + " os.rename(os.path.join('images', img_file), os.path.join(breed_dir, img_file))\n", + "\n", "for cls in os.listdir('petfaces'):\n", " print(cls)\n", " display_images([Image.open(os.path.join('petfaces',cls,x)) \n", @@ -126,11 +146,11 @@ "source": [ "## Підготовка набору даних для глибокого навчання\n", "\n", - "Щоб розпочати навчання нашої нейронної мережі, нам потрібно перетворити всі зображення на тензори, а також створити тензори, що відповідають міткам (номерам класів). Більшість фреймворків для нейронних мереж містять прості інструменти для роботи із зображеннями:\n", + "Щоб розпочати навчання нашої нейронної мережі, необхідно перетворити всі зображення на тензори, а також створити тензори, що відповідають міткам (номерам класів). Більшість фреймворків для нейронних мереж мають прості інструменти для роботи із зображеннями:\n", "* У Tensorflow використовуйте `tf.keras.preprocessing.image_dataset_from_directory`\n", "* У PyTorch використовуйте `torchvision.datasets.ImageFolder`\n", "\n", - "Як ви могли помітити на зображеннях вище, усі вони мають співвідношення сторін, близьке до квадратного, тому нам потрібно змінити розмір усіх зображень до квадратного формату. Також ми можемо організувати зображення в мініпакети.\n" + "Як ви могли побачити на зображеннях вище, всі вони мають співвідношення сторін, близьке до квадратного, тому нам потрібно змінити розмір усіх зображень до квадратного формату. Також ми можемо організувати зображення в мініпакети.\n" ] }, { @@ -162,7 +182,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Тепер давайте виведемо розмір тензорів у нашому наборі даних. Якщо ви все зробили правильно, розмір елементів навчання має бути\n", + "Тепер давайте виведемо розмір тензорів у нашому наборі даних. Якщо ви все зробили правильно, розмір елементів навчання має бути:\n", " * `(batch_size,image_size,image_size,3)` для Tensorflow, `batch_size,3,image_size,image_size` для PyTorch\n", " * `batch_size` для міток\n", " \n", @@ -230,14 +250,14 @@ "source": [ "## Визначення нейронної мережі\n", "\n", - "Для класифікації зображень, ймовірно, слід визначити згорткову нейронну мережу з кількома шарами. На що варто звернути увагу:\n", - "* Пам’ятайте про пірамідальну архітектуру, тобто кількість фільтрів має збільшуватися з глибиною мережі.\n", - "* Не забувайте про активаційні функції між шарами (ReLU) та Max Pooling.\n", - "* Фінальний класифікатор може бути як із прихованими шарами, так і без них, але кількість вихідних нейронів повинна дорівнювати кількості класів.\n", + "Для класифікації зображень варто визначити згорткову нейронну мережу з кількома шарами. На що слід звернути увагу:\n", + "* Пам'ятайте про пірамідальну архітектуру, тобто кількість фільтрів має збільшуватися з глибиною.\n", + "* Не забувайте про функції активації між шарами (ReLU) та Max Pooling.\n", + "* Фінальний класифікатор може бути з прихованими шарами або без них, але кількість вихідних нейронів має дорівнювати кількості класів.\n", "\n", - "Важливо правильно налаштувати активаційну функцію на останньому шарі та функцію втрат:\n", - "* У Tensorflow можна використовувати `softmax` як активаційну функцію та `sparse_categorical_crossentropy` як функцію втрат. Різниця між sparse categorical cross-entropy та не sparse полягає в тому, що перша очікує вихід у вигляді номера класу, а не у вигляді one-hot вектора.\n", - "* У PyTorch фінальний шар може бути без активаційної функції, а функцію втрат можна використовувати `CrossEntropyLoss`. Ця функція автоматично застосовує softmax.\n" + "Важливо правильно налаштувати функцію активації на останньому шарі + функцію втрат:\n", + "* У Tensorflow можна використовувати `softmax` як функцію активації та `sparse_categorical_crossentropy` як функцію втрат. Різниця між sparse categorical cross-entropy та несжатою версією полягає в тому, що перша очікує вихід у вигляді номера класу, а не у вигляді one-hot вектора.\n", + "* У PyTorch фінальний шар може бути без функції активації, а функцію втрат можна використовувати `CrossEntropyLoss`. Ця функція автоматично застосовує softmax.\n" ] }, { @@ -255,9 +275,9 @@ "source": [ "## Навчання нейронної мережі\n", "\n", - "Тепер ми готові до навчання нейронної мережі. Під час навчання, будь ласка, збирайте точність на навчальних і тестових даних на кожній епосі, а потім будуйте графік точності, щоб перевірити, чи немає перенавчання.\n", + "Тепер ми готові до навчання нейронної мережі. Під час навчання, будь ласка, збирайте точність на тренувальних і тестових даних на кожній епосі, а потім побудуйте графік точності, щоб перевірити, чи є перенавчання.\n", "\n", - "> Щоб прискорити навчання, необхідно використовувати GPU, якщо він доступний. У той час як TensorFlow/Keras автоматично використовуватимуть GPU, у PyTorch потрібно перемістити як модель, так і дані на GPU під час навчання за допомогою методу `.to()`, щоб скористатися перевагами прискорення GPU.\n" + "> Щоб прискорити навчання, необхідно використовувати GPU, якщо він доступний. Хоча TensorFlow/Keras автоматично використовуватиме GPU, у PyTorch потрібно перемістити як модель, так і дані на GPU під час навчання за допомогою методу `.to()`, щоб скористатися прискоренням GPU.\n" ] }, { @@ -297,18 +317,18 @@ "source": [ "Що можна сказати про перенавчання? Що можна зробити для покращення точності моделі\n", "\n", - "## Опціонально: Розрахунок Top-3 Точності\n", + "## Додатково: Розрахунок Top-3 точності\n", "\n", - "У цьому завданні ми працювали з класифікацією, яка включає досить велику кількість класів (35), тому наш результат - близько 50% точності на валідаційному наборі - є досить хорошим. Стандартний набір даних ImageNet має ще більше - 1000 класів.\n", + "У цьому завданні ми працювали з класифікацією, яка має досить велику кількість класів (35), тому наш результат - близько 50% точності на валідаційному наборі - є досить хорошим. Стандартний набір даних ImageNet має ще більше - 1000 класів.\n", "\n", - "У таких випадках важко забезпечити, щоб модель **завжди** правильно передбачала клас. Бувають ситуації, коли дві породи дуже схожі одна на одну, і модель повертає дуже близькі ймовірності (наприклад, 0.45 і 0.43). Якщо ми вимірюємо стандартну точність, це буде вважатися помилковим випадком, навіть якщо модель зробила дуже невелику помилку. Тому часто вимірюють іншу метрику - точність у межах трьох найбільш ймовірних передбачень моделі.\n", + "У таких випадках важко гарантувати, що модель **завжди** правильно передбачає клас. Є випадки, коли дві породи дуже схожі одна на одну, і модель повертає дуже схожі ймовірності (наприклад, 0.45 і 0.43). Якщо ми вимірюємо стандартну точність, це буде вважатися помилковим випадком, навіть якщо модель зробила дуже маленьку помилку. Тому ми часто вимірюємо іншу метрику - точність у межах трьох найбільш ймовірних передбачень моделі.\n", "\n", - "Ми вважаємо випадок точним, якщо цільова мітка міститься серед трьох найімовірніших передбачень моделі.\n", + "Ми вважаємо випадок точним, якщо цільова мітка міститься в трьох найімовірніших передбаченнях моделі.\n", "\n", - "Щоб обчислити top-3 точність на тестовому наборі даних, потрібно вручну пройтися по набору даних, застосувати нейронну мережу для отримання передбачень, а потім виконати розрахунки. Декілька підказок:\n", + "Щоб обчислити top-3 точність на тестовому наборі даних, вам потрібно вручну пройтися по набору даних, застосувати нейронну мережу для отримання передбачення, а потім виконати розрахунки. Деякі підказки:\n", "\n", - "* У Tensorflow використовуйте функцію `tf.nn.in_top_k`, щоб перевірити, чи знаходяться `predictions` (вихід моделі) у top-k (передайте `k=3` як параметр) відносно `targets`. Ця функція повертає тензор булевих значень, які можна перетворити на `int` за допомогою `tf.cast`, а потім накопичити за допомогою `tf.reduce_sum`.\n", - "* У PyTorch можна використовувати функцію `torch.topk`, щоб отримати індекси класів із найвищими ймовірностями, а потім перевірити, чи належить правильний клас до них. Дивіться [тут](https://gist.github.com/weiaicunzai/2a5ae6eac6712c70bde0630f3e76b77b) для додаткових підказок.\n" + "* У Tensorflow використовуйте функцію `tf.nn.in_top_k`, щоб перевірити, чи `predictions` (вихід моделі) входять до top-k (передайте `k=3` як параметр) щодо `targets`. Ця функція повертає тензор булевих значень, який можна перетворити на `int` за допомогою `tf.cast`, а потім накопичити за допомогою `tf.reduce_sum`.\n", + "* У PyTorch ви можете використовувати функцію `torch.topk`, щоб отримати індекси класів із найвищими ймовірностями, а потім перевірити, чи правильний клас належить до них. Дивіться [це](https://gist.github.com/weiaicunzai/2a5ae6eac6712c70bde0630f3e76b77b) для додаткових підказок.\n" ] }, { @@ -326,7 +346,7 @@ "source": [ "## Додатково: Побудова класифікації \"Коти проти собак\"\n", "\n", - "Ми також хочемо перевірити, наскільки точною буде наша бінарна класифікація \"Коти проти собак\" на тому ж наборі даних. Для цього потрібно змінити мітки:\n" + "Ми також хочемо перевірити, наскільки точною буде наша бінарна класифікація \"Коти проти собак\" на тому ж наборі даних. Для цього нам потрібно змінити мітки:\n" ] }, { @@ -378,8 +398,8 @@ "version": "3.9.5" }, "coopTranslator": { - "original_hash": "1de3ae931831253c3198d899da48bfe5", - "translation_date": "2025-08-30T09:05:15+00:00", + "original_hash": "df7d1f7da8d2617b76acd93115776ca4", + "translation_date": "2025-10-03T14:50:46+00:00", "source_file": "lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb", "language_code": "uk" } diff --git a/translations/uk/lessons/4-ComputerVision/07-ConvNets/lab/README.md b/translations/uk/lessons/4-ComputerVision/07-ConvNets/lab/README.md index f81cf75a..c94cd28f 100644 --- a/translations/uk/lessons/4-ComputerVision/07-ConvNets/lab/README.md +++ b/translations/uk/lessons/4-ComputerVision/07-ConvNets/lab/README.md @@ -1,8 +1,8 @@ -# Phân loại khuôn mặt thú cưng +# Phân Loại Khuôn Mặt Thú Cưng -Bài tập thực hành từ [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners). +Bài tập thực hành từ [Chương trình AI cho Người Mới Bắt Đầu](https://github.com/microsoft/ai-for-beginners). -## Nhiệm vụ +## Nhiệm Vụ -Hãy tưởng tượng bạn cần phát triển một ứng dụng cho trung tâm chăm sóc thú cưng để lập danh mục tất cả các thú nuôi. Một trong những tính năng tuyệt vời của ứng dụng này là tự động nhận diện giống loài từ một bức ảnh. Điều này có thể được thực hiện thành công bằng cách sử dụng mạng nơ-ron. +Hãy tưởng tượng bạn cần phát triển một ứng dụng cho nhà trẻ thú cưng để lập danh mục tất cả các thú nuôi. Một trong những tính năng tuyệt vời của ứng dụng này là tự động nhận diện giống loài từ một bức ảnh. Điều này có thể được thực hiện thành công bằng cách sử dụng mạng nơ-ron. Bạn cần huấn luyện một mạng nơ-ron tích chập để phân loại các giống loài khác nhau của mèo và chó bằng cách sử dụng bộ dữ liệu **Pet Faces**. -## Bộ dữ liệu +## Bộ Dữ Liệu -Chúng ta sẽ sử dụng bộ dữ liệu **Pet Faces**, được lấy từ bộ dữ liệu thú cưng [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/). Bộ dữ liệu này chứa 35 giống loài khác nhau của chó và mèo. +Chúng ta sẽ sử dụng [Bộ Dữ Liệu Thú Cưng Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/), bộ dữ liệu này chứa hình ảnh của 37 giống loài chó và mèo khác nhau. ![Bộ dữ liệu chúng ta sẽ làm việc](../../../../../../translated_images/data.50b2a9d5484bdbf0f52f5765b381cec9efe2bd296a98f007f90bedb6ac67f2a8.vi.png) -Để tải bộ dữ liệu, hãy sử dụng đoạn mã sau: +Để tải bộ dữ liệu, sử dụng đoạn mã sau: ```python !wget https://thor.robots.ox.ac.uk/~vgg/data/pets/images.tar.gz @@ -31,15 +31,17 @@ Chúng ta sẽ sử dụng bộ dữ liệu **Pet Faces**, được lấy từ b !rm images.tar.gz ``` -## Bắt đầu với Notebook +**Lưu ý:** Các hình ảnh trong Bộ Dữ Liệu Thú Cưng Oxford-IIIT được tổ chức theo tên tệp (ví dụ: `Abyssinian_1.jpg`, `Bengal_2.jpg`). Notebook bao gồm mã để tổ chức các hình ảnh này vào các thư mục con theo từng giống loài để dễ dàng phân loại hơn. + +## Bắt Đầu Notebook Bắt đầu bài thực hành bằng cách mở [PetFaces.ipynb](PetFaces.ipynb) -## Kết quả đạt được +## Kết Quả Đạt Được -Bạn đã giải quyết một vấn đề tương đối phức tạp về phân loại hình ảnh từ đầu! Có khá nhiều lớp, nhưng bạn vẫn có thể đạt được độ chính xác hợp lý! Ngoài ra, việc đo lường độ chính xác top-k cũng rất hợp lý, vì một số lớp có thể dễ bị nhầm lẫn, ngay cả đối với con người. +Bạn đã giải quyết một vấn đề tương đối phức tạp về phân loại hình ảnh từ đầu! Có khá nhiều lớp, nhưng bạn vẫn có thể đạt được độ chính xác hợp lý! Ngoài ra, việc đo lường độ chính xác top-k cũng rất hợp lý, bởi vì một số lớp có thể dễ bị nhầm lẫn ngay cả đối với con người. --- **Tuyên bố miễn trừ trách nhiệm**: -Tài liệu này đã được dịch bằng dịch vụ dịch thuật AI [Co-op Translator](https://github.com/Azure/co-op-translator). Mặc dù chúng tôi cố gắng đảm bảo độ chính xác, xin lưu ý rằng các bản dịch tự động có thể chứa lỗi hoặc không chính xác. Tài liệu gốc bằng ngôn ngữ bản địa nên được coi là nguồn tham khảo chính thức. Đối với các thông tin quan trọng, nên sử dụng dịch vụ dịch thuật chuyên nghiệp từ con người. Chúng tôi không chịu trách nhiệm cho bất kỳ sự hiểu lầm hoặc diễn giải sai nào phát sinh từ việc sử dụng bản dịch này. \ No newline at end of file +Tài liệu này đã được dịch bằng dịch vụ dịch thuật AI [Co-op Translator](https://github.com/Azure/co-op-translator). Mặc dù chúng tôi cố gắng đảm bảo độ chính xác, xin lưu ý rằng các bản dịch tự động có thể chứa lỗi hoặc không chính xác. Tài liệu gốc bằng ngôn ngữ bản địa nên được coi là nguồn thông tin chính thức. Đối với các thông tin quan trọng, khuyến nghị sử dụng dịch vụ dịch thuật chuyên nghiệp bởi con người. Chúng tôi không chịu trách nhiệm cho bất kỳ sự hiểu lầm hoặc diễn giải sai nào phát sinh từ việc sử dụng bản dịch này. \ No newline at end of file diff --git a/translations/zh/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb b/translations/zh/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb index 3e127cfa..1905eb04 100644 --- a/translations/zh/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb +++ b/translations/zh/lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb @@ -10,7 +10,9 @@ "\n", "### 获取数据\n", "\n", - "在本次任务中,我们将专注于一个相对简单的分类任务——宠物面部的分类。该数据集由 [Oxford-IIIT 数据集](https://www.robots.ox.ac.uk/~vgg/data/pets/) 中裁剪出的面部组成。让我们从加载和可视化数据集开始。\n" + "在本次任务中,我们将专注于一个相对简单的分类任务——宠物面部分类。我们将使用 [Oxford-IIIT Pet Dataset](https://www.robots.ox.ac.uk/~vgg/data/pets/),该数据集包含37种不同品种的猫狗的图片。让我们从下载并可视化数据集开始。\n", + "\n", + "**注意:** Oxford-IIIT Pet Dataset 包含完整的宠物图片。提取后的文件夹中,图片将按品种进行组织。\n" ] }, { @@ -77,7 +79,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "现在让我们遍历所有类别子目录并绘制每个类别的前几张图片:\n" + "现在让我们遍历所有类别子目录并绘制每个类别的前几张图像:\n" ] }, { @@ -86,6 +88,24 @@ "metadata": {}, "outputs": [], "source": [ + "# Note: The Oxford-IIIT Pet Dataset extracts to a folder named 'images'\n", + "# Images are named by breed (e.g., 'Abyssinian_1.jpg')\n", + "# We need to organize them into breed-specific subdirectories\n", + "import os\n", + "from collections import defaultdict\n", + "\n", + "# Organize images by breed\n", + "if not os.path.exists('petfaces'):\n", + " os.makedirs('petfaces')\n", + " for img_file in os.listdir('images'):\n", + " if img_file.endswith(('.jpg', '.png')):\n", + " # Extract breed name from filename (everything before the last underscore and number)\n", + " breed = '_'.join(img_file.split('_')[:-1])\n", + " breed_dir = os.path.join('petfaces', breed)\n", + " if not os.path.exists(breed_dir):\n", + " os.makedirs(breed_dir)\n", + " os.rename(os.path.join('images', img_file), os.path.join(breed_dir, img_file))\n", + "\n", "for cls in os.listdir('petfaces'):\n", " print(cls)\n", " display_images([Image.open(os.path.join('petfaces',cls,x)) \n", @@ -96,7 +116,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "让我们也定义数据集中类别的数量:\n" + "让我们也定义数据集中的类别数量:\n" ] }, { @@ -124,9 +144,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## 准备深度学习的数据集\n", + "## 为深度学习准备数据集\n", "\n", - "为了开始训练我们的神经网络,我们需要将所有图像转换为张量,同时创建与标签(类别编号)对应的张量。大多数神经网络框架都包含处理图像的简单工具:\n", + "在开始训练我们的神经网络之前,我们需要将所有图像转换为张量,并创建与标签(类别编号)对应的张量。大多数神经网络框架都包含处理图像的简单工具:\n", "* 在 Tensorflow 中,使用 `tf.keras.preprocessing.image_dataset_from_directory`\n", "* 在 PyTorch 中,使用 `torchvision.datasets.ImageFolder`\n", "\n", @@ -163,10 +183,10 @@ "metadata": {}, "source": [ "现在让我们打印数据集中张量的大小。如果你一切都设置正确,训练元素的大小应该是:\n", - " * 对于 Tensorflow,`(batch_size,image_size,image_size,3)`;对于 PyTorch,`batch_size,3,image_size,image_size`\n", - " * 标签的大小为 `batch_size`\n", + " * 对于 Tensorflow,应该是 `(batch_size,image_size,image_size,3)`;对于 PyTorch,应该是 `batch_size,3,image_size,image_size`\n", + " * 标签的大小应该是 `batch_size`\n", "\n", - "标签应包含类别的数字。\n" + "标签应该包含类别的编号。\n" ] }, { @@ -228,16 +248,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## 定义一个神经网络\n", + "## 定义神经网络\n", "\n", - "对于图像分类,你可能需要定义一个具有多层的卷积神经网络。需要注意以下几点:\n", - "* 牢记金字塔结构,也就是说,随着网络的加深,滤波器的数量应该增加。\n", - "* 不要忘记在层之间添加激活函数(如 ReLU)和最大池化(Max Pooling)。\n", - "* 最后的分类器可以有隐藏层,也可以没有,但输出神经元的数量应该等于类别的数量。\n", + "对于图像分类,通常需要定义一个具有多层的卷积神经网络。需要注意以下几点:\n", + "* 牢记金字塔架构,即随着网络加深,滤波器的数量应该增加。\n", + "* 不要忘记在层之间使用激活函数(如 ReLU)和最大池化。\n", + "* 最终的分类器可以有隐藏层,也可以没有,但输出神经元的数量应等于类别的数量。\n", "\n", "一个重要的点是要正确设置最后一层的激活函数和损失函数:\n", - "* 在 Tensorflow 中,你可以使用 `softmax` 作为激活函数,并使用 `sparse_categorical_crossentropy` 作为损失函数。稀疏分类交叉熵和非稀疏的区别在于,前者期望输出是类别的编号,而不是 one-hot 向量。\n", - "* 在 PyTorch 中,你可以在最后一层不使用激活函数,并使用 `CrossEntropyLoss` 作为损失函数。这个函数会自动应用 softmax。\n" + "* 在 Tensorflow 中,可以使用 `softmax` 作为激活函数,并使用 `sparse_categorical_crossentropy` 作为损失函数。稀疏类别交叉熵与非稀疏的区别在于,前者期望输出为类别编号,而不是独热向量。\n", + "* 在 PyTorch 中,最后一层可以不使用激活函数,并使用 `CrossEntropyLoss` 作为损失函数。该函数会自动应用 softmax。\n" ] }, { @@ -255,9 +275,9 @@ "source": [ "## 训练神经网络\n", "\n", - "现在我们可以开始训练神经网络了。在训练过程中,请在每个epoch收集训练集和测试集的准确率,然后绘制准确率曲线,以观察是否存在过拟合现象。\n", + "现在我们可以开始训练神经网络了。在训练过程中,请在每个训练周期收集训练数据和测试数据的准确率,然后绘制准确率图表,以观察是否存在过拟合现象。\n", "\n", - "> 为了加快训练速度,如果有GPU可用,请务必使用它。虽然TensorFlow/Keras会自动使用GPU,但在PyTorch中,你需要在训练时使用`.to()`方法将模型和数据都移动到GPU上,以利用GPU加速。\n" + "> 为了加快训练速度,如果有 GPU 可用,请务必使用 GPU。虽然 TensorFlow/Keras 会自动使用 GPU,但在 PyTorch 中,你需要在训练过程中使用 `.to()` 方法将模型和数据都移到 GPU 上,以利用 GPU 加速。\n" ] }, { @@ -295,20 +315,20 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "关于过拟合你能说些什么?如何提高模型的准确性?\n", + "关于过拟合,你可以说什么?如何提高模型的准确性?\n", "\n", "## 可选:计算 Top3 准确率\n", "\n", "在本次练习中,我们处理的是一个类别数量较多的分类问题(35个类别),因此我们的结果——大约50%的验证准确率——已经相当不错了。标准的 ImageNet 数据集甚至有更多类别——1000个。\n", "\n", - "在这种情况下,很难确保模型**总是**能够正确预测类别。有些情况下,两种类别非常相似,模型给出的概率也非常接近(例如,0.45 和 0.43)。如果我们仅仅测量标准准确率,这种情况会被视为错误,即使模型只犯了一个很小的错误。因此,我们经常会测量另一种指标——模型预测中最可能的前三个类别内的准确率。\n", + "在这种情况下,很难确保模型**总是**正确预测类别。有些情况下,两种类别非常相似,模型返回的概率也非常接近(例如,0.45和0.43)。如果我们测量标准准确率,这种情况会被认为是错误的,即使模型只犯了一个很小的错误。因此,我们经常测量另一种指标——模型预测中最可能的前三个类别的准确率。\n", "\n", - "如果目标标签包含在模型预测的前三个类别中,我们就认为这是准确的。\n", + "如果目标标签包含在模型预测的前三个类别中,我们就认为该情况是准确的。\n", "\n", - "要计算测试数据集上的 Top-3 准确率,你需要手动遍历数据集,应用神经网络获取预测结果,然后进行计算。一些提示:\n", + "要在测试数据集上计算 Top-3 准确率,你需要手动遍历数据集,应用神经网络获取预测结果,然后进行计算。一些提示:\n", "\n", - "* 在 TensorFlow 中,可以使用 `tf.nn.in_top_k` 函数来检查 `predictions`(模型的输出)是否在 top-k(将 `k=3` 作为参数)中,与 `targets` 进行比较。该函数返回一个布尔值的张量,可以通过 `tf.cast` 转换为 `int`,然后使用 `tf.reduce_sum` 累加。\n", - "* 在 PyTorch 中,可以使用 `torch.topk` 函数获取具有最高概率的类别索引,然后检查正确类别是否包含在其中。更多提示请参考[这里](https://gist.github.com/weiaicunzai/2a5ae6eac6712c70bde0630f3e76b77b)。\n" + "* 在 Tensorflow 中,可以使用 `tf.nn.in_top_k` 函数来查看 `predictions`(模型的输出)是否在 top-k(将 `k=3` 作为参数),与 `targets` 相比。此函数返回一个布尔值的张量,可以使用 `tf.cast` 转换为 `int`,然后使用 `tf.reduce_sum` 累积。\n", + "* 在 PyTorch 中,可以使用 `torch.topk` 函数获取具有最高概率的类别索引,然后查看正确类别是否属于其中。请参阅 [此处](https://gist.github.com/weiaicunzai/2a5ae6eac6712c70bde0630f3e76b77b) 获取更多提示。\n" ] }, { @@ -324,9 +344,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## 可选:构建猫狗分类\n", + "## 可选:构建猫与狗分类\n", "\n", - "我们还想看看在同一数据集上,我们的二分类猫狗分类的准确性如何。为此,我们需要调整标签:\n" + "我们还想看看在同一数据集上,我们的二元猫与狗分类的准确性如何。为此,我们需要调整标签:\n" ] }, { @@ -352,7 +372,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n---\n\n**免责声明**: \n本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。原始语言的文档应被视为权威来源。对于关键信息,建议使用专业人工翻译。我们不对因使用此翻译而产生的任何误解或误读承担责任。\n" + "\n---\n\n**免责声明**: \n本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。原始语言的文档应被视为权威来源。对于关键信息,建议使用专业人工翻译。我们对因使用此翻译而产生的任何误解或误读不承担责任。\n" ] } ], @@ -378,8 +398,8 @@ "version": "3.9.5" }, "coopTranslator": { - "original_hash": "1de3ae931831253c3198d899da48bfe5", - "translation_date": "2025-08-31T09:35:44+00:00", + "original_hash": "df7d1f7da8d2617b76acd93115776ca4", + "translation_date": "2025-10-03T14:28:35+00:00", "source_file": "lessons/4-ComputerVision/07-ConvNets/lab/PetFaces.ipynb", "language_code": "zh" } diff --git a/translations/zh/lessons/4-ComputerVision/07-ConvNets/lab/README.md b/translations/zh/lessons/4-ComputerVision/07-ConvNets/lab/README.md index f42ba776..a66b98c8 100644 --- a/translations/zh/lessons/4-ComputerVision/07-ConvNets/lab/README.md +++ b/translations/zh/lessons/4-ComputerVision/07-ConvNets/lab/README.md @@ -1,8 +1,8 @@