From 6ddc102854df0a6156c54e009dec8fabf6ac34ed Mon Sep 17 00:00:00 2001 From: "localizeflow[bot]" Date: Wed, 8 Jul 2026 19:08:14 +0000 Subject: [PATCH] chore(i18n): sync translations with latest source changes (chunk 1/1, 19 changes) --- translations/bn/.co-op-translator.json | 37 ++++- translations/bn/CONTRIBUTING.md | 29 ++++ translations/bn/examples/README.md | 76 +++++----- .../bn/lessons/0-course-setup/how-to-run.md | 52 +++---- .../TransferLearningTF.ipynb | 141 +++++++++--------- translations/bn/lessons/5-NLP/README.md | 74 ++++----- translations/hi/.co-op-translator.json | 39 ++++- translations/hi/CONTRIBUTING.md | 29 ++++ translations/hi/examples/README.md | 64 ++++---- .../hi/lessons/0-course-setup/how-to-run.md | 48 +++--- .../TransferLearningTF.ipynb | 136 +++++++++-------- translations/hi/lessons/5-NLP/README.md | 86 ++++++----- .../6-Other/23-MultiagentSystems/README.md | 140 ++++++++++++----- translations/ko/.co-op-translator.json | 37 ++++- translations/ko/CONTRIBUTING.md | 29 ++++ translations/ko/examples/README.md | 66 ++++---- .../ko/lessons/0-course-setup/how-to-run.md | 54 +++---- .../TransferLearningTF.ipynb | 136 +++++++++-------- translations/ko/lessons/5-NLP/README.md | 86 ++++++----- 19 files changed, 807 insertions(+), 552 deletions(-) create mode 100644 translations/bn/CONTRIBUTING.md create mode 100644 translations/hi/CONTRIBUTING.md create mode 100644 translations/ko/CONTRIBUTING.md diff --git a/translations/bn/.co-op-translator.json b/translations/bn/.co-op-translator.json index 4f04e1c2..386294ee 100644 --- a/translations/bn/.co-op-translator.json +++ b/translations/bn/.co-op-translator.json @@ -5,6 +5,12 @@ "source_file": "AGENTS.md", "language_code": "bn" }, + "CONTRIBUTING.md": { + "original_hash": "c6fd7e781b67111a90abd166d0ce4aa0", + "translation_date": "2026-07-08T19:08:08+00:00", + "source_file": "CONTRIBUTING.md", + "language_code": "bn" + }, "README.md": { "original_hash": "12c8eb6bf0867d2f1c32daf613ac5b8b", "translation_date": "2026-04-06T20:52:41+00:00", @@ -17,6 +23,19 @@ "source_file": "SECURITY.md", "language_code": "bn" }, + "__translation_failures__": { + "lessons/sketchnotes/LICENSE.md": { + "original_hash": "45ab63a2cd8f5faef6c9b150618837a4", + "source_file": "lessons/sketchnotes/LICENSE.md", + "language_code": "bn", + "failure_date": "2026-07-08T19:07:40+00:00", + "status": "failed", + "error_type": "TranslationIncompleteError", + "error_message": "Markdown translation remained incomplete for chunk 1.1.1 of 'LICENSE.md', and the chunk could not be split further.", + "translator_version": "0.20.0", + "failure_policy_version": 1 + } + }, "etc/CODE_OF_CONDUCT.md": { "original_hash": "c06b12caf3c901eb3156e3dd5b0aea56", "translation_date": "2025-08-26T11:17:08+00:00", @@ -54,8 +73,8 @@ "language_code": "bn" }, "examples/README.md": { - "original_hash": "0d1babfdcbeb46525f2db3fbaaa54cd7", - "translation_date": "2025-10-03T11:28:50+00:00", + "original_hash": "7883d52c2e2a221e0b07a7b112a149b9", + "translation_date": "2026-07-08T19:02:21+00:00", "source_file": "examples/README.md", "language_code": "bn" }, @@ -66,8 +85,8 @@ "language_code": "bn" }, "lessons/0-course-setup/how-to-run.md": { - "original_hash": "a4717bd9103b9f6cd84d534b83534689", - "translation_date": "2026-01-15T13:05:15+00:00", + "original_hash": "7ad8c7d8604c53649b3d4d1e2f3a6fa1", + "translation_date": "2026-07-08T19:02:44+00:00", "source_file": "lessons/0-course-setup/how-to-run.md", "language_code": "bn" }, @@ -191,6 +210,12 @@ "source_file": "lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md", "language_code": "bn" }, + "lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb": { + "original_hash": "99b816b6a4957ef4100cee4c4221dff9", + "translation_date": "2026-07-08T18:52:02+00:00", + "source_file": "lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb", + "language_code": "bn" + }, "lessons/4-ComputerVision/08-TransferLearning/lab/README.md": { "original_hash": "7765935c35fcee69b9fe2d0cfd6963e2", "translation_date": "2025-08-26T09:52:54+00:00", @@ -330,8 +355,8 @@ "language_code": "bn" }, "lessons/5-NLP/README.md": { - "original_hash": "8ef02a9318257ea140ed3ed74442096d", - "translation_date": "2025-08-26T08:03:35+00:00", + "original_hash": "038df6f1a73e49f6430740da083bfd6d", + "translation_date": "2026-07-08T19:03:19+00:00", "source_file": "lessons/5-NLP/README.md", "language_code": "bn" }, diff --git a/translations/bn/CONTRIBUTING.md b/translations/bn/CONTRIBUTING.md new file mode 100644 index 00000000..da026a73 --- /dev/null +++ b/translations/bn/CONTRIBUTING.md @@ -0,0 +1,29 @@ +# AI-For-Beginners-এ অবদান রাখা + +AI-For-Beginners-এ অবদান রাখার আগ্রহ প্রদর্শনের জন্য ধন্যবাদ! আমরা অনুবাদ, পাঠ সংশোধন এবং বিন্যাস সংশোধন স্বাগত জানাই। + +## Microsoft কনট্রিবিউটর লাইসেন্স এগ্রিমেন্ট (CLA) + +এই প্রকল্প অবদান এবং প্রস্তাবনা গ্রহণ করে। বেশিরভাগ অবদানের জন্য আপনাকে একটি কনট্রিবিউটর লাইসেন্স এগ্রিমেন্ট (CLA) মানতে হবে যা ঘোষণা করে যে আপনার কাছে আপনার অবদান ব্যবহারের অধিকার আছে এবং আপনি আসলেই তা আমাদের প্রদান করছেন। বিস্তারিত জানতে [https://cla.microsoft.com](https://cla.microsoft.com) দেখুন। + +যখন আপনি একটি পুল রিকোয়েস্ট জমা দিবেন, একটি CLA-বট স্বয়ংক্রিয়ভাবে নির্ধারণ করবে আপনি CLA প্রদান করবেন কি না এবং প্রি-আর-টির যথাযথ লেবেল বা মন্তব্য যোগ করবে। শুধু বট প্রদত্ত নির্দেশনা অনুসরণ করুন। আমাদের CLA ব্যবহার করা সব রেপোজিটরির মধ্যে এটি আপনাকে একবারই করতে হবে। + +## কিভাবে অবদান রাখবেন + +### ১. টাইপো / কোড ত্রুটি সংশোধন +আপনি যদি যেকোনো জুপিটার নোটবুক বা পাঠ মার্কডাউন ফাইলে টাইপো অথবা বাগ খুঁজে পান: +১. রেপোজিটরিটি ফর্ক করুন। +২. টাইপো বা ভাঙা লিংক ঠিক করুন। +৩. ঠিক করার একটি স্পষ্ট বিবরণ সহ একটি পুল রিকোয়েস্ট জমা দিন। + +### ২. অনুবাদ জমা দেওয়া +আমরা পাঠের অন্য ভাষায় অনুবাদকে স্বাগত জানাই! অনুবাদসমূহ `translations/` ডিরেক্টরির অধীনে বিদ্যমান ফোল্ডার নাম ব্যবহার করে রাখুন (যেমন `translations/es/`, `translations/pt-BR/`, `translations/zh-CN/`)। + +বিস্তারিত জানতে দেখুন [etc/CONTRIBUTING.md](etc/CONTRIBUTING.md)। + +--- + + +**অস্বীকৃতি**: +এই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনূদিত হয়েছে। যদিও আমরা শুদ্ধতার জন্য চেষ্টা করি, অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল নথিটি তার স্বভাষায় কর্তৃত্বপূর্ণ উৎস হিসেবে বিবেচিত হওয়া উচিত। গুরুত্বপূর্ণ তথ্যের জন্য পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদের ব্যবহারে প্রয়োজনীয় ভুল বোঝাবুঝি বা ভুল ব্যাখ্যার জন্য আমরা দায়বদ্ধ নই। + \ No newline at end of file diff --git a/translations/bn/examples/README.md b/translations/bn/examples/README.md index 6d414b62..f76bca1b 100644 --- a/translations/bn/examples/README.md +++ b/translations/bn/examples/README.md @@ -1,85 +1,87 @@ -# AI-এর সহজ উদাহরণ +# শিক্ষানবীশ-অনুকূল AI উদাহরণসমূহ -স্বাগতম! এই ডিরেক্টরিতে সহজ, স্বতন্ত্র উদাহরণ রয়েছে যা আপনাকে AI এবং মেশিন লার্নিং শুরু করতে সাহায্য করবে। প্রতিটি উদাহরণ নবাগতদের জন্য উপযোগীভাবে তৈরি করা হয়েছে, যেখানে বিস্তারিত মন্তব্য এবং ধাপে ধাপে ব্যাখ্যা রয়েছে। +স্বাগতম! এই ডিরেক্টরিটি সহজ, স্বতন্ত্র উদাহরণ ধারণ করে যা আপনাকে AI এবং মেশিন লার্নিং শুরু করতে সহায়তা করবে। প্রতিটি উদাহরণ শিক্ষানবীশ-অনুকূলভাবে বিস্তারিত মন্তব্য এবং ধাপে ধাপে ব্যাখ্যার সাথে ডিজাইন করা হয়েছে। -## 📚 উদাহরণগুলোর সংক্ষিপ্ত বিবরণ +## 📚 উদাহরণসমূহের সংক্ষিপ্ত বিবরণ -| উদাহরণ | বিবরণ | কঠিনতা | পূর্বশর্ত | +| উদাহরণ | বিবরণ | কঠিনতা | পূর্বপ্রয়োজনীয়তা | |---------|-------------|------------|---------------| -| [Hello AI World](../../../examples/01-hello-ai-world.py) | আপনার প্রথম AI প্রোগ্রাম - সহজ প্যাটার্ন শনাক্তকরণ | ⭐ নবাগত | পাইথন বেসিক | -| [Simple Neural Network](../../../examples/02-simple-neural-network.py) | স্ক্র্যাচ থেকে একটি নিউরাল নেটওয়ার্ক তৈরি করুন | ⭐⭐ নবাগত+ | পাইথন, বেসিক গণিত | -| [Image Classifier](./03-image-classifier.ipynb) | প্রি-ট্রেইনড মডেলের মাধ্যমে ছবি শ্রেণীবদ্ধ করুন | ⭐⭐ নবাগত+ | পাইথন, numpy | -| [Text Sentiment](../../../examples/04-text-sentiment.py) | টেক্সটের অনুভূতি বিশ্লেষণ করুন (পজিটিভ/নেগেটিভ) | ⭐⭐ নবাগত+ | পাইথন | +| [Hello AI World](https://github.com/microsoft/AI-For-Beginners/blob/main/examples/01-hello-ai-world.py) | আপনার প্রথম AI প্রোগ্রাম - সহজ প্যাটার্ন চিনাক্তকরণ | ⭐ শিক্ষানবীশ | পাইথন বেসিক | +| [Simple Neural Network](https://github.com/microsoft/AI-For-Beginners/blob/main/examples/02-simple-neural-network.py) | স্ক্র্যাচ থেকে একটি নিউরাল নেটওয়ার্ক তৈরি করুন | ⭐⭐ শিক্ষানবীশ+ | পাইথন, বেসিক ম্যাথ | +| [Image Classifier](https://github.com/microsoft/AI-For-Beginners/blob/main/examples/03-image-classifier.ipynb) | প্রি-ট্রেইন্ড মডেল দিয়ে ছবি শ্রেণিবিভাজন করুন | ⭐⭐ শিক্ষানবীশ+ | পাইথন, নাম্পাই | +| [Text Sentiment](https://github.com/microsoft/AI-For-Beginners/blob/main/examples/04-text-sentiment.py) | টেক্সটের মনোভাব বিশ্লেষণ করুন (ইতিবাচক/নেতিবাচক) | ⭐⭐ শিক্ষানবীশ+ | পাইথন | -## 🚀 শুরু করার ধাপ +## 🚀 শুরু করা -### পূর্বশর্ত +### পূর্বপ্রয়োজনীয়তা -নিশ্চিত করুন যে আপনার কম্পিউটারে পাইথন ইনস্টল করা আছে (৩.৮ বা তার বেশি সংস্করণ সুপারিশ করা হয়)। প্রয়োজনীয় প্যাকেজগুলো ইনস্টল করুন: +নিশ্চিত করুন যে আপনার পাইথন ইনস্টল করা আছে (3.8 বা উচ্চতর সুপারিশ করা হয়েছে)। প্রয়োজনীয় প্যাকেজগুলি ইনস্টল করুন: ```bash -# For Python scripts +# পাইথন স্ক্রিপ্টের জন্য pip install numpy -# For Jupyter notebooks (image classifier) +# জুপিটার নোটবুকের জন্য (ইমেজ ক্লাসিফায়ার) pip install jupyter numpy pillow tensorflow ``` -অথবা প্রধান কারিকুলামের কন্ডা এনভায়রনমেন্ট ব্যবহার করুন: +অথবা মূল পাঠ্যক্রম থেকে কন্ডা পরিবেশ ব্যবহার করুন: ```bash conda env create --name ai4beg --file ../environment.yml conda activate ai4beg ``` -### উদাহরণ চালানো +### উদাহরণসমূহ চালানো -**পাইথন স্ক্রিপ্ট (.py ফাইল) এর জন্য:** +**পাইথন স্ক্রিপ্টের জন্য (.py ফাইল):** ```bash python 01-hello-ai-world.py ``` -**জুপিটার নোটবুক (.ipynb ফাইল) এর জন্য:** +**জুপিটার নোটবুকের জন্য (.ipynb ফাইল):** ```bash jupyter notebook 03-image-classifier.ipynb ``` ## 📖 শেখার পথ -আমরা উদাহরণগুলো ধারাবাহিকভাবে অনুসরণ করার পরামর্শ দিই: +আমরা উদাহরণগুলো নিম্নলিখিত ক্রমে অনুসরণ করার পরামর্শ দিই: -1. **"Hello AI World" দিয়ে শুরু করুন** - প্যাটার্ন শনাক্তকরণের বেসিক শিখুন -2. **একটি Simple Neural Network তৈরি করুন** - নিউরাল নেটওয়ার্ক কীভাবে কাজ করে তা বুঝুন -3. **Image Classifier চেষ্টা করুন** - বাস্তব ছবির মাধ্যমে AI দেখুন -4. **Text Sentiment বিশ্লেষণ করুন** - প্রাকৃতিক ভাষা প্রক্রিয়াকরণ অন্বেষণ করুন +1. **"Hello AI World" দিয়ে শুরু করুন** - প্যাটার্ন চিনাক্তকরণের বেসিক শিখুন +2. **একটি সহজ নিউরাল নেটওয়ার্ক তৈরি করুন** - নিউরাল নেটওয়ার্ক কিভাবে কাজ করে বুঝুন +3. **ছবি শ্রেণিবিভাজনকারী চেষ্টা করুন** - বাস্তব ছবি দিয়ে AI-এর কার্যকারিতা দেখুন +4. **টেক্সট মনোভাব বিশ্লেষণ করুন** - ন্যাচারাল ল্যাঙ্গুয়েজ প্রসেসিং অন্বেষণ করুন -## 💡 নবাগতদের জন্য টিপস +## 💡 শিক্ষানবীশদের জন্য টিপস -- **কোডের মন্তব্যগুলো মনোযোগ দিয়ে পড়ুন** - এগুলো প্রতিটি লাইনের কাজ ব্যাখ্যা করে -- **পরীক্ষা করুন!** - মান পরিবর্তন করে দেখুন কী ঘটে -- **সবকিছু বুঝতে না পারলে চিন্তা করবেন না** - শেখার জন্য সময় লাগে -- **প্রশ্ন করুন** - [আলোচনা বোর্ড](https://github.com/microsoft/AI-For-Beginners/discussions) ব্যবহার করুন +- **কোড মন্তব্যগুলো মনোযোগ দিয়ে পড়ুন** - তারা প্রতিটি লাইনের কাজ ব্যাখ্যা করে +- **পরীক্ষা করুন!** - মানগুলি পরিবর্তন করার চেষ্টা করুন এবং দেখুন কি হয় +- **সব কিছু বুঝতে চিন্তা করবেন না** - শেখায় সময় লাগে +- **প্রশ্ন করুন** - [Discussion board](https://github.com/microsoft/AI-For-Beginners/discussions) ব্যবহার করুন -## 🔗 পরবর্তী ধাপ +## 🔗 পরবর্তী ধাপসমূহ -এই উদাহরণগুলো সম্পন্ন করার পর পুরো কারিকুলাম অন্বেষণ করুন: -- [AI-এর পরিচিতি](../lessons/1-Intro/README.md) +এই উদাহরণগুলি সম্পন্ন করার পর পূর্ণ পাঠ্যক্রমটি অন্বেষণ করুন: +- [Introduction to AI](../lessons/1-Intro/README.md) - [Neural Networks](../lessons/3-NeuralNetworks/README.md) - [Computer Vision](../lessons/4-ComputerVision/README.md) - [Natural Language Processing](../lessons/5-NLP/README.md) -## 🤝 অবদান রাখুন +## 🤝 অবদান রাখা -এই উদাহরণগুলো উপকারী মনে হয়েছে? এগুলো আরও উন্নত করতে সাহায্য করুন: -- সমস্যা রিপোর্ট করুন বা উন্নতির পরামর্শ দিন -- নবাগতদের জন্য আরও উদাহরণ যোগ করুন +এই উদাহরণগুলো উপকারী মনে হলে? এগুলো উন্নত করতে আমাদের সাহায্য করুন: +- সমস্যা রিপোর্ট করুন বা উন্নতির প্রস্তাব দিন +- শিক্ষানবীশদের জন্য আরও উদাহরণ যোগ করুন - ডকুমেন্টেশন এবং মন্তব্য উন্নত করুন --- -*মনে রাখবেন: প্রতিটি বিশেষজ্ঞ একসময় নবাগত ছিল। শুভ শেখা! 🎓* +*মনে রাখবেন: প্রতিটি বিশেষজ্ঞ এক সময়ে একজন শিক্ষানবীশ ছিলেন। শুভ শেখা! 🎓* --- -**অস্বীকৃতি**: -এই নথিটি 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/0-course-setup/how-to-run.md b/translations/bn/lessons/0-course-setup/how-to-run.md index d65b847f..b9750d89 100644 --- a/translations/bn/lessons/0-course-setup/how-to-run.md +++ b/translations/bn/lessons/0-course-setup/how-to-run.md @@ -1,12 +1,12 @@ -# কোড কিভাবে চালাবেন +# কোড কীভাবে চালাবেন -এই পাঠ্যক্রমে অনেক এক্সিকিউটেবল উদাহরণ এবং ল্যাব আছে যেগুলি আপনি চালাতে চাইবেন। এটি করার জন্য, আপনাকে এই পাঠ্যক্রমের অংশ হিসেবে প্রদত্ত Jupyter Notebooks-এ Python কোড চালানোর ক্ষমতা থাকতে হবে। কোড চালানোর জন্য আপনার কাছে বেশ কয়েকটি অপশন আছে: +এই পাঠক্রমে অনেক রানযোগ্য উদাহরণ এবং ল্যাব রয়েছে যা আপনি চালাতে চাইবেন। এটি করতে, আপনাকে এই পাঠক্রমের অংশ হিসেবে প্রদান করা জুপিটার নোটবুকে পাইথন কোড চালানোর ক্ষমতা থাকতে হবে। কোড চালানোর জন্য আপনার বেশ কয়েকটি অপশন রয়েছে: ## আপনার কম্পিউটারে লোকালি চালানো -আপনার কম্পিউটারে লোকালি কোড চালাতে হলে Python ইনস্টলেশন প্রয়োজন। একটি সুপারিশ হলো **[miniconda](https://conda.io/en/latest/miniconda.html)** ইনস্টল করা - এটি একটি তুলনামূলক লাইটওয়েট ইনস্টলেশন যা Python **ভার্চুয়াল এনভায়রনমেন্ট** গুলির জন্য `conda` প্যাকেজ ম্যানেজার সাপোর্ট করে। +আপনার কম্পিউটারে কোড লোকালি চালাতে হলে, একটি পাইথন ইনস্টলেশন প্রয়োজন। একটি সুপারিশ হলো **[miniconda](https://conda.io/en/latest/miniconda.html)** ইনস্টল করা — এটি একটি তুলনামূলক হালকা ইনস্টলেশন যা `conda` প্যাকেজ ম্যানেজারকে বিভিন্ন পাইথন **ভার্চুয়াল এনভায়রনমেন্টের** জন্য সমর্থন করে। -miniconda ইনস্টল করার পর, রিপোজিটরি ক্লোন করুন এবং এই কোর্সের জন্য ব্যবহৃত একটি ভার্চুয়াল এনভায়রনমেন্ট তৈরি করুন: +miniconda ইনস্টল করার পরে, রিপোজিটরি ক্লোন করুন এবং এই কোর্সের জন্য ব্যবহারের জন্য একটি ভার্চুয়াল এনভায়রনমেন্ট তৈরি করুন: ```bash git clone http://github.com/microsoft/ai-for-beginners @@ -15,57 +15,57 @@ conda env create --name ai4beg --file .devcontainer/environment.yml conda activate ai4beg ``` -### Visual Studio Code সহ Python Extension ব্যবহার +### পাইথন এক্সটেনশনের সাথে ভিজ্যুয়াল স্টুডিও কোড ব্যবহার করা -এই পাঠ্যক্রমটি সর্বোত্তমভাবে ব্যবহৃত হয় যখন এটি [Visual Studio Code](http://code.visualstudio.com/?WT.mc_id=academic-77998-cacaste) তে [Python Extension](https://marketplace.visualstudio.com/items?itemName=ms-python.python&WT.mc_id=academic-77998-cacaste) সহ খোলা হয়। +এই পাঠক্রমটি সবচেয়ে ভালো ব্যবহার হয় যখন এটি [Visual Studio Code](http://code.visualstudio.com/?WT.mc_id=academic-77998-cacaste) সঙ্গে [Python Extension](https://marketplace.visualstudio.com/items?itemName=ms-python.python&WT.mc_id=academic-77998-cacaste) এ খোলা হয়। -> **নোট**: একবার আপনি VS Code-এ ডিরেক্টরি ক্লোন এবং ওপেন করলে, এটি স্বয়ংক্রিয়ভাবে Python এক্সটেনশন ইনস্টল করার পরামর্শ দেবে। উপরে বর্ণিত মত miniconda ইনস্টল করাও প্রয়োজন হবে। +> **নোট**: একবার আপনি ক্লোন করে ডিরেক্টরিটি VS কোডে খুললে, এটি স্বয়ংক্রিয়ভাবে পাইথন এক্সটেনশন ইনস্টল করতে সুপারিশ করবে। উপরোক্ত বর্ণনামতো আপনাকে miniconda ইনস্টল করতেও হবে। -> **নোট**: যদি VS Code আপনাকে রিপোজিটরি একটি কন্টেইনারে পুনরায় খোলার প্রস্তাব দেয়, তাহলে আপনাকে লোকাল Python ইনস্টলেশন ব্যবহার করার জন্য এটি অস্বীকার করতে হবে। +> **নোট**: যদি VS কোড আপনাকে রেপোজিটরিটি একটি কন্টেইনারে পুনরায় খুলতে বলে, আপনি লোকাল পাইথন ইনস্টলেশন ব্যবহারের জন্য এটি প্রত্যাখ্যান করবেন। -### ব্রাউজারে Jupyter ব্যবহার +### ব্রাউজারে জুপিটার ব্যবহার করা -আপনি ব্রাউজার থেকে আপনার নিজের কম্পিউটারে Jupyter পরিবেশ ব্যবহার করতেও পারেন। ক্লাসিক্যাল Jupyter এবং JupyterHub উভয়ই অটো-কমপ্লিশন, কোড হাইলাইটিং ইত্যাদি সহ একটি সুবিধাজনক ডেভেলপমেন্ট পরিবেশ প্রদান করে। +আপনার নিজের কম্পিউটারে ব্রাউজার থেকে একটি জুপিটার পরিবেশও ব্যবহার করতে পারেন। ক্লাসিক্যাল জুপিটার এবং জুপিটারহাব উভয়ই একটি সুবিধাজনক ডেভেলপমেন্ট পরিবেশ সরবরাহ করে, যেমন অটো-কোমপ্লিশন, কোড হাইলাইটিং ইত্যাদি। -লোকালি Jupyter চালু করতে, কোর্সের ডিরেক্টরিতে যান এবং নিচের কমান্ড চালান: +লোকালি জুপিটার শুরু করার জন্য, কোর্সের ডিরেক্টরিতে যান এবং এটি চালান: ```bash jupyter notebook ``` - অথবা +অ়থবা ```bash jupyterhub ``` - তারপর আপনি `.ipynb` ফাইলগুলিতে যেকোনোটা খুলে কাজ শুরু করতে পারবেন। +আপনি তারপর `.ipynb` ফাইলগুলোর যেকোনোটিতে নেভিগেট করতে পারেন, সেগুলি খুলতে পারেন এবং কাজ শুরু করতে পারেন। ### কন্টেইনারে চালানো -Python ইনস্টলেশনের একটি বিকল্প হতে পারে কোডটি একটি কন্টেইনারে চালানো। আমাদের রিপোজিটরিগুলো একটি বিশেষ `.devcontainer` ফোল্ডার সরবরাহ করে যা এই রিপো জন্য কন্টেইনার কিভাবে বিল্ড করবেন তা নির্দেশ করে। VS Code কোডটি কন্টেইনারে পুনরায় খোলার সুযোগ দেয়। এর জন্য Docker ইনস্টলেশন প্রয়োজন, এবং এটি একটু জটিল, তাই আমরা এটি বেশি অভিজ্ঞ ব্যবহারকারীদের জন্য সুপারিশ করি। +পাইথন ইনস্টলেশনের একটি বিকল্প হতে পারে কোড কন্টেইনারে চালানো। যেহেতু আমাদের রিপোজিটরি একটি স্পেশাল `.devcontainer` ফোল্ডার সরবরাহ করে যা এই রিপো কন্টেইনার বানানোর নির্দেশনা দেয়, VS কোড কন্টেইনারে কোড পুনরায় খুলার সুযোগ দেয়। এটি ডকার ইনস্টলেশন প্রয়োজন, এবং আরও জটিল হবে, তাই আমরা এটি বেশি অভিজ্ঞ ব্যবহারকারীদের জন্য সাজেস্ট করি। ## ক্লাউডে চালানো -যদি আপনি Python লোকালি ইনস্টল করতে না চান, এবং আপনার কাছে কিছু ক্লাউড রিসোর্স অ্যাক্সেস থাকে, তাহলে কোড ক্লাউডে চালানোর ভালো বিকল্প রয়েছে। আপনি নিচের কয়েকটি উপায়ে এটি করতে পারেন: +আপনি যদি লোকালি পাইথন ইনস্টল করতে না চান, এবং কোনো ক্লাউড রিসোর্সের অ্যাক্সেস থাকে — তাহলে কোড ক্লাউডে চালানো একটি ভালো বিকল্প। এর জন্য কয়েকটি উপায় আছে: -* **[GitHub Codespaces](https://github.com/features/codespaces)** ব্যবহার করা, যা GitHub-এ আপনার জন্য তৈরি একটি ভার্চুয়াল এনভায়রনমেন্ট, VS Code ব্রাউজার ইন্টারফেসের মাধ্যমে প্রবেশযোগ্য। যদি Codespaces অ্যাক্সেস থাকে, আপনি রিপোর **Code** বোতামে ক্লিক করে Codespace শুরু করতে পারেন এবং দ্রুত কোড চালাতে পারবেন। -* **[Binder](https://mybinder.org/v2/gh/microsoft/ai-for-beginners/HEAD)** ব্যবহার করা। [Binder](https://mybinder.org) বিনামূল্যে কম্পিউটিং রিসোর্স সরবরাহ করে যারা GitHub-এ কিছু কোড পরীক্ষা করতে চান তাদের জন্য। মূল পৃষ্ঠায় একটি বাটন আছে যা রিপোজিটরিকে Binder-এ খুলতে দেয় - এটি দ্রুত আপনাকে Binder সাইটে নিয়ে যাবে, যেখানে একটি অন্তর্নিহিত কন্টেইনার তৈরি করে Jupyter ওয়েব ইন্টারফেস চালু করবে স্বচ্ছন্দে। +* **[GitHub Codespaces](https://github.com/features/codespaces)** ব্যবহার করা, যা GitHub-এ আপনার জন্য তৈরি একটি ভার্চুয়াল এনভায়রনমেন্ট, VS কোডের ব্রাউজার ইন্টারফেসের মাধ্যমে অ্যাক্সেসযোগ্য। যদি আপনার Codespaces-এ অ্যাক্সেস থাকে, তাহলে আপনি কেবল রেপোতে **Code** বাটনে ক্লিক করে কোডস্পেস শুরু করতে পারেন এবং খুব দ্রুত কোড চালু করতে পারেন। +* **[Binder](https://mybinder.org/v2/gh/microsoft/ai-for-beginners/HEAD)** ব্যবহার করা। [Binder](https://mybinder.org) বিনামূল্যে ক্লাউডে কম্পিউটিং রিসোর্স প্রদান করে, যাতে আপনি GitHub-এ কিছু কোড পরীক্ষা করতে পারেন। ফ্রন্ট পেজে একটি বাটন আছে যা রিপোজিটরিটি বাইন্ডারে খুলবে — এটি দ্রুত আপনাকে বাইন্ডার সাইটে নিয়ে যাবে, যা একটি আন্ডারলাইং কন্টেইনার তৈরি করবে এবং নির্বিঘ্নে একটি জুপিটার ওয়েব ইন্টারফেস চালু করবে। -> **নোট**: অপব্যবহার এড়াতে, Binder কিছু ওয়েব রিসোর্স ব্লক করে রেখেছে। এটি কিছু কোড কাজ করতে বাধা দিতে পারে, যেগুলি পাবলিক ইন্টারনেট থেকে মডেল ও/অথবা ডেটাসেট ফেচ করে। আপনাকে কিছু সমাধান খুঁজে বের করতে হতে পারে। এছাড়া, Binder এর প্রদানকৃত কম্পিউটিং রিসোর্স যথেষ্ট বেসিক, তাই ট্রেনিং ধীর হবে, বিশেষ করে পরবর্তী, বেশি জটিল পাঠে। +> **নোট**: অপব্যবহার রোধ করার জন্য, বাইন্ডারের কিছু ওয়েব রিসোর্স ব্লক করা হয়েছে। এর ফলে কিছু কোড কাজ নাও করতে পারে, যা পাবলিক ইন্টারনেট থেকে মডেল এবং/অথবা ডেটাসেট ফেচ করে। আপনাকে হয়তো কিছু বিকল্প উপায় খুঁজতে হবে। এছাড়াও, বাইন্ডারের দেওয়া কম্পিউট রিসোর্স খুব মৌলিক, তাই ট্রেনিং ধীর হবে, বিশেষত পরে, আরও জটিল পাঠে। -## জিপিইউ সহ ক্লাউডে চালানো +## GPU সহ ক্লাউডে চালানো -এই পাঠ্যক্রমের কিছু পরবর্তী পাঠ GPU সাপোর্ট থেকে উল্লেখযোগ্যভাবে উপকৃত হবে। মডেল ট্রেনিং, উদাহরণস্বরূপ, অন্যথায় বেশ ধীর হতে পারে। কিছু বিকল্প অনুসরণ করতে পারেন, বিশেষত যদি আপনার ক্লাউড অ্যাক্সেস থাকে [Azure for Students](https://azure.microsoft.com/free/students/?WT.mc_id=academic-77998-cacaste) এর মাধ্যমে, বা আপনার প্রতিষ্ঠান থেকে: +এই পাঠক্রমের কিছু পরে পাঠ GPU সাপোর্ট থেকে অনেক লাভবান হবে। যেমন মডেল ট্রেনিং, যা অন্যথায় অত্যন্ত ধীর হতে পারে। আপনি কয়েকটি বিকল্প অনুসরণ করতে পারেন, বিশেষত যদি [Azure for Students](https://azure.microsoft.com/free/students/?WT.mc_id=academic-77998-cacaste) কিংবা আপনার প্রতিষ্ঠানের মাধ্যমে ক্লাউডে অ্যাক্সেস থাকে: -* [Data Science Virtual Machine](https://docs.microsoft.com/learn/modules/intro-to-azure-data-science-virtual-machine/?WT.mc_id=academic-77998-cacaste) তৈরি করুন এবং Jupyter এর মাধ্যমে এতে সংযোগ করুন। এরপর আপনি সরাসরি মেশিনে রিপো ক্লোন করে শিখতে শুরু করতে পারবেন। NC-সিরিজ VM গুলোতে GPU সাপোর্ট থাকে। +* [Data Science Virtual Machine](https://docs.microsoft.com/learn/modules/intro-to-azure-data-science-virtual-machine/?WT.mc_id=academic-77998-cacaste) তৈরি করুন এবং জুপিটার এর মাধ্যমে সেটির সাথে সংযোগ করুন। আপনি তারপর সরাসরি মেশিনে রিপো ক্লোন করতে পারবেন এবং শেখা শুরু করতে পারবেন। NC-সিরিজ VMs কেন GPU সাপোর্ট আছে। -> **নোট**: কিছু সাবস্ক্রিপশন, Azure for Students সহ, ডিফল্টভাবে GPU সাপোর্ট দেয় না। অতিরিক্ত GPU কোর পেতে হতে পারে প্রযুক্তিগত সাপোর্ট অনুরোধের মাধ্যমে। +> **নোট**: কিছু সাবস্ক্রিপশন, Azure for Students সহ, ডিফল্টভাবে GPU সাপোর্ট দেয় না। আপনাকে হয়তো টেকনিক্যাল সাপোর্ট রিকোয়েস্টের মাধ্যমে অতিরিক্ত GPU কোর অনুরোধ করতে হবে। -* [Azure Machine Learning Workspace](https://azure.microsoft.com/services/machine-learning/?WT.mc_id=academic-77998-cacaste) তৈরি করুন এবং সেখানকার Notebook ফিচার ব্যবহার করুন। [এই ভিডিওটি](https://azure-for-academics.github.io/quickstart/azureml-papers/) দেখায় কিভাবে Azure ML নোটবুকে একটি রিপোজিটরি ক্লোন করে ব্যবহার শুরু করবেন। +* [Azure Machine Learning Workspace](https://azure.microsoft.com/services/machine-learning/?WT.mc_id=academic-77998-cacaste) তৈরি করুন এবং সেখানে নোটবুক ফিচার ব্যবহার করুন। [এই ভিডিও](https://azure-for-academics.github.io/quickstart/azureml-papers/) দেখায় কিভাবে Azure ML নোটবুকে রিপোজিটরি ক্লোন করে ব্যবহার শুরু করবেন। -আপনি Google Colab ও ব্যবহার করতে পারেন, যেখানে কিছু ফ্রি GPU সাপোর্ট আসে, এবং একে একে সেখানে Jupyter Notebooks আপলোড করে চালাতে পারবেন। +আপনি Google Colab ও ব্যবহার করতে পারেন, যা কিছু ফ্রি GPU সাপোর্ট সহ আসে, এবং সেখানে জুপিটার নোটবুক আপলোড করে এক এক করে চালাতে পারেন। --- -**অস্বীকৃতি**: -এই ডকুমেন্টটি এআই অনুবাদ সেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনূদিত হয়েছে। আমরা যথাসাধ্য সঠিকতার চেষ্টা করি, তবে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা ভুল থাকতে পারে। মূল ভাষায় থাকা মূল ডকুমেন্টটিই কর্তৃত্বপ্রাপ্ত উৎস হিসেবে বিবেচিত হওয়া উচিত। গুরুত্বপূর্ণ তথ্যের জন্য পেশাদার মানব অনুবাদ প্রয়োজন। এই অনুবাদের ব্যবহারে সৃষ্ট কোনো ভুল বোঝাবুঝি বা ব্যাখ্যার জন্য আমরা দায়বদ্ধ নই। +**অস্বীকৃতি**: +এই নথিটি 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/08-TransferLearning/TransferLearningTF.ipynb b/translations/bn/lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb index 90a3e263..aa03c299 100644 --- a/translations/bn/lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb +++ b/translations/bn/lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb @@ -4,11 +4,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# প্রি-ট্রেইনড মডেল এবং ট্রান্সফার লার্নিং\n", + "# প্রি-ট্রেইন্ড মডেল এবং ট্রান্সফার লার্নিং\n", "\n", - "সিএনএন (CNN) প্রশিক্ষণ করতে অনেক সময় লাগে, এবং এর জন্য প্রচুর ডেটার প্রয়োজন হয়। তবে, বেশিরভাগ সময় নেটওয়ার্কের জন্য সেরা লো-লেভেল ফিল্টার শেখার পেছনেই ব্যয় হয়, যা ছবি থেকে প্যাটার্ন বের করতে ব্যবহৃত হয়। একটি স্বাভাবিক প্রশ্ন উঠে আসে - আমরা কি একটি নির্দিষ্ট ডেটাসেটে প্রশিক্ষিত নিউরাল নেটওয়ার্ক ব্যবহার করে সম্পূর্ণ প্রশিক্ষণ প্রক্রিয়া ছাড়াই ভিন্ন ছবি শ্রেণীবদ্ধ করতে এটি মানিয়ে নিতে পারি?\n", + "সিএনএন ট্রেইন করতে অনেক সময় লাগে, এবং এই কাজের জন্য অনেক ডেটা প্রয়োজন হয়। তবে, বেশিরভাগ সময় ব্যয় হয় সেরা নিম্ন-স্তরের ফিল্টারগুলি শিখতে যেগুলি একটি নেটওয়ার্ক ইমেজ থেকে প্যাটার্নগুলি বের করতে ব্যবহার করে। একটি স্বাভাবিক প্রশ্ন উঠে - আমরা কি একটি ডেটাসেটে প্রশিক্ষিত নিউরাল নেটওয়ার্ক ব্যবহার করে এবং সম্পূর্ণ প্রশিক্ষণ প্রক্রিয়া ছাড়াই এটি বিভিন্ন ইমেজ শ্রেণীবদ্ধকরণে অভিযোজিত করতে পারি?\n", "\n", - "এই পদ্ধতিকে বলা হয় **ট্রান্সফার লার্নিং**, কারণ আমরা একটি নিউরাল নেটওয়ার্ক মডেল থেকে অন্যটিতে কিছু জ্ঞান স্থানান্তর করি। ট্রান্সফার লার্নিং-এ, আমরা সাধারণত একটি প্রি-ট্রেইনড মডেল দিয়ে শুরু করি, যা ইতিমধ্যে একটি বড় ইমেজ ডেটাসেটে, যেমন **ইমেজনেট**, প্রশিক্ষিত। এই মডেলগুলো ইতোমধ্যেই সাধারণ ছবিগুলো থেকে বিভিন্ন বৈশিষ্ট্য বের করতে ভালো কাজ করতে পারে, এবং অনেক ক্ষেত্রে এই বৈশিষ্ট্যগুলোর উপর ভিত্তি করে একটি ক্লাসিফায়ার তৈরি করলেই ভালো ফলাফল পাওয়া যায়।\n" + "এই পদ্ধতিকে বলা হয় **ট্রান্সফার লার্নিং**, কারণ আমরা একটি নিউরাল নেটওয়ার্ক মডেল থেকে অন্যটিতে কিছু জ্ঞান স্থানান্তর করি। ট্রান্সফার লার্নিংয়ে, আমরা সাধারণত একটি প্রি-ট্রেইন্ড মডেল দিয়ে শুরু করি, যা কিছু বড় ইমেজ ডেটাসেটে প্রশিক্ষণপ্রাপ্ত, যেমন **ImageNet**। সেই মডেলগুলি ইতিমধ্যেই সাধারণ ইমেজ থেকে বিভিন্ন বৈশিষ্ট্য বের করতে ভাল কাজ করতে পারে, এবং বেশিরভাগ ক্ষেত্রে সেই বৈশিষ্ট্যগুলোর উপর ভিত্তি করে শুধু একটি ক্লাসিফায়ার তৈরি করলেই ভাল ফলাফল পাওয়া যায়।\n" ] }, { @@ -29,11 +29,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## বিড়াল বনাম কুকুর ডেটাসেট\n", + "## বেড়াল বনাম কুকুর ডেটাসেট\n", "\n", - "এই অধ্যায়ে, আমরা একটি বাস্তব জীবনের সমস্যা সমাধান করব, যেখানে বিড়াল এবং কুকুরের ছবিগুলি শ্রেণীবদ্ধ করতে হবে। এই কাজের জন্য, আমরা [Kaggle Cats vs. Dogs Dataset](https://www.kaggle.com/c/dogs-vs-cats) ব্যবহার করব, যা [Microsoft থেকে](https://www.microsoft.com/en-us/download/details.aspx?id=54765&WT.mc_id=academic-77998-cacaste) ডাউনলোড করাও সম্ভব।\n", + "এই এককে, আমরা বেড়াল এবং কুকুরের ছবিগুলো শ্রেণীবদ্ধ করার একটি বাস্তব জীবনের সমস্যা সমাধান করব। এই কারণেই, আমরা [Kaggle Cats vs. Dogs Dataset](https://www.kaggle.com/c/dogs-vs-cats) ব্যবহার করব, যা [Microsoft থেকে ওই ডেটাসেটটি ডাউনলোডও করা যায়](https://www.microsoft.com/en-us/download/details.aspx?id=54765&WT.mc_id=academic-77998-cacaste)।\n", "\n", - "চলুন এই ডেটাসেটটি ডাউনলোড করি এবং এটি `data` ডিরেক্টরিতে এক্সট্র্যাক্ট করি (এই প্রক্রিয়াটি কিছুটা সময় নিতে পারে!):\n" + "আসুন এই ডেটাসেটটি ডাউনলোড করি এবং `data` ডিরেক্টরিতে এক্সট্র্যাক্ট করি (এই প্রক্রিয়াটি কিছুটা সময় নিতে পারে!):\n" ] }, { @@ -64,7 +64,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "দুঃখজনকভাবে, ডেটাসেটে কিছু ক্ষতিগ্রস্ত ইমেজ ফাইল রয়েছে। আমাদের দ্রুত পরিষ্কার করতে হবে যাতে ক্ষতিগ্রস্ত ফাইলগুলি পরীক্ষা করা যায়। এই টিউটোরিয়ালটি ব্যাহত না করার জন্য, আমরা ডেটাসেট যাচাই করার কোডটি একটি মডিউলে সরিয়ে নিয়েছি।\n" + "দুর্ভাগ্যবশত, ডেটাসেটে কিছু করাপ্ট ইমেজ ফাইল রয়েছে। ক্ষতিকর ফাইলগুলি পরীক্ষা করার জন্য আমাদের দ্রুত পরিস্কার কাজ করতে হবে। এই টিউটোরিয়ালটি নষ্ট না করার জন্য, আমরা ডেটাসেট যাচাই করার কোডটি একটি মডিউলে স্থানান্তর করেছি।\n" ] }, { @@ -333,13 +333,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## ডেটাসেট লোড করা\n", + "## ডাটাসেট লোড করা\n", "\n", - "পূর্ববর্তী উদাহরণগুলোতে, আমরা এমন ডেটাসেট লোড করছিলাম যা কেরাসে অন্তর্নির্মিত। এখন আমরা আমাদের নিজস্ব ডেটাসেট নিয়ে কাজ করতে যাচ্ছি, যা আমাদের ইমেজের ডিরেক্টরি থেকে লোড করতে হবে।\n", + "পূর্বের উদাহরণগুলোতে, আমারা এমন ডাটাসেট লোড করছিলাম যেগুলো Keras-এ অন্তর্ভুক্ত। এখন আমারা আমাদের নিজের ডাটাসেট নিয়ে কাজ করতে যাচ্ছি, যা আমাদের একটি ছবি ফোল্ডার থেকে লোড করতে হবে।\n", "\n", - "বাস্তব জীবনে, ইমেজ ডেটাসেটের আকার বেশ বড় হতে পারে, এবং সব ডেটা মেমোরিতে ফিট হবে এমনটা আশা করা যায় না। তাই, ডেটাসেটগুলো প্রায়ই **জেনারেটর** হিসেবে উপস্থাপিত হয়, যা ট্রেনিংয়ের জন্য উপযুক্ত মিনি ব্যাচে ডেটা ফেরত দিতে পারে।\n", + "বাস্তব জীবনে, ইমেজ ডাটাসেটের আকার বেশ বড় হতে পারে, এবং সব ডেটা মেমোরিতে ফিট করার উপর নির্ভর করা যায় না। তাই, ডাটাসেটগুলোর প্রায়শই প্রতিনিধিত্ব করা হয় **জেনারেটর** হিসেবে যেগুলো প্রশিক্ষণের জন্য উপযুক্ত মিনি ব্যাচে ডেটা ফিরিয়ে দিতে পারে।\n", "\n", - "ইমেজ ক্লাসিফিকেশন নিয়ে কাজ করার জন্য, কেরাসে একটি বিশেষ ফাংশন `image_dataset_from_directory` অন্তর্ভুক্ত রয়েছে, যা বিভিন্ন ক্লাসের সাথে সম্পর্কিত সাবডিরেক্টরি থেকে ইমেজ লোড করতে পারে। এই ফাংশনটি ইমেজ স্কেলিংয়ের যত্ন নেয় এবং এটি ডেটাসেটকে ট্রেন এবং টেস্ট সাবসেটেও ভাগ করতে পারে:\n" + "ইমেজ শ্রেণীবিভাগের জন্য, Keras একটি বিশেষ ফাংশন `image_dataset_from_directory` অন্তর্ভুক্ত করেছে, যা বিভিন্ন শ্রেণীর সঙ্গে সম্পর্কিত সাবডিরেক্টরির থেকে ছবি লোড করতে পারে। এই ফাংশনটি ছবিগুলোকে স্কেল করাও দেখভাল করে এবং এটি ডাটাসেটকে প্রশিক্ষণ এবং পরীক্ষা সাবসেটেও ভাগ করতে পারে:\n" ] }, { @@ -383,9 +383,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "একই `seed` মান দুটি কলের জন্য সেট করা গুরুত্বপূর্ণ, কারণ এটি প্রশিক্ষণ এবং পরীক্ষার ডেটাসেটের মধ্যে ছবিগুলোর বিভাজনে প্রভাব ফেলে।\n", + "উভয় কলের জন্য একই `seed` মান সেট করা গুরুত্বপূর্ণ, কারণ এটি ট্রেন এবং টেস্ট ডেটাসেটের মধ্যে ছবিগুলোর বিভাজনে প্রভাব ফেলে।\n", "\n", - "ডেটাসেট স্বয়ংক্রিয়ভাবে ডিরেক্টরি থেকে শ্রেণীর নাম সংগ্রহ করে, এবং প্রয়োজনে আপনি সেগুলো অ্যাক্সেস করতে পারেন এই কলটি ব্যবহার করে:\n" + "Dataset স্বয়ংক্রিয়ভাবে ডিরেক্টরি থেকে ক্লাস নামগুলি নিয়ে আসে, এবং প্রয়োজনে আপনি এগুলিতে অ্যাক্সেস করতে পারেন কল করে:\n" ] }, { @@ -412,7 +412,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "আমরা যে ডেটাসেটগুলি সংগ্রহ করেছি সেগুলি সরাসরি `fit` ফাংশনে পাস করে মডেল প্রশিক্ষণ দেওয়া যেতে পারে। এগুলিতে সংশ্লিষ্ট ছবি এবং লেবেল উভয়ই রয়েছে, যা নিম্নলিখিত কাঠামো ব্যবহার করে লুপ করা যেতে পারে:\n" + "আমরা যে ডেটাসেটগুলি পেয়েছি সেগুলি সরাসরি `fit` ফাংশনে মডেল ট্রেনিংয়ের জন্য পাঠানো যেতে পারে। এগুলিতে উভয় সংশ্লিষ্ট ছবি এবং লেবেল থাকে, যা নিচের নির্মাণটি ব্যবহার করে লুপ করা যেতে পারে:\n" ] }, { @@ -453,16 +453,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "> **নোট**: ডেটাসেটে থাকা সমস্ত চিত্রগুলি ফ্লোটিং পয়েন্ট টেনসর হিসাবে ০-২৫৫ পরিসরে উপস্থাপিত হয়। সেগুলি নিউরাল নেটওয়ার্কে পাঠানোর আগে, আমাদের সেই মানগুলি ০-১ পরিসরে স্কেল করতে হবে। চিত্রগুলি প্লট করার সময়, আমাদের একই কাজ করতে হবে অথবা মানগুলি `int` টাইপে রূপান্তর করতে হবে (যা আমরা উপরের কোডে করেছি), যাতে `matplotlib`-কে দেখানো যায় যে আমরা মূল অস্কেল করা চিত্রটি প্লট করতে চাই।\n" + "> **নোট**: ডেটাসেটে থাকা সমস্ত চিত্রকে ফ্লোটিং পয়েন্ট টেনসর হিসেবে উপস্থাপন করা হয়েছে যার রেঞ্জ ০-২৫৫। সেগুলো নিউরাল নেটওয়ার্কে পাঠানোর আগে, আমাদের সেই ভ্যালুগুলোকে ০-১ রেঞ্জে স্কেল করতে হবে। যখন চিত্র প্লট করা হয়, তখনও আমাদের একই কাজ করতে হয়, অথবা ভ্যালুগুলোকে `int` টাইপে রূপান্তর করতে হয় (যা আমরা উপরের কোডে করি), যাতে `matplotlib` বুঝতে পারে যে আমরা মূল স্কেলবিহীন চিত্রটি প্লট করতে চাই। \n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## প্রি-ট্রেইনড মডেল\n", + "## প্রাক-প্রশিক্ষিত মডেলসমূহ\n", "\n", - "অনেক ইমেজ ক্লাসিফিকেশন কাজের জন্য প্রি-ট্রেইনড নিউরাল নেটওয়ার্ক মডেল পাওয়া যায়। এই মডেলগুলোর অনেকগুলো `keras.applications` নেমস্পেসের মধ্যে উপলব্ধ, এবং আরও অনেক মডেল ইন্টারনেটে পাওয়া যেতে পারে। চলুন দেখি কীভাবে সবচেয়ে সহজ VGG-16 মডেল লোড এবং ব্যবহার করা যায়:\n" + "অনেক ইমেজ শ্রেণীবিভাগ কাজের জন্য প্রাক-প্রশিক্ষিত নিউরাল নেটওয়ার্ক মডেল পাওয়া যায়। এই মডেলগুলোর অনেকগুলি `keras.applications` নামস্থানেই উপলব্ধ, এবং আরও অনেক মডেল ইন্টারনেটে পাওয়া যায়। চলুন দেখি সবচেয়ে সহজ VGG-16 মডেলটি কিভাবে লোড ও ব্যবহার করা যায়:\n" ] }, { @@ -497,7 +497,17 @@ } ], "source": [ - "vgg = keras.applications.VGG16()\n", + "# SHA-256 of VGG16 weights (with top)\n", + "VGG16_WEIGHTS_SHA256 = '64373286793e3c8b2b4e3219cbf3544bce2f55ab4682710a29f5e7af8f5e4f61'\n", + "\n", + "_weights_path = keras.utils.get_file(\n", + " 'vgg16_weights_tf_dim_ordering_tf_kernels.h5',\n", + " 'https://storage.googleapis.com/tensorflow/keras-applications/vgg16/vgg16_weights_tf_dim_ordering_tf_kernels.h5',\n", + " file_hash=VGG16_WEIGHTS_SHA256,\n", + " hash_algorithm='sha256',\n", + ")\n", + "\n", + "vgg = keras.applications.VGG16(weights=_weights_path)\n", "inp = keras.applications.vgg16.preprocess_input(x_sample[:1])\n", "\n", "res = vgg(inp)\n", @@ -510,17 +520,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "কিছু গুরুত্বপূর্ণ বিষয় এখানে উল্লেখ করা হয়েছে:\n", - "* কোনো প্রি-ট্রেইনড নেটওয়ার্কে ইনপুট দেওয়ার আগে সেটিকে একটি নির্দিষ্ট পদ্ধতিতে প্রি-প্রসেস করতে হয়। এটি `preprocess_input` ফাংশন কল করে করা হয়, যা একটি ব্যাচের ইমেজ গ্রহণ করে এবং তাদের প্রক্রিয়াকৃত ফর্ম প্রদান করে। VGG-16 এর ক্ষেত্রে, ইমেজগুলো নরমালাইজ করা হয় এবং প্রতিটি চ্যানেলের জন্য পূর্বনির্ধারিত গড় মান বাদ দেওয়া হয়। কারণ VGG-16 মূলত এই প্রি-প্রসেসিং পদ্ধতি ব্যবহার করে ট্রেইন করা হয়েছিল।\n", - "* ইনপুট ব্যাচে নিউরাল নেটওয়ার্ক প্রয়োগ করা হয়, এবং এর ফলাফল হিসেবে আমরা ১০০০-এলিমেন্টের টেনসর ব্যাচ পাই যা প্রতিটি ক্লাসের সম্ভাবনা দেখায়। এই টেনসরে `argmax` কল করে আমরা সবচেয়ে সম্ভাব্য ক্লাস নম্বরটি খুঁজে বের করতে পারি।\n", - "* প্রাপ্ত ফলাফলটি একটি [`ImageNet` ক্লাসের নম্বর](https://gist.github.com/yrevar/942d3a0ac09ec9e5eb3a)। এই ফলাফলটি বুঝতে, আমরা `decode_predictions` ফাংশন ব্যবহার করতে পারি, যা শীর্ষ n ক্লাস এবং তাদের নাম প্রদান করে।\n" + "এখানে কয়েকটি গুরুত্বপূর্ণ বিষয় রয়েছে:\n", + "* যেকোনো প্রি-ট্রেইন্ড নেটওয়ার্কে ইনপুট পাঠানোর আগে সেটিকে একটি নির্দিষ্ট উপায়ে প্রি-প্রসেস করা প্রয়োজন। এটি করা হয় সংশ্লিষ্ট `preprocess_input` ফাংশন কল করে, যা একটি ব্যাচ ইমেজ গ্রহণ করে এবং তাদের প্রক্রিয়াজাত রূপ প্রদান করে। VGG-16 এর ক্ষেত্রে, ছবিগুলো নর্মালাইজ করে এবং প্রতিটি চ্যানেলের জন্য কিছু পূর্বনির্ধারিত গড় মান বিয়োগ করা হয়। কারণ VGG-16 মূলত এই প্রি-প্রসেসিং দিয়ে ট্রেইন্ড ছিল।\n", + "* নিউরাল নেটওয়ার্ক ইনপুট ব্যাচে প্রয়োগ করা হয়, এবং আমরা ফলস্বরূপ পাই ১০০০-এলিমেন্ট টেনসর যা প্রতিটি ক্লাসের সম্ভাবনা দেখায়। আমরা এই টেনসরের উপর `argmax` কল করে সবচেয়ে সম্ভাব্য ক্লাস নম্বর পেতে পারি।\n", + "* প্রাপ্ত ফলাফল একটি [একটি `ImageNet` ক্লাসের নম্বর](https://gist.github.com/yrevar/942d3a0ac09ec9e5eb3a)। এই ফলের অর্থ বোঝার জন্য, আমরা `decode_predictions` ফাংশনও ব্যবহার করতে পারি, যা শীর্ষ n টি ক্লাস তাদের নামসহ প্রদান করে।\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "চলুন VGG-16 নেটওয়ার্কের স্থাপত্যও দেখি:\n" + "চলুন আমরা VGG-16 নেটওয়ার্কের আর্কিটেকচারও দেখি:\n" ] }, { @@ -597,9 +607,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## জিপিইউ গণনা\n", + "## GPU গণনা\n", "\n", - "ভি.জি.জি-১৬ এবং অন্যান্য আধুনিক আর্কিটেকচারের মতো গভীর নিউরাল নেটওয়ার্ক চালানোর জন্য প্রচুর গণনাশক্তি প্রয়োজন। যদি জিপিইউ অ্যাক্সিলারেশন উপলব্ধ থাকে, তবে এটি ব্যবহার করা যৌক্তিক। সৌভাগ্যবশত, কেরাস স্বয়ংক্রিয়ভাবে জিপিইউ-তে গণনার গতি বাড়িয়ে দেয় যদি এটি উপলব্ধ থাকে। আমরা নিচের কোড ব্যবহার করে পরীক্ষা করতে পারি যে টেনসরফ্লো জিপিইউ ব্যবহার করতে সক্ষম কিনা:\n" + "গভীর নিউরাল নেটওয়ার্ক যেমন VGG-16 এবং অন্যান্য আধুনিক আর্কিটেকচারের চালানোর জন্য যথেষ্ট পরিমাণে গণনামূলক শক্তি প্রয়োজন। যদি GPU ত্বরান্বিতকরণ উপলব্ধ থাকে তবে এটি ব্যবহার করা যুক্তিযুক্ত। সৌভাগ্যক্রমে, Keras স্বয়ংক্রিয়ভাবে GPU-এ গণনাগুলিকে দ্রুততর করে যদি এটি উপলব্ধ থাকে। আমরা নিম্নলিখিত কোড ব্যবহার করে পরীক্ষা করতে পারি Tensorflow GPU ব্যবহার করতে সক্ষম কিনা:\n" ] }, { @@ -626,9 +636,10 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## VGG বৈশিষ্ট্য বের করা\n", "\n", - "যদি আমরা আমাদের ছবিগুলো থেকে বৈশিষ্ট্য বের করতে VGG-16 ব্যবহার করতে চাই, তাহলে আমাদের চূড়ান্ত শ্রেণীবিন্যাস স্তরগুলো ছাড়া মডেল প্রয়োজন। আমরা নিচের কোড ব্যবহার করে VGG-16 মডেলকে শীর্ষ স্তর ছাড়া তৈরি করতে পারি:\n" + "## VGG বৈশিষ্ট্য সংগ্রহ করা\n", + "\n", + "যদি আমরা আমাদের ছবি থেকে বৈশিষ্ট্য বের করতে VGG-16 ব্যবহার করতে চাই, তবে আমাদের চূড়ান্ত শ্রেণীবিন্যাস স্তর ছাড়া মডেলটি প্রয়োজন। আমরা VGG-16 মডেলটি টপ স্তর ছাড়া নিম্নলিখিত কোড ব্যবহার করে উদ্ভিদ করতে পারি:\n" ] }, { @@ -680,9 +691,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "ফিচার টেনসরের ডাইমেনশন 7x7x512, তবে এটি ভিজুয়ালাইজ করার জন্য আমাদের এটি 2D আকারে রিশেপ করতে হয়েছে।\n", + "ফিচার টেন্সরের মাত্রা ৭x৭x৫১২, কিন্তু এটি ভিজুয়ালাইজ করার জন্য আমাদের এটি ২ডি আকারে রিশেপ করতে হয়েছিল। \n", "\n", - "এখন চলুন দেখি এই ফিচারগুলো কি ইমেজ ক্লাসিফাই করতে ব্যবহার করা যায়। চলুন ম্যানুয়ালি কিছু ইমেজের অংশ (আমাদের ক্ষেত্রে ৫০টি মিনিব্যাচ) নিয়ে তাদের ফিচার ভেক্টর প্রি-কম্পিউট করি। আমরা Tensorflow **dataset** API ব্যবহার করতে পারি এটি করার জন্য। `map` ফাংশন একটি ডেটাসেট নেয় এবং একটি নির্দিষ্ট ল্যাম্বডা-ফাংশন প্রয়োগ করে সেটিকে রূপান্তরিত করে। আমরা এই মেকানিজম ব্যবহার করে নতুন ডেটাসেট তৈরি করি, `ds_features_train` এবং `ds_features_test`, যা মূল ইমেজের পরিবর্তে VGG-এক্সট্রাক্টেড ফিচার ধারণ করে।\n" + "এখন চলুন দেখা যাক এই ফিচারগুলো ছবি শ্রেণীবদ্ধ করতে ব্যবহার করা যেতে পারে কিনা। হাতে নিয়ে কিছু ছবি অংশ (আমাদের ক্ষেত্রে ৫০টি মিনিব্যাচ) নিয়ে তাদের ফিচার ভেক্টর পূর্ব-গণনা করি। আমরা এটি করার জন্য Tensorflow **dataset** API ব্যবহার করতে পারি। `map` ফাংশন একটি ডেটাসেট নেয় এবং এটি রূপান্তরের জন্য একটি প্রদত্ত ল্যাম্বডা-ফাংশন প্রয়োগ করে। আমরা এই পদ্ধতি ব্যবহার করে নতুন ডেটাসেট তৈরি করি, `ds_features_train` এবং `ds_features_test`, যা আসল ছবিগুলোর পরিবর্তে VGG-নির্গত ফিচার ধারণ করে। \n" ] }, { @@ -712,9 +723,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "আমরা ডেটাসেটের আকার সীমিত করতে এবং আমাদের প্রদর্শন দ্রুত করতে `.take(50)` কনস্ট্রাকশন ব্যবহার করেছি। অবশ্যই, আপনি পুরো ডেটাসেটে এই পরীক্ষাটি চালাতে পারেন।\n", + "আমরা আমাদের প্রদর্শনটি দ্রুততর করতে ডেটাসেট আকার সীমাবদ্ধ করার জন্য `.take(50)` ব্যবহার করেছি। অবশ্যই আপনি পুরো ডেটাসেটের ওপর এই পরীক্ষাটি করতে পারেন।\n", "\n", - "এখন যেহেতু আমাদের কাছে বৈশিষ্ট্যসমূহ নির্যাস করা একটি ডেটাসেট রয়েছে, আমরা একটি সাধারণ ডেন্স ক্লাসিফায়ার প্রশিক্ষণ দিতে পারি যা বিড়াল এবং কুকুরের মধ্যে পার্থক্য করতে সক্ষম। এই নেটওয়ার্কটি (7,7,512) আকারের একটি ফিচার ভেক্টর গ্রহণ করবে এবং একটি আউটপুট তৈরি করবে যা হয় কুকুর অথবা বিড়ালের সাথে সম্পর্কিত। যেহেতু এটি একটি বাইনারি ক্লাসিফিকেশন, আমরা `sigmoid` অ্যাক্টিভেশন ফাংশন এবং `binary_crossentropy` লস ব্যবহার করি।\n" + "এখন যেহেতু আমাদের কাছে ফিচার বের করা একটি ডেটাসেট আছে, আমরা একটি সাদামাটা ডেন্স ক্লাসিফায়ার প্রশিক্ষণ দিতে পারি যা বিড়াল এবং কুকুরের মধ্যে পার্থক্য করতে পারবে। এই নেটওয়ার্কটি (7,7,512) আকৃতির ফিচার ভেক্টর গ্রহণ করবে এবং একটি আউটপুট উৎপন্ন করবে যা হয় কুকুরের বা বিড়ালের সাথে সম্পর্কিত। যেহেতু এটি একটি বাইনারি শ্রেণীবিভাগ, আমরা `sigmoid` সক্রিয়করণ ফাংশন এবং `binary_crossentropy` লস ব্যবহার করি।\n" ] }, { @@ -743,13 +754,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "ফলাফলটি চমৎকার, আমরা একটি বিড়াল এবং একটি কুকুরকে প্রায় ৯৫% সম্ভাবনার সাথে আলাদা করতে পারি! তবে, আমরা এই পদ্ধতিটি শুধুমাত্র সমস্ত ছবির একটি উপসেটের উপর পরীক্ষা করেছি, কারণ ম্যানুয়াল ফিচার এক্সট্রাকশন করতে অনেক সময় লাগে।\n", + "ফলাফল চমৎকার, আমরা প্রায় ৯৫% সম্ভাবনার সাথে একটি বিড়াল এবং একটি কুকুরের মধ্যে পার্থক্য করতে পারি! তবে, আমরা এই পদ্ধতিটি শুধুমাত্র সব চিত্রের একটি উপসেটের উপর পরীক্ষিত করেছি, কারণ ম্যানুয়াল ফিচার বের করা অনেক সময় নেয় বলে মনে হয়।\n", "\n", "## একটি VGG নেটওয়ার্ক ব্যবহার করে ট্রান্সফার লার্নিং\n", "\n", - "আমরা ম্যানুয়ালি ফিচার প্রি-কম্পিউট করার প্রয়োজন এড়াতে পারি, যদি আমরা প্রশিক্ষণের সময় পুরো VGG-16 নেটওয়ার্কটি ব্যবহার করি এবং আমাদের নেটওয়ার্কে প্রথম স্তর হিসেবে একটি ফিচার এক্সট্রাক্টর যোগ করি।\n", + "আমরা ম্যানুয়ালি ফিচার প্রি-কম্পিউট করার প্রয়োজন এড়াতে পারি মূল VGG-16 নেটওয়ার্কটিকে পুরোপুরি ট্রেনিং এর সময় ব্যবহার করে, আমাদের নেটওয়ার্কে ফিচার এক্সট্রাক্টরকে প্রথম লেয়ার হিসেবে যোগ করে।\n", "\n", - "Keras আর্কিটেকচারের সৌন্দর্য হলো, উপরে সংজ্ঞায়িত VGG-16 মডেলটিকে আমরা অন্য একটি নিউরাল নেটওয়ার্কের স্তর হিসেবেও ব্যবহার করতে পারি! আমাদের কেবল একটি ডেন্স ক্লাসিফায়ার সহ একটি নেটওয়ার্ক তৈরি করতে হবে এবং তারপর পুরো নেটওয়ার্কটি ব্যাক প্রোপাগেশনের মাধ্যমে প্রশিক্ষণ দিতে হবে।\n" + "কেরাস আর্কিটেকচারের সৌন্দর্য হল আমাদের উপরে সংজ্ঞায়িত VGG-16 মডেলটিকে অন্য একটি নিউরাল নেটওয়ার্কের একটি লেয়ার হিসেবেও ব্যবহার করা যেতে পারে! আমাদের শুধু এর উপরে ঘন ক্লাসিফায়ার নিয়ে একটি নেটওয়ার্ক তৈরি করতে হবে, এবং তারপর ব্যাকপ্রপাগেশন ব্যবহার করে পুরো নেটওয়ার্কটিকে ট্রেন করতে হবে।\n" ] }, { @@ -793,13 +804,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "এই মডেলটি একটি প্রান্ত-থেকে-প্রান্ত শ্রেণীবিন্যাস নেটওয়ার্কের মতো, যা একটি ছবি গ্রহণ করে এবং শ্রেণী ফেরত দেয়। তবে, জটিল বিষয়টি হলো আমরা চাই VGG16 একটি ফিচার এক্সট্রাক্টর হিসেবে কাজ করুক এবং পুনরায় প্রশিক্ষিত না হোক। সুতরাং, আমাদের **কনভল্যুশনাল ফিচার এক্সট্রাক্টরের ওজন স্থির করতে হবে**। আমরা নেটওয়ার্কের প্রথম স্তরে পৌঁছাতে পারি `model.layers[0]` কল করে, এবং আমাদের কেবল `trainable` প্রপার্টিকে `False` সেট করতে হবে।\n", + "এই মডেলটি একটি end-to-end শ্রেণীবিভাগ নেটওয়ার্কের মতো যা একটি ইমেজ নেয় এবং ক্লাস প্রদান করে। তবে, জটিল বিষয় হলো আমরা চাই VGG16 ফিচার এক্সট্র্যাক্টর হিসাবে কাজ করুক, এবং পুনরায় প্রশিক্ষিত না হোক। সুতরাং, আমাদের **কনভল্যুশনাল ফিচার এক্সট্র্যাক্টরের ওয়েটগুলো ফ্রিজ করতে হবে**। নেটওয়ার্কের প্রথম লেয়ারে অ্যাক্সেস পেতে আমরা `model.layers[0]` কল করতে পারি, এবং শুধুমাত্র `trainable` প্রপার্টিকে `False` সেট করতে হবে।\n", "\n", - "> **Note**: ফিচার এক্সট্রাক্টরের ওজন স্থির করা প্রয়োজন, কারণ অন্যথায় প্রশিক্ষণহীন শ্রেণীবিন্যাস স্তর মূল প্রি-ট্রেইনড কনভল্যুশনাল এক্সট্রাক্টরের ওজন নষ্ট করতে পারে।\n", + "> **বিঃদ্রঃ**: ফিচার এক্সট্র্যাক্টরের ওয়েট ফ্রিজ করার প্রয়োজন কারণ অন্যথায় প্রশিক্ষিত নয় এমন ক্লাসিফায়ার লেয়ার মূল pre-trained কনভল্যুশন এক্সট্র্যাক্টরের ওয়েটগুলো ক্ষতিগ্রস্থ করতে পারে।\n", "\n", - "আপনি লক্ষ্য করবেন যে আমাদের নেটওয়ার্কে মোট প্যারামিটারের সংখ্যা প্রায় ১৫ মিলিয়ন হলেও, আমরা কেবল ২৫ হাজার প্যারামিটার প্রশিক্ষণ করছি। শীর্ষ স্তরের কনভল্যুশনাল ফিল্টারের অন্যান্য সমস্ত প্যারামিটার প্রি-ট্রেইনড। এটি ভালো, কারণ আমরা কম সংখ্যক উদাহরণের মাধ্যমে কম সংখ্যক প্যারামিটার সূক্ষ্মভাবে টিউন করতে পারি।\n", + "আপনি লক্ষ্য করবেন যে আমাদের নেটওয়ার্কে মোট প্যারামিটার প্রায় ১৫ মিলিয়ন হলেও আমরা মাত্র ২৫ হাজার প্যারামিটার ট্রেন করব। ওপরের স্তরের কনভল্যুশনাল ফিল্টারগুলো আগেই ট্রেন করা। এটি ভালো, কারণ আমরা কম সংখ্যক উদাহরণ দিয়ে ছোট পরিমাণ প্যারামিটার ফাইন-টিউন করতে পারি।\n", "\n", - "এখন আমরা আমাদের নেটওয়ার্ক প্রশিক্ষণ করব এবং দেখব আমরা কতটা ভালো ফলাফল পেতে পারি। অপেক্ষাকৃত দীর্ঘ সময় ধরে চলার আশা করুন, এবং যদি কার্যক্রম কিছু সময়ের জন্য স্থবির মনে হয় তবে চিন্তা করবেন না।\n" + "এখন আমরা আমাদের নেটওয়ার্ক ট্রেন করব এবং দেখব এটি কতটা ভালো করতে পারে। অপেক্ষাকৃত দীর্ঘ রানিং টাইম আশা করুন, এবং যদি কিছু সময়ের জন্য এক্সিকিউশন ফ্রিজ মনে হয় তবে চিন্তা করবেন না।\n" ] }, { @@ -824,11 +835,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "আমরা মনে হচ্ছে একটি যথাযথ বিড়াল বনাম কুকুর শ্রেণীবিন্যাসকারী তৈরি করতে পেরেছি!\n", + "মনে হচ্ছে আমরা যথেষ্ট সঠিক বিড়াল বনাম কুকুর শ্রেণীবদ্ধকারী পেয়েছি!\n", "\n", - "## মডেল সংরক্ষণ এবং লোড করা\n", + "## মডেল সংরক্ষণ ও লোডিং\n", "\n", - "যখন আমরা মডেলটি প্রশিক্ষণ সম্পন্ন করি, তখন ভবিষ্যতে ব্যবহারের জন্য মডেলের স্থাপত্য এবং প্রশিক্ষিত ওজনগুলো একটি ফাইলে সংরক্ষণ করতে পারি:\n" + "একবার আমরা মডেলটি প্রশিক্ষিত করলে, ভবিষ্যতের ব্যবহারের জন্য আমরা মডেল আর্কিটেকচার এবং প্রশিক্ষিত ওজন একটি ফাইলে সংরক্ষণ করতে পারি:\n" ] }, { @@ -852,7 +863,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "আমরা তারপর যেকোনো সময় ফাইল থেকে মডেলটি লোড করতে পারি। এটি আপনার জন্য উপকারী হতে পারে যদি পরবর্তী পরীক্ষায় মডেলটি নষ্ট হয়ে যায় - আপনাকে শুরু থেকে আবার শুরু করতে হবে না।\n" + "আমরা পরে যে কোনও সময় ফাইল থেকে মডেলটি লোড করতে পারি। পরবর্তী পরীক্ষা যদি মডেলকে ক্ষতিগ্রস্ত করে তবে এটি আপনার জন্য উপকারী হতে পারে - আপনাকে শূন্য থেকে আবার শুরু করতে হবে না।\n" ] }, { @@ -868,15 +879,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## ট্রান্সফার লার্নিং ফাইন-টিউনিং\n", + "## সূক্ষ্ম-টিউনিং ট্রান্সফার লার্নিং\n", "\n", - "পূর্ববর্তী অংশে, আমরা আমাদের নিজস্ব ডেটাসেটে চিত্র শ্রেণীবদ্ধ করার জন্য চূড়ান্ত ক্লাসিফায়ার স্তরটি প্রশিক্ষণ দিয়েছি। তবে, আমরা ফিচার এক্সট্রাক্টর পুনরায় প্রশিক্ষণ করিনি, এবং আমাদের মডেল ImageNet ডেটা থেকে শেখা বৈশিষ্ট্যগুলোর উপর নির্ভর করেছে। যদি আপনার অবজেক্টগুলো সাধারণ ImageNet ছবির থেকে ভিজ্যুয়ালি আলাদা হয়, তাহলে এই বৈশিষ্ট্যগুলোর সংমিশ্রণ সেরা কাজ নাও করতে পারে। তাই কনভোলিউশনাল লেয়ারগুলো প্রশিক্ষণ শুরু করাটা যুক্তিযুক্ত।\n", + "পূর্ববর্তী অংশে, আমরা আমাদের নিজস্ব ডেটাসেটে ছবিগুলো শ্রেণীবদ্ধ করার জন্য চূড়ান্ত শ্রেণীবিভাজক স্তর প্রশিক্ষণ দিয়েছি। যাহোক, আমরা ফিচার এক্সট্রাক্টর পুনঃপ্রশিক্ষণ করি নি, এবং আমাদের মডেল ImageNet ডেটাতে শেখানো ফিচারের উপর নির্ভর করেছিল। যদি আপনার অবজেক্টগুলি সাধারণ ImageNet ছবির থেকে দৃশ্যত আলাদা হয়, তাহলে এই ফিচার সংমিশ্রণ সেরা কাজ নাও করতে পারে। সুতরাং, কনভল্যুশনাল লেয়ারগুলি প্রশিক্ষণ শুরু করাও বুদ্ধিমানের ব্যাপার।\n", "\n", - "এটি করতে, আমরা পূর্বে ফ্রিজ করা কনভোলিউশনাল ফিল্টার প্যারামিটারগুলো আনফ্রিজ করতে পারি।\n", + "এ জন্য, আমরা পূর্বে ফ্রিজ করা কনভল্যুশনাল ফিল্টার প্যারামিটারগুলি আনফ্রিজ করতে পারি।\n", "\n", - "> **Note:** প্রথমে প্যারামিটারগুলো ফ্রিজ করা এবং ক্লাসিফিকেশন লেয়ারের ওজন স্থিতিশীল করার জন্য কয়েকটি ইপোক প্রশিক্ষণ করা গুরুত্বপূর্ণ। যদি আপনি আনফ্রিজ করা প্যারামিটারসহ এন্ড-টু-এন্ড নেটওয়ার্ক প্রশিক্ষণ শুরু করেন, তাহলে বড় ভুলগুলো কনভোলিউশনাল লেয়ারের প্রি-ট্রেইনড ওজন নষ্ট করতে পারে।\n", + "> **দ্রষ্টব্য:** প্যারামিটারগুলি প্রথমে ফ্রিজ করে শ্রেণীবিভাগ স্তরে ওজন স্থির করার জন্য কয়েকটি এপোক্সের প্রশিক্ষণ দেওয়া গুরুত্বপূর্ণ। যদি আপনি অনফ্রিজড প্যারামিটার দিয়ে সোজাসুজি পূর্ণ নেটওয়ার্ক প্রশিক্ষণ শুরু করেন, তাহলে বড় ত্রুটিগুলো কনভল্যুশনাল লেয়ারের প্রিট্রেইনড ওজন ধ্বংস করতে পারে।\n", "\n", - "আমাদের কনভোলিউশনাল VGG-16 মডেলটি প্রথম স্তরের ভিতরে অবস্থিত, এবং এটি নিজেই অনেক স্তর নিয়ে গঠিত। আমরা এর গঠন দেখতে পারি:\n" + "আমাদের কনভল্যুশনাল VGG-16 মডেল প্রথম স্তরের ভিতরে অবস্থিত এবং এতে অনেকগুলো স্তর আছে। আমরা এর গঠন দেখতে পারি:\n" ] }, { @@ -945,7 +956,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "আমরা কনভোলিউশনাল বেসের সমস্ত স্তর আনফ্রিজ করতে পারি:\n" + "আমরা কনভলিউশনাল বেসের সমস্ত স্তর আনফ্রিজ করতে পারি:\n" ] }, { @@ -961,7 +972,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "তবে, একসাথে সবগুলো আনফ্রিজ করা সেরা ধারণা নয়। আমরা প্রথমে কয়েকটি চূড়ান্ত কনভোলিউশন স্তর আনফ্রিজ করতে পারি, কারণ সেগুলো আমাদের ছবির জন্য প্রাসঙ্গিক উচ্চ-স্তরের প্যাটার্ন ধারণ করে। উদাহরণস্বরূপ, শুরুতে আমরা শেষ ৪টি স্তর ছাড়া সবগুলো স্তর ফ্রিজ করতে পারি:\n" + "যাহোক, সবগুলো একসাথে আনফ্রিজ করা সেরা ধারণা নয়। আমরা প্রথমে কয়েকটি শেষের কনভলিউশন লেয়ার আনফ্রিজ করতে পারি, কারণ এগুলো উচ্চ স্তরের প্যাটার্ন ধারণ করে যা আমাদের ছবির জন্য প্রাসঙ্গিক। উদাহরণস্বরূপ, শুরুতে, আমরা সব লেয়ার ফ্রিজ করতে পারি শুধু শেষের ৪টি ছাড়া: \n" ] }, { @@ -1000,11 +1011,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "প্রশিক্ষণযোগ্য প্যারামিটারের সংখ্যা উল্লেখযোগ্যভাবে বৃদ্ধি পেয়েছে, তবে এটি এখনও মোট প্যারামিটারের প্রায় ৫০% এর কাছাকাছি রয়েছে।\n", + "লক্ষ্য করুন যে ট্রেনযোগ্য প্যারামিটারগুলির সংখ্যা উল্লেখযোগ্যভাবে বৃদ্ধি পেয়েছে, তবে এটি এখনও সব প্যারামিটারের প্রায় ৫০% এর মধ্যে রয়েছে।\n", "\n", - "আনফ্রিজ করার পর, আমরা আরও কয়েকটি এপোক প্রশিক্ষণ চালাতে পারি (আমাদের উদাহরণে, আমরা কেবল একটি এপোক করব)। আপনি কম লার্নিং রেটও বেছে নিতে পারেন, যাতে প্রি-ট্রেইনড ওজনগুলোর উপর প্রভাব কমানো যায়। তবে, এমনকি কম লার্নিং রেটের সাথেও, প্রশিক্ষণের শুরুতে সঠিকতার (accuracy) কিছুটা হ্রাস আশা করা যায়, যতক্ষণ না এটি ধীরে ধীরে স্থির ওজনে প্রশিক্ষণের চেয়ে সামান্য উচ্চ স্তরে পৌঁছায়।\n", + "আনফ্রিজ করার পরে, আমরা আরও কয়েকটি এপোক প্রশিক্ষণ করতে পারি (আমাদের উদাহরণে, আমরা কেবল একটিই করব)। আপনি প্রি-ট্রেইনড ওয়েটগুলোর উপর প্রভাব কমানোর জন্য নিম্ন লার্নিং রেটও নির্বাচন করতে পারেন। তবে, কম লার্নিং রেট থাকলেও, প্রশিক্ষণের শুরুতে সঠিকতার পতনের আশা করতে পারেন, যতক্ষণ না তা অবশেষে স্থির ওয়েটের ক্ষেত্রে তুলনায় সামান্য উচ্চতর স্তরে পৌঁছে যায়।\n", "\n", - "> **Note:** এই প্রশিক্ষণ অনেক ধীর গতিতে হয়, কারণ আমাদের নেটওয়ার্কের অনেক স্তরের মধ্য দিয়ে গ্রেডিয়েন্টগুলোকে পেছনে প্রোপাগেট করতে হয়!\n" + "> **নোট:** এই প্রশিক্ষণ অনেক ধীরে ঘটে, কারণ আমাদের নেটওয়ার্কের বহু স্তরের মাধ্যমে গ্রেডিয়েন্টগুলো পশ্চাদপসরণ করতে হয়!\n" ] }, { @@ -1028,18 +1039,18 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "আমরা সম্ভবত উচ্চতর প্রশিক্ষণ সঠিকতা অর্জন করতে পারি, কারণ আমরা আরও শক্তিশালী নেটওয়ার্ক ব্যবহার করছি যার মধ্যে আরও বেশি প্যারামিটার রয়েছে, তবে যাচাই সঠিকতা ততটা বৃদ্ধি পাবে না।\n", + "আমরা সম্ভবত উচ্চতর প্রশিক্ষণ নির্ভুলতা অর্জন করবো, কারণ আমরা আরও বেশি পরামিতি সহ একটি শক্তিশালী নেটওয়ার্ক ব্যবহার করছি, তবে যাচাইকরণ নির্ভুলতা ততটা বৃদ্ধি পাবে না।\n", "\n", - "নেটওয়ার্কের আরও কয়েকটি স্তর আনফ্রিজ করে এবং আরও প্রশিক্ষণ দিয়ে দেখুন আপনি কি উচ্চতর সঠিকতা অর্জন করতে পারেন!\n" + "যদি আপনি উচ্চতর নির্ভুলতা অর্জন করতে পারেন কিনা তা দেখতে নেটওয়ার্কের আরও কয়েকটি স্তর আনফ্রিজ করে আরও প্রশিক্ষণ দেওয়ার জন্য আপনি স্বাচ্ছন্দ্যবোধ করুন!\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## অন্যান্য কম্পিউটার ভিশন মডেল\n", + "## অন্যান্য কম্পিউটার ভিশন মডেলগুলি\n", "\n", - "VGG-16 হল সবচেয়ে সহজ কম্পিউটার ভিশন আর্কিটেকচারগুলোর একটি। Keras আরও অনেক প্রি-ট্রেইনড নেটওয়ার্ক সরবরাহ করে। এর মধ্যে সবচেয়ে বেশি ব্যবহৃত হয় **ResNet** আর্কিটেকচার, যা Microsoft দ্বারা তৈরি, এবং **Inception**, যা Google দ্বারা তৈরি। উদাহরণস্বরূপ, আসুন সবচেয়ে সহজ ResNet-50 মডেলের আর্কিটেকচারটি দেখি (ResNet একটি মডেলের পরিবার যার গভীরতা ভিন্ন ভিন্ন, আপনি যদি দেখতে চান একটি সত্যিকারের গভীর মডেল কেমন হয়, তাহলে ResNet-152 নিয়ে পরীক্ষা করতে পারেন):\n" + "VGG-16 হল সবচেয়ে সহজ কম্পিউটার ভিশন আর্কিটেকচারগুলির মধ্যে একটি। Keras আরও অনেক প্রি-ট্রেইনড নেটওয়ার্ক সরবরাহ করে। এগুলির মধ্যে সবচেয়ে বেশি ব্যবহৃত হল মাইক্রোসফট কর্তৃক বিকাশিত **ResNet** আর্কিটেকচার এবং গুগলের **Inception**। উদাহরণস্বরূপ, চলুন সবচেয়ে সহজ ResNet-50 মডেলের আর্কিটেকচার অনুধাবন করি (ResNet হল বিভিন্ন গভীরতার মডেলের একটি পরিবার, আপনি চাইলে ResNet-152 নিয়ে পরীক্ষা-নিরীক্ষা করতে পারেন যা একটি সত্যিই গভীর মডেল কেমন দেখতে হয় তা দেখতে): \n" ] }, { @@ -1441,29 +1452,29 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "যেমনটি দেখা যাচ্ছে, মডেলটিতে একই পরিচিত বিল্ডিং ব্লক রয়েছে: কনভোলিউশনাল লেয়ার, পুলিং লেয়ার এবং চূড়ান্ত ডেন্স ক্লাসিফায়ার। আমরা এই মডেলটি ঠিক একইভাবে ব্যবহার করতে পারি, যেমন আমরা VGG-16 ব্যবহার করতাম ট্রান্সফার লার্নিংয়ের জন্য। আপনি উপরের কোডটি নিয়ে বিভিন্ন ResNet মডেলকে বেস মডেল হিসেবে ব্যবহার করে পরীক্ষা করতে পারেন এবং দেখতে পারেন কিভাবে সঠিকতার হার পরিবর্তিত হয়।\n", + "আপনি দেখতে পাচ্ছেন, মডেলটি একই পরিচিত বিল্ডিং ব্লকগুলি ধারণ করে: কনভলিউশনাল লেয়ার, পুলিং লেয়ার এবং ফাইনাল ডেন্স ক্লাসিফায়ার। আমরা এই মডেলটি ঠিক একইভাবে ব্যবহার করতে পারি যেমন আমরা ট্রান্সফার লার্নিংয়ের জন্য VGG-16 ব্যবহার করতাম। আপনি উপরের কোড দিয়ে বিভিন্ন রেসনেট মডেলকে বেস মডেল হিসেবে ব্যবহার করে পরীক্ষা করতে পারেন এবং দেখতে পারেন যে নির্ভুলতা কেমন পরিবর্তিত হয়।\n", "\n", "## ব্যাচ নরমালাইজেশন\n", "\n", - "এই নেটওয়ার্কে আরেকটি নতুন ধরনের লেয়ার রয়েছে: **ব্যাচ নরমালাইজেশন**। ব্যাচ নরমালাইজেশনের ধারণা হলো নিউরাল নেটওয়ার্কের মধ্য দিয়ে প্রবাহিত মানগুলোকে সঠিক সীমার মধ্যে নিয়ে আসা। সাধারণত নিউরাল নেটওয়ার্ক সবচেয়ে ভালো কাজ করে যখন সব মান [-1,1] বা [0,1] এর মধ্যে থাকে, এবং এ কারণেই আমরা আমাদের ইনপুট ডেটাকে সেই অনুযায়ী স্কেল/নরমালাইজ করি। তবে, একটি ডিপ নেটওয়ার্ক ট্রেনিংয়ের সময় এমন হতে পারে যে মানগুলো উল্লেখযোগ্যভাবে এই সীমার বাইরে চলে যায়, যা ট্রেনিংকে সমস্যাজনক করে তোলে। ব্যাচ নরমালাইজেশন লেয়ার বর্তমান মিনিব্যাচের জন্য গড় এবং স্ট্যান্ডার্ড ডেভিয়েশন গণনা করে এবং সেগুলো ব্যবহার করে সংকেতকে নরমালাইজ করে, তারপর এটি নিউরাল নেটওয়ার্ক লেয়ারের মধ্য দিয়ে পাঠায়। এটি ডিপ নেটওয়ার্কগুলোর স্থিতিশীলতাকে উল্লেখযোগ্যভাবে উন্নত করে।\n" + "এই নেটওয়ার্কে আরেক ধরনের লেয়ার আছে: **ব্যাচ নরমালাইজেশন**। ব্যাচ নরমালাইজেশনের ধারণা হল নিউরাল নেটওয়ার্কের মধ্য দিয়ে প্রবাহিত মানগুলিকে সঠিক পরিসরে আনা। সাধারণত নিউরাল নেটওয়ার্কগুলি সর্বোত্তম কাজ করে যখন সব মান [-১, ১] অথবা [০, ১] পরিসরের মধ্যে থাকে, আর এটি কারণ যে আমরা আমাদের ইনপুট ডেটাকে সেই অনুযায়ী স্কেল/নরমালাইজ করি। তবে, একটি গভীর নেটওয়ার্কের প্রশিক্ষণের সময় এটি ঘটতে পারে যে মানগুলি উল্লেখযোগ্যভাবে এই পরিসরের বাইরে চলে যায়, যা প্রশিক্ষণকে সমস্যাযুক্ত করে তোলে। ব্যাচ নরমালাইজেশন লেয়ার বর্তমান মিনিব্যাচের সব মানের জন্য গড় এবং স্ট্যান্ডার্ড ডিভিয়েশন গণনা করে এবং সেগুলো ব্যবহার করে সংকেতকে নরমালাইজ করে নিউরাল নেটওয়ার্ক লেয়ারের মাধ্যমে পাঠানোর আগে। এটি গভীর নেটওয়ার্কের স্থিতিশীলতাকে উল্লেখযোগ্যভাবে উন্নত করে।\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## মূল বিষয়\n", + "## উপসংহার\n", "\n", - "ট্রান্সফার লার্নিং ব্যবহার করে, আমরা খুব দ্রুত আমাদের কাস্টম অবজেক্ট শ্রেণীবিন্যাস কাজের জন্য একটি ক্লাসিফায়ার তৈরি করতে পেরেছি এবং উচ্চ নির্ভুলতা অর্জন করেছি। তবে, এই উদাহরণটি পুরোপুরি ন্যায্য ছিল না, কারণ মূল VGG-16 নেটওয়ার্কটি আগে থেকেই বিড়াল এবং কুকুর সনাক্ত করার জন্য প্রশিক্ষিত ছিল, এবং আমরা কেবল নেটওয়ার্কে ইতিমধ্যে বিদ্যমান বেশিরভাগ প্যাটার্ন পুনরায় ব্যবহার করেছি। আপনি আরও অদ্ভুত বা নির্দিষ্ট ডোমেইন-ভিত্তিক অবজেক্টগুলির ক্ষেত্রে কম নির্ভুলতা আশা করতে পারেন, যেমন একটি কারখানার উৎপাদন লাইনের বিস্তারিত অংশ বা বিভিন্ন গাছের পাতা।\n", + "ট্রান্সফার লার্নিং ব্যবহার করে, আমরা দ্রুত আমাদের কাস্টম অবজেক্ট ক্লাসিফিকেশন টাস্কের জন্য একটি ক্লাসিফায়ার তৈরি করতে পেরেছিলাম, এবং উচ্চ সঠিকতা অর্জন করেছিলাম। তবে, এই উদাহরণটি সম্পূর্ণ ন্যায্য ছিল না, কারণ মূল VGG-16 নেটওয়ার্কটি বিড়াল এবং কুকুর চিনতে প্রি-ট্রেন করা ছিল, তাই আমরা আসলে নেটওয়ার্কে ইতিমধ্যেই উপস্থিত বেশিরভাগ প্যাটার্ন পুনরায় ব্যবহার করছিলাম। আপনি আরো বিদেশী ডোমেইন-স্পেসিফিক অবজেক্ট, যেমন একটি কারখানার উৎপাদন লাইনের বিশদ বা বিভিন্ন ধরনের গাছের পাতা সম্পর্কে কম সঠিকতা আশা করতে পারেন।\n", "\n", - "আপনি দেখতে পাচ্ছেন যে, এখন আমরা যে আরও জটিল কাজগুলি সমাধান করছি, সেগুলির জন্য উচ্চতর কম্পিউটেশনাল ক্ষমতা প্রয়োজন এবং সেগুলি সহজে CPU-তে সমাধান করা যায় না। পরবর্তী ইউনিটে, আমরা একই মডেলটি কম কম্পিউটিং সম্পদ ব্যবহার করে প্রশিক্ষণ দেওয়ার জন্য আরও হালকা ওজনের একটি পদ্ধতি ব্যবহার করার চেষ্টা করব, যা সামান্য কম নির্ভুলতা প্রদান করবে।\n" + "আপনি দেখতে পাচ্ছেন, যেসব আরও জটিল কাজ এখন আমরা সমাধান করছি সেগুলো উচ্চতর কম্পিউটেশনাল পাওয়ার প্রয়োজন করে, এবং সহজে CPU-তে সমাধান করা যায় না। পরবর্তী ইউনিটে, আমরা আরো হালকা বাস্তবায়ন ব্যবহার করার চেষ্টা করব একই মডেলটি কম কম্পিউট রিসোর্স ব্যবহার করে প্রশিক্ষণ দেওয়ার জন্য, যা সামান্য কম সঠিকতার ফলাফল দিবে।\n" ] }, { "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\n" ] } ], @@ -1484,12 +1495,6 @@ "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.10" - }, - "coopTranslator": { - "original_hash": "c189abc107848f96051085cc30945129", - "translation_date": "2025-08-28T10:58:24+00:00", - "source_file": "lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb", - "language_code": "bn" } }, "nbformat": 4, diff --git a/translations/bn/lessons/5-NLP/README.md b/translations/bn/lessons/5-NLP/README.md index 9c568744..b699e8bf 100644 --- a/translations/bn/lessons/5-NLP/README.md +++ b/translations/bn/lessons/5-NLP/README.md @@ -1,51 +1,51 @@ -# প্রাকৃতিক ভাষা প্রক্রিয়াকরণ +# প্রাকৃতিক ভাষা প্রক্রিয়াকরণ -![NLP কাজগুলোর সারাংশ একটি ডুডলে](../../../../translated_images/bn/ai-nlp.b22dcb8ca4707cea.webp) +![দূডলে NLP কাজগুলোর সারাংশ](../../../../translated_images/bn/ai-nlp.b22dcb8ca4707cea.webp) -এই অংশে, আমরা **প্রাকৃতিক ভাষা প্রক্রিয়াকরণ (NLP)** সম্পর্কিত কাজগুলো পরিচালনা করতে নিউরাল নেটওয়ার্ক ব্যবহার করার উপর মনোযোগ দেব। অনেক ধরনের NLP সমস্যা রয়েছে যা আমরা চাই কম্পিউটার সমাধান করতে সক্ষম হোক: +এই অংশে, আমরা **প্রাকৃতিক ভাষা প্রক্রিয়াকরণ (NLP)** সম্পর্কিত কাজগুলি পরিচালনার জন্য নিউরাল নেটওয়ার্ক ব্যবহার করার উপর মনোযোগ দেব। অনেক ধরনের NLP সমস্যা রয়েছে যেগুলো আমরা চাই কম্পিউটার সমাধান করতে পারে: -* **টেক্সট শ্রেণীবিন্যাস** হলো টেক্সট সিকোয়েন্সের সাথে সম্পর্কিত একটি সাধারণ শ্রেণীবিন্যাস সমস্যা। উদাহরণস্বরূপ, ই-মেইল বার্তাগুলোকে স্প্যাম বনাম নন-স্প্যাম হিসেবে শ্রেণীবিন্যাস করা, বা নিবন্ধগুলোকে খেলাধুলা, ব্যবসা, রাজনীতি ইত্যাদি হিসেবে শ্রেণীবিন্যাস করা। এছাড়াও, চ্যাটবট তৈরি করার সময়, প্রায়ই আমাদের বুঝতে হয় ব্যবহারকারী কী বলতে চেয়েছেন -- এই ক্ষেত্রে আমরা **ইচ্ছা শ্রেণীবিন্যাস** নিয়ে কাজ করি। ইচ্ছা শ্রেণীবিন্যাসে প্রায়ই অনেক ক্যাটাগরির সাথে কাজ করতে হয়। -* **অনুভূতি বিশ্লেষণ** হলো একটি সাধারণ রিগ্রেশন সমস্যা, যেখানে আমাদের একটি সংখ্যা (অনুভূতি) নির্ধারণ করতে হয় যা একটি বাক্যের অর্থ কতটা ইতিবাচক/নেতিবাচক তা নির্দেশ করে। অনুভূতি বিশ্লেষণের একটি উন্নত সংস্করণ হলো **অ্যাসপেক্ট-ভিত্তিক অনুভূতি বিশ্লেষণ** (ABSA), যেখানে আমরা পুরো বাক্যের পরিবর্তে এর বিভিন্ন অংশে (অ্যাসপেক্ট) অনুভূতি নির্ধারণ করি, যেমন: *এই রেস্টুরেন্টে আমি খাবারটি পছন্দ করেছি, কিন্তু পরিবেশটি ভয়ানক ছিল*। -* **নামযুক্ত সত্তা সনাক্তকরণ** (NER) হলো টেক্সট থেকে নির্দিষ্ট সত্তাগুলো বের করার সমস্যা। উদাহরণস্বরূপ, আমরা বুঝতে চাই যে বাক্য *আমি কাল প্যারিসে উড়ে যেতে চাই*-এ *কাল* শব্দটি তারিখ নির্দেশ করে এবং *প্যারিস* একটি অবস্থান। -* **কীওয়ার্ড নির্ধারণ** NER-এর মতো, তবে এখানে আমাদের স্বয়ংক্রিয়ভাবে বাক্যের অর্থের জন্য গুরুত্বপূর্ণ শব্দগুলো বের করতে হয়, নির্দিষ্ট সত্তার ধরনগুলোর জন্য পূর্ব-প্রশিক্ষণ ছাড়াই। -* **টেক্সট ক্লাস্টারিং** তখন কাজে লাগে যখন আমরা একই ধরনের বাক্যগুলো একত্রিত করতে চাই, যেমন: টেকনিক্যাল সাপোর্ট কথোপকথনে একই ধরনের অনুরোধগুলো। -* **প্রশ্ন উত্তর প্রদান** হলো একটি মডেলের নির্দিষ্ট প্রশ্নের উত্তর দেওয়ার ক্ষমতা। মডেলটি একটি টেক্সট প্যাসেজ এবং একটি প্রশ্ন ইনপুট হিসেবে গ্রহণ করে, এবং এটি টেক্সটে এমন একটি স্থান প্রদান করতে হয় যেখানে প্রশ্নের উত্তর রয়েছে (বা, কখনও কখনও, উত্তর টেক্সট তৈরি করতে হয়)। -* **টেক্সট তৈরি** হলো একটি মডেলের নতুন টেক্সট তৈরি করার ক্ষমতা। এটি এমন একটি শ্রেণীবিন্যাস কাজ হিসেবে বিবেচিত হতে পারে যা কিছু *টেক্সট প্রম্পট* এর উপর ভিত্তি করে পরবর্তী অক্ষর/শব্দ পূর্বাভাস দেয়। উন্নত টেক্সট তৈরি মডেল, যেমন GPT-3, [প্রম্পট প্রোগ্রামিং](https://towardsdatascience.com/software-3-0-how-prompting-will-change-the-rules-of-the-game-a982fbfe1e0) বা [প্রম্পট ইঞ্জিনিয়ারিং](https://medium.com/swlh/openai-gpt-3-and-prompt-engineering-dcdc2c5fcd29) নামক একটি কৌশল ব্যবহার করে শ্রেণীবিন্যাসের মতো অন্যান্য NLP কাজ সমাধান করতে সক্ষম। -* **টেক্সট সারাংশ তৈরি** হলো একটি কৌশল যেখানে আমরা চাই কম্পিউটার দীর্ঘ টেক্সট "পড়ে" কয়েকটি বাক্যে সারাংশ তৈরি করুক। -* **মেশিন অনুবাদ** হলো এক ভাষায় টেক্সট বোঝা এবং অন্য ভাষায় টেক্সট তৈরি করার একটি সমন্বয়। +* **টেক্সট শ্রেণীবিভাগ** হল পাঠ্যের অনুক্রম সম্পর্কিত একটি সাধারণ শ্রেণীবিভাগ সমস্যা। উদাহরণস্বরূপ ই-মেইল বার্তা স্প্যাম বনাম নন-স্প্যাম হিসাবে শ্রেণীবদ্ধ করা, অথবা প্রবন্ধগুলোকে স্পোর্ট, ব্যবসা, রাজনীতি ইত্যাদি হিসেবে শ্রেণীবদ্ধ করা। এছাড়াও, চ্যাটবট তৈরি করার সময়, আমরা প্রায়ই ব্যবহারকারী কী বলতে চেয়েছিল তা বুঝতে চাই — এই ক্ষেত্রে আমরা **উদ্দেশ্য শ্রেণীবিভাগ** নিয়ে কাজ করি। প্রায়ই, উদ্দেশ্য শ্রেণীবিভাগে আমাদের অনেক ক্যাটাগরির সাথে মোকাবিলা করতে হয়। +* **মনের অবস্থা বিশ্লেষণ** একটি সাধারণ রিগ্রেশন সমস্যা, যেখানে আমাদের একটি সংখ্যা (একটি মনের অবস্থা) নির্ধারণ করতে হয় যেটি বাক্যের অর্থ কতটা ইতিবাচক/নেতিবাচক তা নির্দেশ করে। মনের অবস্থা বিশ্লেষণের উন্নত একটি সংস্করণ হল **অংশ-ভিত্তিক মনের অবস্থা বিশ্লেষণ** (ABSA), যেখানে আমরা মনের অবস্থা পুরো বাক্যের জন্য নয় বরং এর বিভিন্ন অংশের (অংশগুলোর) জন্য নির্ধারণ করি, যেমন *এই রেস্টুরেন্টে, আমি খাবার পছন্দ করেছি, কিন্তু পরিবেশ খুব খারাপ ছিল*। +* **নেমড এন্টিটি রিকগনিশন** (NER) হল টেক্সট থেকে নির্দিষ্ট এন্টিটি বের করার সমস্যা। উদাহরণস্বরূপ, আমাদের বুঝতে হতে পারে যে বাক্য *I need to fly to Paris tomorrow* এ শব্দ *tomorrow* DATE বোঝায়, এবং *Paris* LOCATION। +* **কীওয়ার্ড এক্সট্রাকশন** NER এর মতো, কিন্তু আমাদের স্বয়ংক্রিয়ভাবে বাক্যের অর্থের জন্য গুরুত্বপূর্ণ শব্দগুলি বের করতে হয়, নির্দিষ্ট এন্টিটি ধরনের জন্য প্রি-ট্রেনিং ছাড়াই। +* **টেক্সট ক্লাস্টারিং** কাজে লাগে যখন আমরা অনুরূপ বাক্যগুলিকে একসঙ্গে গ্রুপ করতে চাই, যেমন প্রযুক্তিগত সহায়তা কথোপকথনে অনুরূপ অনুরোধগুলি। +* **প্রশ্নোত্তর** মডেলটির একটি নির্দিষ্ট প্রশ্নের উত্তর দেওয়ার ক্ষমতা বোঝায়। মডেল একটি টেক্সট প্যাসেজ এবং একটি প্রশ্ন ইনপুট হিসেবে পায় এবং তাকে টেক্সটের মধ্যে এমন একটি স্থান দিতে হয় যেখানে প্রশ্নের উত্তর রয়েছে (অথবা কখনও কখনও উত্তর স্বয়ংক্রিয়ভাবে তৈরি করতে হয়)। +* **টেক্সট জেনারেশন** হল একটি মডেলের নতুন টেক্সট তৈরি করার ক্ষমতা। এটিকে একটি শ্রেণীবিভাগ কাজ হিসাবে বিবেচনা করা যেতে পারে যা কিছু *টেক্সট প্রম্পট* এর ভিত্তিতে পরবর্তী অক্ষর/শব্দ পূর্বাভাস দেয়। উন্নত টেক্সট জেনারেশন মডেল যেমন GPT-3, অন্যান্য NLP কাজ যেমন শ্রেণীবিভাগ সমাধান করতে পারে [prompt programming](https://towardsdatascience.com/software-3-0-how-prompting-will-change-the-rules-of-the-game-a982fbfe1e0) বা [prompt engineering](https://medium.com/swlh/openai-gpt-3-and-prompt-engineering-dcdc2c5fcd29) নামে কৌশল ব্যবহারের মাধ্যমে। +* **টেক্সট সারাংশ** হল একটি কৌশল যেখানে আমরা চাই একটি কম্পিউটার দীর্ঘ টেক্সট "পড়ে" কয়েকটি বাক্যে সেটির সারাংশ তৈরি করুক। +* **মেশিন অনুবাদ** কে একটি ভাষায় টেক্সট বোঝার এবং অন্য ভাষায় টেক্সট তৈরি করার সমন্বয় হিসেবে দেখা যেতে পারে। -প্রাথমিকভাবে, বেশিরভাগ NLP কাজগুলো ঐতিহ্যবাহী পদ্ধতি যেমন ব্যাকরণ ব্যবহার করে সমাধান করা হতো। উদাহরণস্বরূপ, মেশিন অনুবাদে পার্সার ব্যবহার করে প্রাথমিক বাক্যকে একটি সিনট্যাক্স ট্রিতে রূপান্তর করা হতো, তারপর উচ্চতর স্তরের অর্থগত কাঠামো বের করে বাক্যের অর্থ উপস্থাপন করা হতো, এবং এই অর্থ এবং লক্ষ্য ভাষার ব্যাকরণের উপর ভিত্তি করে ফলাফল তৈরি করা হতো। বর্তমানে, অনেক NLP কাজ নিউরাল নেটওয়ার্ক ব্যবহার করে আরও কার্যকরভাবে সমাধান করা হয়। +শুরুতে, বেশিরভাগ NLP কাজ ঐতিহ্যবাহী পদ্ধতি যেমন ব্যাকরণ ব্যবহার করে সমাধান করা হতো। উদাহরণস্বরূপ, মেশিন অনুবাদে পার্সার ব্যবহার করে মূল বাক্যটিকে সিনট্যাক্টিক গাছতে রূপান্তর করা হতো, তারপর উচ্চতর স্তরের অর্থগত কাঠামো বের করে বাক্যের অর্থ বোঝানো হতো, এবং এই অর্থ এবং লক্ষ্যমাত্রা ভাষার ব্যাকরণের ভিত্তিতে ফলাফল জেনারেট করা হতো। এখনকালীন, অনেক NLP কাজ অনেক বেশি কার্যকরীভাবে নিউরাল নেটওয়ার্ক ব্যবহার করে সমাধান করা হয়। -> অনেক ক্লাসিক্যাল NLP পদ্ধতি [Natural Language Processing Toolkit (NLTK)](https://www.nltk.org) পাইথন লাইব্রেরিতে বাস্তবায়িত হয়েছে। অনলাইনে একটি চমৎকার [NLTK বই](https://www.nltk.org/book/) উপলব্ধ রয়েছে যা দেখায় কীভাবে বিভিন্ন NLP কাজ NLTK ব্যবহার করে সমাধান করা যায়। +> অনেক ক্লাসিক্যাল NLP পদ্ধতি [Natural Language Processing Toolkit (NLTK)](https://www.nltk.org) পাইথন লাইব্রেরিতে বাস্তবায়িত। একটি দুর্দান্ত [NLTK বই](https://www.nltk.org/book/) অনলাইনে পাওয়া যায় যা কিভাবে বিভিন্ন NLP কাজ NLTK দিয়ে সমাধান করা যায় তা কভার করে। -আমাদের কোর্সে, আমরা মূলত NLP-এর জন্য নিউরাল নেটওয়ার্ক ব্যবহার করার উপর মনোযোগ দেব, এবং যেখানে প্রয়োজন সেখানে NLTK ব্যবহার করব। +আমাদের কোর্সে, আমরা মূলত নিউরাল নেটওয়ার্ক দিয়ে NLP এর জন্য কাজ করবো এবং যেখানে প্রয়োজন সেখানে NLTK ব্যবহার করব। -আমরা ইতিমধ্যে ট্যাবুলার ডেটা এবং ইমেজ নিয়ে কাজ করার জন্য নিউরাল নেটওয়ার্ক ব্যবহার সম্পর্কে শিখেছি। এই ধরনের ডেটা এবং টেক্সটের মধ্যে প্রধান পার্থক্য হলো টেক্সট একটি পরিবর্তনশীল দৈর্ঘ্যের সিকোয়েন্স, যেখানে ইমেজের ক্ষেত্রে ইনপুট সাইজ পূর্বেই জানা থাকে। যদিও কনভোলিউশনাল নেটওয়ার্ক ইনপুট ডেটা থেকে প্যাটার্ন বের করতে পারে, টেক্সটের প্যাটার্নগুলো আরও জটিল। উদাহরণস্বরূপ, আমরা দেখতে পারি যে বিষয় থেকে নেগেশন অনেক শব্দ দ্বারা আলাদা হতে পারে (যেমন: *আমি কমলালেবু পছন্দ করি না*, বনাম *আমি সেই বড় রঙিন সুস্বাদু কমলালেবু পছন্দ করি না*), এবং এটি এখনও একটি প্যাটার্ন হিসেবে ব্যাখ্যা করা উচিত। তাই, ভাষা পরিচালনা করতে আমাদের নতুন নিউরাল নেটওয়ার্ক টাইপ, যেমন *রিকারেন্ট নেটওয়ার্ক* এবং *ট্রান্সফর্মার* প্রয়োজন। +আমরা আগেই শিখেছি ট্যাবুলার ডেটা এবং ইমেজগুলোর জন্য নিউরাল নেটওয়ার্ক ব্যবহার সম্পর্কে। এই ডেটার ধরনগুলির এবং টেক্সটের প্রধান পার্থক্য হল, টেক্সট একটি পরিবর্তনশীল দৈর্ঘ্যের সিকোয়েন্স, যেখানে ইমেজের ক্ষেত্রে ইনপুটের আকার আগেই জানা থাকে। যখন কনভলিউশানাল নেটওয়ার্ক ইনপুট ডেটা থেকে প্যাটার্ন বের করতে পারে, টেক্সটের প্যাটার্নগুলো আরও জটিল। যেমন, একটা নেতিবাচকতা বিষয় থেকে আলাদা অবস্থানে থাকলেও তা একটিই প্যাটার্ন হিসেবে বিবেচনা করা উচিত (যেমন *I do not like oranges* বনাম *I do not like those big colorful tasty oranges*), এবং তা একক প্যাটার্ন হিসেবে বোঝা উচিত। তাই, ভাষা প্রক্রিয়াকরণের জন্য আমাদের নতুন ধরণের নিউরাল নেটওয়ার্ক যেমন *রিকারেন্ট নেটওয়ার্ক* এবং *ট্রান্সফরমার্স* প্রবর্তন করতে হয়। ## লাইব্রেরি ইনস্টল করুন -যদি আপনি এই কোর্স চালানোর জন্য স্থানীয় পাইথন ইনস্টলেশন ব্যবহার করেন, তাহলে NLP-এর জন্য প্রয়োজনীয় সমস্ত লাইব্রেরি নিম্নলিখিত কমান্ডগুলো ব্যবহার করে ইনস্টল করতে হতে পারে: +যদি আপনি এই কোর্স চালানোর জন্য লোকাল পাইথন ইনস্টলেশন ব্যবহার করেন, তবে আপনাকে NLP এর জন্য প্রয়োজনীয় সব লাইব্রেরি ইনস্টল করতে হতে পারে নিম্নলিখিত কমান্ড দিয়ে: -**PyTorch-এর জন্য** +**PyTorch এর জন্য** ```bash -pip install -r requirements-torch.txt +pip install -r requirements-pytorch.txt ``` -**TensorFlow-এর জন্য** +**TensorFlow এর জন্য** ```bash pip install -r requirements-tf.txt ``` -> আপনি [Microsoft Learn](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-tensorflow/?WT.mc_id=academic-77998-cacaste) এ TensorFlow দিয়ে NLP চেষ্টা করতে পারেন। +> আপনি [Microsoft Learn](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-tensorflow/?WT.mc_id=academic-77998-cacaste) এ TensorFlow দিয়ে NLP চেষ্টা করতে পারেন ## GPU সতর্কতা -এই অংশে, কিছু উদাহরণে আমরা বেশ বড় মডেল প্রশিক্ষণ করব। -* **GPU-সক্ষম কম্পিউটার ব্যবহার করুন**: বড় মডেল নিয়ে কাজ করার সময় অপেক্ষার সময় কমানোর জন্য GPU-সক্ষম কম্পিউটারে আপনার নোটবুক চালানো পরামর্শ দেওয়া হয়। -* **GPU মেমোরি সীমাবদ্ধতা**: GPU-তে চালানোর সময় বড় মডেল প্রশিক্ষণের সময় GPU মেমোরি শেষ হয়ে যেতে পারে। -* **GPU মেমোরি ব্যবহার**: প্রশিক্ষণের সময় GPU মেমোরি ব্যবহারের পরিমাণ বিভিন্ন বিষয়ের উপর নির্ভর করে, যেমন মিনিব্যাচ সাইজ। -* **মিনিব্যাচ সাইজ কমান**: যদি GPU মেমোরি সমস্যা হয়, তাহলে আপনার কোডে মিনিব্যাচ সাইজ কমানো একটি সম্ভাব্য সমাধান হতে পারে। -* **TensorFlow GPU মেমোরি রিলিজ**: TensorFlow-এর পুরনো সংস্করণগুলো একাধিক মডেল প্রশিক্ষণের সময় GPU মেমোরি সঠিকভাবে রিলিজ করতে পারে না। GPU মেমোরি ব্যবহারের কার্যকর ব্যবস্থাপনার জন্য, আপনি TensorFlow-কে প্রয়োজন অনুযায়ী GPU মেমোরি বরাদ্দ করতে কনফিগার করতে পারেন। -* **কোড অন্তর্ভুক্তি**: TensorFlow-কে GPU মেমোরি শুধুমাত্র প্রয়োজন হলে বরাদ্দ করতে সেট করতে, আপনার নোটবুকে নিম্নলিখিত কোড অন্তর্ভুক্ত করুন: +এই অংশে, কিছু উদাহরণে আমরা বড় মডেল প্রশিক্ষণ করব। +* **GPU-সক্ষম কম্পিউটার ব্যবহার করুন**: বড় মডেলের সাথে কাজ করার সময় অপেক্ষার সময় কমাতে GPU-সক্ষম কম্পিউটার ব্যবহার করে আপনার নোটবুক চালানো পরামর্শযোগ্য। +* **GPU মেমরি সীমাবদ্ধতা**: GPU-তে চালানোর সময় এমন পরিস্থিতি থাকতে পারে যেখানে আপনি GPU মেমরি শেষ হয়ে যেতে পারেন, বিশেষ করে বড় মডেল প্রশিক্ষণ করার সময়। +* **GPU মেমরি ব্যবহার**: প্রশিক্ষণের সময় GPU মেমরির পরিমাণ বিভিন্ন ফ্যাক্টরের উপর নির্ভর করে, যার মধ্যে মিনিব্যাচ সাইজ অন্যতম। +* **মিনিব্যাচ সাইজ কমান**: যদি GPU মেমরি সমস্যা হয়, আপনার কোডে মিনিব্যাচ সাইজ কমানো সমাধান হিসেবে বিবেচনা করতে পারেন। +* **TensorFlow GPU মেমরি মুক্তি**: পুরানো সংস্করণের TensorFlow একাধিক মডেল একই পাইথন কার্নেলে প্রশিক্ষণে GPU মেমরি সঠিকভাবে মুক্তি নাও দিতে পারে। GPU মেমরি ব্যবহারের কার্যকর নিয়ন্ত্রণের জন্য, আপনি TensorFlow-কে শুধুমাত্র প্রয়োজন অনুযায়ী GPU মেমরি বরাদ্দ করতে কনফিগার করতে পারেন। +* **কোড যোগ করুন**: TensorFlow-কে GPU মেমরি বরাদ্দ ব্যবস্থায় শুধুমাত্র প্রয়োজন অনুযায়ী বাড়তে সেট করতে, আপনার নোটবুকে নিম্নলিখিত কোড অন্তর্ভুক্ত করুন: ```python physical_devices = tf.config.list_physical_devices('GPU') @@ -53,17 +53,21 @@ if len(physical_devices)>0: tf.config.experimental.set_memory_growth(physical_devices[0], True) ``` -যদি আপনি ক্লাসিক্যাল ML দৃষ্টিকোণ থেকে NLP সম্পর্কে শিখতে আগ্রহী হন, তাহলে [এই পাঠগুলোর সংগ্রহ](https://github.com/microsoft/ML-For-Beginners/tree/main/6-NLP) দেখুন। +যদি আপনি ক্লাসিক্যাল মেশিন লার্নিং দৃষ্টিকোণ থেকে NLP শিখতে আগ্রহী হন, তবে [এই পাঠের সুট](https://github.com/microsoft/ML-For-Beginners/tree/main/6-NLP) দেখুন ## এই অংশে এই অংশে আমরা শিখব: * [টেক্সটকে টেনসর হিসেবে উপস্থাপন](13-TextRep/README.md) -* [ওয়ার্ড এম্বেডিংস](14-Emdeddings/README.md) +* [ওয়ার্ড এম্বেডিংস](14-Emdeddings/README.md) * [ভাষা মডেলিং](15-LanguageModeling/README.md) -* [রিকারেন্ট নিউরাল নেটওয়ার্ক](16-RNN/README.md) -* [জেনারেটিভ নেটওয়ার্ক](17-GenerativeNetworks/README.md) -* [ট্রান্সফর্মার](18-Transformers/README.md) +* [রিকারেন্ট নিউরাল নেটওয়ার্ক](16-RNN/README.md) +* [জেনারেটিভ নেটওয়ার্ক](17-GenerativeNetworks/README.md) +* [ট্রান্সফরমার্স](18-Transformers/README.md) -**অস্বীকৃতি**: -এই নথিটি 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/hi/.co-op-translator.json b/translations/hi/.co-op-translator.json index 68549b3e..fb173ab2 100644 --- a/translations/hi/.co-op-translator.json +++ b/translations/hi/.co-op-translator.json @@ -5,6 +5,12 @@ "source_file": "AGENTS.md", "language_code": "hi" }, + "CONTRIBUTING.md": { + "original_hash": "c6fd7e781b67111a90abd166d0ce4aa0", + "translation_date": "2026-07-08T19:07:59+00:00", + "source_file": "CONTRIBUTING.md", + "language_code": "hi" + }, "README.md": { "original_hash": "12c8eb6bf0867d2f1c32daf613ac5b8b", "translation_date": "2026-04-06T20:50:20+00:00", @@ -17,6 +23,19 @@ "source_file": "SECURITY.md", "language_code": "hi" }, + "__translation_failures__": { + "lessons/sketchnotes/LICENSE.md": { + "original_hash": "45ab63a2cd8f5faef6c9b150618837a4", + "source_file": "lessons/sketchnotes/LICENSE.md", + "language_code": "hi", + "failure_date": "2026-07-08T19:01:02+00:00", + "status": "failed", + "error_type": "TranslationIncompleteError", + "error_message": "Markdown translation remained incomplete for chunk 1.1.1 of 'LICENSE.md', and the chunk could not be split further.", + "translator_version": "0.20.0", + "failure_policy_version": 1 + } + }, "etc/CODE_OF_CONDUCT.md": { "original_hash": "c06b12caf3c901eb3156e3dd5b0aea56", "translation_date": "2025-08-24T10:06:08+00:00", @@ -54,8 +73,8 @@ "language_code": "hi" }, "examples/README.md": { - "original_hash": "0d1babfdcbeb46525f2db3fbaaa54cd7", - "translation_date": "2025-10-03T11:28:37+00:00", + "original_hash": "7883d52c2e2a221e0b07a7b112a149b9", + "translation_date": "2026-07-08T18:56:48+00:00", "source_file": "examples/README.md", "language_code": "hi" }, @@ -66,8 +85,8 @@ "language_code": "hi" }, "lessons/0-course-setup/how-to-run.md": { - "original_hash": "a4717bd9103b9f6cd84d534b83534689", - "translation_date": "2026-01-15T13:01:38+00:00", + "original_hash": "7ad8c7d8604c53649b3d4d1e2f3a6fa1", + "translation_date": "2026-07-08T18:57:09+00:00", "source_file": "lessons/0-course-setup/how-to-run.md", "language_code": "hi" }, @@ -191,6 +210,12 @@ "source_file": "lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md", "language_code": "hi" }, + "lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb": { + "original_hash": "99b816b6a4957ef4100cee4c4221dff9", + "translation_date": "2026-07-08T18:50:19+00:00", + "source_file": "lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb", + "language_code": "hi" + }, "lessons/4-ComputerVision/08-TransferLearning/lab/README.md": { "original_hash": "7765935c35fcee69b9fe2d0cfd6963e2", "translation_date": "2025-08-24T09:57:07+00:00", @@ -330,8 +355,8 @@ "language_code": "hi" }, "lessons/5-NLP/README.md": { - "original_hash": "8ef02a9318257ea140ed3ed74442096d", - "translation_date": "2025-08-24T09:47:25+00:00", + "original_hash": "038df6f1a73e49f6430740da083bfd6d", + "translation_date": "2026-07-08T18:57:36+00:00", "source_file": "lessons/5-NLP/README.md", "language_code": "hi" }, @@ -355,7 +380,7 @@ }, "lessons/6-Other/23-MultiagentSystems/README.md": { "original_hash": "38a1185ae3d54b180378bbd71ae3ef16", - "translation_date": "2025-09-23T13:27:14+00:00", + "translation_date": "2026-07-08T19:02:00+00:00", "source_file": "lessons/6-Other/23-MultiagentSystems/README.md", "language_code": "hi" }, diff --git a/translations/hi/CONTRIBUTING.md b/translations/hi/CONTRIBUTING.md new file mode 100644 index 00000000..e4524bcd --- /dev/null +++ b/translations/hi/CONTRIBUTING.md @@ -0,0 +1,29 @@ +# AI-For-Beginners में योगदान करना + +AI-For-Beginners में योगदान करने में आपकी रुचि के लिए धन्यवाद! हम अनुवादों, पाठ सुधारों, और स्वरूपण सुधारों का स्वागत करते हैं। + +## माइक्रोसॉफ्ट योगदानकर्ता लाइसेंस समझौता (CLA) + +यह परियोजना योगदान और सुझावों का स्वागत करती है। अधिकांश योगदानों के लिए आपको एक योगदानकर्ता लाइसेंस समझौते (CLA) पर सहमति देनी होती है जिसमें आप यह घोषित करते हैं कि आपके पास अपने योगदान का उपयोग करने के अधिकार हैं और वास्तव में आप हमें ये अधिकार प्रदान कर रहे हैं। विवरण के लिए, [https://cla.microsoft.com](https://cla.microsoft.com) पर जाएं। + +जब आप एक पुल रिक्वेस्ट सबमिट करते हैं, तो एक CLA-बॉट स्वचालित रूप से निर्धारित करेगा कि क्या आपको CLA प्रदान करने की आवश्यकता है और पुल रिक्वेस्ट को उपयुक्त रूप से चिन्हित करेगा (जैसे, लेबल, टिप्पणी). बस बॉट द्वारा दिए गए निर्देशों का पालन करें। आपको हमारे CLA का उपयोग करने वाले सभी रिपॉजिटरीज़ में यह केवल एक बार करना होगा। + +## योगदान कैसे करें + +### 1. टाइपो / कोड त्रुटियों को ठीक करना +यदि आपको किसी भी Jupyter नोटबुक या पाठ मार्कडाउन फ़ाइल में टाइपो या बग मिले: +1. रिपॉजिटरी को फ़ोर्क करें। +2. टाइपो या टूटी लिंक को ठीक करें। +3. सुधार का स्पष्ट विवरण देते हुए एक पुल रिक्वेस्ट सबमिट करें। + +### 2. अनुवाद प्रस्तुत करना +हम पाठों के अन्य भाषाओं में अनुवाद का स्वागत करते हैं! कृपया `translations/` निर्देशिका के अंतर्गत मौजूदा फ़ोल्डर नामों का उपयोग करते हुए (जैसे `translations/es/`, `translations/pt-BR/`, `translations/zh-CN/`) अनुवाद रखें। + +अधिक विवरण के लिए, देखें [etc/CONTRIBUTING.md](etc/CONTRIBUTING.md)। + +--- + + +**अस्वीकरण**: +इस दस्तावेज़ का अनुवाद AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ अपनी मूल भाषा में ही प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। + \ No newline at end of file diff --git a/translations/hi/examples/README.md b/translations/hi/examples/README.md index cc33382c..c44f7241 100644 --- a/translations/hi/examples/README.md +++ b/translations/hi/examples/README.md @@ -1,31 +1,31 @@ -# शुरुआती लोगों के लिए AI उदाहरण +# शुरुआती के अनुकूल AI उदाहरण -स्वागत है! यह डायरेक्टरी सरल और स्वतंत्र उदाहरणों को शामिल करती है ताकि आप AI और मशीन लर्निंग के साथ शुरुआत कर सकें। प्रत्येक उदाहरण को शुरुआती लोगों के लिए बनाया गया है, जिसमें विस्तृत टिप्पणियां और चरण-दर-चरण व्याख्या दी गई है। +स्वागत है! यह डायरेक्टरी सरल, स्वतंत्र उदाहरणों को समेटे हुए है जो आपको AI और मशीन लर्निंग के साथ शुरुआत करने में मदद करेंगे। प्रत्येक उदाहरण शुरुआती के अनुकूल होता है जिसमें विस्तृत टिप्पणियाँ और चरण-दर-चरण व्याख्याएँ शामिल हैं। ## 📚 उदाहरणों का अवलोकन | उदाहरण | विवरण | कठिनाई | पूर्व आवश्यकताएँ | |---------|-------------|------------|---------------| -| [Hello AI World](../../../examples/01-hello-ai-world.py) | आपका पहला AI प्रोग्राम - सरल पैटर्न पहचान | ⭐ शुरुआती | Python की मूल बातें | -| [Simple Neural Network](../../../examples/02-simple-neural-network.py) | शुरुआत से एक न्यूरल नेटवर्क बनाएं | ⭐⭐ शुरुआती+ | Python, बुनियादी गणित | -| [Image Classifier](./03-image-classifier.ipynb) | पहले से प्रशिक्षित मॉडल के साथ छवियों को वर्गीकृत करें | ⭐⭐ शुरुआती+ | Python, numpy | -| [Text Sentiment](../../../examples/04-text-sentiment.py) | टेक्स्ट की भावना (सकारात्मक/नकारात्मक) का विश्लेषण करें | ⭐⭐ शुरुआती+ | Python | +| [Hello AI World](https://github.com/microsoft/AI-For-Beginners/blob/main/examples/01-hello-ai-world.py) | आपका पहला AI प्रोग्राम - सरल पैटर्न मान्यता | ⭐ शुरुआती | Python की बुनियादी जानकारी | +| [Simple Neural Network](https://github.com/microsoft/AI-For-Beginners/blob/main/examples/02-simple-neural-network.py) | शून्य से एक न्यूरल नेटवर्क बनाएं | ⭐⭐ शुरुआती+ | Python, बुनियादी गणित | +| [Image Classifier](https://github.com/microsoft/AI-For-Beginners/blob/main/examples/03-image-classifier.ipynb) | प्री-ट्रेंड मॉडल के साथ छवियों का वर्गीकरण करें | ⭐⭐ शुरुआती+ | Python, numpy | +| [Text Sentiment](https://github.com/microsoft/AI-For-Beginners/blob/main/examples/04-text-sentiment.py) | टेक्स्ट भावना (सकारात्मक/नकारात्मक) का विश्लेषण करें | ⭐⭐ शुरुआती+ | Python | ## 🚀 शुरुआत कैसे करें ### पूर्व आवश्यकताएँ -सुनिश्चित करें कि आपके पास Python (3.8 या उससे अधिक अनुशंसित) इंस्टॉल है। आवश्यक पैकेज इंस्टॉल करें: +सुनिश्चित करें कि आपके पास Python स्थापित है (3.8 या उससे ऊपर अनुशंसित)। आवश्यक पैकेज इंस्टॉल करें: ```bash -# For Python scripts +# पायथन स्क्रिप्ट्स के लिए pip install numpy -# For Jupyter notebooks (image classifier) +# जुपिटर नोटबुक्स (छवि वर्गीकरणकर्ता) के लिए pip install jupyter numpy pillow tensorflow ``` -या मुख्य पाठ्यक्रम से conda एनवायरनमेंट का उपयोग करें: +या मुख्य पाठ्यक्रम से conda पर्यावरण का उपयोग करें: ```bash conda env create --name ai4beg --file ../environment.yml @@ -34,52 +34,54 @@ conda activate ai4beg ### उदाहरण चलाना -**Python स्क्रिप्ट (.py फाइलों) के लिए:** +**Python स्क्रिप्ट्स (.py फ़ाइलें) के लिए:** ```bash python 01-hello-ai-world.py ``` -**Jupyter नोटबुक (.ipynb फाइलों) के लिए:** +**Jupyter नोटबुक्स (.ipynb फ़ाइलें) के लिए:** ```bash jupyter notebook 03-image-classifier.ipynb ``` ## 📖 सीखने का मार्ग -हम अनुशंसा करते हैं कि आप उदाहरणों को क्रम में फॉलो करें: +हम सुझाव देते हैं कि आप उदाहरणों को निम्न क्रम में फॉलो करें: -1. **"Hello AI World" से शुरू करें** - पैटर्न पहचान की मूल बातें सीखें -2. **एक सरल न्यूरल नेटवर्क बनाएं** - समझें कि न्यूरल नेटवर्क कैसे काम करता है -3. **Image Classifier आज़माएं** - वास्तविक छवियों के साथ AI को क्रियान्वित होते देखें -4. **Text Sentiment का विश्लेषण करें** - प्राकृतिक भाषा प्रसंस्करण का अन्वेषण करें +1. **"Hello AI World" के साथ शुरुआत करें** - पैटर्न मान्यता की मूल बातें सीखें +2. **एक सरल न्यूरल नेटवर्क बनाएं** - समझें कि न्यूरल नेटवर्क कैसे काम करते हैं +3. **इमेज क्लासिफायर आज़माएँ** - वास्तविक छवियों के साथ AI देखें +4. **टेक्स्ट भावना का विश्लेषण करें** - प्राकृतिक भाषा प्रसंस्करण का अन्वेषण करें -## 💡 शुरुआती लोगों के लिए सुझाव +## 💡 शुरुआती के लिए सुझाव -- **कोड टिप्पणियों को ध्यान से पढ़ें** - वे बताते हैं कि प्रत्येक लाइन क्या करती है -- **प्रयोग करें!** - मान बदलने की कोशिश करें और देखें क्या होता है +- **कोड टिप्पणियाँ ध्यान से पढ़ें** - वे बताते हैं कि प्रत्येक पंक्ति क्या करती है +- **प्रयोग करें!** - मानों में बदलाव करके देखें क्या होता है - **सब कुछ समझने की चिंता न करें** - सीखने में समय लगता है -- **प्रश्न पूछें** - [Discussion बोर्ड](https://github.com/microsoft/AI-For-Beginners/discussions) का उपयोग करें +- **प्रश्न पूछें** - [Discussion board](https://github.com/microsoft/AI-For-Beginners/discussions) का उपयोग करें ## 🔗 अगले कदम -इन उदाहरणों को पूरा करने के बाद, पूरा पाठ्यक्रम देखें: +इन उदाहरणों को पूरा करने के बाद, पूर्ण पाठ्यक्रम देखें: - [AI का परिचय](../lessons/1-Intro/README.md) -- [न्यूरल नेटवर्क](../lessons/3-NeuralNetworks/README.md) +- [न्यूरल नेटवर्क्स](../lessons/3-NeuralNetworks/README.md) - [कंप्यूटर विज़न](../lessons/4-ComputerVision/README.md) - [प्राकृतिक भाषा प्रसंस्करण](../lessons/5-NLP/README.md) -## 🤝 योगदान +## 🤝 योगदान करें -क्या ये उदाहरण उपयोगी लगे? इन्हें बेहतर बनाने में मदद करें: -- समस्याओं की रिपोर्ट करें या सुधार का सुझाव दें -- शुरुआती लोगों के लिए और उदाहरण जोड़ें -- दस्तावेज़ और टिप्पणियों को बेहतर बनाएं +क्या आपको ये उदाहरण मददगार लगे? हमें इन्हें बेहतर बनाने में मदद करें: +- समस्याओं की रिपोर्ट करें या सुधार सुझाएँ +- शुरुआतियों के लिए और उदाहरण जोड़ें +- दस्तावेज़ीकरण और टिप्पणियों में सुधार करें --- -*याद रखें: हर विशेषज्ञ कभी शुरुआती था। खुशहाल सीखने की यात्रा! 🎓* +*याद रखें: हर विशेषज्ञ कभी न कभी एक शुरुआत करने वाला था। खुशहाल सीखने के लिए! 🎓* --- -**अस्वीकरण**: -यह दस्तावेज़ 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/hi/lessons/0-course-setup/how-to-run.md b/translations/hi/lessons/0-course-setup/how-to-run.md index 31bfdc45..887c31fc 100644 --- a/translations/hi/lessons/0-course-setup/how-to-run.md +++ b/translations/hi/lessons/0-course-setup/how-to-run.md @@ -1,12 +1,12 @@ -# कोड कैसे चलाएं +# कोड कैसे चलाएँ -इस पाठ्यक्रम में बहुत सारे निष्पादन योग्य उदाहरण और प्रयोगशालाएँ हैं जिन्हें आप चलाना चाहेंगे। ऐसा करने के लिए, आपके पास इस पाठ्यक्रम के हिस्से के रूप में प्रदान किए गए Jupyter नोटबुक में Python कोड निष्पादित करने की क्षमता होनी चाहिए। कोड चलाने के लिए आपके पास कई विकल्प हैं: +इस पाठ्यक्रम में बहुत सारे निष्पादनीय उदाहरण और प्रयोगशालाएँ शामिल हैं जिन्हें आप चलाना चाहेंगे। ऐसा करने के लिए, आपके पास इस पाठ्यक्रम के हिस्से के रूप में प्रदान किए गए Jupyter नोटबुक्स में Python कोड निष्पादित करने की क्षमता होनी चाहिए। कोड चलाने के लिए आपके पास कई विकल्प हैं: -## अपने कंप्यूटर पर स्थानीय रूप से चलाएं +## अपने कंप्यूटर पर स्थानीय रूप से चलाएँ -अपने कंप्यूटर पर स्थानीय रूप से कोड चलाने के लिए, Python इंस्टॉलेशन आवश्यक है। एक सिफारिश है **[miniconda](https://conda.io/en/latest/miniconda.html)** इंस्टॉल करना - यह एक हल्का इंस्टॉलेशन है जो विभिन्न Python **वर्चुअल वातावरणों** के लिए `conda` पैकेज मैनेजर का समर्थन करता है। +अपने कंप्यूटर पर कोड चलाने के लिए, Python इंस्टॉलेशन आवश्यक है। एक सुझाव है **[miniconda](https://conda.io/en/latest/miniconda.html)** इंस्टॉल करना - यह एक हल्का इंस्टॉलेशन है जो विभिन्न Python **वर्चुअल वातावरण** के लिए `conda` पैकेज मैनेजर का समर्थन करता है। -miniconda इंस्टॉल करने के बाद, रिपॉजिटरी क्लोन करें और इस कोर्स के लिए उपयोग किए जाने वाले वर्चुअल वातावरण को बनाएँ: +miniconda इंस्टॉल करने के बाद, रिपोजिटरी क्लोन करें और इस कोर्स के लिए उपयोग किए जाने वाले वर्चुअल वातावरण बनाएं: ```bash git clone http://github.com/microsoft/ai-for-beginners @@ -15,57 +15,57 @@ conda env create --name ai4beg --file .devcontainer/environment.yml conda activate ai4beg ``` -### Python एक्सटेंशन के साथ Visual Studio Code का उपयोग करना +### Visual Studio Code के साथ Python एक्सटेंशन का उपयोग करना -यह पाठ्यक्रम सबसे अच्छा तब उपयोग किया जाता है जब आप इसे [Visual Studio Code](http://code.visualstudio.com/?WT.mc_id=academic-77998-cacaste) में [Python एक्सटेंशन](https://marketplace.visualstudio.com/items?itemName=ms-python.python&WT.mc_id=academic-77998-cacaste) के साथ खोलते हैं। +इस पाठ्यक्रम का उपयोग सबसे अच्छा होता है जब आप इसे [Visual Studio Code](http://code.visualstudio.com/?WT.mc_id=academic-77998-cacaste) में खोलते हैं जिसमें [Python Extension](https://marketplace.visualstudio.com/items?itemName=ms-python.python&WT.mc_id=academic-77998-cacaste) होता है। -> **नोट**: एक बार जब आप रिपॉजिटरी क्लोन करके VS Code में डायरेक्टरी खोलेंगे, तो यह स्वचालित रूप से Python एक्सटेंशन्स इंस्टॉल करने का सुझाव देगा। आपको ऊपर वर्णित miniconda भी इंस्टॉल करना होगा। +> **ध्यान दें**: एक बार जब आप VS Code में डायरेक्टरी क्लोन और खोलते हैं, तो यह आपको स्वचालित रूप से Python एक्सटेंशन इंस्टॉल करने का सुझाव देगा। आपको ऊपर वर्णित अनुसार miniconda भी इंस्टॉल करना होगा। -> **नोट**: यदि VS Code आपको रिपॉजिटरी को कंटेनर में पुनः खोलने का सुझाव देता है, तो स्थानीय Python इंस्टॉलेशन उपयोग करने के लिए इसे इनकार कर देना चाहिए। +> **ध्यान दें**: यदि VS Code आपको रिपोजिटरी को कंटेनर में फिर से खोलने का सुझाव देता है, तो लोकल Python इंस्टॉलेशन का उपयोग करने के लिए इसे अस्वीकार करना चाहिए। ### ब्राउज़र में Jupyter का उपयोग करना -आप अपने कंप्यूटर पर ब्राउज़र के माध्यम से Jupyter पर्यावरण का उपयोग भी कर सकते हैं। क्लासिक Jupyter और JupyterHub दोनों एक सुविधाजनक विकास वातावरण प्रदान करते हैं जिसमें ऑटो-कम्प्लीशन, कोड हाइलाइटिंग आदि शामिल हैं। +आप अपने कंप्यूटर के ब्राउज़र से भी Jupyter वातावरण का उपयोग कर सकते हैं। दोनों क्लासिकल Jupyter और JupyterHub एक सुविधाजनक विकास वातावरण प्रदान करते हैं जिसमें ऑटो-कम्पलीशन, कोड हाईलाइटिंग, आदि शामिल हैं। -स्थानीय रूप से Jupyter शुरू करने के लिए, कोर्स की डायरेक्टरी में जाएं, और निष्पादित करें: +Jupyter स्थानीय रूप से शुरू करने के लिए, कोर्स की डायरेक्टरी में जाएं, और निष्पादित करें: ```bash jupyter notebook ``` -या + या ```bash jupyterhub ``` -आप इसके बाद `.ipynb` फ़ाइलों में नेविगेट कर सकते हैं, उन्हें खोल सकते हैं और काम करना शुरू कर सकते हैं। + इसके बाद आप किसी भी `.ipynb` फ़ाइल पर जा सकते हैं, उन्हें खोल सकते हैं और काम शुरू कर सकते हैं। ### कंटेनर में चलाना -Python इंस्टॉलेशन का एक विकल्प कोड को कंटेनर में चलाना हो सकता है। क्योंकि हमारी रिपॉजिटरी में एक विशेष `.devcontainer` फ़ोल्डर होता है जो इस रेपो के लिए कंटेनर बनाने के निर्देश देता है, VS Code कोड को कंटेनर में पुनः खोलने का अवसर देता है। इसके लिए Docker इंस्टॉलेशन आवश्यक होगा और यह अधिक जटिल होगा, इसलिए हम इसे अधिक अनुभवी उपयोगकर्ताओं को सुझाव देते हैं। +Python इंस्टॉलेशन का एक विकल्प कंटेनर में कोड चलाना हो सकता है। चूंकि हमारी रिपोजिटरी में एक विशेष `.devcontainer` फ़ोल्डर शामिल है जो इस रिपोज के लिए कंटेनर बनाने का निर्देश देता है, VS Code कोड को कंटेनर में पुनः खोलने का मौका देता है। इसके लिए Docker इंस्टॉलेशन आवश्यक होगा, और यह अधिक जटिल होगा, इसलिए हम इसे अधिक अनुभवी उपयोगकर्ताओं के लिए सलाह देते हैं। ## क्लाउड में चलाना -यदि आप Python स्थानीय रूप से इंस्टॉल नहीं करना चाहते हैं, और आपके पास कुछ क्लाउड संसाधनों की पहुँच है - तो क्लाउड में कोड चलाना एक अच्छा विकल्प होगा। इसे करने के कई तरीके हैं: +यदि आप Python स्थानीय रूप से इंस्टॉल नहीं करना चाहते, और आपके पास कुछ क्लाउड संसाधनों तक पहुंच है - तो कोड क्लाउड में चलाना एक अच्छा विकल्प होगा। आप इसे करने के कई तरीके हैं: -* **[GitHub Codespaces](https://github.com/features/codespaces)** का उपयोग करना, जो GitHub पर आपके लिए बनाए गए एक वर्चुअल वातावरण है, जो VS Code ब्राउज़र इंटरफ़ेस के माध्यम से सुलभ है। यदि आपके पास Codespaces की पहुँच है, तो आप बस रेपो में **Code** बटन पर क्लिक करें, एक codespace शुरू करें, और तुरंत काम शुरू कर सकते हैं। -* **[Binder](https://mybinder.org/v2/gh/microsoft/ai-for-beginners/HEAD)** का उपयोग करना। [Binder](https://mybinder.org) GitHub पर कुछ कोड टेस्ट करने के लिए क्लाउड में मुफ्त कंप्यूटिंग संसाधन प्रदान करता है। फ्रंट पेज पर रेपो को Binder में खोलने के लिए एक बटन है - यह आपको जल्दी से binder साइट पर ले जाएगा, जो एक कंटेनर बनाएगा और आपके लिए निर्बाध रूप से Jupyter वेब इंटरफ़ेस शुरू करेगा। +* **[GitHub Codespaces](https://github.com/features/codespaces)** का उपयोग करना, जो आपके लिए GitHub पर बनाया गया एक वर्चुअल वातावरण है, जिसे VS Code ब्राउज़र इंटरफेस के माध्यम से एक्सेस किया जा सकता है। यदि आपके पास Codespaces तक पहुंच है, तो आप बस रिपो में **Code** बटन पर क्लिक करें, एक कोडस्पेस शुरू करें, और तुरंत चलना शुरू करें। +* **[Binder](https://mybinder.org/v2/gh/microsoft/ai-for-beginners/HEAD)** का उपयोग करना। [Binder](https://mybinder.org) उसके जैसा क्लाउड में मुफ्त कंप्यूटिंग संसाधन प्रदान करता है ताकि आप GitHub पर कुछ कोड परीक्षण कर सकें। फ्रंट पेज पर एक बटन है जो रिपोजिटरी को Binder में खोलता है - इससे आपको तुरंत बाइंडर साइट पर ले जाया जाएगा, जो अंतर्निहित कंटेनर बनाकर आपके लिए सहज रूप से Jupyter वेब इंटरफेस शुरू करेगा। -> **नोट**: दुरुपयोग से बचने के लिए, Binder के पास कुछ वेब संसाधनों तक पहुँच अवरुद्ध है। यह कुछ कोड के काम करने में बाधा डाल सकता है, जो मॉडल और/या डेटासेट सार्वजनिक इंटरनेट से प्राप्त करता है। आपको कुछ समाधान खोजने पड़ सकते हैं। इसके अलावा, Binder द्वारा प्रदान किए गए कंप्यूट संसाधन काफी बुनियादी हैं, इसलिए प्रशिक्षण धीमा होगा, विशेष रूप से बाद के, अधिक जटिल पाठों में। +> **ध्यान दें**: दुरुपयोग को रोकने के लिए, Binder को कुछ वेब संसाधनों तक पहुंच ब्लॉक की गई है। इससे कुछ कोड काम नहीं कर पाएगा, जो मॉडल और/या डेटा सेट को सार्वजनिक इंटरनेट से प्राप्त करता है। आपको कुछ समाधान ढूंढने पड़ सकते हैं। साथ ही, Binder द्वारा प्रदान किए गए कंप्यूट संसाधन काफी मूलभूत हैं, इसलिए प्रशिक्षण धीमा होगा, विशेषकर बाद के अधिक जटिल पाठों में। ## GPU के साथ क्लाउड में चलाना -इस पाठ्यक्रम के कुछ बाद के पाठ GPU समर्थन से बहुत लाभान्वित होंगे। उदाहरण के लिए, मॉडल प्रशिक्षण अन्यथा बहुत धीमा हो सकता है। कुछ विकल्प हैं जिन्हें आप पालन कर सकते हैं, खासकर यदि आपके पास क्लाउड की पहुँच है, या तो [Azure for Students](https://azure.microsoft.com/free/students/?WT.mc_id=academic-77998-cacaste) के माध्यम से, या अपने संस्थान के जरिए: +इस पाठ्यक्रम के कुछ बाद के पाठ GPU समर्थन से भारी लाभान्वित होंगे। उदाहरण के लिए, मॉडल प्रशिक्षण अन्यथा बेहद धीमा हो सकता है। आप कुछ विकल्प अपना सकते हैं, खासकर यदि आप क्लाउड तक पहुंच रखते हैं चाहे [Azure for Students](https://azure.microsoft.com/free/students/?WT.mc_id=academic-77998-cacaste) के माध्यम से, या अपने संस्थान के माध्यम से: -* [Data Science वर्चुअल मशीन](https://docs.microsoft.com/learn/modules/intro-to-azure-data-science-virtual-machine/?WT.mc_id=academic-77998-cacaste) बनाएँ और Jupyter के माध्यम से उससे कनेक्ट करें। आप फिर मशीन पर सीधे रेपो क्लोन कर सकते हैं, और सीखना शुरू कर सकते हैं। NC-श्रृंखला VM में GPU समर्थन होता है। +* [Data Science Virtual Machine](https://docs.microsoft.com/learn/modules/intro-to-azure-data-science-virtual-machine/?WT.mc_id=academic-77998-cacaste) बनाएं और Jupyter के माध्यम से उससे कनेक्ट करें। आप मशीन पर रिपो को क्लोन कर सकते हैं, और श学习 शुरू कर सकते हैं। NC-सीरीज VMs GPU समर्थन रखते हैं। -> **नोट**: कुछ सब्सक्रिप्शन, जिनमें Azure for Students शामिल है, बॉक्स से बाहर GPU समर्थन प्रदान नहीं करते हैं। आपको टेक्निकल सपोर्ट अनुरोध के जरिए अतिरिक्त GPU कोर प्राप्त करना पड़ सकता है। +> **ध्यान दें**: कुछ सब्सक्रिप्शन, जिसमें Azure for Students शामिल है, बॉक्स से GPU समर्थन नहीं देते। आपको तकनीकी सहायता अनुरोध के साथ अतिरिक्त GPU कोर का अनुरोध करना पड़ सकता है। -* [Azure Machine Learning Workspace](https://azure.microsoft.com/services/machine-learning/?WT.mc_id=academic-77998-cacaste) बनाएँ और वहां नोटबुक फीचर का उपयोग करें। [यह वीडियो](https://azure-for-academics.github.io/quickstart/azureml-papers/) दिखाता है कि Azure ML नोटबुक में रेपो को क्लोन कैसे करें और उपयोग शुरू करें। +* [Azure Machine Learning Workspace](https://azure.microsoft.com/services/machine-learning/?WT.mc_id=academic-77998-cacaste) बनाएं और वहां नोटबुक फीचर का उपयोग करें। [यह वीडियो](https://azure-for-academics.github.io/quickstart/azureml-papers/) दिखाता है कि किस प्रकार Azure ML नोटबुक में रिपो क्लोन करें और उपयोग करना शुरू करें। -आप Google Colab का भी उपयोग कर सकते हैं, जो कुछ मुफ्त GPU समर्थन के साथ आता है, और वहां Jupyter नोटबुक अपलोड कर के उन्हें एक-एक करके निष्पादित कर सकते हैं। +आप Google Colab का भी उपयोग कर सकते हैं, जिसमें कुछ मुफ्त GPU समर्थन आता है, और वहां Jupyter नोटबुक्स अपलोड करके उन्हें एक-एक करके निष्पादित कर सकते हैं। --- **अस्वीकरण**: -यह दस्तावेज़ एआई अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयासरत हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या असत्यताएं हो सकती हैं। मूल दस्तावेज़ अपनी मूल भाषा में प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम ज़िम्मेदार नहीं हैं। +इस दस्तावेज़ का अनुवाद AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ अपनी मूल भाषा में ही प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb b/translations/hi/lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb index 90093b72..6b0c3968 100644 --- a/translations/hi/lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb +++ b/translations/hi/lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb @@ -4,11 +4,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# प्री-ट्रेंड मॉडल और ट्रांसफर लर्निंग\n", + "# पूर्व-प्रशिक्षित मॉडल और ट्रांसफर लर्निंग\n", "\n", - "CNNs को ट्रेन करने में काफी समय लग सकता है, और इसके लिए बहुत सारे डेटा की आवश्यकता होती है। हालांकि, अधिकांश समय नेटवर्क द्वारा इमेज से पैटर्न निकालने के लिए उपयोग किए जाने वाले सर्वोत्तम लो-लेवल फिल्टर्स को सीखने में खर्च होता है। एक स्वाभाविक सवाल उठता है - क्या हम एक डेटासेट पर प्रशिक्षित न्यूरल नेटवर्क का उपयोग करके इसे अलग-अलग इमेज को वर्गीकृत करने के लिए बिना पूरी ट्रेनिंग प्रक्रिया के अनुकूलित कर सकते हैं?\n", + "CNN को प्रशिक्षित करने में बहुत समय लग सकता है, और उस कार्य के लिए बहुत डेटा की आवश्यकता होती है। हालांकि, अधिकतर समय उस सर्वोत्तम निम्न-स्तरीय फिल्टर को सीखने में व्यतीत होता है जिसका उपयोग नेटवर्क छवियों से पैटर्न निकालने के लिए करता है। एक स्वाभाविक प्रश्न उत्पन्न होता है - क्या हम एक डेटासेट पर प्रशिक्षित न्यूरल नेटवर्क का उपयोग कर सकते हैं और इसे पूरी प्रशिक्षण प्रक्रिया के बिना विभिन्न छवियों को वर्गीकृत करने के लिए अनुकूलित कर सकते हैं?\n", "\n", - "इस दृष्टिकोण को **ट्रांसफर लर्निंग** कहा जाता है, क्योंकि हम एक न्यूरल नेटवर्क मॉडल से दूसरे में कुछ ज्ञान स्थानांतरित करते हैं। ट्रांसफर लर्निंग में, हम आमतौर पर एक प्री-ट्रेंड मॉडल से शुरुआत करते हैं, जिसे किसी बड़े इमेज डेटासेट, जैसे **ImageNet**, पर प्रशिक्षित किया गया है। ये मॉडल पहले से ही सामान्य इमेज से विभिन्न फीचर्स निकालने में अच्छा काम कर सकते हैं, और कई मामलों में उन निकाले गए फीचर्स के ऊपर एक क्लासिफायर बनाना अच्छा परिणाम दे सकता है।\n" + "इस दृष्टिकोण को **ट्रांसफर लर्निंग** कहा जाता है, क्योंकि हम एक न्यूरल नेटवर्क मॉडल से दूसरे में कुछ ज्ञान ट्रांसफर करते हैं। ट्रांसफर लर्निंग में, हम आमतौर पर एक पूर्व-प्रशिक्षित मॉडल से शुरू करते हैं, जिसे कुछ बड़े छवि डेटासेट जैसे **ImageNet** पर प्रशिक्षित किया गया होता है। ये मॉडल पहले से ही सामान्य छवियों से विभिन्न विशेषताओं को निकालने का अच्छा काम कर सकते हैं, और कई मामलों में उन निकाली गई विशेषताओं के ऊपर केवल एक वर्गीकर्ता बनाना भी अच्छा परिणाम दे सकता है।\n" ] }, { @@ -29,11 +29,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## बिल्लियों बनाम कुत्तों का डेटासेट\n", + "## बिल्लियाँ बनाम कुत्ते डेटासेट\n", "\n", - "इस यूनिट में, हम बिल्लियों और कुत्तों की छवियों को वर्गीकृत करने की एक वास्तविक जीवन की समस्या को हल करेंगे। इसके लिए, हम [Kaggle Cats vs. Dogs Dataset](https://www.kaggle.com/c/dogs-vs-cats) का उपयोग करेंगे, जिसे [Microsoft से भी डाउनलोड किया जा सकता है](https://www.microsoft.com/en-us/download/details.aspx?id=54765&WT.mc_id=academic-77998-cacaste)।\n", + "इस इकाई में, हम बिल्लियों और कुत्तों की छवियों को वर्गीकृत करने की एक वास्तविक जीवन समस्या का समाधान करेंगे। इस कारण से, हम [Kaggle बिल्लियाँ बनाम कुत्ते डेटासेट](https://www.kaggle.com/c/dogs-vs-cats) का उपयोग करेंगे, जिसे [Microsoft से भी डाउनलोड किया जा सकता है](https://www.microsoft.com/en-us/download/details.aspx?id=54765&WT.mc_id=academic-77998-cacaste)।\n", "\n", - "आइए इस डेटासेट को डाउनलोड करें और इसे `data` डायरेक्टरी में निकालें (इस प्रक्रिया में कुछ समय लग सकता है!):\n" + "आइए इस डेटासेट को डाउनलोड करें और इसे `data` निर्देशिका में निकालें (इस प्रक्रिया में कुछ समय लग सकता है!):\n" ] }, { @@ -64,7 +64,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "दुर्भाग्यवश, डेटासेट में कुछ भ्रष्ट छवि फ़ाइलें हैं। हमें भ्रष्ट फ़ाइलों की जांच के लिए त्वरित सफाई करनी होगी। इस ट्यूटोरियल को बाधित न करने के लिए, हमने डेटासेट को सत्यापित करने के कोड को एक मॉड्यूल में स्थानांतरित कर दिया है।\n" + "दुर्भाग्यवश, डेटासेट में कुछ भ्रष्ट इमेज फाइल्स हैं। हमें भ्रष्ट फाइल्स की जांच के लिए तेज़ सफाई करनी होगी। इस ट्यूटोरियल को खराब न करने के लिए, हमने डेटासेट की जाँच करने वाला कोड एक मॉड्यूल में स्थानांतरित कर दिया है।\n" ] }, { @@ -335,11 +335,11 @@ "source": [ "## डेटासेट लोड करना\n", "\n", - "पिछले उदाहरणों में, हमने ऐसे डेटासेट लोड किए थे जो Keras में पहले से ही उपलब्ध हैं। अब हम अपने खुद के डेटासेट के साथ काम करने जा रहे हैं, जिसे हमें इमेजेस की डायरेक्टरी से लोड करना होगा।\n", + "पिछले उदाहरणों में, हम Keras में निर्मित डेटासेट्स को लोड कर रहे थे। अब हम अपने स्वयं के डेटासेट से निपटने वाले हैं, जिसे हमें छवियों की एक निर्देशिका से लोड करना होगा।\n", "\n", - "वास्तविक जीवन में, इमेज डेटासेट का आकार काफी बड़ा हो सकता है, और यह मान लेना संभव नहीं है कि सारा डेटा मेमोरी में फिट हो जाएगा। इसलिए, डेटासेट अक्सर **जनरेटर** के रूप में प्रस्तुत किए जाते हैं, जो ट्रेनिंग के लिए उपयुक्त मिनीबैच में डेटा वापस कर सकते हैं।\n", + "वास्तविक जीवन में, छवि डेटासेट का आकार काफी बड़ा हो सकता है, और यह संभव नहीं है कि पूरी डेटा मेमोरी में फिट हो सके। इस प्रकार, डेटासेट को अक्सर **जनरेटर** के रूप में प्रदर्शित किया जाता है जो प्रशिक्षण के लिए उपयुक्त मिनीबैच में डेटा वापस कर सकते हैं।\n", "\n", - "इमेज क्लासिफिकेशन से निपटने के लिए, Keras में एक विशेष फ़ंक्शन `image_dataset_from_directory` शामिल है, जो विभिन्न क्लासेस के अनुरूप सबडायरेक्टरी से इमेजेस लोड कर सकता है। यह फ़ंक्शन इमेजेस को स्केल करने का भी ध्यान रखता है, और यह डेटासेट को ट्रेन और टेस्ट सबसेट में विभाजित कर सकता है:\n" + "छवि वर्गीकरण से निपटने के लिए, Keras विशेष फ़ंक्शन `image_dataset_from_directory` शामिल करता है, जो विभिन्न वर्गों के अनुरूप उपनिर्देशिकाओं से छवियों को लोड कर सकता है। यह फ़ंक्शन छवियों को स्केलिंग करने का भी ध्यान रखता है, और यह डेटासेट को प्रशिक्षण और परीक्षण उपसमूहों में भी विभाजित कर सकता है:\n" ] }, { @@ -383,9 +383,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "दोनों कॉल्स के लिए समान `seed` मान सेट करना महत्वपूर्ण है, क्योंकि यह ट्रेन और टेस्ट डेटासेट के बीच छवियों के विभाजन को प्रभावित करता है।\n", + "दोनों कॉल के लिए एक ही `seed` मान सेट करना महत्वपूर्ण है, क्योंकि यह ट्रेन और टेस्ट डेटासेट के बीच छवियों के विभाजन को प्रभावित करता है।\n", "\n", - "डेटासेट स्वचालित रूप से निर्देशिकाओं से वर्ग नाम उठाता है, और यदि आवश्यक हो, तो आप उन्हें निम्नलिखित कॉल करके एक्सेस कर सकते हैं:\n" + "Dataset ऑटोमेटिक रूप से डॉयरेक्टरीज़ से क्लास नाम लेता है, और आवश्यक होने पर आप इन्हें कॉल करके एक्सेस कर सकते हैं:\n" ] }, { @@ -412,7 +412,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "हमारे पास जो डेटासेट हैं, उन्हें मॉडल को प्रशिक्षित करने के लिए सीधे `fit` फ़ंक्शन में पास किया जा सकता है। इनमें संबंधित छवियाँ और लेबल दोनों शामिल होते हैं, जिन्हें निम्नलिखित संरचना का उपयोग करके लूप किया जा सकता है:\n" + "डेटासेट जिन्हें हमने प्राप्त किया है उन्हें सीधे मॉडल को प्रशिक्षित करने के लिए `fit` फ़ंक्शन को पास किया जा सकता है। इनमें संबंधित छवियां और लेबल दोनों होते हैं, जिन्हें निम्नलिखित निर्माण का उपयोग करके लूप किया जा सकता है:\n" ] }, { @@ -453,7 +453,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "> **नोट**: डेटासेट में सभी छवियां फ्लोटिंग पॉइंट टेन्सर्स के रूप में 0-255 की रेंज में प्रस्तुत की गई हैं। उन्हें न्यूरल नेटवर्क में पास करने से पहले, हमें उन मानों को 0-1 की रेंज में स्केल करना होगा। छवियों को प्लॉट करते समय, हमें या तो वही करना होगा, या मानों को `int` प्रकार में बदलना होगा (जो हम ऊपर कोड में करते हैं), ताकि `matplotlib` को दिखा सकें कि हम मूल अस्केल्ड छवि को प्लॉट करना चाहते हैं।\n" + "> **नोट**: डेटासेट में सभी चित्र फ्लोटिंग पॉइंट टेंसर के रूप में 0-255 सीमा के साथ प्रदर्शित किए गए हैं। उन्हें न्यूरल नेटवर्क में भेजने से पहले, हमें उन मानों को 0-1 सीमा में स्केल करना होगा। चित्रों को प्लॉट करते समय, हमें या तो यही करना होगा, या मानों को `int` प्रकार में बदलना होगा (जो हमने ऊपर कोड में किया है), ताकि `matplotlib` को दिखाया जा सके कि हम मूल बिना-स्केल किए चित्र को प्लॉट करना चाहते हैं।\n" ] }, { @@ -462,7 +462,7 @@ "source": [ "## पूर्व-प्रशिक्षित मॉडल\n", "\n", - "कई छवि वर्गीकरण कार्यों के लिए, पूर्व-प्रशिक्षित न्यूरल नेटवर्क मॉडल उपलब्ध होते हैं। इनमें से कई मॉडल `keras.applications` नामस्थान के अंदर उपलब्ध हैं, और इंटरनेट पर और भी अधिक मॉडल पाए जा सकते हैं। आइए देखें कि सबसे सरल VGG-16 मॉडल को कैसे लोड और उपयोग किया जा सकता है:\n" + "कई छवि वर्गीकरण कार्यों के लिए पूर्व-प्रशिक्षित न्यूरल नेटवर्क मॉडल मिल सकते हैं। इन मॉडलों में से कई `keras.applications` नामस्थान के अंदर उपलब्ध हैं, और इंटरनेट पर और भी अधिक मॉडल मिल सकते हैं। आइए देखें कि सबसे सरल VGG-16 मॉडल को कैसे लोड और उपयोग किया जा सकता है:\n" ] }, { @@ -497,7 +497,17 @@ } ], "source": [ - "vgg = keras.applications.VGG16()\n", + "# SHA-256 of VGG16 weights (with top)\n", + "VGG16_WEIGHTS_SHA256 = '64373286793e3c8b2b4e3219cbf3544bce2f55ab4682710a29f5e7af8f5e4f61'\n", + "\n", + "_weights_path = keras.utils.get_file(\n", + " 'vgg16_weights_tf_dim_ordering_tf_kernels.h5',\n", + " 'https://storage.googleapis.com/tensorflow/keras-applications/vgg16/vgg16_weights_tf_dim_ordering_tf_kernels.h5',\n", + " file_hash=VGG16_WEIGHTS_SHA256,\n", + " hash_algorithm='sha256',\n", + ")\n", + "\n", + "vgg = keras.applications.VGG16(weights=_weights_path)\n", "inp = keras.applications.vgg16.preprocess_input(x_sample[:1])\n", "\n", "res = vgg(inp)\n", @@ -511,19 +521,16 @@ "metadata": {}, "source": [ "यहाँ कुछ महत्वपूर्ण बातें हैं:\n", - "\n", - "* किसी भी प्री-ट्रेंड नेटवर्क को इनपुट देने से पहले उसे एक निश्चित तरीके से प्री-प्रोसेस करना होता है। यह `preprocess_input` फ़ंक्शन को कॉल करके किया जाता है, जो इमेजेस के बैच को प्राप्त करता है और उनके प्रोसेस्ड रूप को लौटाता है। VGG-16 के मामले में, इमेजेस को नॉर्मलाइज़ किया जाता है और प्रत्येक चैनल के लिए कुछ पूर्व-निर्धारित औसत मान घटाया जाता है। ऐसा इसलिए किया जाता है क्योंकि VGG-16 को मूल रूप से इसी प्री-प्रोसेसिंग के साथ प्रशिक्षित किया गया था।\n", - "\n", - "* इनपुट बैच पर न्यूरल नेटवर्क लागू किया जाता है, और परिणामस्वरूप हमें 1000-एलिमेंट टेन्सर्स का बैच प्राप्त होता है, जो प्रत्येक क्लास की संभावना दिखाता है। हम इस टेन्सर पर `argmax` को कॉल करके सबसे संभावित क्लास नंबर का पता लगा सकते हैं।\n", - "\n", - "* प्राप्त परिणाम एक [`ImageNet` क्लास का नंबर](https://gist.github.com/yrevar/942d3a0ac09ec9e5eb3a) होता है। इस परिणाम को समझने के लिए, हम `decode_predictions` फ़ंक्शन का उपयोग कर सकते हैं, जो शीर्ष n क्लासेस को उनके नामों के साथ लौटाता है।\n" + "* किसी भी प्री-ट्रेंड नेटवर्क को इनपुट देने से पहले इसे एक निश्चित तरीके से प्री-प्रोसेस करना होता है। यह संबंधित `preprocess_input` फंक्शन को कॉल करके किया जाता है, जो कि छवियों के एक बैच को प्राप्त करता है, और उनकी प्रोसेस की हुई रूप देता है। VGG-16 के मामले में, छवियों को सामान्यीकृत किया जाता है, और प्रत्येक चैनल के लिए कुछ पूर्व-परिभाषित औसत मान घटाया जाता है। ऐसा इसलिए किया जाता है क्योंकि VGG-16 को मूल रूप से इसी प्री-प्रोसेसिंग के साथ प्रशिक्षित किया गया था।\n", + "* इनपुट बैच पर न्यूरल नेटवर्क लागू किया जाता है, और हमें परिणामस्वरूप 1000-तत्व वाले टेन्सर का एक बैच प्राप्त होता है जो प्रत्येक वर्ग की संभावना दिखाता है। इस टेन्सर पर `argmax` कॉल करके हम सबसे संभावित वर्ग संख्या पा सकते हैं।\n", + "* प्राप्त परिणाम एक [ `ImageNet` वर्ग की संख्या है](https://gist.github.com/yrevar/942d3a0ac09ec9e5eb3a)। इस परिणाम को समझने के लिए, हम `decode_predictions` फंक्शन का भी उपयोग कर सकते हैं, जो टॉप n वर्गों को उनके नामों के साथ लौटाता है।\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "आइए VGG-16 नेटवर्क की संरचना भी देखें:\n" + "आइए VGG-16 नेटवर्क की वास्तुकला भी देखें:\n" ] }, { @@ -600,9 +607,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## GPU गणनाएँ\n", + "## GPU गणना\n", "\n", - "डीप न्यूरल नेटवर्क, जैसे VGG-16 और अन्य आधुनिक आर्किटेक्चर को चलाने के लिए काफी अधिक गणनात्मक शक्ति की आवश्यकता होती है। यदि GPU एक्सेलेरेशन उपलब्ध है, तो इसका उपयोग करना समझदारी है। सौभाग्य से, यदि GPU उपलब्ध है तो Keras स्वचालित रूप से GPU पर गणनाओं को तेज कर देता है। हम निम्नलिखित कोड का उपयोग करके जांच सकते हैं कि Tensorflow GPU का उपयोग करने में सक्षम है या नहीं:\n" + "गहरे न्यूरल नेटवर्क, जैसे कि VGG-16 और अन्य अधिक आधुनिक आर्किटेक्चर को चलाने के लिए काफी गणनात्मक शक्ति की आवश्यकता होती है। यदि उपलब्ध हो तो GPU त्वरण का उपयोग करना समझदारी है। सौभाग्य से, Keras यदि उपलब्ध हो तो GPU पर गणनाओं को स्वतः गति देता है। हम निम्नलिखित कोड का उपयोग करके जांच सकते हैं कि Tensorflow GPU का उपयोग करने में सक्षम है या नहीं:\n" ] }, { @@ -629,9 +636,10 @@ "cell_type": "markdown", "metadata": {}, "source": [ + "\n", "## VGG फीचर्स निकालना\n", "\n", - "अगर हम अपनी छवियों से फीचर्स निकालने के लिए VGG-16 का उपयोग करना चाहते हैं, तो हमें मॉडल की अंतिम वर्गीकरण परतों के बिना संस्करण की आवश्यकता होगी। हम इस कोड का उपयोग करके VGG-16 मॉडल को बिना शीर्ष परतों के इंस्टेंटिएट कर सकते हैं:\n" + "यदि हम अपने चित्रों से फीचर्स निकालने के लिए VGG-16 का उपयोग करना चाहते हैं, तो हमें अंतिम वर्गीकरण परतों के बिना मॉडल चाहिए। हम इस कोड का उपयोग करके VGG-16 मॉडल को शीर्ष परतों के बिना इंस्टेंटिएट कर सकते हैं:\n" ] }, { @@ -683,9 +691,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "फीचर टेंसर का आयाम 7x7x512 है, लेकिन इसे विज़ुअलाइज़ करने के लिए हमें इसे 2D रूप में बदलना पड़ा।\n", + "फीचर टेंसर का आयाम 7x7x512 है, लेकिन इसे देखने के लिए हमें इसे 2D रूप में पुनः आकार देना पड़ा।\n", "\n", - "अब चलिए देखते हैं कि क्या इन फीचर्स का उपयोग इमेज को वर्गीकृत करने के लिए किया जा सकता है। चलिए कुछ इमेज का हिस्सा (हमारे मामले में 50 मिनीबैच) मैन्युअली लेते हैं और उनके फीचर वेक्टर को पहले से ही प्री-कंप्यूट करते हैं। हम इसके लिए Tensorflow **dataset** API का उपयोग कर सकते हैं। `map` फ़ंक्शन एक डेटासेट लेता है और दिए गए लैम्ब्डा-फ़ंक्शन को लागू करके इसे ट्रांसफॉर्म करता है। हम इस मैकेनिज़्म का उपयोग करके नए डेटासेट्स, `ds_features_train` और `ds_features_test`, बनाते हैं, जो मूल इमेज की बजाय VGG-एक्सट्रैक्टेड फीचर्स को शामिल करते हैं।\n" + "अब देखते हैं कि क्या उन फीचर्स का उपयोग छवियों को वर्गीकृत करने के लिए किया जा सकता है। चलिए मैन्युअली कुछ छवियों का हिस्सा लेते हैं (हमारे मामले में 50 मिनीबैच), और उनके फीचर वेक्टर पहले से गणना करते हैं। हम Tensorflow **dataset** API का उपयोग यह करने के लिए कर सकते हैं। `map` फ़ंक्शन एक डेटासेट लेता है और इसे ट्रांसफॉर्म करने के लिए एक दिए गए लैम्ब्डा-फ़ंक्शन को लागू करता है। हम इस तंत्र का उपयोग नए डेटासेट बनाने के लिए करते हैं, `ds_features_train` और `ds_features_test`, जिनमें मूल छवियों के बजाय VGG-निकाले गए फीचर्स होते हैं।\n" ] }, { @@ -715,9 +723,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "हमने प्रदर्शन को तेज़ करने के लिए डेटा सेट का आकार सीमित करने के लिए `.take(50)` निर्माण का उपयोग किया। आप निश्चित रूप से इस प्रयोग को पूरे डेटा सेट पर भी कर सकते हैं।\n", + "हमने प्रदर्शन को तेज करने के लिए डेटा सेट आकार को सीमित करने के लिए `.take(50)` निर्माण का उपयोग किया। आप निश्चित रूप से इस प्रयोग को पूर्ण डेटा सेट पर कर सकते हैं।\n", "\n", - "अब जब हमारे पास विशेषताओं के साथ एक डेटा सेट है, तो हम बिल्लियों और कुत्तों के बीच अंतर करने के लिए एक साधारण डेंस क्लासिफायर को प्रशिक्षित कर सकते हैं। यह नेटवर्क (7,7,512) आकार के फीचर वेक्टर को लेगा और एक आउटपुट उत्पन्न करेगा जो या तो कुत्ते या बिल्ली से मेल खाता है। चूंकि यह एक बाइनरी क्लासिफिकेशन है, हम `sigmoid` सक्रियण फ़ंक्शन और `binary_crossentropy` लॉस का उपयोग करते हैं।\n" + "अब जब हमारे पास निकाली गई विशेषताओं वाला डेटा सेट है, तो हम बिल्ली और कुत्ते के बीच अंतर करने के लिए एक सरल डेंस क्लासिफायर प्रशिक्षित कर सकते हैं। यह नेटवर्क आकार (7,7,512) के फीचर वेक्टर को लेगा, और एक आउटपुट देगा जो या तो कुत्ते या बिल्ली से संबंधित होगा। क्योंकि यह द्वि-वर्गीकरण है, हम `sigmoid` सक्रियण फ़ंक्शन और `binary_crossentropy` हानि का उपयोग करते हैं।\n" ] }, { @@ -746,13 +754,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "परिणाम शानदार है, हम लगभग 95% संभावना के साथ बिल्ली और कुत्ते के बीच अंतर कर सकते हैं! हालांकि, हमने इस दृष्टिकोण को केवल सभी छवियों के एक छोटे हिस्से पर ही परीक्षण किया है, क्योंकि मैन्युअल फीचर एक्सट्रैक्शन में काफी समय लगता है।\n", + "परिणाम शानदार है, हम लगभग 95% संभावना के साथ एक बिल्ली और एक कुत्ते के बीच अंतर कर सकते हैं! हालाँकि, हमने इस दृष्टिकोण का परीक्षण सभी छवियों के एक उपसमूह पर ही किया है, क्योंकि मैनुअल फीचर निकालना बहुत समय लेने वाला लगता है।\n", "\n", "## एक VGG नेटवर्क का उपयोग करके ट्रांसफर लर्निंग\n", "\n", - "हम मैन्युअल रूप से फीचर्स को पहले से प्री-कंप्यूट करने से भी बच सकते हैं, इसके लिए हम ट्रेनिंग के दौरान पूरे VGG-16 नेटवर्क का उपयोग कर सकते हैं, और हमारे नेटवर्क में फीचर एक्सट्रैक्टर को पहली लेयर के रूप में जोड़ सकते हैं।\n", + "हम मैनुअल रूप से फीचर्स को पहले से कैलकुलेट करने से भी बच सकते हैं, मूल VGG-16 नेटवर्क को प्रशिक्षण के दौरान पूरे रूप में उपयोग करके, अपने नेटवर्क में पहले लेयर के रूप में फीचर एक्सट्रैक्टर जोड़कर।\n", "\n", - "Keras आर्किटेक्चर की खूबसूरती यह है कि ऊपर परिभाषित VGG-16 मॉडल को किसी अन्य न्यूरल नेटवर्क में एक लेयर के रूप में भी उपयोग किया जा सकता है! हमें केवल एक नेटवर्क बनाना है जिसमें डेंस क्लासिफायर इसके ऊपर हो, और फिर पूरे नेटवर्क को बैक प्रोपेगेशन का उपयोग करके ट्रेन करना है।\n" + "Keras आर्किटेक्चर की खूबसूरती यह है कि ऊपर हमने जो VGG-16 मॉडल परिभाषित किया है, उसे किसी अन्य न्यूरल नेटवर्क में एक लेयर के रूप में भी इस्तेमाल किया जा सकता है! हमें बस उस पर एक घना क्लासिफायर बनाना है, और फिर पूरे नेटवर्क को बैक प्रोपेगेशन का उपयोग करके प्रशिक्षित करना है।\n" ] }, { @@ -796,13 +804,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "यह मॉडल एक एंड-टू-एंड वर्गीकरण नेटवर्क जैसा दिखता है, जो एक छवि लेता है और वर्ग लौटाता है। हालांकि, चुनौतीपूर्ण बात यह है कि हम चाहते हैं कि VGG16 एक फीचर एक्सट्रैक्टर के रूप में काम करे, और इसे पुनः प्रशिक्षित न किया जाए। इसलिए, हमें **कन्वोल्यूशनल फीचर एक्सट्रैक्टर के वेट्स को फ्रीज करना होगा**। हम नेटवर्क की पहली लेयर तक `model.layers[0]` को कॉल करके पहुंच सकते हैं, और हमें केवल `trainable` प्रॉपर्टी को `False` पर सेट करना होगा।\n", + "यह मॉडल एक एंड-टू-एंड वर्गीकरण नेटवर्क की तरह दिखता है, जो एक छवि लेता है और वर्ग लौटाता है। हालांकि, यहाँ जटिल बात यह है कि हम चाहते हैं कि VGG16 एक फीचर एक्सट्रैक्टर के रूप में कार्य करे, और पुनः प्रशिक्षित न हो। इसलिए, हमें **संवहनी फीचर एक्सट्रैक्टर के वज़न को फ्रीज करना** होगा। हम `model.layers[0]` को कॉल करके नेटवर्क की पहली परत तक पहुँच सकते हैं, और हमें सिर्फ `trainable` प्रॉपर्टी को `False` सेट करना होगा।\n", "\n", - "> **Note**: फीचर एक्सट्रैक्टर वेट्स को फ्रीज करना आवश्यक है, क्योंकि अन्यथा बिना प्रशिक्षित वर्गीकरण लेयर मूल प्री-ट्रेंड वेट्स को खराब कर सकती है।\n", + "> **टिप्पणी**: फीचर एक्सट्रैक्टर के वज़न को फ्रीज करना आवश्यक है, क्योंकि अन्यथा बिना प्रशिक्षित क्लासिफायर लेयर संवहनी एक्सट्रैक्टर के मूल पूर्व-प्रशिक्षित वज़न को नष्ट कर सकता है।\n", "\n", - "आप देख सकते हैं कि हमारे नेटवर्क में कुल पैरामीटर लगभग 15 मिलियन हैं, लेकिन हम केवल 25k पैरामीटर को प्रशिक्षित कर रहे हैं। शीर्ष स्तर के कन्वोल्यूशनल फिल्टर्स के सभी अन्य पैरामीटर पहले से प्रशिक्षित हैं। यह अच्छा है, क्योंकि हम छोटे उदाहरणों के साथ छोटे पैरामीटर की संख्या को फाइन-ट्यून कर सकते हैं।\n", + "आप ध्यान देंगे कि जबकि हमारे नेटवर्क में कुल पैरामीटर लगभग 15 मिलियन हैं, हम केवल 25k पैरामीटर प्रशिक्षित कर रहे हैं। ऊपर के स्तर के संवहनी फ़िल्टर के सभी अन्य पैरामीटर पूर्व-प्रशिक्षित हैं। यह अच्छा है, क्योंकि हम कम संख्या में उदाहरणों के साथ कम संख्या में पैरामीटर को फाइन-ट्यून करने में सक्षम हैं।\n", "\n", - "अब हम अपने नेटवर्क को प्रशिक्षित करेंगे और देखेंगे कि हम कितना अच्छा परिणाम प्राप्त कर सकते हैं। अपेक्षा करें कि रनिंग टाइम काफी लंबा होगा, और यदि निष्पादन कुछ समय के लिए रुका हुआ लगे तो चिंता न करें।\n" + "अब हम अपने नेटवर्क को प्रशिक्षित करेंगे और देखेंगे कि हम कितना अच्छा कर सकते हैं। अपेक्षाकृत लंबा रनिंग समय हो सकता है, और यदि निष्पादन कुछ समय के लिए फ्रीज़ लगता है तो चिंता न करें।\n" ] }, { @@ -827,11 +835,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "ऐसा लगता है कि हमने बिल्लियों और कुत्तों के बीच का वर्गीकरण काफी सटीकता से प्राप्त कर लिया है!\n", + "ऐसा लगता है कि हमने बिल्ली बनाम कुत्ते वर्गीकर्ता को काफी सटीकता से प्राप्त कर लिया है! \n", "\n", - "## मॉडल को सेव और लोड करना\n", + "## मॉडल सहेजना और लोड करना\n", "\n", - "जब हमने मॉडल को प्रशिक्षित कर लिया है, तो हम भविष्य में उपयोग के लिए मॉडल की संरचना और प्रशिक्षित वज़न को एक फाइल में सेव कर सकते हैं:\n" + "एक बार जब हमने मॉडल को प्रशिक्षित कर लिया, तो हम मॉडल की वास्तुकला और प्रशिक्षित वज़न को भविष्य में उपयोग के लिए एक फ़ाइल में सहेज सकते हैं:\n" ] }, { @@ -855,7 +863,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "हम फिर किसी भी समय फ़ाइल से मॉडल लोड कर सकते हैं। यह उपयोगी हो सकता है यदि अगला प्रयोग मॉडल को नष्ट कर देता है - आपको शुरू से फिर से शुरू नहीं करना पड़ेगा।\n" + "हम फिर कभी भी फाइल से मॉडल लोड कर सकते हैं। यह तब उपयोगी हो सकता है जब अगला प्रयोग मॉडल को नष्ट कर देता है - तब आपको फिर से शुरू करने की आवश्यकता नहीं होगी।\n" ] }, { @@ -871,15 +879,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## ट्रांसफर लर्निंग का फाइन-ट्यूनिंग\n", + "## फाइन-ट्यूनिंग ट्रांसफर लर्निंग\n", "\n", - "पिछले सेक्शन में, हमने अपने डेटा सेट में इमेज को वर्गीकृत करने के लिए अंतिम क्लासिफायर लेयर को प्रशिक्षित किया था। हालांकि, हमने फीचर एक्सट्रैक्टर को फिर से प्रशिक्षित नहीं किया था, और हमारा मॉडल उन फीचर्स पर निर्भर था जो मॉडल ने ImageNet डेटा पर सीखे थे। यदि आपके ऑब्जेक्ट्स सामान्य ImageNet इमेज से दृश्य रूप से अलग हैं, तो फीचर्स का यह संयोजन सबसे अच्छा काम नहीं कर सकता। इसलिए, यह समझदारी होगी कि हम कॉन्वोल्यूशनल लेयर्स को भी प्रशिक्षित करना शुरू करें।\n", + "पिछले सेक्शन में, हमने अंतिम क्लासिफायर लेयर को हमारे अपने डेटासेट में इमेजेज को वर्गीकृत करने के लिए प्रशिक्षित किया था। हालांकि, हमने फीचर एक्स्ट्रैक्टर को पुनः प्रशिक्षित नहीं किया, और हमारा मॉडल उन फीचर्स पर निर्भर था जो मॉडल ने ImageNet डेटा पर सीखे थे। अगर आपके ऑब्जेक्ट्स सामान्य ImageNet इमेजेज से दृश्य रूप से अलग हैं, तो यह फीचर्स का संयोजन सबसे अच्छा काम नहीं कर सकता। इसलिए कॉन्वोल्यूशनल लेयर्स को भी ट्रेन करना शुरू करना समझदारी होगी।\n", "\n", - "इसके लिए, हम उन कॉन्वोल्यूशनल फ़िल्टर पैरामीटर्स को अनफ्रीज़ कर सकते हैं जिन्हें हमने पहले फ्रीज़ किया था।\n", + "ऐसा करने के लिए, हम उन कॉन्वोल्यूशनल फिल्टर पैरामीटर्स को अनफ्रिज़ कर सकते हैं जिन्हें हमने पहले फ्रीज़ किया हुआ था। \n", "\n", - "> **Note:** यह महत्वपूर्ण है कि आप पहले पैरामीटर्स को फ्रीज़ करें और क्लासिफिकेशन लेयर में वेट्स को स्थिर करने के लिए कुछ एपॉक्स का प्रशिक्षण करें। यदि आप तुरंत अनफ्रीज़ किए गए पैरामीटर्स के साथ एंड-टू-एंड नेटवर्क का प्रशिक्षण शुरू करते हैं, तो बड़े एरर प्री-ट्रेंड वेट्स को कॉन्वोल्यूशनल लेयर्स में नष्ट कर सकते हैं।\n", + "> **नोट:** यह महत्वपूर्ण है कि आप पहले पैरामीटर्स को फ्रीज़ करें और क्लासिफिकेशन लेयर में वेट्स को स्थिर करने के लिए कई एपोक्स का प्रशिक्षण करें। यदि आप तुरंत अनफ्रिज़ेड पैरामीटर्स के साथ एंड-टू-एंड नेटवर्क का प्रशिक्षण शुरू करते हैं, तो बड़ी त्रुटियां कॉन्वोल्यूशनल लेयर्स में प्री-ट्रेंड वेट्स को नष्ट कर सकती हैं।\n", "\n", - "हमारा कॉन्वोल्यूशनल VGG-16 मॉडल पहले लेयर के अंदर स्थित है, और यह स्वयं कई लेयर्स से बना है। हम इसकी संरचना देख सकते हैं:\n" + "हमारा कॉन्वोल्यूशनल VGG-16 मॉडल पहली लेयर के अंदर स्थित है, और यह स्वयं कई लेयर्स से बना है। हम इसके स्ट्रक्चर पर एक नजर डाल सकते हैं: \n" ] }, { @@ -947,7 +955,9 @@ { "cell_type": "markdown", "metadata": {}, - "source": [] + "source": [ + "हम अभिसरण आधार की सभी परतों को अनफ्रीज कर सकते हैं:\n" + ] }, { "cell_type": "code", @@ -962,7 +972,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "हालांकि, सभी को एक साथ अनफ्रीज करना सबसे अच्छा विचार नहीं है। हम पहले कुछ अंतिम कन्वोल्यूशन लेयर्स को ही अनफ्रीज कर सकते हैं, क्योंकि वे उच्च स्तर के पैटर्न रखते हैं जो हमारी छवियों के लिए प्रासंगिक हैं। उदाहरण के लिए, शुरुआत में, हम अंतिम 4 लेयर्स को छोड़कर सभी लेयर्स को फ्रीज कर सकते हैं:\n" + "हालांकि, सभी को एक साथ अनफ्रीज़ करना सबसे अच्छा विचार नहीं है। हम सबसे पहले केवल कुछ अंतिम कन्वोल्यूशन लेयर्स को ही अनफ्रीज़ कर सकते हैं, क्योंकि उनमें उच्च स्तर के पैटर्न होते हैं जो हमारी छवियों के लिए प्रासंगिक होते हैं। उदाहरण के लिए, शुरुआत के लिए, हम सभी लेयर्स को छोड़कर अंतिम 4 को फ्रीज़ कर सकते हैं: \n" ] }, { @@ -1001,11 +1011,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "ट्रेन करने योग्य पैरामीटरों की संख्या में काफी वृद्धि हुई है, लेकिन यह अभी भी सभी पैरामीटरों का लगभग 50% ही है।\n", + "ध्यान दें कि ट्रेन करने योग्य पैरामीटरों की संख्या काफी बढ़ गई है, लेकिन यह फिर भी सभी पैरामीटरों का लगभग 50% है।\n", "\n", - "अनफ्रीज़ करने के बाद, हम कुछ और epochs का प्रशिक्षण कर सकते हैं (हमारे उदाहरण में, हम केवल एक करेंगे)। आप कम learning rate भी चुन सकते हैं, ताकि प्री-ट्रेंड वेट्स पर प्रभाव को कम किया जा सके। हालांकि, कम learning rate के साथ भी, आप उम्मीद कर सकते हैं कि प्रशिक्षण की शुरुआत में सटीकता कम हो जाएगी, और अंततः फिक्स्ड वेट्स के मामले की तुलना में थोड़ा उच्च स्तर तक पहुंच जाएगी।\n", + "अनफ़्रीजिंग के बाद, हम कुछ और प्रशिक्षण के एपॉक्स कर सकते हैं (हमारे उदाहरण में, हम सिर्फ एक करेंगे)। आप प्री-ट्रेंड वेट्स पर प्रभाव को कम करने के लिए कम लर्निंग रेट भी चुन सकते हैं। हालांकि, कम लर्निंग रेट के साथ भी, आप प्रशिक्षण की शुरुआत में सटीकता के घटने की उम्मीद कर सकते हैं, जब तक कि यह अंत में फिक्स्ड वेट्स के मामले की तुलना में थोड़ा अधिक स्तर तक नहीं पहुंच जाती।\n", "\n", - "> **Note:** यह प्रशिक्षण बहुत धीमी गति से होता है, क्योंकि हमें नेटवर्क की कई लेयर्स के माध्यम से gradients को वापस propagate करना पड़ता है!\n" + "> **नोट:** यह प्रशिक्षण बहुत धीमी गति से होता है, क्योंकि हमें नेटवर्क की कई परतों के माध्यम से ग्रेडिएंट्स को वापस प्रसारित करना पड़ता है!\n" ] }, { @@ -1029,9 +1039,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "हम संभवतः उच्च प्रशिक्षण सटीकता प्राप्त करेंगे, क्योंकि हम अधिक शक्तिशाली नेटवर्क का उपयोग कर रहे हैं जिसमें अधिक पैरामीटर हैं, लेकिन मान्यता सटीकता उतनी अधिक नहीं बढ़ेगी।\n", + "हम संभवतः उच्चतर प्रशिक्षण सटीकता प्राप्त करेंगे, क्योंकि हम अधिक शक्तिशाली नेटवर्क का उपयोग कर रहे हैं जिसमें अधिक पैरामीटर हैं, लेकिन सत्यापन सटीकता उतनी अधिक नहीं बढ़ेगी।\n", "\n", - "नेटवर्क की कुछ और परतों को अनफ्रीज़ करके और अधिक प्रशिक्षण करने के लिए स्वतंत्र महसूस करें, ताकि आप देख सकें कि क्या आप उच्च सटीकता प्राप्त कर सकते हैं!\n" + "नेटवर्क की कुछ और परतों को अनफ्रीज करके और अधिक प्रशिक्षण देने में स्वतंत्र महसूस करें, यह देखने के लिए कि क्या आप उच्च सटीकता प्राप्त कर सकते हैं!\n" ] }, { @@ -1040,7 +1050,7 @@ "source": [ "## अन्य कंप्यूटर विज़न मॉडल\n", "\n", - "VGG-16 सबसे सरल कंप्यूटर विज़न आर्किटेक्चर में से एक है। Keras कई और प्री-ट्रेंड नेटवर्क प्रदान करता है। इनमें से सबसे अधिक उपयोग किए जाने वाले हैं **ResNet** आर्किटेक्चर, जिसे Microsoft द्वारा विकसित किया गया है, और **Inception**, जिसे Google ने बनाया है। उदाहरण के लिए, चलिए सबसे सरल ResNet-50 मॉडल की आर्किटेक्चर को देखते हैं (ResNet मॉडल का एक परिवार है जिसमें अलग-अलग गहराई होती है, आप ResNet-152 के साथ प्रयोग कर सकते हैं यदि आप देखना चाहते हैं कि एक वास्तव में गहरा मॉडल कैसा दिखता है):\n" + "VGG-16 सबसे सरल कंप्यूटर विज़न आर्किटेक्चर में से एक है। Keras कई और प्री-ट्रेंड नेटवर्क प्रदान करता है। उनमें से सबसे अधिक उपयोग किए जाने वाले **ResNet** आर्किटेक्चर हैं, जो Microsoft ने विकसित किए हैं, और **Inception** जो Google द्वारा बनाया गया है। उदाहरण के लिए, चलिए सबसे सरल ResNet-50 मॉडल की आर्किटेक्चर का पता लगाते हैं (ResNet मॉडल का एक परिवार है जिसमें विभिन्न गहराई होती है, यदि आप वास्तव में गहरे मॉडल को देखना चाहते हैं तो आप ResNet-152 के साथ प्रयोग कर सकते हैं):\n" ] }, { @@ -1442,11 +1452,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "जैसा कि आप देख सकते हैं, मॉडल में वही परिचित बिल्डिंग ब्लॉक्स शामिल हैं: कन्वोल्यूशनल लेयर्स, पूलिंग लेयर्स और अंतिम डेंस क्लासिफायर। हम इस मॉडल का उपयोग बिल्कुल उसी तरह कर सकते हैं जैसे हमने ट्रांसफर लर्निंग के लिए VGG-16 का उपयोग किया था। आप ऊपर दिए गए कोड के साथ प्रयोग कर सकते हैं, विभिन्न ResNet मॉडलों को बेस मॉडल के रूप में उपयोग करके देख सकते हैं कि सटीकता कैसे बदलती है।\n", + "जैसा कि आप देख सकते हैं, मॉडल में वही परिचित बिल्डिंग ब्लॉक्स हैं: कन्वोल्यूशनल लेयर्स, पूलिंग लेयर्स और अंतिम डेंस क्लासिफायर। हम इस मॉडल का उपयोग उसी तरीके से कर सकते हैं जैसे हम ट्रांसफर लर्निंग के लिए VGG-16 का उपयोग कर रहे हैं। आप ऊपर दिए गए कोड के साथ प्रयोग कर सकते हैं, विभिन्न ResNet मॉडलों को बेस मॉडल के रूप में उपयोग करके, और देख सकते हैं कि सटीकता कैसे बदलती है।\n", "\n", - "## बैच नॉर्मलाइज़ेशन\n", + "## बैच नार्मलाइज़ेशन\n", "\n", - "इस नेटवर्क में एक और प्रकार की लेयर शामिल है: **बैच नॉर्मलाइज़ेशन**। बैच नॉर्मलाइज़ेशन का विचार यह है कि न्यूरल नेटवर्क के माध्यम से प्रवाहित होने वाले मानों को सही अंतराल में लाया जाए। आमतौर पर, न्यूरल नेटवर्क सबसे अच्छा काम करते हैं जब सभी मान [-1,1] या [0,1] की रेंज में होते हैं, और यही कारण है कि हम अपने इनपुट डेटा को उसी के अनुसार स्केल/नॉर्मलाइज़ करते हैं। हालांकि, एक गहरे नेटवर्क के प्रशिक्षण के दौरान ऐसा हो सकता है कि मान इस रेंज से काफी बाहर चले जाएं, जिससे प्रशिक्षण में समस्या हो सकती है। बैच नॉर्मलाइज़ेशन लेयर वर्तमान मिनीबैच के सभी मानों के लिए औसत और मानक विचलन की गणना करती है और उन्हें सामान्यीकृत करने के लिए उपयोग करती है, इससे पहले कि वे न्यूरल नेटवर्क लेयर के माध्यम से गुजरें। यह गहरे नेटवर्क की स्थिरता को काफी हद तक सुधारता है।\n" + "इस नेटवर्क में एक और प्रकार की लेयर होती है: **बैच नार्मलाइज़ेशन**। बैच नार्मलाइज़ेशन का विचार यह है कि न्यूरल नेटवर्क से गुज़रने वाले मानों को सही सीमा में लाया जाए। आमतौर पर न्यूरल नेटवर्क तब सबसे अच्छा काम करते हैं जब सभी मान [-1,1] या [0,1] के दायरे में होते हैं, और इसीलिए हम अपने इनपुट डेटा को इस अनुसार स्केल/नॉर्मलाइज़ करते हैं। हालांकि, गहरे नेटवर्क के प्रशिक्षण के दौरान, ऐसा हो सकता है कि मान इस सीमा से काफी बाहर चले जाएं, जिससे प्रशिक्षण में समस्या हो जाती है। बैच नार्मलाइज़ेशन लेयर वर्तमान मिनीबैच के सभी मानों के लिए औसत और मानक विचलन की गणना करता है, और उन्हें न्यूरल नेटवर्क लेयर में भेजने से पहले सिग्नल को सामान्य करने के लिए उपयोग करता है। इससे गहरे नेटवर्क की स्थिरता में काफी सुधार होता है।\n" ] }, { @@ -1455,16 +1465,16 @@ "source": [ "## मुख्य बातें\n", "\n", - "ट्रांसफर लर्निंग का उपयोग करके, हम अपने कस्टम ऑब्जेक्ट क्लासिफिकेशन टास्क के लिए जल्दी से एक क्लासिफायर तैयार कर पाए और उच्च सटीकता प्राप्त की। हालांकि, यह उदाहरण पूरी तरह से निष्पक्ष नहीं था, क्योंकि मूल VGG-16 नेटवर्क को पहले से ही बिल्लियों और कुत्तों को पहचानने के लिए प्रशिक्षित किया गया था, और इसलिए हम नेटवर्क में पहले से मौजूद अधिकांश पैटर्न को ही पुनः उपयोग कर रहे थे। आप अपेक्षा कर सकते हैं कि अधिक विशिष्ट डोमेन-विशिष्ट वस्तुओं, जैसे कि किसी प्लांट की प्रोडक्शन लाइन पर विवरण या विभिन्न पेड़ों की पत्तियों पर, सटीकता कम हो सकती है।\n", + "ट्रांसफर लर्निंग का उपयोग करके, हम अपने कस्टम ऑब्जेक्ट वर्गीकरण कार्य के लिए जल्दी से एक वर्गीकर्ता तैयार करने में सक्षम थे, और उच्च सटीकता प्राप्त कर सके। हालांकि, यह उदाहरण पूरी तरह से न्यायसंगत नहीं था, क्योंकि मूल VGG-16 नेटवर्क को बिल्ली और कुत्तों को पहचानने के लिए प्री-ट्रेन किया गया था, और इसलिए हम केवल नेटवर्क में पहले से मौजूद अधिकांश पैटर्न्स का ही पुन: उपयोग कर रहे थे। आप अधिक विदेशी डोमेन-विशिष्ट वस्तुओं पर, जैसे कि किसी संयंत्र में उत्पादन लाइन के विवरण, या विभिन्न पेड़ के पत्तों पर, कम सटीकता की अपेक्षा कर सकते हैं।\n", "\n", - "आप देख सकते हैं कि अब हम जो अधिक जटिल कार्य हल कर रहे हैं, वे उच्च कंप्यूटेशनल पावर की मांग करते हैं और उन्हें आसानी से CPU पर हल नहीं किया जा सकता। अगले यूनिट में, हम कम कंप्यूट संसाधनों का उपयोग करके उसी मॉडल को प्रशिक्षित करने के लिए एक हल्की इम्प्लीमेंटेशन का उपयोग करने की कोशिश करेंगे, जिससे सटीकता में केवल मामूली कमी आएगी।\n" + "आप देख सकते हैं कि अधिक जटिल कार्य जिन्हें हम अभी हल कर रहे हैं, उनमें उच्च कम्प्यूटेशनल पावर की आवश्यकता होती है, और इन्हें CPU पर आसानी से हल नहीं किया जा सकता। अगले यूनिट में, हम कम कम्प्यूट स्रोतों का उपयोग करके उसी मॉडल को प्रशिक्षित करने के लिए अधिक हल्की वजन वाली कार्यान्वयन का उपयोग करने की कोशिश करेंगे, जिससे थोड़ी कम सटीकता होगी।\n" ] }, { "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\n" ] } ], @@ -1485,12 +1495,6 @@ "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.10" - }, - "coopTranslator": { - "original_hash": "c189abc107848f96051085cc30945129", - "translation_date": "2025-08-31T14:37:11+00:00", - "source_file": "lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb", - "language_code": "hi" } }, "nbformat": 4, diff --git a/translations/hi/lessons/5-NLP/README.md b/translations/hi/lessons/5-NLP/README.md index 7f1b247d..53b57a1b 100644 --- a/translations/hi/lessons/5-NLP/README.md +++ b/translations/hi/lessons/5-NLP/README.md @@ -1,69 +1,73 @@ # प्राकृतिक भाषा प्रसंस्करण -![NLP कार्यों का एक स्केच](../../../../lessons/sketchnotes/ai-nlp.png) +![एनएलपी कार्यों का सारांश एक डूडल में](../../../../translated_images/hi/ai-nlp.b22dcb8ca4707cea.webp) -इस खंड में, हम **प्राकृतिक भाषा प्रसंस्करण (NLP)** से संबंधित कार्यों को संभालने के लिए न्यूरल नेटवर्क का उपयोग करने पर ध्यान केंद्रित करेंगे। कई NLP समस्याएं हैं जिन्हें हम चाहते हैं कि कंप्यूटर हल कर सकें: +इस खंड में, हम **प्राकृतिक भाषा प्रसंस्करण (NLP)** से संबंधित कार्यों को संभालने के लिए न्यूरल नेटवर्क का उपयोग करने पर ध्यान केंद्रित करेंगे। कई NLP समस्याएँ हैं जिन्हें हम चाहते हैं कि कंप्यूटर हल कर सके: -* **पाठ वर्गीकरण** एक सामान्य वर्गीकरण समस्या है जो पाठ अनुक्रमों से संबंधित है। उदाहरणों में ईमेल संदेशों को स्पैम और गैर-स्पैम के रूप में वर्गीकृत करना, या लेखों को खेल, व्यापार, राजनीति आदि के रूप में वर्गीकृत करना शामिल है। इसके अलावा, जब हम चैटबॉट विकसित करते हैं, तो हमें अक्सर यह समझने की आवश्यकता होती है कि उपयोगकर्ता क्या कहना चाहता था -- इस मामले में हम **इरादा वर्गीकरण** से निपट रहे हैं। इरादा वर्गीकरण में अक्सर हमें कई श्रेणियों से निपटना पड़ता है। -* **भावना विश्लेषण** एक सामान्य प्रतिगमन समस्या है, जहां हमें एक वाक्य के अर्थ की सकारात्मकता/नकारात्मकता के अनुसार एक संख्या (भावना) को निर्दिष्ट करना होता है। भावना विश्लेषण का एक अधिक उन्नत संस्करण **पहलू-आधारित भावना विश्लेषण** (ABSA) है, जहां हम भावना को पूरे वाक्य के बजाय उसके विभिन्न भागों (पहलुओं) को निर्दिष्ट करते हैं, जैसे *इस रेस्तरां में, मुझे खाना पसंद आया, लेकिन माहौल भयानक था*। -* **नामित इकाई पहचान** (NER) पाठ से कुछ विशिष्ट इकाइयों को निकालने की समस्या को संदर्भित करता है। उदाहरण के लिए, हमें यह समझने की आवश्यकता हो सकती है कि वाक्यांश *मुझे कल पेरिस जाना है* में *कल* शब्द DATE को संदर्भित करता है, और *पेरिस* एक LOCATION है। -* **कीवर्ड निष्कर्षण** NER के समान है, लेकिन इसमें हमें वाक्य के अर्थ के लिए महत्वपूर्ण शब्दों को स्वचालित रूप से निकालना होता है, बिना विशिष्ट इकाई प्रकारों के लिए पूर्व-प्रशिक्षण के। -* **पाठ क्लस्टरिंग** तब उपयोगी हो सकती है जब हम समान वाक्यों को एक साथ समूहित करना चाहते हैं, जैसे तकनीकी सहायता वार्तालापों में समान अनुरोध। -* **प्रश्न उत्तर देना** एक मॉडल की क्षमता को संदर्भित करता है कि वह किसी विशिष्ट प्रश्न का उत्तर दे सके। मॉडल को एक पाठ अंश और एक प्रश्न इनपुट के रूप में प्राप्त होता है, और इसे पाठ में उस स्थान को प्रदान करना होता है जहां प्रश्न का उत्तर निहित है (या, कभी-कभी, उत्तर पाठ उत्पन्न करना होता है)। -* **पाठ निर्माण** एक मॉडल की नई पाठ उत्पन्न करने की क्षमता है। इसे एक वर्गीकरण कार्य के रूप में माना जा सकता है जो कुछ *पाठ संकेत* के आधार पर अगला अक्षर/शब्द भविष्यवाणी करता है। उन्नत पाठ निर्माण मॉडल, जैसे GPT-3, [प्रॉम्प्ट प्रोग्रामिंग](https://towardsdatascience.com/software-3-0-how-prompting-will-change-the-rules-of-the-game-a982fbfe1e0) या [प्रॉम्प्ट इंजीनियरिंग](https://medium.com/swlh/openai-gpt-3-and-prompt-engineering-dcdc2c5fcd29) नामक तकनीक का उपयोग करके अन्य NLP कार्यों जैसे वर्गीकरण को हल करने में सक्षम हैं। -* **पाठ सारांशण** एक तकनीक है जब हम चाहते हैं कि कंप्यूटर लंबे पाठ को "पढ़े" और उसे कुछ वाक्यों में संक्षेपित करे। -* **मशीन अनुवाद** को एक भाषा में पाठ को समझने और दूसरी भाषा में पाठ उत्पन्न करने के संयोजन के रूप में देखा जा सकता है। +* **टेक्स्ट वर्गीकरण** एक सामान्य वर्गीकरण समस्या है जो पाठ अनुक्रमों से संबंधित है। उदाहरणों में ईमेल संदेशों को स्पैम बनाम नॉन-स्पैम के रूप में वर्गीकृत करना, या लेखों को खेल, व्यवसाय, राजनीति आदि के रूप में वर्गीकृत करना शामिल है। इसके अलावा, चैट बॉट विकसित करते समय, हमें अक्सर यह समझने की जरूरत होती है कि उपयोगकर्ता क्या कहना चाहता था -- इस मामले में हम **इरादा वर्गीकरण** से निपट रहे हैं। अक्सर, इरादा वर्गीकरण में हमें कई श्रेणियों से निपटना पड़ता है। +* **भावना विश्लेषण** एक सामान्य प्रतिगमन समस्या है, जहाँ हमें एक संख्या (भावना) निर्दिष्ट करनी होती है जो यह बताती है कि वाक्य का अर्थ कितना सकारात्मक/नकारात्मक है। भावना विश्लेषण का एक उन्नत संस्करण है **पहलू-आधारित भावना विश्लेषण** (ABSA), जहाँ हम भावना को पूरे वाक्य के बजाय इसके विभिन्न हिस्सों (पहलुओं) को निर्दिष्ट करते हैं, जैसे *इस रेस्तरां में, मुझे भोजन पसंद आया, लेकिन वातावरण भयानक था*। +* **नामित इकाई मान्यता** (NER) पाठ से कुछ विशिष्ट इकाइयों को निकालने की समस्या को संदर्भित करता है। उदाहरण के लिए, हमें यह समझना पड़ सकता है कि वाक्यांश *मुझे कल पेरिस जाना है* में शब्द *कल* DATE (तिथि) को संदर्भित करता है, और *पेरिस* LOCATION (स्थान) है। +* **कीवर्ड निष्कर्षण** NER के समान है, लेकिन इसमें हमें बिना किसी विशिष्ट इकाई प्रकार के लिए पूर्व-प्रशिक्षण के, वाक्य के अर्थ के लिए महत्वपूर्ण शब्दों को स्वचालित रूप से निकालना होता है। +* **टेक्स्ट क्लस्टरिंग** तब उपयोगी हो सकती है जब हम समान वाक्यों को समूहबद्ध करना चाहते हैं, उदाहरण के लिए, तकनीकी सहायता वार्तालापों में समान अनुरोध। +* **प्रश्न-उत्तर** किसी विशिष्ट प्रश्न का उत्तर देने की मॉडल की क्षमता को संदर्भित करता है। मॉडल को एक पाठ अंश और एक प्रश्न इनपुट के रूप में प्राप्त होता है, और इसे उस पाठ में वह स्थान बताना होता है जहाँ प्रश्न का उत्तर निहित है (या कभी-कभी उत्तर पाठ जनरेट करना होता है)। +* **टेक्स्ट जनरेशन** एक मॉडल की नई टेक्स्ट बनाने की क्षमता है। इसे एक वर्गीकरण कार्य माना जा सकता है जो कुछ *टेक्स्ट प्रॉम्प्ट* के आधार पर अगला अक्षर/शब्द भविष्यवाणी करता है। उन्नत टेक्स्ट जनरेशन मॉडल, जैसे GPT-3, अन्य NLP कार्यों को भी हल करने में सक्षम हैं, जैसे वर्गीकरण, जो [प्रॉम्प्ट प्रोग्रामिंग](https://towardsdatascience.com/software-3-0-how-prompting-will-change-the-rules-of-the-game-a982fbfe1e0) या [प्रॉम्प्ट इंजीनियरिंग](https://medium.com/swlh/openai-gpt-3-and-prompt-engineering-dcdc2c5fcd29) नामक तकनीक का उपयोग करते हैं। +* **टेक्स्ट सारांशण** एक तकनीक है जब हम चाहते हैं कि कंप्यूटर लंबा पाठ "पढ़े" और उसे कुछ वाक्यों में सारांशित करे। +* **मशीन अनुवाद** को एक भाषा में पाठ को समझने और दूसरी भाषा में पाठ बनाने के संयोजन के रूप में देखा जा सकता है। -शुरुआत में, अधिकांश NLP कार्य पारंपरिक तरीकों जैसे व्याकरण का उपयोग करके हल किए गए थे। उदाहरण के लिए, मशीन अनुवाद में पार्सर का उपयोग प्रारंभिक वाक्य को एक सिंटैक्स ट्री में बदलने के लिए किया जाता था, फिर उच्च-स्तरीय अर्थ संरचनाओं को वाक्य के अर्थ का प्रतिनिधित्व करने के लिए निकाला जाता था, और इस अर्थ और लक्ष्य भाषा के व्याकरण के आधार पर परिणाम उत्पन्न किया जाता था। आजकल, कई NLP कार्य न्यूरल नेटवर्क का उपयोग करके अधिक प्रभावी ढंग से हल किए जाते हैं। +प्रारंभ में, अधिकांश NLP कार्य पारंपरिक विधियों जैसे व्याकरणों का उपयोग करके हल किए जाते थे। उदाहरण के लिए, मशीन अनुवाद में पार्सर का उपयोग प्रारंभिक वाक्य को एक वाक्यविन्यास वृक्ष में बदलने के लिए किया जाता था, फिर वाक्य का अर्थ प्रस्तुत करने के लिए उच्च स्तरीय अर्थसूचक संरचनाओं को निकाला जाता था, और इस अर्थ और लक्ष्य भाषा के व्याकरण के आधार पर परिणाम उत्पन्न होता था। आजकल, कई NLP कार्य न्यूरल नेटवर्क का उपयोग करके अधिक प्रभावी ढंग से हल किए जाते हैं। -> कई पारंपरिक NLP विधियां [नेचुरल लैंग्वेज प्रोसेसिंग टूलकिट (NLTK)](https://www.nltk.org) पायथन लाइब्रेरी में लागू की गई हैं। एक शानदार [NLTK बुक](https://www.nltk.org/book/) ऑनलाइन उपलब्ध है जो बताती है कि विभिन्न NLP कार्यों को NLTK का उपयोग करके कैसे हल किया जा सकता है। +> कई पारंपरिक NLP विधियाँ [Natural Language Processing Toolkit (NLTK)](https://www.nltk.org) पायथन पुस्तकालय में लागू होती हैं। वहाँ एक उत्कृष्ट [NLTK पुस्तक](https://www.nltk.org/book/) ऑनलाइन उपलब्ध है जो विभिन्न NLP कार्यों को NLTK का उपयोग करके कैसे हल किया जा सकता है, यह बताती है। -हमारे पाठ्यक्रम में, हम मुख्य रूप से NLP के लिए न्यूरल नेटवर्क का उपयोग करने पर ध्यान केंद्रित करेंगे, और जहां आवश्यक होगा, वहां NLTK का उपयोग करेंगे। +हमारे कोर्स में, हम मुख्य रूप से NLP के लिए न्यूरल नेटवर्क के उपयोग पर ध्यान केंद्रित करेंगे, और जहां आवश्यक होगा वहां NLTK का उपयोग करेंगे। -हमने पहले ही तालिका डेटा और छवियों से निपटने के लिए न्यूरल नेटवर्क का उपयोग करना सीखा है। उन प्रकार के डेटा और पाठ के बीच मुख्य अंतर यह है कि पाठ एक परिवर्तनीय लंबाई का अनुक्रम है, जबकि छवियों के मामले में इनपुट आकार पहले से ज्ञात होता है। जबकि कन्वोल्यूशनल नेटवर्क इनपुट डेटा से पैटर्न निकाल सकते हैं, पाठ में पैटर्न अधिक जटिल होते हैं। उदाहरण के लिए, हमारे पास विषय से अलग नकारात्मकता हो सकती है, जो कई शब्दों के लिए मनमाना हो सकता है (जैसे *मुझे संतरे पसंद नहीं हैं* बनाम *मुझे वे बड़े रंगीन स्वादिष्ट संतरे पसंद नहीं हैं*), और इसे अभी भी एक पैटर्न के रूप में व्याख्या किया जाना चाहिए। इस प्रकार, भाषा को संभालने के लिए हमें नए न्यूरल नेटवर्क प्रकारों को पेश करने की आवश्यकता है, जैसे *रिकरेंट नेटवर्क* और *ट्रांसफॉर्मर्स*। +हमने पहले ही न्यूरल नेटवर्क के उपयोग के बारे में सीखा है, जो तालिकाबद्ध डेटा और छवियों के साथ काम करते हैं। उन डेटा प्रकारों और टेक्स्ट के बीच मुख्य अंतर यह है कि टेक्स्ट एक चर लंबाई का अनुक्रम है, जबकि छवियों के मामले में इनपुट आकार पहले से जाना जाता है। जबकि कन्वोल्यूशनल नेटवर्क इनपुट डेटा से पैटर्न निकाल सकते हैं, टेक्स्ट में पैटर्न अधिक जटिल होते हैं। उदाहरण के लिए, नकारात्मकता को विषय से अलग किया जा सकता है, जो कई शब्दों के लिए मनमाना हो सकता है (जैसे *मुझे संतरे पसंद नहीं हैं*, बनाम *मुझे वे बड़े रंगीन स्वादिष्ट संतरे पसंद नहीं हैं*), और इसे अभी भी एक ही पैटर्न के रूप में समझना चाहिए। इसलिए, भाषा को संभालने के लिए हमें नए प्रकार के न्यूरल नेटवर्क, जैसे *पुनरावर्ती नेटवर्क* और *ट्रांसफॉर्मर* पेश करने की आवश्यकता है। -## लाइब्रेरी इंस्टॉल करें +## लाइब्रेरी स्थापित करें -यदि आप इस पाठ्यक्रम को चलाने के लिए स्थानीय पायथन इंस्टॉलेशन का उपयोग कर रहे हैं, तो आपको NLP के लिए आवश्यक सभी लाइब्रेरी निम्नलिखित कमांड का उपयोग करके इंस्टॉल करनी पड़ सकती हैं: +यदि आप इस कोर्स को चलाने के लिए स्थानीय पायथन इंस्टॉलेशन का उपयोग कर रहे हैं, तो आपको NLP के लिए सभी आवश्यक लाइब्रेरी निम्नलिखित कमांड्स का उपयोग करके स्थापित करनी पड़ सकती हैं: -**PyTorch के लिए** +**पायटॉर्च के लिए** ```bash -pip install -r requirements-torch.txt -``` -**TensorFlow के लिए** +pip install -r requirements-pytorch.txt +``` +**टेंसर्फ्लो के लिए** ```bash pip install -r requirements-tf.txt -``` +``` -> आप [Microsoft Learn](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-tensorflow/?WT.mc_id=academic-77998-cacaste) पर TensorFlow के साथ NLP आज़मा सकते हैं। +> आप [Microsoft Learn](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-tensorflow/?WT.mc_id=academic-77998-cacaste) पर TensorFlow के साथ NLP आज़मा सकते हैं। ## GPU चेतावनी -इस खंड में, कुछ उदाहरणों में हम काफी बड़े मॉडल का प्रशिक्षण करेंगे। -* **GPU-सक्षम कंप्यूटर का उपयोग करें**: बड़े मॉडलों के साथ काम करते समय प्रतीक्षा समय को कम करने के लिए अपने नोटबुक को GPU-सक्षम कंप्यूटर पर चलाना उचित है। -* **GPU मेमोरी सीमाएं**: GPU पर चलने से ऐसी स्थितियां उत्पन्न हो सकती हैं जहां आप GPU मेमोरी से बाहर हो जाएं, विशेष रूप से बड़े मॉडलों को प्रशिक्षित करते समय। -* **GPU मेमोरी खपत**: प्रशिक्षण के दौरान GPU मेमोरी की खपत विभिन्न कारकों पर निर्भर करती है, जिसमें मिनीबैच का आकार शामिल है। -* **मिनीबैच आकार कम करें**: यदि आपको GPU मेमोरी समस्याओं का सामना करना पड़ता है, तो संभावित समाधान के रूप में अपने कोड में मिनीबैच आकार को कम करने पर विचार करें। -* **TensorFlow GPU मेमोरी रिलीज़**: TensorFlow के पुराने संस्करण एक ही पायथन कर्नेल में कई मॉडलों को प्रशिक्षित करते समय GPU मेमोरी को सही ढंग से रिलीज़ नहीं कर सकते। GPU मेमोरी उपयोग को प्रभावी ढंग से प्रबंधित करने के लिए, आप TensorFlow को केवल आवश्यकतानुसार GPU मेमोरी आवंटित करने के लिए कॉन्फ़िगर कर सकते हैं। -* **कोड शामिल करें**: TensorFlow को केवल आवश्यकतानुसार GPU मेमोरी आवंटन बढ़ाने के लिए, अपने नोटबुक में निम्नलिखित कोड शामिल करें: +इस खंड में, कुछ उदाहरणों में हम काफी बड़े मॉडल प्रशिक्षित करेंगे। +* **GPU सक्षम कंप्यूटर का उपयोग करें**: बड़े मॉडल के साथ काम करते समय प्रतीक्षा समय कम करने के लिए अपनी नोटबुक्स को GPU सक्षम कंप्यूटर पर चलाना सलाह दी जाती है। +* **GPU मेमोरी प्रतिबंध**: GPU पर चलाने से ऐसी स्थिति हो सकती है जहां आपके GPU की मेमोरी समाप्त हो जाए, विशेष रूप से बड़े मॉडल प्रशिक्षण के दौरान। +* **GPU मेमोरी उपभोग**: प्रशिक्षण के दौरान उपयोग की गई GPU मेमोरी की मात्रा विभिन्न कारकों पर निर्भर करती है, जिनमें मिनीबैच का आकार शामिल है। +* **मिनीबैच आकार कम करें**: यदि आपको GPU मेमोरी समस्याएं आती हैं, तो समाधान के रूप में अपने कोड में मिनीबैच आकार कम करने पर विचार करें। +* **टेंसर्फ्लो GPU मेमोरी रिलीज़**: पुराने संस्करण के टेंसर्फ्लो एक पायथन कर्नेल में एक से अधिक मॉडल प्रशिक्षण के दौरान GPU मेमोरी सही ढंग से रिलीज़ नहीं कर सकते। GPU मेमोरी का प्रभावी प्रबंधन करने के लिए, आप टेंसर्फ्लो को केवल आवश्यकतानुसार GPU मेमोरी आवंटित करने के लिए कॉन्फ़िगर कर सकते हैं। +* **कोड शामिल करना**: अपनी नोटबुक्स में टेंसर्फ्लो को केवल आवश्यकतानुसार GPU मेमोरी आवंटित करने के लिए सेट करने के लिए निम्नलिखित कोड शामिल करें: ```python physical_devices = tf.config.list_physical_devices('GPU') if len(physical_devices)>0: tf.config.experimental.set_memory_growth(physical_devices[0], True) -``` +``` -यदि आप क्लासिक ML दृष्टिकोण से NLP सीखने में रुचि रखते हैं, तो [इस पाठों के संग्रह](https://github.com/microsoft/ML-For-Beginners/tree/main/6-NLP) पर जाएं। +यदि आप क्लासिक मशीन लर्निंग दृष्टिकोण से NLP सीखने में रुचि रखते हैं, तो [यह पाठों का सेट](https://github.com/microsoft/ML-For-Beginners/tree/main/6-NLP) देखें। ## इस खंड में -इस खंड में हम निम्नलिखित के बारे में जानेंगे: +इस खंड में हम निम्नलिखित के बारे में सीखेंगे: -* [पाठ को टेन्सर के रूप में प्रस्तुत करना](13-TextRep/README.md) -* [शब्द एम्बेडिंग्स](14-Emdeddings/README.md) -* [भाषा मॉडलिंग](15-LanguageModeling/README.md) -* [रिकरेंट न्यूरल नेटवर्क](16-RNN/README.md) -* [जनरेटिव नेटवर्क](17-GenerativeNetworks/README.md) -* [ट्रांसफॉर्मर्स](18-Transformers/README.md) +* [टेक्स्ट को टेंसर के रूप में प्रस्तुत करना](13-TextRep/README.md) +* [वर्ड एम्बेडिंग्स](14-Emdeddings/README.md) +* [भाषा मॉडलिंग](15-LanguageModeling/README.md) +* [पुनरावर्ती न्यूरल नेटवर्क](16-RNN/README.md) +* [जनरेटिव नेटवर्क](17-GenerativeNetworks/README.md) +* [ट्रांसफॉर्मर्स](18-Transformers/README.md) -**अस्वीकरण**: -यह दस्तावेज़ 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/hi/lessons/6-Other/23-MultiagentSystems/README.md b/translations/hi/lessons/6-Other/23-MultiagentSystems/README.md index c39cd1a9..63d71908 100644 --- a/translations/hi/lessons/6-Other/23-MultiagentSystems/README.md +++ b/translations/hi/lessons/6-Other/23-MultiagentSystems/README.md @@ -1,38 +1,38 @@ -# मल्टी-एजेंट सिस्टम्स +# मल्टी-एजेंट सिस्टम -बुद्धिमत्ता प्राप्त करने के संभावित तरीकों में से एक है **उभरता हुआ** (या **सिनर्जेटिक**) दृष्टिकोण, जो इस तथ्य पर आधारित है कि कई अपेक्षाकृत सरल एजेंटों का संयुक्त व्यवहार पूरे सिस्टम के अधिक जटिल (या बुद्धिमान) व्यवहार का परिणाम हो सकता है। सैद्धांतिक रूप से, यह [सामूहिक बुद्धिमत्ता](https://en.wikipedia.org/wiki/Collective_intelligence), [उभरतावाद](https://en.wikipedia.org/wiki/Global_brain) और [विकासवादी साइबरनेटिक्स](https://en.wikipedia.org/wiki/Global_brain) के सिद्धांतों पर आधारित है, जो कहते हैं कि उच्च-स्तरीय सिस्टम कुछ अतिरिक्त मूल्य प्राप्त करते हैं जब उन्हें सही तरीके से निम्न-स्तरीय सिस्टम से जोड़ा जाता है (जिसे *मेटासिस्टम ट्रांज़िशन का सिद्धांत* कहा जाता है)। +बुद्धिमत्ता हासिल करने के संभावित तरीकों में से एक तथाकथित **उभरने वाला** (या **सिनर्जेटिक**) दृष्टिकोण है, जो इस तथ्य पर आधारित है कि कई अपेक्षाकृत साधारण एजेंटों का सम्मिलित व्यवहार पूरे सिस्टम के अधिक जटिल (या बुद्धिमान) व्यवहार का परिणाम हो सकता है। सैद्धांतिक रूप से, यह [सामूहिक बुद्धिमत्ता](https://en.wikipedia.org/wiki/Collective_intelligence), [एमर्जेंटिज़्म](https://en.wikipedia.org/wiki/Global_brain) और [एवोल्यूशनरी सायबरनेटिक्स](https://en.wikipedia.org/wiki/Global_brain) के सिद्धांतों पर आधारित है, जो कहते हैं कि उच्च-स्तरीय सिस्टम निम्न-स्तरीय सिस्टमों से उचित रूप से संयोजित होने पर किसी प्रकार का अतिरिक्त मूल्य प्राप्त करते हैं (जिसे *मेटासिस्टम संक्रमण का सिद्धांत* कहा जाता है)। ## [प्री-लेक्चर क्विज़](https://ff-quizzes.netlify.app/en/ai/quiz/45) -**मल्टी-एजेंट सिस्टम्स** की दिशा 1990 के दशक में इंटरनेट और वितरित सिस्टम्स के विकास के जवाब में AI में उभरी। AI के एक क्लासिकल टेक्स्टबुक, [Artificial Intelligence: A Modern Approach](https://en.wikipedia.org/wiki/Artificial_Intelligence:_A_Modern_Approach), मल्टी-एजेंट सिस्टम्स के दृष्टिकोण से क्लासिकल AI को देखता है। +**मल्टी-एजेंट सिस्टम** की दिशा 1990 के दशक में AI में इंटरनेट और वितरित प्रणालियों की वृद्धि के जवाब में उभरी। एक क्लासिक AI पाठ्यपुस्तक, [Artificial Intelligence: A Modern Approach](https://en.wikipedia.org/wiki/Artificial_Intelligence:_A_Modern_Approach), मल्टी-एजेंट सिस्टम के दृष्टिकोण से क्लासिक AI के दृष्टिकोण पर केंद्रित है। -मल्टी-एजेंट दृष्टिकोण का केंद्रबिंदु **एजेंट** की अवधारणा है - एक इकाई जो किसी **पर्यावरण** में रहती है, जिसे वह देख सकती है और उस पर कार्य कर सकती है। यह एक बहुत व्यापक परिभाषा है, और एजेंटों के कई प्रकार और वर्गीकरण हो सकते हैं: +मल्टी-एजेंट दृष्टिकोण के केंद्र में **एजेंट** की अवधारणा है - एक ऐसी इकाई जो किसी **पर्यावरण** में रहती है, जिसे वह अनुभव कर सकती है और उस पर कार्य कर सकती है। यह एक बहुत व्यापक परिभाषा है, और एजेंटों के कई विभिन्न प्रकार और वर्गीकरण हो सकते हैं: -* उनकी तर्क करने की क्षमता के आधार पर: - - **प्रतिक्रियाशील** एजेंट आमतौर पर सरल अनुरोध-प्रतिक्रिया प्रकार के व्यवहार रखते हैं - - **विचारशील** एजेंट कुछ प्रकार की तार्किक तर्क और/या योजना क्षमताओं का उपयोग करते हैं -* उस स्थान के आधार पर जहां एजेंट अपना कोड निष्पादित करता है: - - **स्थिर** एजेंट एक समर्पित नेटवर्क नोड पर काम करते हैं - - **मोबाइल** एजेंट अपना कोड नेटवर्क नोड्स के बीच स्थानांतरित कर सकते हैं +* उनके तर्क करने की क्षमता के आधार पर: + - **रिएक्टिव** एजेंट आमतौर पर साधारण अनुरोध-प्रतिक्रिया प्रकार के व्यवहार करते हैं + - **डिलिब्रेटिव** एजेंट किसी प्रकार के तर्क और/या योजना बनाने की क्षमताओं का उपयोग करते हैं +* एजेंट के कोड निष्पादित होने के स्थान के आधार पर: + - **स्थैतिक** एजेंट एक समर्पित नेटवर्क नोड पर काम करते हैं + - **मोबाइल** एजेंट अपने कोड को नेटवर्क नोड्स के बीच स्थानांतरित कर सकते हैं * उनके व्यवहार के आधार पर: - - **निष्क्रिय एजेंट** के पास विशिष्ट लक्ष्य नहीं होते। ऐसे एजेंट बाहरी उत्तेजनाओं पर प्रतिक्रिया कर सकते हैं, लेकिन स्वयं कोई कार्रवाई शुरू नहीं करेंगे। - - **सक्रिय एजेंट** के पास कुछ लक्ष्य होते हैं जिन्हें वे प्राप्त करने का प्रयास करते हैं - - **संज्ञानात्मक एजेंट** जटिल योजना और तर्क शामिल करते हैं + - **निष्क्रिय एजेंट** के पास विशिष्ट लक्ष्य नहीं होते। ऐसे एजेंट बाहरी उत्तेजनाओं पर प्रतिक्रिया कर सकते हैं, लेकिन स्वयं कोई क्रियाएं शुरू नहीं करेंगे। + - **सक्रिय एजेंट** के पास कुछ लक्ष्य होते हैं जिन्हें वह प्राप्त करने का प्रयास करता है + - **संज्ञानात्मक एजेंट** जटिल योजना और तर्क में शामिल होते हैं -आजकल मल्टी-एजेंट सिस्टम्स कई अनुप्रयोगों में उपयोग किए जाते हैं: +मल्टी-एजेंट सिस्टम आजकल कई अनुप्रयोगों में उपयोग किए जाते हैं: -* गेम्स में, कई गैर-खिलाड़ी पात्र कुछ प्रकार की AI का उपयोग करते हैं और उन्हें बुद्धिमान एजेंट माना जा सकता है -* वीडियो उत्पादन में, भीड़ वाले जटिल 3D दृश्यों को रेंडर करना आमतौर पर मल्टी-एजेंट सिमुलेशन का उपयोग करके किया जाता है -* सिस्टम मॉडलिंग में, मल्टी-एजेंट दृष्टिकोण का उपयोग जटिल मॉडल के व्यवहार का अनुकरण करने के लिए किया जाता है। उदाहरण के लिए, मल्टी-एजेंट दृष्टिकोण का उपयोग COVID-19 बीमारी के वैश्विक प्रसार की भविष्यवाणी करने के लिए सफलतापूर्वक किया गया है। इसी दृष्टिकोण का उपयोग शहर में यातायात को मॉडल करने और यातायात नियमों में बदलाव पर उसकी प्रतिक्रिया देखने के लिए किया जा सकता है। -* जटिल स्वचालन सिस्टम्स में, प्रत्येक डिवाइस एक स्वतंत्र एजेंट के रूप में कार्य कर सकता है, जिससे पूरा सिस्टम कम मोनोलिथिक और अधिक मजबूत बनता है। +* खेलों में, कई नॉन-प्लेयर कैरेक्टर किसी न किसी प्रकार की AI का उपयोग करते हैं और बुद्धिमान एजेंट माने जाते हैं +* वीडियो उत्पादन में, भीड़ वाले जटिल 3D दृश्य को रेंडर करना आमतौर पर मल्टी-एजेंट सिमुलेशन का उपयोग करके किया जाता है +* सिस्टम मॉडलिंग में, मल्टी-एजेंट दृष्टिकोण का उपयोग जटिल मॉडल के व्यवहार की नकल के लिए किया जाता है। उदाहरण के लिए, COVID-19 बीमारी के विश्वव्यापी प्रसार की भविष्यवाणी के लिए मल्टी-एजेंट दृष्टिकोण का सफलतापूर्वक उपयोग किया गया है। इसी तरह का दृष्टिकोण शहर में ट्रैफिक का मॉडल बनाने और देखने के लिए उपयोग किया जा सकता है कि यह ट्रैफिक नियमों में परिवर्तनों पर कैसे प्रतिक्रिया करता है। +* जटिल ऑटोमेशन प्रणालियों में, प्रत्येक उपकरण स्वतंत्र एजेंट के रूप में कार्य कर सकता है, जिससे पूरा सिस्टम कम कठोर और अधिक मजबूत हो जाता है। -हम मल्टी-एजेंट सिस्टम्स में गहराई तक जाने में ज्यादा समय नहीं लगाएंगे, लेकिन **मल्टी-एजेंट मॉडलिंग** के एक उदाहरण पर विचार करेंगे। +हम मल्टी-एजेंट सिस्टम पर ज्यादा गहराई से समय नहीं बिताएंगे, लेकिन **मल्टी-एजेंट मॉडलिंग** का एक उदाहरण देखेंगे। ## नेटलोगो -[NetLogo](https://ccl.northwestern.edu/netlogo/) एक मल्टी-एजेंट मॉडलिंग वातावरण है जो [Logo](https://en.wikipedia.org/wiki/Logo_(programming_language)) प्रोग्रामिंग भाषा के संशोधित संस्करण पर आधारित है। यह भाषा बच्चों को प्रोग्रामिंग अवधारणाओं सिखाने के लिए विकसित की गई थी, और यह आपको **टर्टल** नामक एक एजेंट को नियंत्रित करने की अनुमति देती है, जो चलते समय पीछे एक निशान छोड़ता है। यह जटिल ज्यामितीय आकृतियों को बनाने की अनुमति देता है, जो एजेंट के व्यवहार को समझने का एक बहुत ही दृश्यात्मक तरीका है। +[NetLogo](https://ccl.northwestern.edu/netlogo/) एक मल्टी-एजेंट मॉडलिंग वातावरण है जो [Logo](https://en.wikipedia.org/wiki/Logo_(programming_language)) प्रोग्रामिंग भाषा के संशोधित संस्करण पर आधारित है। यह भाषा बच्चों को प्रोग्रामिंग अवधारणाएँ सिखाने के लिए विकसित की गई थी, और यह आपको एक एजेंट जिसे **टर्टल** कहा जाता है, को नियंत्रित करने की अनुमति देती है, जो पीछे निशान छोड़ते हुए चल सकता है। यह जटिल ज्यामितीय आकृतियाँ बनाने की अनुमति देता है, जो एजेंट के व्यवहार को समझने का एक बहुत ही दृश्य तरीका है। -NetLogo में, हम `create-turtles` कमांड का उपयोग करके कई टर्टल्स बना सकते हैं। फिर हम सभी टर्टल्स को कुछ क्रियाएं करने का आदेश दे सकते हैं (नीचे दिए गए उदाहरण में - 10 पॉइंट आगे बढ़ें): +NetLogo में, हम `create-turtles` कमांड का उपयोग करके कई टर्टल बना सकते हैं। फिर हम सभी टर्टल्स को कुछ क्रियाएं करने का आदेश दे सकते हैं (नीचे के उदाहरण में - 10 प्वाइंट आगे बढ़ना): ``` create-turtles 10 @@ -41,39 +41,39 @@ ask turtles [ ] ``` -बेशक, यह दिलचस्प नहीं है जब सभी टर्टल्स एक ही काम करते हैं, इसलिए हम `ask` का उपयोग करके टर्टल्स के समूहों को आदेश दे सकते हैं, जैसे कि वे जो किसी निश्चित बिंदु के आसपास हैं। हम `breed [cats cat]` कमांड का उपयोग करके विभिन्न *प्रजातियों* के टर्टल्स भी बना सकते हैं। यहां `cat` प्रजाति का नाम है, और हमें एकवचन और बहुवचन दोनों शब्द निर्दिष्ट करने की आवश्यकता है, क्योंकि विभिन्न कमांड स्पष्टता के लिए विभिन्न रूपों का उपयोग करते हैं। +बेशक, जब सभी टर्टल्स एक ही काम करते हैं तो यह रोचक नहीं होता, इसलिए हम टर्टल्स के समूहों को `ask` कर सकते हैं, उदाहरण के लिए जो एक निश्चित बिंदु के आसपास हैं। हम `breed [cats cat]` कमांड का उपयोग करके विभिन्न *जातियों* के टर्टल भी बना सकते हैं। यहाँ `cat` एक जाति का नाम है, और हमें दोनों बहुवचन और एकवचन शब्द निर्दिष्ट करने की आवश्यकता होती है, क्योंकि विभिन्न कमांड्स स्पष्टता के लिए अलग-अलग रूपों का उपयोग करते हैं। -> ✅ हम NetLogo भाषा सीखने में गहराई तक नहीं जाएंगे - यदि आप अधिक जानने में रुचि रखते हैं तो आप शानदार [Beginner's Interactive NetLogo Dictionary](https://ccl.northwestern.edu/netlogo/bind/) संसाधन पर जा सकते हैं। +> ✅ हम NetLogo भाषा सीखने में बहुत गहराई में नहीं जाएंगे - अगर आप अधिक सीखने में रुचि रखते हैं तो आप उत्कृष्ट [Beginner's Interactive NetLogo Dictionary](https://ccl.northwestern.edu/netlogo/bind/) संसाधन देख सकते हैं। -आप [डाउनलोड](https://ccl.northwestern.edu/netlogo/download.shtml) करके NetLogo को आज़मा सकते हैं। +आप NetLogo को [डाउनलोड](https://ccl.northwestern.edu/netlogo/download.shtml) कर सकते हैं और इसे आजमा सकते हैं। -### मॉडल्स लाइब्रेरी +### मॉडल लाइब्रेरी -NetLogo की एक शानदार बात यह है कि इसमें काम करने वाले मॉडलों की एक लाइब्रेरी है जिसे आप आज़मा सकते हैं। **File → Models Library** पर जाएं, और आपके पास चुनने के लिए मॉडलों की कई श्रेणियां हैं। +NetLogo की एक अच्छी बात यह है कि इसमें कई काम करने वाले मॉडल की लाइब्रेरी होती है जिसे आप आज़मा सकते हैं। **File → Models Library** पर जाएं, और आपके पास चुनने के लिए कई मॉडल श्रेणियां होंगी। NetLogo Models Library -> दिमित्री सोश्निकोव द्वारा मॉडल्स लाइब्रेरी का स्क्रीनशॉट +> दिमित्रि सोश्निकोव द्वारा मॉडल लाइब्रेरी का स्क्रीनशॉट आप एक मॉडल खोल सकते हैं, उदाहरण के लिए **Biology → Flocking**। ### मुख्य सिद्धांत -मॉडल खोलने के बाद, आप मुख्य NetLogo स्क्रीन पर ले जाए जाते हैं। यहां एक नमूना मॉडल है जो सीमित संसाधनों (घास) को ध्यान में रखते हुए भेड़ियों और भेड़ों की आबादी का वर्णन करता है। +मॉडल खोलने के बाद, आप मुख्य NetLogo स्क्रीन पर ले जाए जाते हैं। यहाँ एक नमूना मॉडल है जो भेड़ियों और भेड़ों की आबादी का वर्णन करता है, सीमित संसाधनों (घास) के साथ। ![NetLogo Main Screen](../../../../../translated_images/hi/NetLogo-Main.32653711ec1a01b3.webp) -> दिमित्री सोश्निकोव द्वारा स्क्रीनशॉट +> दिमित्रि सोश्निकोव द्वारा स्क्रीनशॉट इस स्क्रीन पर, आप देख सकते हैं: * **इंटरफेस** सेक्शन जिसमें शामिल हैं: - - मुख्य क्षेत्र, जहां सभी एजेंट रहते हैं - - विभिन्न नियंत्रण: बटन, स्लाइडर्स, आदि। - - ग्राफ़ जो आप सिमुलेशन के पैरामीटर प्रदर्शित करने के लिए उपयोग कर सकते हैं -* **कोड** टैब जिसमें संपादक होता है, जहां आप NetLogo प्रोग्राम टाइप कर सकते हैं + - मुख्य क्षेत्र, जहाँ सभी एजेंट रहते हैं + - विभिन्न नियंत्रण: बटन, स्लाइडर, आदि + - ग्राफ़ जो आप सिमुलेशन के पैरामीटर दिखाने के लिए उपयोग कर सकते हैं +* **कोड** टैब जिसमें संपादक होता है, जहाँ आप NetLogo प्रोग्राम टाइप कर सकते हैं -अधिकांश मामलों में, इंटरफेस में एक **Setup** बटन होता है, जो सिमुलेशन स्थिति को प्रारंभ करता है, और एक **Go** बटन होता है जो निष्पादन शुरू करता है। इन्हें कोड में संबंधित हैंडलर्स द्वारा संभाला जाता है जो इस प्रकार दिखते हैं: +अधिकांश मामलों में, इंटरफेस में एक **Setup** बटन होता है, जो सिमुलेशन की स्थिति प्रारंभ करता है, और एक **Go** बटन जो निष्पादन शुरू करता है। ये संबंधित कोड हैंडलर्स द्वारा नियंत्रित होते हैं, जो इस प्रकार दिखते हैं: ``` to go [ @@ -83,15 +83,77 @@ to go [ NetLogo की दुनिया निम्नलिखित वस्तुओं से बनी होती है: -* **एजेंट्स** (टर्टल्स) जो क्षेत्र में घूम सकते हैं और कुछ कर सकते हैं। आप `ask turtles [...]` सिंटैक्स का उपयोग करके एजेंट्स को आदेश देते हैं, और कोष्ठक में कोड सभी एजेंट्स द्वारा *टर्टल मोड* में निष्पादित किया जाता है। -* **पैचेस** क्षेत्र के वर्गाकार क्षेत्र हैं, जिन पर एजेंट्स रहते हैं। आप सभी एजेंट्स को एक ही पैच पर संदर्भित कर सकते हैं, या आप पैच के रंग और कुछ अन्य गुण बदल सकते हैं। आप `ask patches` का उपयोग करके पैचेस को कुछ करने के लिए कह सकते हैं। -* **ऑब्ज़र्वर** एक अद्वितीय एजेंट है जो दुनिया को नियंत्रित करता है। सभी बटन हैंडलर्स *ऑब्ज़र्वर मोड* में निष्पादित होते हैं। +* **एजेंट** (टर्टल) जो क्षेत्र में घूम सकते हैं और कुछ काम कर सकते हैं। आप `ask turtles [...]` सिंटैक्स का उपयोग करके एजेंटों को निर्देश देते हैं, और ब्रैकेट में कोड सभी एजेंट द्वारा *टर्टल मोड* में चलाया जाता है। +* **पैच** क्षेत्र के वर्गाकार क्षेत्र हैं, जिन पर एजेंट रहते हैं। आप एक ही पैच पर सभी एजेंटों को संदर्भित कर सकते हैं, या पैच के रंग और अन्य गुण बदल सकते हैं। आप `ask patches` का उपयोग भी कर सकते हैं। +* **ऑब्ज़र्वर** एक विशिष्ट एजेंट है जो दुनिया को नियंत्रित करता है। सभी बटन हैंडलर्स *ऑब्ज़र्वर मोड* में निष्पादित होते हैं। -> ✅ मल्टी-एजेंट वातावरण की खूबसूरती यह है कि टर्टल मोड या पैच मोड में चलने वाला कोड सभी एजेंट्स द्वारा समानांतर में निष्पादित किया जाता है। इस प्रकार, थोड़ा कोड लिखकर और व्यक्तिगत एजेंट के व्यवहार को प्रोग्राम करके, आप सिमुलेशन सिस्टम के समग्र व्यवहार को जटिल बना सकते हैं। +> ✅ मल्टी-एजेंट पर्यावरण की सुंदरता यह है कि जो कोड टर्टल मोड या पैच मोड में चलता है, वह सभी एजेंटों द्वारा समानांतर में एक साथ निष्पादित होता है। इसलिए, थोड़ा सा कोड लिखकर और व्यक्तिगत एजेंट के व्यवहार को प्रोग्राम करके, आप पूरे सिमुलेशन सिस्टम का जटिल व्यवहार बना सकते हैं। ### फ्लॉकिंग -मल्टी-एजेंट व्यवहार के एक उदाहरण के रूप में, आइए **[Flocking](https://en.wikipedia.org/wiki/Flocking_(behavior))** पर विचार करें। फ्लॉकिंग एक जट +मल्टी-एजेंट व्यवहार के एक उदाहरण के रूप में, चलिए **[Flocking](https://en.wikipedia.org/wiki/Flocking_(behavior))** पर विचार करते हैं। फ्लॉकिंग एक जटिल पैटर्न है जो पक्षियों के झुंड की उड़ान से बहुत मिलता-जुलता है। उन्हें उड़ते हुए देखकर आप सोच सकते हैं कि वे किसी सामूहिक एल्गोरिदम का पालन करते हैं, या उनके पास किसी प्रकार की *सामूहिक बुद्धिमत्ता* है। हालांकि, यह जटिल व्यवहार तब उभरता है जब प्रत्येक व्यक्तिगत एजेंट (इस मामले में, *पक्षी*) केवल अपने निकटवर्ती एजेंटों को देखता है, और तीन सरल नियमों का पालन करता है: + +* **संरेखण** - यह आस-पास के एजेंटों के औसत शीर्षक की ओर मोड़ता है +* **सामंजस्य** - यह पड़ोसियों के औसत स्थान की ओर मोड़ने का प्रयास करता है (*दीर्घ दूरी आकर्षण*) +* **विभाजन** - जब अन्य पक्षियों के बहुत करीब आता है, तो यह दूर जाने का प्रयास करता है (*संक्षिप्त दूरी विकर्षण*) + +आप फ्लॉकिंग उदाहरण चला सकते हैं और व्यवहार देख सकते हैं। आप पैरामीटर भी समायोजित कर सकते हैं, जैसे *विभाजन की डिग्री*, या *देखने की सीमा*, जो परिभाषित करता है कि प्रत्येक पक्षी कितनी दूर देख सकता है। ध्यान दें कि यदि आप देखने की सीमा को 0 तक घटाते हैं, तो सभी पक्षी अंधे हो जाते हैं, और फ्लॉकिंग रुक जाती है। यदि आप विभाजन को 0 कर देते हैं, तो सभी पक्षी एक सीधरे रेखा में इकट्ठे हो जाते हैं। + +> ✅ **कोड** टैब पर जाएं और देखें कि फ्लॉकिंग के तीन नियम (संरेखण, सामंजस्य और विभाजन) कोड में कहाँ लागू किए गए हैं। नोट करें कि हम केवल उन एजेंटों को संबोधित करते हैं जो दृष्टि में हैं। + +### अन्य मॉडल देखने के लिए + +कुछ और दिलचस्प मॉडल हैं जिनके साथ आप प्रयोग कर सकते हैं: + +* **Art → Fireworks** यह दिखाता है कि आतिशबाजी को व्यक्तिगत आग की धाराओं के सामूहिक व्यवहार के रूप में कैसे माना जा सकता है +* **Social Science → Traffic Basic** और **Social Science → Traffic Grid** शहर के ट्रैफिक मॉडल को 1D और 2D ग्रिड में ट्रैफिक लाइट्स के साथ या बिना दिखाते हैं। सिमुलेशन में प्रत्येक कार निम्नलिखित नियमों का पालन करती है: + - यदि उसके सामने जगह खाली है - तो वह तेजी से चलती है (एक निश्चित अधिकतम गति तक) + - यदि वह सामने बाधा देखती है - तो ब्रेक लगाती है (और आप समायोजित कर सकते हैं कि ड्राइवर कितना दूर देख सकता है) +* **Social Science → Party** यह दिखाता है कि कॉकटेल पार्टी के दौरान लोग कैसे समूह बनाते हैं। आप उन पैरामीटरों के संयोजन को खोज सकते हैं जो समूह की खुशी में सबसे तेज वृद्धि की ओर ले जाते हैं। + +जैसा कि आप इन उदाहरणों से देख सकते हैं, मल्टी-एजेंट सिमुलेशन एक जटिल सिस्टम के व्यवहार को समझने का एक उपयोगी तरीका हो सकता है जो समान या समान तर्क का पालन करने वाले व्यक्तियों से बना होता है। इसे कंप्यूटर गेमों में [NPCs](https://en.wikipedia.org/wiki/NPC) जैसे वर्चुअल एजेंटों, या 3D एनिमेटेड दुनिया के एजेंटों को नियंत्रित करने के लिए भी इस्तेमाल किया जा सकता है। + +## डिलिब्रेटिव एजेंट + +ऊपर वर्णित एजेंट बहुत सरल हैं, जो पर्यावरण के परिवर्तनों पर किसी प्रकार के एल्गोरिदम का उपयोग करके प्रतिक्रिया देते हैं। इसलिए इन्हें **रिएक्टिव एजेंट** कहा जाता है। हालांकि, कभी-कभी एजेंट तर्क कर सकते हैं और अपनी क्रिया की योजना बना सकते हैं, जिसे **डिलिब्रेटिव** कहा जाता है। + +एक सामान्य उदाहरण एक व्यक्तिगत एजेंट होगा जो मानव से छुट्टी की यात्रा बुक करने के निर्देश प्राप्त करता है। मान लीजिए कि इंटरनेट पर कई एजेंट हैं जो इसकी मदद कर सकते हैं। इसे तब अन्य एजेंटों से संपर्क करना चाहिए यह देखने के लिए कि कौन-कौन सी उड़ानें उपलब्ध हैं, विभिन्न तिथियों के लिए होटल की कीमतें क्या हैं, और सबसे अच्छी कीमत के लिए बातचीत करनी चाहिए। जब छुट्टी योजना पूरी हो जाए और मालिक द्वारा पुष्टि हो जाए, तो यह बुकिंग के साथ आगे बढ़ सकता है। + +ऐसा करने के लिए, एजेंटों को **संचार** करने की आवश्यकता होती है। सफल संचार के लिए उन्हें चाहिए: + +* कुछ **मानक भाषाएँ ज्ञान के आदान-प्रदान के लिए**, जैसे [Knowledge Interchange Format](https://en.wikipedia.org/wiki/Knowledge_Interchange_Format) (KIF) और [Knowledge Query and Manipulation Language](https://en.wikipedia.org/wiki/Knowledge_Query_and_Manipulation_Language) (KQML)। ये भाषाएँ [Speech Act theory](https://en.wikipedia.org/wiki/Speech_act) पर आधारित हैं। +* उन भाषाओं में कुछ **बातचीत के प्रोटोकॉल** भी शामिल होने चाहिए, विभिन्न **नीलामी प्रकारों** के आधार पर। +* एक **साझा ओन्टोलॉजी** का उपयोग, ताकि वे एक ही अवधारणाओं को संदर्भित करें और उनकी अर्थवत्ता को समझें +* यह पता लगाने का एक तरीका कि विभिन्न एजेंट क्या कर सकते हैं, जो किसी प्रकार की ओन्टोलॉजी पर आधारित हो + +डिलिब्रेटिव एजेंट रिएक्टिव की तुलना में बहुत अधिक जटिल होते हैं, क्योंकि वे केवल पर्यावरण में बदलावों पर प्रतिक्रिया नहीं देते, उन्हें क्रियाएँ *प्रारंभ* करने में सक्षम भी होना चाहिए। डिलिब्रेटिव एजेंट के लिए प्रस्तावित आर्किटेक्चर में से एक है तथाकथित Belief-Desire-Intention (BDI) एजेंट: + +* **विश्वास** एजेंट के पर्यावरण के बारे में ज्ञान का एक सेट बनाते हैं। इसे एक ज्ञान आधार या नियमों के सेट के रूप में संरचित किया जा सकता है जिसे एजेंट पर्यावरण की विशिष्ट स्थिति में लागू कर सकता है। +* **इच्छाएँ** परिभाषित करती हैं कि एजेंट क्या करना चाहता है, यानी उसके लक्ष्य। उदाहरण के लिए, ऊपर के व्यक्तिगत सहायक एजेंट का लक्ष्य एक यात्रा बुक करना है, और होटल एजेंट का लक्ष्य अधिकतम लाभ प्राप्त करना है। +* **इरादे** विशिष्ट क्रियाएँ होती हैं जिन्हें एजेंट अपने लक्ष्यों को प्राप्त करने के लिए योजना बनाता है। क्रियाएं आमतौर पर पर्यावरण को बदलती हैं और अन्य एजेंटों के साथ संचार करती हैं। + +मल्टी-एजेंट सिस्टम बनाने के लिए कुछ प्लेटफ़ॉर्म उपलब्ध हैं, जैसे [JADE](https://jade.tilab.com/). [यह पेपर](https://arxiv.org/ftp/arxiv/papers/2007/2007.08961.pdf) मल्टी-एजेंट प्लेटफॉर्मों का एक समीक्षा प्रदान करता है, साथ ही मल्टी-एजेंट सिस्टमों का संक्षिप्त इतिहास और उनके विभिन्न उपयोग परिदृश्यों को भी बताता है। + +## निष्कर्ष + +मल्टी-एजेंट सिस्टम विभिन्न रूप ले सकते हैं और कई विभिन्न अनुप्रयोगों में उपयोग किए जा सकते हैं। +वे सभी व्यक्तिगत एजेंट के सरल व्यवहार पर फोकस करते हैं, और **सिनर्जेटिक प्रभाव** के कारण पूरे सिस्टम के जटिल व्यवहार को प्राप्त करते हैं। + +## 🚀 चुनौती + +इस पाठ को वास्तविक दुनिया में ले जाएं और किसी समस्या को हल करने वाले मल्टी-एजेंट सिस्टम की कल्पना करें। उदाहरण के लिए, एक मल्टी-एजेंट सिस्टम को स्कूल बस के रूट को अनुकूलित करने के लिए क्या करना होगा? यह एक बेकरी में कैसे काम कर सकता है? + +## [पोस्ट-लेक्चर क्विज़](https://ff-quizzes.netlify.app/en/ai/quiz/46) + +## समीक्षा और आत्म-अध्ययन + +उद्योग में इस प्रकार की प्रणाली के उपयोग की समीक्षा करें। विनिर्माण या वीडियो गेम उद्योग जैसी किसी क्षेत्र को चुनें और जानें कि मल्टी-एजेंट सिस्टम अनूठी समस्याओं के समाधान के लिए कैसे उपयोग किए जा सकते हैं। + +## [NetLogo असाइनमेंट](assignment.md) --- + +**अस्वीकरण**: +इस दस्तावेज़ का अनुवाद AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ अपनी मूल भाषा में ही प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। + \ No newline at end of file diff --git a/translations/ko/.co-op-translator.json b/translations/ko/.co-op-translator.json index 5b002c57..1fdf6b70 100644 --- a/translations/ko/.co-op-translator.json +++ b/translations/ko/.co-op-translator.json @@ -5,6 +5,12 @@ "source_file": "AGENTS.md", "language_code": "ko" }, + "CONTRIBUTING.md": { + "original_hash": "c6fd7e781b67111a90abd166d0ce4aa0", + "translation_date": "2026-07-08T19:07:51+00:00", + "source_file": "CONTRIBUTING.md", + "language_code": "ko" + }, "README.md": { "original_hash": "12c8eb6bf0867d2f1c32daf613ac5b8b", "translation_date": "2026-04-06T20:48:08+00:00", @@ -17,6 +23,19 @@ "source_file": "SECURITY.md", "language_code": "ko" }, + "__translation_failures__": { + "lessons/sketchnotes/LICENSE.md": { + "original_hash": "45ab63a2cd8f5faef6c9b150618837a4", + "source_file": "lessons/sketchnotes/LICENSE.md", + "language_code": "ko", + "failure_date": "2026-07-08T18:56:31+00:00", + "status": "failed", + "error_type": "TranslationIncompleteError", + "error_message": "Markdown translation remained incomplete for chunk 1.1.1 of 'LICENSE.md', and the chunk could not be split further.", + "translator_version": "0.20.0", + "failure_policy_version": 1 + } + }, "etc/CODE_OF_CONDUCT.md": { "original_hash": "c06b12caf3c901eb3156e3dd5b0aea56", "translation_date": "2025-08-24T21:38:25+00:00", @@ -54,8 +73,8 @@ "language_code": "ko" }, "examples/README.md": { - "original_hash": "0d1babfdcbeb46525f2db3fbaaa54cd7", - "translation_date": "2025-10-03T11:28:24+00:00", + "original_hash": "7883d52c2e2a221e0b07a7b112a149b9", + "translation_date": "2026-07-08T18:52:19+00:00", "source_file": "examples/README.md", "language_code": "ko" }, @@ -66,8 +85,8 @@ "language_code": "ko" }, "lessons/0-course-setup/how-to-run.md": { - "original_hash": "a4717bd9103b9f6cd84d534b83534689", - "translation_date": "2026-01-15T12:57:22+00:00", + "original_hash": "7ad8c7d8604c53649b3d4d1e2f3a6fa1", + "translation_date": "2026-07-08T18:52:37+00:00", "source_file": "lessons/0-course-setup/how-to-run.md", "language_code": "ko" }, @@ -191,6 +210,12 @@ "source_file": "lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md", "language_code": "ko" }, + "lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb": { + "original_hash": "99b816b6a4957ef4100cee4c4221dff9", + "translation_date": "2026-07-08T18:48:44+00:00", + "source_file": "lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb", + "language_code": "ko" + }, "lessons/4-ComputerVision/08-TransferLearning/lab/README.md": { "original_hash": "7765935c35fcee69b9fe2d0cfd6963e2", "translation_date": "2025-08-24T21:32:01+00:00", @@ -330,8 +355,8 @@ "language_code": "ko" }, "lessons/5-NLP/README.md": { - "original_hash": "8ef02a9318257ea140ed3ed74442096d", - "translation_date": "2025-08-24T21:23:24+00:00", + "original_hash": "038df6f1a73e49f6430740da083bfd6d", + "translation_date": "2026-07-08T18:53:01+00:00", "source_file": "lessons/5-NLP/README.md", "language_code": "ko" }, diff --git a/translations/ko/CONTRIBUTING.md b/translations/ko/CONTRIBUTING.md new file mode 100644 index 00000000..b8bb4567 --- /dev/null +++ b/translations/ko/CONTRIBUTING.md @@ -0,0 +1,29 @@ +# AI-For-Beginners에 기여하기 + +AI-For-Beginners에 기여해 주셔서 감사합니다! 번역, 수업 수정, 형식 교정을 환영합니다. + +## Microsoft 기여자 라이선스 계약(CLA) + +이 프로젝트는 기여와 제안을 환영합니다. 대부분의 기여는 기여자가 해당 기여에 대한 권한이 있으며 실제로 권한을 부여한다는 내용을 담은 기여자 라이선스 계약(CLA)에 동의해야 합니다. 자세한 내용은 [https://cla.microsoft.com](https://cla.microsoft.com)을 참조하세요. + +풀 리퀘스트를 제출하면 CLA-봇이 자동으로 CLA 제출 여부를 판단하고 PR에 적절한 표시(예: 라벨, 댓글)를 합니다. 봇이 제공하는 지침을 따르면 됩니다. 모든 저장소에서 CLA 사용 시 한 번만 이 과정을 거치면 됩니다. + +## 기여 방법 + +### 1. 오타 / 코드 오류 수정 +Jupyter 노트북이나 수업 마크다운 파일에서 오타나 버그를 발견하면: +1. 저장소를 포크합니다. +2. 오타나 깨진 링크를 수정합니다. +3. 수정 내용을 명확히 설명하는 풀 리퀘스트를 제출합니다. + +### 2. 번역 제출 +수업을 다른 언어로 번역해 주시면 환영합니다! 번역 파일은 `translations/` 디렉터리 내 기존 폴더 이름(`translations/es/`, `translations/pt-BR/`, `translations/zh-CN/` 등)을 사용하여 배치해 주세요. + +자세한 내용은 [etc/CONTRIBUTING.md](etc/CONTRIBUTING.md)를 참조하세요. + +--- + + +**면책 조항**: +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 기하기 위해 노력하고 있으나, 자동 번역은 오류나 부정확한 부분이 있을 수 있음을 유의하시기 바랍니다. 원본 문서의 원어본이 권위 있는 자료로 간주되어야 합니다. 중요한 정보의 경우, 전문가의 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다. + \ No newline at end of file diff --git a/translations/ko/examples/README.md b/translations/ko/examples/README.md index 2e9c1f50..1c788e84 100644 --- a/translations/ko/examples/README.md +++ b/translations/ko/examples/README.md @@ -1,27 +1,27 @@ -# 초보자를 위한 AI 예제 +# 초보자 친화적 AI 예제 -환영합니다! 이 디렉토리에는 AI와 머신러닝을 시작하는 데 도움을 주기 위한 간단하고 독립적인 예제가 포함되어 있습니다. 각 예제는 초보자가 쉽게 이해할 수 있도록 상세한 주석과 단계별 설명을 제공합니다. +환영합니다! 이 디렉터리에는 AI와 머신러닝을 시작하는 데 도움이 되는 간단하고 독립적인 예제가 포함되어 있습니다. 각 예제는 자세한 주석과 단계별 설명으로 초보자도 쉽게 따라할 수 있도록 설계되었습니다. ## 📚 예제 개요 -| 예제 | 설명 | 난이도 | 선행 조건 | -|------|------|--------|-----------| -| [Hello AI World](../../../examples/01-hello-ai-world.py) | 첫 번째 AI 프로그램 - 간단한 패턴 인식 | ⭐ 초보자 | Python 기본 | -| [Simple Neural Network](../../../examples/02-simple-neural-network.py) | 신경망을 처음부터 직접 구축하기 | ⭐⭐ 초보자+ | Python, 기본 수학 | -| [Image Classifier](./03-image-classifier.ipynb) | 사전 학습된 모델로 이미지 분류하기 | ⭐⭐ 초보자+ | Python, numpy | -| [Text Sentiment](../../../examples/04-text-sentiment.py) | 텍스트 감정 분석 (긍정/부정) | ⭐⭐ 초보자+ | Python | +| 예제 | 설명 | 난이도 | 필요 조건 | +|---------|-------------|------------|---------------| +| [Hello AI World](https://github.com/microsoft/AI-For-Beginners/blob/main/examples/01-hello-ai-world.py) | 첫 번째 AI 프로그램 - 간단한 패턴 인식 | ⭐ 초보자 | Python 기초 | +| [Simple Neural Network](https://github.com/microsoft/AI-For-Beginners/blob/main/examples/02-simple-neural-network.py) | 신경망을 처음부터 구축하기 | ⭐⭐ 초보자+ | Python, 기초 수학 | +| [Image Classifier](https://github.com/microsoft/AI-For-Beginners/blob/main/examples/03-image-classifier.ipynb) | 사전 학습된 모델로 이미지 분류하기 | ⭐⭐ 초보자+ | Python, numpy | +| [Text Sentiment](https://github.com/microsoft/AI-For-Beginners/blob/main/examples/04-text-sentiment.py) | 텍스트 감정 분석 (긍정/부정) | ⭐⭐ 초보자+ | Python | ## 🚀 시작하기 -### 선행 조건 +### 필요 조건 -Python이 설치되어 있는지 확인하세요 (권장 버전: 3.8 이상). 필요한 패키지를 설치하세요: +Python이 설치되어 있는지 확인하세요 (3.8 이상 권장). 필요 패키지 설치: ```bash -# For Python scripts +# 파이썬 스크립트용 pip install numpy -# For Jupyter notebooks (image classifier) +# 주피터 노트북용 (이미지 분류기) pip install jupyter numpy pillow tensorflow ``` @@ -32,37 +32,37 @@ conda env create --name ai4beg --file ../environment.yml conda activate ai4beg ``` -### 예제 실행 방법 +### 예제 실행하기 -**Python 스크립트 (.py 파일):** +**Python 스크립트 (.py 파일)의 경우:** ```bash python 01-hello-ai-world.py ``` -**Jupyter 노트북 (.ipynb 파일):** +**Jupyter 노트북 (.ipynb 파일)의 경우:** ```bash jupyter notebook 03-image-classifier.ipynb ``` ## 📖 학습 경로 -예제를 순서대로 따라가는 것을 추천합니다: +다음 순서로 예제를 학습하는 것을 권장합니다: -1. **"Hello AI World"부터 시작하세요** - 패턴 인식의 기본을 배워보세요 -2. **간단한 신경망 구축하기** - 신경망의 작동 원리를 이해하세요 -3. **이미지 분류기 시도하기** - 실제 이미지를 활용한 AI를 경험하세요 -4. **텍스트 감정 분석하기** - 자연어 처리 탐구하기 +1. **"Hello AI World"부터 시작하기** - 패턴 인식의 기초 배우기 +2. **간단한 신경망 구축** - 신경망 작동 원리 이해하기 +3. **이미지 분류기 시도해보기** - 실제 이미지로 AI 적용해 보기 +4. **텍스트 감정 분석** - 자연어 처리 탐험하기 -## 💡 초보자를 위한 팁 +## 💡 초보자 팁 -- **코드 주석을 꼼꼼히 읽으세요** - 각 줄이 무엇을 하는지 설명합니다 -- **실험해보세요!** - 값을 변경해보고 결과를 확인하세요 -- **모든 것을 이해하려고 걱정하지 마세요** - 학습은 시간이 걸립니다 -- **질문하세요** - [토론 게시판](https://github.com/microsoft/AI-For-Beginners/discussions)을 활용하세요 +- **코드 주석을 꼼꼼히 읽으세요** - 각 줄이 무엇을 하는지 설명함 +- **실험해보세요!** - 값을 바꿔보고 어떤 변화가 있는지 확인하세요 +- **모든 것을 완벽히 이해하지 않아도 괜찮아요** - 학습은 시간이 걸립니다 +- 질문하세요 - [토론 게시판](https://github.com/microsoft/AI-For-Beginners/discussions)을 활용하세요 ## 🔗 다음 단계 -이 예제를 완료한 후, 전체 커리큘럼을 탐색해보세요: +이 예제를 완료한 후, 전체 커리큘럼을 탐색하세요: - [AI 소개](../lessons/1-Intro/README.md) - [신경망](../lessons/3-NeuralNetworks/README.md) - [컴퓨터 비전](../lessons/4-ComputerVision/README.md) @@ -70,10 +70,10 @@ jupyter notebook 03-image-classifier.ipynb ## 🤝 기여하기 -이 예제가 도움이 되었나요? 개선에 참여하세요: -- 문제를 보고하거나 개선 사항을 제안하세요 -- 초보자를 위한 더 많은 예제를 추가하세요 -- 문서와 주석을 개선하세요 +이 예제가 도움이 되었나요? 개선에 참여해주세요: +- 문제점 보고 또는 개선 제안 +- 초보자를 위한 더 많은 예제 추가 +- 문서와 주석 개선 --- @@ -81,5 +81,7 @@ jupyter notebook 03-image-classifier.ipynb --- -**면책 조항**: -이 문서는 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/ko/lessons/0-course-setup/how-to-run.md b/translations/ko/lessons/0-course-setup/how-to-run.md index 3c2fb901..de97f2ac 100644 --- a/translations/ko/lessons/0-course-setup/how-to-run.md +++ b/translations/ko/lessons/0-course-setup/how-to-run.md @@ -1,12 +1,12 @@ # 코드 실행 방법 -이 커리큘럼에는 실행할 수 있는 많은 예제와 실습이 포함되어 있습니다. 이를 실행하려면 이 커리큘럼의 일부로 제공되는 Jupyter 노트북에서 Python 코드를 실행할 수 있어야 합니다. 코드를 실행하는 몇 가지 방법이 있습니다: +이 교과 과정에는 실행 가능한 예제와 실습이 많이 포함되어 있어 직접 실행해보고 싶을 것입니다. 이를 위해서는 이 교과 과정의 일부로 제공되는 Jupyter 노트북에서 Python 코드를 실행할 수 있어야 합니다. 코드를 실행하는 데에는 여러 가지 옵션이 있습니다: -## 컴퓨터에서 로컬로 실행 +## 컴퓨터에서 로컬 실행하기 -컴퓨터에서 코드를 로컬로 실행하려면 Python 설치가 필요합니다. 한 가지 권장 방법은 **[miniconda](https://conda.io/en/latest/miniconda.html)**를 설치하는 것입니다. 이는 비교적 가벼운 설치로, 다양한 Python **가상 환경**을 위한 `conda` 패키지 관리자를 지원합니다. +컴퓨터에서 코드를 로컬로 실행하려면 Python 설치가 필요합니다. 추천하는 방법 중 하나는 **[miniconda](https://conda.io/en/latest/miniconda.html)** 를 설치하는 것입니다. miniconda는 가벼운 설치 방식으로, 다양한 Python 가상 환경을 지원하는 `conda` 패키지 관리자를 제공합니다. -miniconda를 설치한 후, 저장소를 복제하고 이 과정에 사용할 가상 환경을 만드십시오: +miniconda를 설치한 후 리포지토리를 클론하고 이 과정에 사용할 가상 환경을 생성합니다: ```bash git clone http://github.com/microsoft/ai-for-beginners @@ -15,19 +15,19 @@ conda env create --name ai4beg --file .devcontainer/environment.yml conda activate ai4beg ``` -### Python 확장 기능과 함께 Visual Studio Code 사용 +### Python 확장과 함께 Visual Studio Code 사용하기 -이 커리큘럼은 [Visual Studio Code](http://code.visualstudio.com/?WT.mc_id=academic-77998-cacaste)에서 [Python 확장 기능](https://marketplace.visualstudio.com/items?itemName=ms-python.python&WT.mc_id=academic-77998-cacaste)과 함께 열었을 때 가장 잘 사용됩니다. +이 교과 과정은 [Visual Studio Code](http://code.visualstudio.com/?WT.mc_id=academic-77998-cacaste)에서 [Python 확장](https://marketplace.visualstudio.com/items?itemName=ms-python.python&WT.mc_id=academic-77998-cacaste)을 통해 열어 사용하는 것이 가장 좋습니다. -> **참고**: 저장소를 복제하고 VS Code에서 디렉터리를 열면 자동으로 Python 확장 기능 설치를 제안합니다. 위에서 설명한 대로 miniconda도 설치해야 합니다. +> 참고: 리포지토리를 클론하고 VS Code에서 디렉터리를 열면 자동으로 Python 확장 설치를 제안합니다. 또한 위에 설명된 대로 miniconda를 설치해야 합니다. -> **참고**: VS Code에서 저장소를 컨테이너에서 다시 열도록 제안하면, 로컬 Python 설치를 사용하려면 이를 거부해야 합니다. +> 참고: VS Code가 리포지토리를 컨테이너에서 다시 열라고 제안하면, 로컬 Python 설치를 사용하려면 이를 거절해야 합니다. -### 브라우저에서 Jupyter 사용 +### 브라우저에서 Jupyter 사용하기 -브라우저에서 컴퓨터의 Jupyter 환경도 사용할 수 있습니다. 고전적인 Jupyter와 JupyterHub 모두 자동 완성, 코드 강조 등 편리한 개발 환경을 제공합니다. +자신의 컴퓨터 브라우저에서 Jupyter 환경을 사용할 수도 있습니다. 전통적인 Jupyter와 JupyterHub 모두 자동 완성, 코드 하이라이트 등의 편리한 개발 환경을 제공합니다. -로컬로 Jupyter를 시작하려면, 과정 디렉터리로 이동하여 다음을 실행하세요: +로컬에서 Jupyter를 시작하려면, 과정 디렉터리로 이동하여 다음을 실행하세요: ```bash jupyter notebook @@ -36,36 +36,36 @@ jupyter notebook ```bash jupyterhub ``` -그런 다음 `.ipynb` 파일 중 아무거나 찾아 열어 작업을 시작할 수 있습니다. +그런 다음 `.ipynb` 파일 중 원하는 것을 찾아 열고 작업을 시작할 수 있습니다. -### 컨테이너에서 실행 +### 컨테이너에서 실행하기 -Python 설치에 대한 대안으로 컨테이너에서 코드를 실행할 수 있습니다. 저장소는 이 저장소용 컨테이너 빌드 방법을 안내하는 특별한 `.devcontainer` 폴더를 제공하므로, VS Code는 코드를 컨테이너에서 다시 열 기회를 제공합니다. 이 방법은 Docker 설치가 필요하며 좀 더 복잡하므로, 숙련된 사용자에게 권장합니다. +Python 설치 대신 컨테이너에서 코드를 실행하는 방법도 있습니다. 이 리포지토리는 컨테이너를 빌드하는 방법을 안내하는 특별한 `.devcontainer` 폴더를 제공하므로 VS Code가 코드를 컨테이너에서 다시 열 수 있는 기능을 제공합니다. 이 방법은 Docker 설치가 필요하고 다소 복잡하므로, 경험이 있는 사용자에게 권장합니다. -## 클라우드에서 실행 +## 클라우드에서 실행하기 -로컬에 Python을 설치하고 싶지 않고, 클라우드 자원에 접근할 수 있다면 클라우드에서 코드를 실행하는 좋은 대안이 있습니다. 다음과 같은 방법들이 있습니다: +로컬에 Python을 설치하지 않고 클라우드 자원에 접근할 수 있다면, 클라우드에서 코드를 실행하는 것도 좋은 대안입니다. 이를 할 수 있는 여러 방법이 있습니다: -* **[GitHub Codespaces](https://github.com/features/codespaces)** 사용하기: GitHub에서 가상 환경을 만들어 VS Code 브라우저 인터페이스를 통해 접근할 수 있습니다. Codespaces에 접근 권한이 있으면 저장소의 **Code** 버튼을 클릭해 codespace를 시작하고 빠르게 실행할 수 있습니다. -* **[Binder](https://mybinder.org/v2/gh/microsoft/ai-for-beginners/HEAD)** 사용하기: [Binder](https://mybinder.org)는 GitHub상의 코드를 테스트할 수 있도록 클라우드에서 무료 컴퓨팅 자원을 제공합니다. 저장소 첫 페이지에 Binder에서 저장소를 열 수 있는 버튼이 있어, 이를 클릭하면 기저 컨테이너가 빌드되고 Jupyter 웹 인터페이스가 원활하게 시작됩니다. +* **[GitHub Codespaces](https://github.com/features/codespaces)** 이용하기: 이는 GitHub 상에서 가상 환경을 생성하고 VS Code 브라우저 인터페이스를 통해 접근할 수 있습니다. Codespaces에 접근 권한이 있으면 리포지토리의 **Code** 버튼을 클릭하고 Codespace를 시작하면 바로 실행할 수 있습니다. +* **[Binder](https://mybinder.org/v2/gh/microsoft/ai-for-beginners/HEAD)** 이용하기: [Binder](https://mybinder.org)는 GitHub의 코드를 테스트할 수 있도록 클라우드에서 무료 컴퓨팅 자원을 제공합니다. 리포지토리 메인 페이지에 있는 버튼을 누르면 Binder 사이트로 빠르게 이동해 해당 컨테이너를 빌드하고 Jupyter 웹 인터페이스를 원활하게 시작할 수 있습니다. -> **참고**: 오용 방지를 위해 Binder에서는 일부 웹 자원 접근이 차단됩니다. 이로 인해 공개 인터넷에서 모델이나 데이터셋을 가져오는 일부 코드가 작동하지 않을 수 있습니다. 일부 우회 방법을 찾아야 할 수 있습니다. 또한 Binder에서 제공하는 컴퓨팅 자원은 초보 수준이므로, 특히 나중에 복잡한 수업에서는 훈련 속도가 느립니다. +> 참고: Binder는 남용 방지를 위해 일부 웹 자원 접근을 차단합니다. 이로 인해 공개 인터넷에서 모델이나 데이터셋을 불러오는 코드가 제대로 작동하지 않을 수 있습니다. 우회 방법을 찾아야 할 수도 있습니다. 또한, Binder가 제공하는 컴퓨팅 자원은 기본적인 수준이므로 이후의 복잡한 수업에서는 학습 속도가 느릴 수 있습니다. -## GPU가 포함된 클라우드에서 실행 +## GPU가 탑재된 클라우드에서 실행하기 -이 커리큘럼의 후반 수업 중 일부는 GPU 지원이 크게 도움이 됩니다. 예를 들어 모델 훈련은 그렇지 않으면 매우 느릴 수 있습니다. 특히 [Azure for Students](https://azure.microsoft.com/free/students/?WT.mc_id=academic-77998-cacaste) 또는 기관을 통해 클라우드에 접근할 수 있다면 다음 옵션들을 고려할 수 있습니다: +이 교과 과정의 후반부 수업들은 GPU 지원이 크게 도움이 됩니다. 예를 들어 모델 학습이 그렇지 않으면 매우 느릴 수 있습니다. 특히 [Azure for Students](https://azure.microsoft.com/free/students/?WT.mc_id=academic-77998-cacaste)나 학교를 통한 클라우드 접근 권한이 있다면 다음과 같은 옵션이 있습니다: -* [Data Science Virtual Machine](https://docs.microsoft.com/learn/modules/intro-to-azure-data-science-virtual-machine/?WT.mc_id=academic-77998-cacaste) 생성 후 Jupyter로 연결하기. 그 후 저장소를 머신에 복제하고 학습을 시작할 수 있습니다. NC 시리즈 VM에는 GPU 지원이 포함되어 있습니다. +* [Data Science Virtual Machine](https://docs.microsoft.com/learn/modules/intro-to-azure-data-science-virtual-machine/?WT.mc_id=academic-77998-cacaste)을 생성하고 Jupyter로 연결하기. 머신에 리포지토리를 클론해서 바로 학습할 수 있습니다. NC 시리즈 VM은 GPU를 지원합니다. -> **참고**: Azure for Students를 포함한 일부 구독은 기본적으로 GPU를 지원하지 않습니다. 추가 GPU 코어 요청을 기술 지원에 해야 할 수 있습니다. +> 참고: Azure for Students 등 일부 구독은 기본적으로 GPU를 제공하지 않습니다. 추가 GPU 코어가 필요한 경우 기술 지원 요청을 해야 할 수 있습니다. -* [Azure Machine Learning Workspace](https://azure.microsoft.com/services/machine-learning/?WT.mc_id=academic-77998-cacaste) 생성 후 노트북 기능 사용. [이 영상](https://azure-for-academics.github.io/quickstart/azureml-papers/)은 Azure ML 노트북에 저장소를 복제하고 사용하는 방법을 보여줍니다. +* [Azure Machine Learning Workspace](https://azure.microsoft.com/services/machine-learning/?WT.mc_id=academic-77998-cacaste)를 생성한 후 그곳의 노트북 기능을 사용하기. [이 영상](https://azure-for-academics.github.io/quickstart/azureml-papers/)에서는 Azure ML 노트북에 리포지토리를 클론해서 사용하는 방법을 보여줍니다. -또한 일부 무료 GPU 지원이 포함된 Google Colab을 사용할 수도 있으며, Jupyter 노트북을 업로드해 차례대로 실행할 수 있습니다. +또한 Google Colab을 이용하면 무료 GPU 지원과 함께 Jupyter 노트북을 하나씩 업로드해 실행할 수 있습니다. --- -**면책 조항**: -이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 이용하여 번역되었습니다. 정확성을 위해 최선을 다했지만, 자동 번역에는 오류나 부정확성이 포함될 수 있음을 유의하시기 바랍니다. 원문은 해당 언어의 원본 문서가 공식적인 출처로 간주되어야 합니다. 중요한 정보의 경우 전문적인 인간 번역을 권장합니다. 본 번역 사용으로 인한 오해나 잘못된 해석에 대해서는 책임을 지지 않습니다. +**면책 조항**: +이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 기하기 위해 노력하고 있으나, 자동 번역은 오류나 부정확한 부분이 있을 수 있음을 유의하시기 바랍니다. 원본 문서의 원어본이 권위 있는 자료로 간주되어야 합니다. 중요한 정보의 경우, 전문가의 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다. \ No newline at end of file diff --git a/translations/ko/lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb b/translations/ko/lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb index 2842cf88..07922837 100644 --- a/translations/ko/lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb +++ b/translations/ko/lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb @@ -4,11 +4,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# 사전 학습된 모델과 전이 학습\n", + "# 사전 학습된 모델과 전이학습\n", "\n", - "CNN을 훈련시키는 데는 많은 시간이 걸리며, 이를 위해 많은 데이터가 필요합니다. 하지만 대부분의 시간은 네트워크가 이미지를 통해 패턴을 추출하기 위해 사용하는 최적의 저수준 필터를 학습하는 데 소비됩니다. 여기서 자연스럽게 한 가지 질문이 떠오릅니다 - 한 데이터셋에서 훈련된 신경망을 사용하여 완전한 훈련 과정을 거치지 않고 다른 이미지를 분류하는 데 적응시킬 수 있을까요?\n", + "CNN을 훈련시키는 데는 많은 시간이 걸리고, 그 작업에는 많은 데이터가 필요합니다. 하지만 대부분의 시간은 네트워크가 이미지에서 패턴을 추출하기 위해 사용하는 최적의 저수준 필터를 학습하는 데 소비됩니다. 자연스러운 질문이 생깁니다 - 한 데이터셋에서 학습된 신경망을 사용하여 전체 훈련 과정을 거치지 않고도 다른 이미지를 분류하도록 적응시킬 수 있을까요?\n", "\n", - "이 접근법은 **전이 학습**이라고 불리며, 이는 한 신경망 모델에서 다른 모델로 일부 지식을 전이하는 것을 의미합니다. 전이 학습에서는 일반적으로 **ImageNet**과 같은 대규모 이미지 데이터셋에서 훈련된 사전 학습된 모델로 시작합니다. 이러한 모델은 이미 일반적인 이미지에서 다양한 특징을 추출하는 데 뛰어난 성능을 발휘할 수 있으며, 많은 경우 이러한 추출된 특징 위에 분류기를 구축하는 것만으로도 좋은 결과를 얻을 수 있습니다.\n" + "이러한 접근법을 **전이학습(transfer learning)** 이라고 부르는데, 이는 한 신경망 모델에서 다른 신경망 모델로 일부 지식을 전달하기 때문입니다. 전이학습에서는 일반적으로 ImageNet과 같은 대규모 이미지 데이터셋으로 이미 훈련된 사전 학습된 모델을 시작점으로 사용합니다. 이러한 모델들은 이미 일반 이미지에서 다양한 특징을 잘 추출할 수 있으며, 많은 경우 추출된 특징 위에 분류기를 구축하는 것만으로도 좋은 결과를 얻을 수 있습니다.\n" ] }, { @@ -29,11 +29,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## 고양이 vs. 개 데이터셋\n", + "## 고양이 vs. 강아지 데이터셋\n", "\n", - "이번 단원에서는 고양이와 개의 이미지를 분류하는 실제 문제를 해결해 보겠습니다. 이를 위해 [Kaggle Cats vs. Dogs Dataset](https://www.kaggle.com/c/dogs-vs-cats)을 사용할 것이며, [Microsoft](https://www.microsoft.com/en-us/download/details.aspx?id=54765&WT.mc_id=academic-77998-cacaste)에서도 다운로드할 수 있습니다.\n", + "이 단원에서는 고양이와 강아지 이미지를 분류하는 실제 문제를 해결할 것입니다. 이를 위해 [Kaggle Cats vs. Dogs Dataset](https://www.kaggle.com/c/dogs-vs-cats)을 사용할 것이며, 이 데이터셋은 [Microsoft에서](https://www.microsoft.com/en-us/download/details.aspx?id=54765&WT.mc_id=academic-77998-cacaste) 다운로드할 수도 있습니다.\n", "\n", - "이 데이터셋을 다운로드하여 `data` 디렉토리에 추출해 봅시다 (이 과정은 시간이 좀 걸릴 수 있습니다!):\n" + "이 데이터셋을 다운로드하여 `data` 디렉토리에 압축을 푸시죠(이 과정은 다소 시간이 걸릴 수 있습니다!):\n" ] }, { @@ -64,7 +64,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "불행히도 데이터셋에 손상된 이미지 파일이 일부 포함되어 있습니다. 손상된 파일을 확인하기 위해 빠르게 정리를 해야 합니다. 이 튜토리얼을 방해하지 않기 위해 데이터셋을 확인하는 코드를 모듈로 이동했습니다.\n" + "불행히도, 데이터셋에 일부 손상된 이미지 파일이 있습니다. 손상된 파일을 확인하기 위해 빠른 정리를 해야 합니다. 이 튜토리얼을 방해하지 않기 위해 데이터셋을 검증하는 코드를 모듈로 옮겼습니다.\n" ] }, { @@ -333,13 +333,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## 데이터셋 로드하기\n", + "## 데이터셋 로딩하기\n", "\n", - "이전 예제에서는 Keras에 내장된 데이터셋을 로드했습니다. 이제는 우리가 직접 준비한 데이터셋을 다룰 차례로, 이미지 디렉토리에서 데이터를 로드해야 합니다.\n", + "이전 예제들에서는 Keras에 내장된 데이터셋을 불러왔습니다. 이제는 이미지 디렉터리에서 로드해야 하는 자체 데이터셋을 다룰 차례입니다.\n", "\n", - "실제 상황에서는 이미지 데이터셋의 크기가 매우 클 수 있으며, 모든 데이터를 메모리에 적재할 수 있다고 가정할 수 없습니다. 따라서 데이터셋은 종종 **제너레이터** 형태로 표현되며, 이는 훈련에 적합한 미니배치를 반환할 수 있습니다.\n", + "실제로 이미지 데이터셋의 크기는 매우 클 수 있기 때문에 모든 데이터를 메모리에 한꺼번에 올릴 수 없을 때가 많습니다. 따라서 데이터셋은 종종 학습에 적합한 미니배치 단위로 데이터를 반환할 수 있는 제너레이터로 표현됩니다.\n", "\n", - "이미지 분류를 처리하기 위해 Keras는 `image_dataset_from_directory`라는 특별한 함수를 포함하고 있습니다. 이 함수는 서로 다른 클래스에 해당하는 하위 디렉토리에서 이미지를 로드할 수 있습니다. 또한 이 함수는 이미지 크기 조정을 처리하며, 데이터셋을 훈련 및 테스트 하위 집합으로 나눌 수도 있습니다.\n" + "이미지 분류 작업을 위해, Keras는 서로 다른 클래스에 해당하는 하위 디렉터리에서 이미지를 로드할 수 있는 특수 함수 `image_dataset_from_directory`를 포함합니다. 이 함수는 이미지 크기 조정도 처리하며, 데이터셋을 학습용과 테스트용 서브셋으로 나눌 수도 있습니다:\n" ] }, { @@ -383,9 +383,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "두 호출에서 동일한 `seed` 값을 설정하는 것이 중요합니다. 이는 훈련 데이터셋과 테스트 데이터셋 간의 이미지 분할에 영향을 미치기 때문입니다.\n", + "두 호출에 대해 동일한 `seed` 값을 설정하는 것이 중요한데, 이는 이미지가 학습 및 테스트 데이터셋으로 나누어지는 방식에 영향을 미치기 때문입니다.\n", "\n", - "데이터셋은 디렉터리에서 클래스 이름을 자동으로 가져오며, 필요할 경우 다음을 호출하여 접근할 수 있습니다:\n" + "데이터셋은 디렉터리에서 클래스 이름을 자동으로 가져오며, 필요할 경우 다음 호출을 통해 접근할 수 있습니다:\n" ] }, { @@ -412,7 +412,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "우리가 얻은 데이터셋은 모델을 학습시키기 위해 `fit` 함수에 직접 전달할 수 있습니다. 이 데이터셋은 해당 이미지와 레이블을 모두 포함하고 있으며, 다음과 같은 구조를 사용하여 반복할 수 있습니다:\n" + "우리가 얻은 데이터셋은 `fit` 함수에 직접 전달하여 모델을 훈련시킬 수 있습니다. 데이터셋에는 해당 이미지와 라벨이 모두 포함되어 있으며, 다음 구조를 사용하여 반복할 수 있습니다:\n" ] }, { @@ -453,7 +453,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "> **참고**: 데이터셋의 모든 이미지는 0-255 범위의 부동소수점 텐서로 표현됩니다. 신경망에 전달하기 전에 이러한 값을 0-1 범위로 스케일링해야 합니다. 이미지를 플로팅할 때도 동일한 작업을 수행하거나, 값을 `int` 타입으로 변환해야 합니다(위 코드에서 수행한 작업). 이를 통해 `matplotlib`에 원래 스케일링되지 않은 이미지를 플로팅하고자 함을 알릴 수 있습니다.\n" + "> 참고: 데이터셋의 모든 이미지는 0-255 범위의 부동 소수점 텐서로 표현됩니다. 이를 신경망에 전달하기 전에 0-1 범위로 값을 스케일링해야 합니다. 이미지를 플로팅할 때는 동일하게 스케일링하거나, 원본 스케일되지 않은 이미지를 플로팅하고자 `matplotlib`에 알리기 위해 값들을 `int` 타입으로 변환해야 합니다(위 코드에서 수행한 대로).\n" ] }, { @@ -462,7 +462,7 @@ "source": [ "## 사전 학습된 모델\n", "\n", - "많은 이미지 분류 작업에서 사전 학습된 신경망 모델을 찾을 수 있습니다. 이러한 모델 중 다수는 `keras.applications` 네임스페이스 내에서 사용할 수 있으며, 더 많은 모델은 인터넷에서 찾을 수 있습니다. 가장 간단한 VGG-16 모델을 어떻게 로드하고 사용하는지 살펴보겠습니다:\n" + "많은 이미지 분류 작업에 대해 사전 학습된 신경망 모델을 찾을 수 있습니다. 이들 모델 중 다수는 `keras.applications` 네임스페이스 내에서 제공되며, 인터넷에서도 더 많은 모델을 찾을 수 있습니다. 가장 간단한 VGG-16 모델을 어떻게 불러와서 사용하는지 살펴보겠습니다:\n" ] }, { @@ -497,7 +497,17 @@ } ], "source": [ - "vgg = keras.applications.VGG16()\n", + "# SHA-256 of VGG16 weights (with top)\n", + "VGG16_WEIGHTS_SHA256 = '64373286793e3c8b2b4e3219cbf3544bce2f55ab4682710a29f5e7af8f5e4f61'\n", + "\n", + "_weights_path = keras.utils.get_file(\n", + " 'vgg16_weights_tf_dim_ordering_tf_kernels.h5',\n", + " 'https://storage.googleapis.com/tensorflow/keras-applications/vgg16/vgg16_weights_tf_dim_ordering_tf_kernels.h5',\n", + " file_hash=VGG16_WEIGHTS_SHA256,\n", + " hash_algorithm='sha256',\n", + ")\n", + "\n", + "vgg = keras.applications.VGG16(weights=_weights_path)\n", "inp = keras.applications.vgg16.preprocess_input(x_sample[:1])\n", "\n", "res = vgg(inp)\n", @@ -510,11 +520,10 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "여기에서 중요한 몇 가지 사항이 있습니다:\n", - "\n", - "* 사전 학습된 네트워크에 입력을 전달하기 전에 특정 방식으로 전처리해야 합니다. 이를 위해 해당 `preprocess_input` 함수를 호출하며, 이 함수는 이미지 배치를 받아 처리된 형태로 반환합니다. VGG-16의 경우, 이미지는 정규화되고, 각 채널에 대해 미리 정의된 평균값이 차감됩니다. 이는 VGG-16이 원래 이러한 전처리 과정을 거쳐 학습되었기 때문입니다.\n", - "* 신경망은 입력 배치에 적용되며, 결과로 각 클래스의 확률을 나타내는 1000-요소 텐서 배치를 반환합니다. 이 텐서에서 `argmax`를 호출하면 가장 가능성이 높은 클래스 번호를 찾을 수 있습니다.\n", - "* 얻어진 결과는 [`ImageNet` 클래스의 번호](https://gist.github.com/yrevar/942d3a0ac09ec9e5eb3a)입니다. 이 결과를 이해하기 위해 `decode_predictions` 함수를 사용할 수도 있으며, 이 함수는 상위 n개의 클래스와 그 이름을 함께 반환합니다.\n" + "여기에 몇 가지 중요한 사항이 있습니다:\n", + "* 어떤 사전 학습된 네트워크에 입력을 전달하기 전에 특정 방식으로 전처리 되어야 합니다. 이는 이미지 배치를 받아 처리된 형태를 반환하는 해당 `preprocess_input` 함수를 호출함으로써 수행됩니다. VGG-16의 경우 이미지가 정규화되고 각 채널에 대해 사전에 정의된 평균 값이 빼집니다. 이는 VGG-16이 원래 이 전처리와 함께 학습되었기 때문입니다.\n", + "* 신경망은 입력 배치에 적용되고, 결과로 각 클래스의 확률을 나타내는 1000요소 텐서 배치를 받습니다. 이 텐서에 `argmax`를 호출하여 가장 확률이 높은 클래스 번호를 찾을 수 있습니다.\n", + "* 얻어진 결과는 [‘ImageNet’ 클래스 번호](https://gist.github.com/yrevar/942d3a0ac09ec9e5eb3a)입니다. 이 결과를 의미 있게 만들기 위해, 상위 n개 클래스와 그 이름을 반환하는 `decode_predictions` 함수도 사용할 수 있습니다.\n" ] }, { @@ -600,7 +609,7 @@ "source": [ "## GPU 계산\n", "\n", - "VGG-16과 같은 딥 뉴럴 네트워크 및 기타 최신 아키텍처는 실행하는 데 상당한 계산 능력을 필요로 합니다. GPU 가속을 사용할 수 있다면 이를 활용하는 것이 합리적입니다. 다행히도 Keras는 GPU가 사용 가능한 경우 자동으로 계산 속도를 높여줍니다. Tensorflow가 GPU를 사용할 수 있는지 확인하려면 다음 코드를 사용할 수 있습니다:\n" + "VGG-16과 같은 딥 신경망 및 기타 최신 아키텍처는 실행에 상당한 계산 성능을 요구합니다. 사용할 수 있다면 GPU 가속을 사용하는 것이 합리적입니다. 다행히도, Keras는 GPU가 있으면 자동으로 계산을 가속화합니다. 다음 코드를 사용하여 Tensorflow가 GPU를 사용할 수 있는지 확인할 수 있습니다:\n" ] }, { @@ -627,9 +636,10 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## VGG 특징 추출하기\n", "\n", - "이미지에서 VGG-16을 사용해 특징을 추출하려면, 최종 분류 계층이 없는 모델이 필요합니다. 아래 코드를 사용하여 상위 계층이 없는 VGG-16 모델을 인스턴스화할 수 있습니다:\n" + "## VGG 특징 추출\n", + "\n", + "이미지에서 특징을 추출하기 위해 VGG-16을 사용하려면, 최종 분류 계층이 없는 모델이 필요합니다. 다음 코드를 사용하여 상단 계층 없는 VGG-16 모델을 인스턴스화할 수 있습니다:\n" ] }, { @@ -681,9 +691,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "특징 텐서의 차원은 7x7x512이지만, 이를 시각화하기 위해 2D 형태로 재구성해야 했습니다.\n", + "특징 텐서의 차원은 7x7x512이지만, 이를 시각화하기 위해 2D 형식으로 재구성해야 했습니다.\n", "\n", - "이제 이러한 특징들이 이미지를 분류하는 데 사용될 수 있는지 확인해 봅시다. 이미지를 일부 수동으로 선택해 보겠습니다 (우리의 경우 50개의 미니배치). 그리고 이들의 특징 벡터를 미리 계산합니다. 이를 위해 Tensorflow **dataset** API를 사용할 수 있습니다. `map` 함수는 데이터셋을 받아 주어진 람다 함수를 적용하여 변환합니다. 이 메커니즘을 사용하여 원본 이미지 대신 VGG에서 추출한 특징을 포함하는 새로운 데이터셋, `ds_features_train`과 `ds_features_test`를 생성합니다.\n" + "이제 이러한 특징들이 이미지 분류에 사용될 수 있는지 살펴보겠습니다. 수동으로 일부 이미지(우리 경우에는 50개의 미니배치)를 선택하고, 그들의 특징 벡터를 미리 계산해 봅시다. Tensorflow **dataset** API를 사용하여 이를 수행할 수 있습니다. `map` 함수는 데이터셋을 받아 주어진 람다 함수로 변환 작업을 적용합니다. 이 메커니즘을 이용해 원본 이미지 대신 VGG에서 추출한 특징을 포함하는 새로운 데이터셋인 `ds_features_train`과 `ds_features_test`를 생성합니다.\n" ] }, { @@ -713,9 +723,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "우리는 `.take(50)` 구문을 사용하여 데이터셋 크기를 제한하고, 데모 속도를 높였습니다. 물론 전체 데이터셋에서 이 실험을 수행할 수도 있습니다.\n", + "우리는 데모를 빠르게 진행하기 위해 데이터셋 크기를 제한하는 `.take(50)` 구문을 사용했습니다. 물론 전체 데이터셋으로도 이 실험을 수행할 수 있습니다.\n", "\n", - "이제 추출된 특징을 가진 데이터셋이 준비되었으니, 간단한 밀집 분류기를 훈련시켜 고양이와 개를 구분해 보겠습니다. 이 네트워크는 (7,7,512) 형태의 특징 벡터를 입력으로 받아, 개 또는 고양이에 해당하는 하나의 출력을 생성합니다. 이진 분류이기 때문에 `sigmoid` 활성화 함수와 `binary_crossentropy` 손실 함수를 사용합니다.\n" + "이제 추출된 특징을 가진 데이터셋이 준비되었으므로, 고양이와 개를 구분하는 간단한 밀집 분류기를 학습시킬 수 있습니다. 이 네트워크는 (7,7,512) 형태의 특징 벡터를 입력받아 개 또는 고양이에 해당하는 하나의 출력을 생성합니다. 이진 분류이기 때문에 `sigmoid` 활성화 함수와 `binary_crossentropy` 손실 함수를 사용합니다.\n" ] }, { @@ -744,13 +754,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "결과는 훌륭합니다. 고양이와 개를 거의 95%의 확률로 구분할 수 있습니다! 하지만, 이 접근법을 모든 이미지에 대해 테스트한 것은 아니며, 수동으로 특징을 추출하는 데 시간이 많이 걸리기 때문입니다.\n", + "결과가 매우 좋습니다. 고양이와 개를 거의 95% 확률로 구분할 수 있습니다! 하지만 수동으로 특징 추출하는 데 시간이 오래 걸리는 것 같아 전체 이미지 중 일부에 대해서만 이 방식을 테스트했습니다.\n", "\n", - "## VGG 네트워크를 활용한 전이 학습\n", + "## 하나의 VGG 네트워크를 이용한 전이 학습\n", "\n", - "수동으로 특징을 사전에 계산하는 과정을 피하기 위해, 원래의 VGG-16 네트워크를 전체적으로 훈련에 사용하고, 네트워크의 첫 번째 레이어로 특징 추출기를 추가할 수 있습니다.\n", + "학습 중에 특징 추출기를 네트워크의 첫 번째 레이어로 추가하여 원래의 VGG-16 네트워크를 전체로 사용하는 방식으로 수동으로 특징을 미리 계산하는 작업을 피할 수도 있습니다.\n", "\n", - "Keras 아키텍처의 장점은 위에서 정의한 VGG-16 모델을 또 다른 신경망의 레이어로도 사용할 수 있다는 점입니다! 우리는 단지 그 위에 밀집 분류기를 추가한 네트워크를 구성하고, 역전파를 사용해 전체 네트워크를 훈련시키기만 하면 됩니다.\n" + "Keras 아키텍처의 장점은, 위에서 정의한 VGG-16 모델을 다른 신경망의 레이어로도 사용할 수 있다는 점입니다! 단지 그 위에 분류용 Dense 레이어를 쌓아서 전체 네트워크를 역전파 방식으로 학습시키면 됩니다.\n" ] }, { @@ -794,13 +804,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "이 모델은 이미지를 입력으로 받아 클래스를 반환하는 엔드투엔드 분류 네트워크처럼 보입니다. 하지만 여기서 중요한 점은, VGG16을 특징 추출기로 사용하고 재학습시키지 않는 것입니다. 따라서, **합성곱 특징 추출기의 가중치를 고정(Freeze)** 해야 합니다. 네트워크의 첫 번째 레이어는 `model.layers[0]`을 호출하여 접근할 수 있으며, `trainable` 속성을 `False`로 설정하기만 하면 됩니다.\n", + "이 모델은 이미지를 입력받아 클래스를 반환하는 종단 간 분류 네트워크처럼 보입니다. 하지만 까다로운 점은 VGG16을 특징 추출기로 사용하고 재학습하지 않으려는 것입니다. 따라서 **합성곱 특징 추출기의 가중치를 고정(freeze)** 해야 합니다. 네트워크의 첫 번째 레이어에 `model.layers[0]`으로 접근할 수 있으며, `trainable` 속성을 `False`로 설정하기만 하면 됩니다.\n", "\n", - "> **Note**: 특징 추출기의 가중치를 고정하는 이유는, 그렇지 않으면 학습되지 않은 분류기 레이어가 합성곱 추출기의 원래 사전 학습된 가중치를 망가뜨릴 수 있기 때문입니다.\n", + "> 참고: 특징 추출기 가중치를 고정해야 하는 이유는, 그렇지 않으면 훈련되지 않은 분류기 계층이 합성곱 추출기의 원래 사전학습된 가중치를 손상시킬 수 있기 때문입니다.\n", "\n", - "네트워크의 전체 파라미터 수가 약 1,500만 개인 반면, 실제로 학습되는 파라미터는 2만 5천 개에 불과하다는 점을 알 수 있습니다. 상위 레벨 합성곱 필터의 나머지 모든 파라미터는 사전 학습된 상태입니다. 이는 좋은 점인데, 왜냐하면 적은 수의 예제로 적은 수의 파라미터를 미세 조정할 수 있기 때문입니다.\n", + "네트워크 전체 파라미터 수가 약 1500만 개인 반면, 훈련되는 파라미터는 2만 5천 개 뿐인 것을 알 수 있습니다. 최상위 합성곱 필터의 모든 다른 파라미터는 사전학습된 상태입니다. 이는 적은 수의 예제로 더 적은 수의 파라미터를 미세 조정할 수 있기 때문에 좋은 점입니다.\n", "\n", - "이제 네트워크를 학습시키고 얼마나 좋은 성능을 낼 수 있는지 확인해 보겠습니다. 실행 시간이 꽤 길어질 수 있으니, 실행이 잠시 멈춘 것처럼 보여도 걱정하지 마세요.\n" + "이제 네트워크를 훈련시키고 얼마나 잘 되는지 확인해 보겠습니다. 실행 시간이 꽤 길어질 수 있으니, 잠시 실행이 멈춘 것 같아도 걱정하지 마세요.\n" ] }, { @@ -825,11 +835,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "고양이와 개를 구분하는 분류기를 꽤 정확하게 얻은 것 같네요!\n", + "꽤 정확한 고양이 대 개 분류기를 얻은 것 같습니다! \n", "\n", "## 모델 저장 및 불러오기\n", "\n", - "모델을 훈련시킨 후에는, 모델의 아키텍처와 학습된 가중치를 파일로 저장하여 나중에 사용할 수 있습니다:\n" + "모델을 학습한 후에는, 나중에 사용하기 위해 모델 아키텍처와 학습된 가중치를 파일에 저장할 수 있습니다:\n" ] }, { @@ -853,7 +863,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "우리는 언제든 파일에서 모델을 로드할 수 있습니다. 다음 실험이 모델을 손상시킬 경우 유용할 수 있습니다 - 처음부터 다시 시작할 필요가 없을 것입니다.\n" + "그런 다음 언제든지 파일에서 모델을 불러올 수 있습니다. 다음 실험에서 모델이 손상되는 경우에 유용할 수 있습니다 - 처음부터 다시 시작할 필요가 없게 됩니다.\n" ] }, { @@ -869,15 +879,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## 전이 학습 미세 조정\n", + "## 미세 조정된 전이 학습\n", "\n", - "이전 섹션에서는 최종 분류기 계층을 학습시켜 우리 데이터셋의 이미지를 분류했습니다. 하지만 특징 추출기는 재학습하지 않았으며, 모델은 ImageNet 데이터에서 학습한 특징에 의존했습니다. 만약 여러분의 객체가 일반적인 ImageNet 이미지와 시각적으로 다르다면, 이러한 특징 조합이 최적의 결과를 내지 못할 수 있습니다. 따라서 컨볼루션 계층도 학습을 시작하는 것이 합리적입니다.\n", + "이전 섹션에서는 최종 분류기 계층을 학습하여 우리 자체 데이터셋의 이미지를 분류했습니다. 그러나 특징 추출기는 재학습하지 않았으며, 우리 모델은 ImageNet 데이터에서 학습된 특징에 의존했습니다. 만약 객체가 일반 ImageNet 이미지와 시각적으로 다르다면, 이러한 특징 조합이 최적이 아닐 수 있습니다. 따라서 컨볼루션 계층도 학습을 시작하는 것이 합리적입니다.\n", "\n", - "이를 위해 이전에 고정했던 컨볼루션 필터 매개변수를 해제할 수 있습니다.\n", + "이를 위해 이전에 고정했던 컨볼루션 필터 매개변수의 고정을 해제할 수 있습니다.\n", "\n", - "> **Note:** 먼저 매개변수를 고정하고 분류 계층의 가중치를 안정화하기 위해 몇 번의 에포크 동안 학습을 수행하는 것이 중요합니다. 만약 매개변수를 해제한 상태로 바로 엔드 투 엔드 네트워크 학습을 시작하면, 큰 오류로 인해 컨볼루션 계층의 사전 학습된 가중치가 손상될 가능성이 높습니다.\n", + "> **참고:** 먼저 매개변수를 고정하고 분류기 계층의 가중치를 안정화하기 위해 몇 에포크 동안 학습하는 것이 중요합니다. 매개변수 고정 해제 상태로 즉시 end-to-end 네트워크 학습을 시작하면 큰 오차가 컨볼루션 계층의 사전 학습된 가중치를 파괴할 가능성이 높습니다.\n", "\n", - "우리의 컨볼루션 VGG-16 모델은 첫 번째 계층 안에 위치하며, 자체적으로 여러 계층으로 구성되어 있습니다. 그 구조를 살펴볼 수 있습니다:\n" + "우리 컨볼루션 VGG-16 모델은 첫 번째 계층 내부에 위치하며, 여러 계층으로 구성되어 있습니다. 그 구조를 살펴볼 수 있습니다:\n" ] }, { @@ -946,7 +956,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "우리는 합성곱 기반의 모든 층을 해제할 수 있습니다:\n" + "합성곱 베이스의 모든 레이어를 언프리즈할 수 있습니다:\n" ] }, { @@ -962,7 +972,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "그러나 모든 층을 한 번에 해동하는 것은 최선의 방법이 아닙니다. 먼저 몇 개의 마지막 합성곱 층만 해동할 수 있습니다. 왜냐하면 이 층들은 우리 이미지와 관련된 더 높은 수준의 패턴을 포함하고 있기 때문입니다. 예를 들어, 시작할 때 마지막 4개 층을 제외한 모든 층을 고정할 수 있습니다:\n" + "그러나 한 번에 모두를 동결 해제하는 것은 최선의 방법이 아닙니다. 이미지에 관련된 더 높은 수준의 패턴을 포함하는 몇 개의 마지막 합성곱 계층만 먼저 동결 해제할 수 있습니다. 예를 들어, 처음에는 마지막 4개를 제외한 모든 계층을 동결할 수 있습니다: \n" ] }, { @@ -1001,11 +1011,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "훈련 가능한 매개변수의 수가 크게 증가했지만, 여전히 전체 매개변수의 약 50% 수준입니다.\n", + "학습 가능한 매개변수의 수가 상당히 증가했지만, 여전히 전체 매개변수의 약 50% 정도임을 관찰하세요.\n", "\n", - "동결을 해제한 후에는 몇 번 더 에포크를 진행할 수 있습니다 (이 예제에서는 한 번만 진행합니다). 또한, 사전 학습된 가중치에 미치는 영향을 최소화하기 위해 더 낮은 학습률을 선택할 수도 있습니다. 하지만 낮은 학습률을 사용하더라도 훈련 초반에는 정확도가 떨어질 수 있으며, 이후 고정된 가중치를 사용한 경우보다 약간 더 높은 수준에 도달하게 됩니다.\n", + "동결 해제 후에는 몇 번 더 에포크를 진행할 수 있습니다(예제에서는 한 번만 수행합니다). 사전 학습된 가중치에 미치는 영향을 최소화하기 위해 더 낮은 학습률을 선택할 수도 있습니다. 하지만 낮은 학습률을 사용하더라도 훈련 초기에는 정확도가 떨어졌다가, 결국 고정 가중치의 경우보다 약간 더 높은 수준에 도달할 것으로 기대할 수 있습니다.\n", "\n", - "> **Note:** 이 훈련은 훨씬 느리게 진행됩니다. 네트워크의 많은 레이어를 통해 그래디언트를 역전파해야 하기 때문입니다!\n" + "> **참고:** 이 훈련은 네트워크의 여러 계층을 거쳐 역전파해야 하기 때문에 훨씬 느리게 진행됩니다!\n" ] }, { @@ -1029,18 +1039,18 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "우리는 더 많은 매개변수를 가진 더 강력한 네트워크를 사용하고 있기 때문에 훈련 정확도가 더 높아질 가능성이 있습니다. 하지만 검증 정확도는 그렇게 많이 증가하지 않을 것입니다.\n", + "우리는 더 많은 매개변수를 가진 더 강력한 네트워크를 사용하고 있기 때문에 더 높은 훈련 정확도를 달성할 가능성이 높지만, 검증 정확도는 그만큼 크게 증가하지 않을 것입니다.\n", "\n", - "네트워크의 몇 가지 추가 레이어를 자유롭게 해제하고 더 훈련하여 더 높은 정확도를 달성할 수 있는지 확인해보세요!\n" + "네트워크의 몇 개 층을 더 해제하고 더 많이 훈련시켜 보면서 더 높은 정확도를 달성할 수 있는지 확인해 보세요!\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## 기타 컴퓨터 비전 모델\n", + "## 다른 컴퓨터 비전 모델\n", "\n", - "VGG-16은 가장 간단한 컴퓨터 비전 아키텍처 중 하나입니다. Keras는 더 많은 사전 학습된 네트워크를 제공합니다. 그중 가장 자주 사용되는 것은 Microsoft에서 개발한 **ResNet** 아키텍처와 Google의 **Inception**입니다. 예를 들어, 가장 간단한 ResNet-50 모델의 아키텍처를 살펴보겠습니다 (ResNet은 깊이에 따라 다양한 모델로 구성된 가족이며, 정말 깊은 모델이 어떤 모습인지 보고 싶다면 ResNet-152를 실험해볼 수 있습니다).\n" + "VGG-16은 가장 단순한 컴퓨터 비전 아키텍처 중 하나입니다. Keras는 더 많은 사전 학습 네트워크를 제공합니다. 그 중 가장 자주 사용되는 것은 Microsoft에서 개발한 **ResNet** 아키텍처와 Google의 Inception입니다. 예를 들어, 가장 간단한 ResNet-50 모델의 아키텍처를 살펴보겠습니다(ResNet은 깊이가 다른 모델들로 구성된 시리즈이며, 정말 깊은 모델이 궁금하다면 ResNet-152도 실험해볼 수 있습니다):\n" ] }, { @@ -1442,29 +1452,29 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "모델은 익숙한 구성 요소들로 이루어져 있습니다: 합성곱 층, 풀링 층, 그리고 마지막 밀집 분류기. 우리는 이 모델을 VGG-16을 전이 학습에 사용했던 것과 동일한 방식으로 사용할 수 있습니다. 위의 코드를 사용하여 다른 ResNet 모델을 기반 모델로 설정하고 실험해 보며 정확도가 어떻게 변하는지 확인할 수 있습니다.\n", + "보시다시피, 이 모델은 동일한 익숙한 빌딩 블록을 포함하고 있습니다: 합성곱 층, 풀링 층, 그리고 최종 밀집 분류기. 우리는 이 모델을 이전에 VGG-16으로 전이 학습을 할 때 사용했던 방식과 정확히 동일한 방식으로 사용할 수 있습니다. 위 코드를 여러 가지 ResNet 모델을 기본 모델로 사용해 실험해 보면서 정확도가 어떻게 변하는지 확인해 보세요.\n", "\n", "## 배치 정규화\n", "\n", - "이 네트워크는 또 다른 유형의 층을 포함하고 있습니다: **배치 정규화**. 배치 정규화의 아이디어는 신경망을 통해 흐르는 값들을 적절한 범위로 조정하는 것입니다. 일반적으로 신경망은 모든 값이 [-1,1] 또는 [0,1] 범위에 있을 때 가장 잘 작동하며, 이 때문에 입력 데이터를 적절히 스케일링/정규화합니다. 하지만 심층 네트워크를 훈련하는 동안 값들이 이 범위를 크게 벗어나는 경우가 발생할 수 있으며, 이는 훈련을 어렵게 만듭니다. 배치 정규화 층은 현재 미니배치의 모든 값에 대해 평균과 표준 편차를 계산하고, 이를 사용해 신호를 정규화한 후 신경망 층을 통과시킵니다. 이는 심층 네트워크의 안정성을 크게 향상시킵니다.\n" + "이 네트워크는 또 다른 유형의 층을 포함하고 있습니다: **배치 정규화**. 배치 정규화의 아이디어는 신경망을 통과하는 값들을 올바른 구간으로 가져오는 것입니다. 일반적으로 신경망은 모든 값이 [-1,1] 또는 [0,1] 범위에 있을 때 가장 잘 작동하며, 그래서 입력 데이터를 그에 맞게 스케일하거나 정규화합니다. 하지만 깊은 네트워크를 훈련하는 동안 값이 이 범위를 크게 벗어날 수 있는데, 이는 훈련을 어렵게 만듭니다. 배치 정규화 층은 현재 미니배치의 모든 값에 대해 평균과 표준편차를 계산하고, 이를 사용해 신호를 정규화한 후 신경망 층으로 전달합니다. 이는 깊은 네트워크의 안정성을 크게 향상시킵니다.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## 주요 내용\n", + "## 요점\n", "\n", - "전이 학습을 활용하여 사용자 지정 객체 분류 작업을 위한 분류기를 빠르게 구성하고 높은 정확도를 달성할 수 있었습니다. 하지만 이 예시는 완전히 공정하다고 볼 수는 없습니다. 원래 VGG-16 네트워크는 고양이와 개를 인식하도록 사전 학습되었기 때문에, 네트워크에 이미 존재하는 대부분의 패턴을 재사용한 셈입니다. 생산 라인의 세부 사항이나 다양한 나뭇잎과 같은 더 특이한 도메인별 객체에서는 정확도가 낮아질 가능성이 있습니다.\n", + "전이 학습을 사용하여 커스텀 객체 분류 작업을 빠르게 위한 분류기를 구성하고 높은 정확도를 달성할 수 있었습니다. 그러나 이 예제는 완전히 공정하지 않았는데, 원래 VGG-16 네트워크가 고양이와 개를 인식하도록 사전 학습되었기 때문에 네트워크에 이미 존재하는 대부분의 패턴을 재사용한 것에 불과했습니다. 공장 생산 라인의 세부 사항이나 다양한 나뭇잎처럼 더 이국적이고 도메인 특화된 객체에 대해서는 정확도가 더 낮을 것으로 예상할 수 있습니다.\n", "\n", - "현재 우리가 해결하려는 더 복잡한 작업은 더 높은 계산 능력을 요구하며, CPU만으로는 쉽게 해결할 수 없습니다. 다음 단원에서는 동일한 모델을 더 적은 계산 자원을 사용하여 훈련시키는 경량화된 구현을 시도해 볼 것입니다. 이 방법은 정확도가 약간 낮아지긴 하지만, 더 효율적인 자원 활용을 가능하게 합니다.\n" + "지금 해결하고 있는 더 복잡한 작업들은 더 높은 계산 능력을 요구하며 CPU에서 쉽게 해결할 수 없다는 것을 알 수 있습니다. 다음 단원에서는 더 가벼운 구현을 사용하여 동일한 모델을 더 적은 계산 자원으로 훈련시키는 방법을 시도할 것이며, 이 경우 정확도는 약간만 낮아집니다.\n" ] }, { "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\n" ] } ], @@ -1485,12 +1495,6 @@ "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.10" - }, - "coopTranslator": { - "original_hash": "c189abc107848f96051085cc30945129", - "translation_date": "2025-08-31T12:45:20+00:00", - "source_file": "lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb", - "language_code": "ko" } }, "nbformat": 4, diff --git a/translations/ko/lessons/5-NLP/README.md b/translations/ko/lessons/5-NLP/README.md index e80bc71a..aa27adf5 100644 --- a/translations/ko/lessons/5-NLP/README.md +++ b/translations/ko/lessons/5-NLP/README.md @@ -1,69 +1,73 @@ -# 자연어 처리 +# 자연어 처리 -![NLP 작업 요약 스케치](../../../../translated_images/ko/ai-nlp.b22dcb8ca4707cea.webp) +![NLP 작업 요약 스케치](../../../../translated_images/ko/ai-nlp.b22dcb8ca4707cea.webp) -이 섹션에서는 **자연어 처리(NLP)**와 관련된 작업을 처리하기 위해 신경망을 사용하는 방법에 대해 집중적으로 다룹니다. 컴퓨터가 해결할 수 있기를 바라는 많은 NLP 문제들이 있습니다: +이 섹션에서는 **자연어 처리 (NLP)** 관련 작업을 다루기 위해 신경망을 사용하는 것에 집중할 것입니다. 컴퓨터가 해결할 수 있길 원하는 여러 NLP 문제가 있습니다: -* **텍스트 분류**는 텍스트 시퀀스와 관련된 전형적인 분류 문제입니다. 예를 들어, 이메일 메시지를 스팸과 비스팸으로 분류하거나, 기사를 스포츠, 비즈니스, 정치 등으로 분류하는 작업이 있습니다. 또한, 챗봇을 개발할 때 사용자가 무엇을 말하고 싶어하는지 이해해야 하는 경우가 많습니다. 이 경우 **의도 분류(intent classification)**를 다루게 됩니다. 의도 분류에서는 종종 많은 카테고리를 처리해야 합니다. -* **감정 분석**은 전형적인 회귀 문제로, 문장의 긍정적/부정적 의미를 나타내는 숫자(감정)를 부여해야 합니다. 감정 분석의 더 발전된 버전은 **측면 기반 감정 분석(ABSA)**으로, 문장 전체가 아니라 문장의 다른 부분(측면)에 감정을 부여합니다. 예: *이 레스토랑에서 요리는 마음에 들었지만 분위기는 끔찍했어요.* -* **개체명 인식(NER)**은 텍스트에서 특정 개체를 추출하는 문제를 말합니다. 예를 들어, *내일 파리로 비행기를 타야 해요*라는 문장에서 *내일*은 날짜(DATE)를, *파리*는 위치(LOCATION)를 나타낸다는 것을 이해해야 할 수 있습니다. -* **키워드 추출**은 NER과 유사하지만, 특정 개체 유형에 대해 사전 학습 없이 문장의 의미에 중요한 단어를 자동으로 추출해야 합니다. -* **텍스트 클러스터링**은 기술 지원 대화에서 유사한 요청을 그룹화하는 것처럼 유사한 문장을 함께 묶고 싶을 때 유용합니다. -* **질문 응답**은 모델이 특정 질문에 답할 수 있는 능력을 말합니다. 모델은 텍스트 단락과 질문을 입력으로 받아 질문에 대한 답이 포함된 텍스트의 위치를 제공하거나, 때로는 답변 텍스트를 생성해야 합니다. -* **텍스트 생성**은 모델이 새로운 텍스트를 생성할 수 있는 능력입니다. 이는 *텍스트 프롬프트*를 기반으로 다음 문자/단어를 예측하는 분류 작업으로 간주될 수 있습니다. GPT-3와 같은 고급 텍스트 생성 모델은 [프롬프트 프로그래밍](https://towardsdatascience.com/software-3-0-how-prompting-will-change-the-rules-of-the-game-a982fbfe1e0) 또는 [프롬프트 엔지니어링](https://medium.com/swlh/openai-gpt-3-and-prompt-engineering-dcdc2c5fcd29)이라는 기술을 사용하여 분류와 같은 다른 NLP 작업을 해결할 수 있습니다. -* **텍스트 요약**은 컴퓨터가 긴 텍스트를 "읽고" 몇 문장으로 요약하도록 하는 기술입니다. -* **기계 번역**은 한 언어에서 텍스트를 이해하고 다른 언어로 텍스트를 생성하는 작업의 조합으로 볼 수 있습니다. +* 텍스트 분류는 텍스트 시퀀스에 관련된 전형적인 분류 문제입니다. 예를 들어 이메일 메시지를 스팸 또는 스팸 아님으로 분류하거나, 기사를 스포츠, 비즈니스, 정치 등으로 분류하는 것이 있습니다. 또한 챗봇을 개발할 때는 사용자가 무엇을 말하려고 했는지를 이해해야 하는 경우가 많은데, 이 경우는 의도 분류를 다루고 있는 것입니다. 종종 의도 분류에서는 많은 카테고리를 다뤄야 합니다. +* 감성 분석은 문장의 의미가 얼마나 긍정적이거나 부정적인지를 나타내는 숫자(감성)를 할당해야 하는 전형적인 회귀 문제입니다. 감성 분석의 더 발전된 버전은 **측면 기반 감성 분석**(ABSA)이며, 문장 전체가 아니라 문장의 서로 다른 부분(측면)에 감성을 할당합니다. 예: *이 식당에서는 요리는 좋았지만 분위기는 끔찍했어요.* +* **개체명 인식**(NER)은 텍스트에서 특정 개체를 추출하는 문제를 말합니다. 예를 들어 내일 파리로 비행기를 타야 해요라는 문장에서 내일은 날짜(DATE)를, 파리는 장소(LOCATION)를 의미한다는 것을 이해해야 할 수 있습니다. +* 키워드 추출은 NER과 비슷하지만, 특정 개체 유형을 위한 사전 학습 없이 문장 의미에 중요한 단어들을 자동으로 추출해야 합니다. +* 텍스트 클러스터링은 비슷한 문장들을 그룹화할 때 유용할 수 있습니다. 예를 들어, 기술 지원 대화에서 비슷한 요청들을 묶을 때입니다. +* 질문 응답은 모델이 특정 질문에 답할 수 있는 능력을 말합니다. 모델은 텍스트 구절과 질문을 입력으로 받아 질문에 대한 답이 포함된 텍스트 내 위치를 제공해야 합니다(또는 때로는 답변 텍스트를 생성합니다). + 텍스트 생성은 모델이 새 텍스트를 생성하는 능력입니다. 이는 어떤 텍스트 프롬프트*에 기반해 다음 글자나 단어를 예측하는 분류 작업으로 볼 수 있습니다. GPT-3와 같은 고급 텍스트 생성 모델은 [프롬프트 프로그래밍](https://towardsdatascience.com/software-3-0-how-prompting-will-change-the-rules-of-the-game-a982fbfe1e0) 또는 [프롬프트 엔지니어링](https://medium.com/swlh/openai-gpt-3-and-prompt-engineering-dcdc2c5fcd29)이라고 하는 기법을 사용해 분류와 같은 다른 NLP 작업도 해결할 수 있습니다. +* 텍스트 요약은 컴퓨터가 긴 텍스트를 "읽고" 몇 문장으로 요약하게 하는 기술입니다. +* 기계 번역은 한 언어의 텍스트 이해와 다른 언어의 텍스트 생성의 결합으로 볼 수 있습니다. -초기에는 대부분의 NLP 작업이 문법과 같은 전통적인 방법을 사용하여 해결되었습니다. 예를 들어, 기계 번역에서는 구문 분석기를 사용하여 초기 문장을 구문 트리로 변환한 다음, 문장의 의미를 나타내는 상위 수준의 의미 구조를 추출하고, 이 의미와 대상 언어의 문법을 기반으로 결과를 생성했습니다. 오늘날에는 많은 NLP 작업이 신경망을 사용하여 더 효과적으로 해결되고 있습니다. +처음에는 대부분의 NLP 작업이 문법과 같은 전통적인 방법으로 해결되었습니다. 예를 들어 기계 번역에서는 파서를 사용해 초기 문장을 구문 트리로 변환한 다음, 문장의 의미를 나타내는 더 높은 수준의 의미 구조를 추출하고, 이 의미와 목표 언어의 문법을 기반으로 결과를 생성했습니다. 오늘날에는 많은 NLP 작업이 신경망을 사용해 더 효과적으로 해결됩니다. -> 많은 고전적인 NLP 방법은 [Natural Language Processing Toolkit (NLTK)](https://www.nltk.org) Python 라이브러리에 구현되어 있습니다. 다양한 NLP 작업을 NLTK를 사용하여 해결하는 방법을 다룬 훌륭한 [NLTK Book](https://www.nltk.org/book/)이 온라인에서 제공됩니다. +> 많은 고전적인 NLP 방법들이 [Natural Language Processing Toolkit (NLTK)](https://www.nltk.org) 파이썬 라이브러리로 구현되어 있습니다. 다양한 NLP 작업을 NLTK로 해결하는 방법을 다루는 훌륭한 [NLTK 책](https://www.nltk.org/book/)도 온라인에서 볼 수 있습니다. -이 강의에서는 주로 NLP를 위해 신경망을 사용하는 데 초점을 맞추고, 필요한 경우 NLTK를 사용할 것입니다. +본 과정에서는 주로 NLP를 위해 신경망을 사용하는 데 집중하며 필요에 따라 NLTK를 사용할 것입니다. -우리는 이미 표 형식 데이터와 이미지 처리를 위해 신경망을 사용하는 방법에 대해 배웠습니다. 이러한 데이터 유형과 텍스트의 주요 차이점은 텍스트가 가변 길이의 시퀀스라는 점입니다. 반면, 이미지의 경우 입력 크기가 미리 정해져 있습니다. 합성곱 신경망은 입력 데이터에서 패턴을 추출할 수 있지만, 텍스트의 패턴은 더 복잡합니다. 예를 들어, 부정어가 주어와 여러 단어로 분리될 수 있습니다(예: *나는 오렌지를 좋아하지 않는다* vs. *나는 저 크고 화려하고 맛있는 오렌지를 좋아하지 않는다*). 이러한 경우에도 하나의 패턴으로 해석되어야 합니다. 따라서 언어를 처리하려면 *순환 신경망(recurrent networks)* 및 *트랜스포머(transformers)*와 같은 새로운 신경망 유형을 도입해야 합니다. +우리는 이미 신경망을 표 형태 데이터와 이미지 데이터를 다루는 데 사용하는 방법을 배웠습니다. 이들 데이터와 텍스트의 주요 차이점은 텍스트가 가변 길이의 시퀀스라는 점이고, 이미지의 경우 입력 크기가 미리 정해져 있다는 점입니다. 컨벌루션 네트워크가 입력 데이터에서 패턴을 추출할 수 있지만, 텍스트의 패턴은 더 복잡합니다. 예를 들어, 부정이 주어와 떨어질 수 있는데도(예: *나는 오렌지를 좋아하지 않는다* 와 *나는 그 크고 화려하며 맛있는 오렌지를 좋아하지 않는다*), 이는 하나의 패턴으로 해석되어야 합니다. 따라서 언어를 다루려면 순환 신경망트랜스포머 같은 새로운 신경망 유형을 도입해야 합니다. -## 라이브러리 설치 +## 라이브러리 설치 -이 강의를 로컬 Python 설치에서 실행하려는 경우, 다음 명령을 사용하여 NLP에 필요한 모든 라이브러리를 설치해야 할 수 있습니다: +이 과정을 로컬 파이썬 설치에서 실행하는 경우, 다음 명령어로 NLP를 위한 모든 필요한 라이브러리를 설치해야 할 수 있습니다: -**PyTorch용** +**PyTorch용** ```bash -pip install -r requirements-torch.txt +pip install -r requirements-pytorch.txt ``` -**TensorFlow용** +**TensorFlow용** ```bash pip install -r requirements-tf.txt ``` -> TensorFlow를 사용한 NLP를 [Microsoft Learn](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-tensorflow/?WT.mc_id=academic-77998-cacaste)에서 시도해볼 수 있습니다. +> [Microsoft Learn](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-tensorflow/?WT.mc_id=academic-77998-cacaste)에서 TensorFlow로 NLP를 시도해 볼 수 있습니다. -## GPU 경고 +## GPU 경고 -이 섹션에서는 일부 예제에서 상당히 큰 모델을 훈련시킬 것입니다. -* **GPU 지원 컴퓨터 사용**: 큰 모델 작업 시 대기 시간을 줄이기 위해 GPU 지원 컴퓨터에서 노트북을 실행하는 것이 좋습니다. -* **GPU 메모리 제약**: GPU에서 실행할 경우, 특히 큰 모델을 훈련할 때 GPU 메모리가 부족한 상황이 발생할 수 있습니다. -* **GPU 메모리 소비**: 훈련 중 소비되는 GPU 메모리 양은 미니배치 크기 등 다양한 요인에 따라 달라집니다. -* **미니배치 크기 최소화**: GPU 메모리 문제가 발생하면 코드에서 미니배치 크기를 줄이는 것을 고려해보세요. -* **TensorFlow GPU 메모리 해제**: TensorFlow의 이전 버전은 하나의 Python 커널에서 여러 모델을 훈련할 때 GPU 메모리를 올바르게 해제하지 않을 수 있습니다. GPU 메모리 사용을 효과적으로 관리하려면 TensorFlow가 필요한 경우에만 GPU 메모리를 할당하도록 설정할 수 있습니다. -* **코드 포함**: TensorFlow가 필요한 경우에만 GPU 메모리를 점진적으로 할당하도록 설정하려면 다음 코드를 노트북에 포함하세요: +이 섹션의 일부 예제에서는 꽤 큰 모델을 훈련할 것입니다. +* **GPU 지원 컴퓨터 사용 권장**: 큰 모델로 작업할 때 대기 시간을 줄이기 위해 GPU 지원 컴퓨터에서 노트북을 실행하는 것이 좋습니다. +* **GPU 메모리 제한**: GPU에서 실행 시, 특히 큰 모델 훈련 시 GPU 메모리가 부족할 수 있습니다. +* **GPU 메모리 사용량**: 훈련 중 GPU 메모리 사용량은 미니배치 크기 등 여러 요인에 따라 달라집니다. +* **미니배치 크기 최소화**: GPU 메모리 문제가 발생하면 코드에서 미니배치 크기를 줄이는 방법을 고려하세요. +* **TensorFlow GPU 메모리 해제 문제**: 이전 버전의 TensorFlow는 하나의 파이썬 커널 내에서 여러 모델 훈련 시 GPU 메모리를 제대로 해제하지 않을 수 있습니다. GPU 메모리를 효과적으로 관리하려면 TensorFlow가 필요할 때만 GPU 메모리를 할당하도록 설정할 수 있습니다. +* **코드 포함 방법**: TensorFlow가 필요 시에만 GPU 메모리 할당을 늘리도록 하려면 노트북에 다음 코드를 포함하세요: ```python physical_devices = tf.config.list_physical_devices('GPU') if len(physical_devices)>0: tf.config.experimental.set_memory_growth(physical_devices[0], True) ``` + +고전적인 머신러닝 시각에서 NLP를 배우고 싶다면 [이 수업 모음](https://github.com/microsoft/ML-For-Beginners/tree/main/6-NLP)을 방문하세요. -클래식 ML 관점에서 NLP를 배우고 싶다면 [이 강의 모음](https://github.com/microsoft/ML-For-Beginners/tree/main/6-NLP)을 방문하세요. +## 이 섹션에서 +이 섹션에서는 다음 내용을 배울 것입니다: -## 이 섹션에서 -이 섹션에서는 다음 내용을 배웁니다: +* [텍스트를 텐서로 표현하기](13-TextRep/README.md) +* [단어 임베딩](14-Emdeddings/README.md) +* [언어 모델링](15-LanguageModeling/README.md) +* [순환 신경망](16-RNN/README.md) +* [생성 네트워크](17-GenerativeNetworks/README.md) +* [트랜스포머](18-Transformers/README.md) -* [텍스트를 텐서로 표현하기](13-TextRep/README.md) -* [단어 임베딩](14-Emdeddings/README.md) -* [언어 모델링](15-LanguageModeling/README.md) -* [순환 신경망](16-RNN/README.md) -* [생성 네트워크](17-GenerativeNetworks/README.md) -* [트랜스포머](18-Transformers/README.md) +--- -**면책 조항**: -이 문서는 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