chore(i18n): sync translations with latest source changes (chunk 1/1, 18 changes)

This commit is contained in:
localizeflow[bot] 2026-07-08 18:45:30 +00:00
parent 69cc3da18c
commit 451a518936
18 changed files with 688 additions and 505 deletions

View File

@ -5,6 +5,12 @@
"source_file": "AGENTS.md",
"language_code": "ur"
},
"CONTRIBUTING.md": {
"original_hash": "c6fd7e781b67111a90abd166d0ce4aa0",
"translation_date": "2026-07-08T18:45:10+00:00",
"source_file": "CONTRIBUTING.md",
"language_code": "ur"
},
"README.md": {
"original_hash": "12c8eb6bf0867d2f1c32daf613ac5b8b",
"translation_date": "2026-04-06T15:55:21+00:00",
@ -17,6 +23,19 @@
"source_file": "SECURITY.md",
"language_code": "ur"
},
"__translation_failures__": {
"lessons/sketchnotes/LICENSE.md": {
"original_hash": "45ab63a2cd8f5faef6c9b150618837a4",
"source_file": "lessons/sketchnotes/LICENSE.md",
"language_code": "ur",
"failure_date": "2026-07-08T18:36: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:16:56+00:00",
@ -54,8 +73,8 @@
"language_code": "ur"
},
"examples/README.md": {
"original_hash": "0d1babfdcbeb46525f2db3fbaaa54cd7",
"translation_date": "2025-10-03T11:27:17+00:00",
"original_hash": "7883d52c2e2a221e0b07a7b112a149b9",
"translation_date": "2026-07-08T18:32:06+00:00",
"source_file": "examples/README.md",
"language_code": "ur"
},
@ -66,8 +85,8 @@
"language_code": "ur"
},
"lessons/0-course-setup/how-to-run.md": {
"original_hash": "a4717bd9103b9f6cd84d534b83534689",
"translation_date": "2026-01-15T11:48:29+00:00",
"original_hash": "7ad8c7d8604c53649b3d4d1e2f3a6fa1",
"translation_date": "2026-07-08T18:32:29+00:00",
"source_file": "lessons/0-course-setup/how-to-run.md",
"language_code": "ur"
},
@ -191,6 +210,12 @@
"source_file": "lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md",
"language_code": "ur"
},
"lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb": {
"original_hash": "99b816b6a4957ef4100cee4c4221dff9",
"translation_date": "2026-07-08T18:28:35+00:00",
"source_file": "lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb",
"language_code": "ur"
},
"lessons/4-ComputerVision/08-TransferLearning/lab/README.md": {
"original_hash": "7765935c35fcee69b9fe2d0cfd6963e2",
"translation_date": "2025-08-26T09:52:38+00:00",
@ -330,8 +355,8 @@
"language_code": "ur"
},
"lessons/5-NLP/README.md": {
"original_hash": "8ef02a9318257ea140ed3ed74442096d",
"translation_date": "2025-08-26T08:02:19+00:00",
"original_hash": "038df6f1a73e49f6430740da083bfd6d",
"translation_date": "2026-07-08T18:32:57+00:00",
"source_file": "lessons/5-NLP/README.md",
"language_code": "ur"
},

View File

@ -0,0 +1,29 @@
# AI-For-Beginners میں شراکت
AI-For-Beginners میں شراکت کے لیے آپ کی دلچسپی کا شکریہ! ہم ترجمے، اسباق کی اصلاحات، اور فارمیٹنگ کی تصحیحات کا خیرمقدم کرتے ہیں۔
## مائیکروسافٹ کنٹریبیوٹر لائسنس ایگریمنٹ (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)۔
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**ڈس کلیمر**:
یہ دستاویز AI ترجمہ سروس [Co-op Translator](https://github.com/Azure/co-op-translator) کے ذریعے ترجمہ کی گئی ہے۔ جبکہ ہم درستگی کے لیے کوشاں ہیں، براہ کرم اس بات سے آگاہ رہیں کہ خودکار ترجمے میں غلطیاں یا عدم درستیاں ہو سکتی ہیں۔ اصل دستاویز اپنے مادری زبان میں مستند ماخذ سمجھی جائے گی۔ حساس معلومات کے لیے پیشہ ور انسانی ترجمہ کی سفارش کی جاتی ہے۔ اس ترجمے کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تشریح کی ذمہ داری ہم قبول نہیں کرتے۔
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

View File

@ -1,27 +1,27 @@
# ابتدائی افراد کے لیے AI کی مثالیں
# ابتدائی افراد کے لئے دوستانہ AI مثالیں
خوش آمدید! یہ ڈائریکٹری سادہ اور خود مختار مثالیں فراہم کرتی ہے تاکہ آپ AI اور مشین لرننگ کے ساتھ شروعات کر سکیں۔ ہر مثال کو ابتدائی افراد کے لیے آسان بنایا گیا ہے، جس میں تفصیلی تبصرے اور مرحلہ وار وضاحت شامل ہے۔
خوش آمدید! یہ ڈائریکٹری آسان، خود مختار مثالیں رکھتی ہے جو آپ کو AI اور مشین لرننگ کے ساتھ شروعات کرنے میں مدد دیتی ہیں۔ ہر مثال کو ابتدائی افراد کے لئے آسان اور تفصیلی تبصروں اور مرحلہ وار وضاحتوں کے ساتھ ڈیزائن کیا گیا ہے۔
## 📚 مثالوں کا جائزہ
| مثال | وضاحت | مشکل | ضروریات |
|------|-------|-------|----------|
| [ہیلو AI ورلڈ](../../../examples/01-hello-ai-world.py) | آپ کا پہلا AI پروگرام - سادہ پیٹرن کی پہچان | ⭐ ابتدائی | Python کی بنیادی معلومات |
| [سادہ نیورل نیٹ ورک](../../../examples/02-simple-neural-network.py) | نیورل نیٹ ورک کو شروع سے بنائیں | ⭐⭐ ابتدائی+ | Python، بنیادی ریاضی |
| [امیج کلاسیفائر](./03-image-classifier.ipynb) | پہلے سے تربیت یافتہ ماڈل کے ساتھ تصاویر کی درجہ بندی کریں | ⭐⭐ ابتدائی+ | Python، numpy |
| [ٹیکسٹ سینٹیمنٹ](../../../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
```
@ -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. **"ہیلو AI ورلڈ" سے شروع کریں** - پیٹرن کی پہچان کی بنیادی باتیں سیکھیں
2. **سادہ نیورل نیٹ ورک بنائیں** - نیورل نیٹ ورک کیسے کام کرتے ہیں سمجھیں
3. **امیج کلاسیفائر آزمائیں** - حقیقی تصاویر کے ساتھ AI کو ایکشن میں دیکھیں
4. **ٹیکسٹ سینٹیمنٹ کا تجزیہ کریں** - قدرتی زبان کی پروسیسنگ کو دریافت کریں
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)
- [نیورل نیٹ ورکس](../lessons/3-NeuralNetworks/README.md)
- [کمپیوٹر وژن](../lessons/4-ComputerVision/README.md)
- [قدرتی زبان کی پروسیسنگ](../lessons/5-NLP/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) کا استعمال کرتے ہوئے ترجمہ کی گئی ہے۔ ہم درستگی کے لیے کوشش کرتے ہیں، لیکن براہ کرم آگاہ رہیں کہ خودکار ترجمے میں غلطیاں یا غیر درستیاں ہو سکتی ہیں۔ اصل دستاویز کو اس کی اصل زبان میں مستند ذریعہ سمجھا جانا چاہیے۔ اہم معلومات کے لیے، پیشہ ور انسانی ترجمہ کی سفارش کی جاتی ہے۔ ہم اس ترجمے کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تشریح کے ذمہ دار نہیں ہیں۔
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**ڈس کلیمر**:
یہ دستاویز AI ترجمہ سروس [Co-op Translator](https://github.com/Azure/co-op-translator) کے ذریعے ترجمہ کی گئی ہے۔ جبکہ ہم درستگی کے لیے کوشاں ہیں، براہ کرم اس بات سے آگاہ رہیں کہ خودکار ترجمے میں غلطیاں یا عدم درستیاں ہو سکتی ہیں۔ اصل دستاویز اپنے مادری زبان میں مستند ماخذ سمجھی جائے گی۔ حساس معلومات کے لیے پیشہ ور انسانی ترجمہ کی سفارش کی جاتی ہے۔ اس ترجمے کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تشریح کی ذمہ داری ہم قبول نہیں کرتے۔
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

View File

@ -1,10 +1,10 @@
# کوڈ کیسے چلائیں
# کوڈ کو کیسے چلائیں
اس نصاب میں بہت سے قابل عمل مثالیں اور لیب شامل ہیں جنہیں آپ چلانا چاہیں گے۔ ایسا کرنے کے لیے، آپ کو اس نصاب کے حصے کے طور پر فراہم کردہ Jupyter نوٹ بکس میں Python کوڈ چلانے کی صلاحیت کی ضرورت ہے۔ کوڈ چلانے کے کئی اختیارات موجود ہیں:
اس نصاب میں بہت سے قابل عمل مثالیں اور لیبز شامل ہیں جنہیں آپ چلانا چاہیں گے۔ ایسا کرنے کے لیے، آپ کو اس نصاب کے حصے کے طور پر فراہم کردہ Jupyter Notebooks میں Python کوڈ چلانے کی صلاحیت کی ضرورت ہے۔ کوڈ چلانے کے لیے آپ کے پاس کئی اختیارات ہیں:
## اپنے کمپیوٹر پر مقامی طور پر چلانا
## اپنے کمپیوٹر پر مقامی طور پر چلائیں
اپنے کمپیوٹر پر کوڈ چلانے کے لیے، Python کی تنصیب ضروری ہے۔ ایک تجویز یہ ہے کہ **[miniconda](https://conda.io/en/latest/miniconda.html)** انسٹال کریں - یہ ایک نسبتاً ہلکی تنصیب ہے جو مختلف Python **ورچوئل ماحولیات** کے لیے `conda` پیکج مینیجر کی حمایت کرتی ہے۔
اپنے کمپیوٹر پر کوڈ چلانے کے لیے Python کی تنصیب ضروری ہے۔ ایک تجویز ہے کہ **[miniconda](https://conda.io/en/latest/miniconda.html)** انسٹال کریں - یہ ایک نسبتاً ہلکی پھلکی تنصیب ہے جو `conda` پیکیج مینیجر کو مختلف Python **ورچوئل ماحول** کے لیے سپورٹ کرتی ہے۔
miniconda انسٹال کرنے کے بعد، ریپوزٹری کلون کریں اور اس کورس کے لیے استعمال ہونے والا ورچوئل ماحول بنائیں:
@ -15,19 +15,19 @@ conda env create --name ai4beg --file .devcontainer/environment.yml
conda activate ai4beg
```
### Visual Studio Code میں Python Extension کے ساتھ استعمال
### Python ایکسٹینشن کے ساتھ Visual Studio Code کا استعمال
یہ نصاب سب سے بہتر اس وقت استعمال ہوتا ہے جب اسے [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 کی توسیعات انسٹال کرنے کی تجویز دے گا۔ آپ کو منیکونڈا بھی انسٹال کرنا ہوگا جیسا کہ اوپر بیان کیا گیا ہے۔
> **نوٹ**: جب آپ ریپوزٹری کلون کریں اور VS Code میں ڈائریکٹری کھولیں، تو یہ خود بخود آپ کو Python ایکسٹینشنز انسٹال کرنے کی تجویز دے گا۔ آپ کو اوپر بیان کردہ طریقے سے miniconda بھی انسٹال کرنا ہوگا۔
> **نوٹ**: اگر VS Code آپ کو ریپوزٹری کو کنٹینر میں دوبارہ کھولنے کا مشورہ دے تو آپ کو یہ رد کر دینا چاہیے تاکہ مقامی Python تنصیب استعمال کی جا سکے۔
> **نوٹ**: اگر VS Code آپ کو ریپوزٹری کو کنٹینر میں دوبارہ کھولنے کی تجویز دیتا ہے، تو آپ کو لوکل Python انسٹالیشن استعمال کرنے کے لیے اسے مسترد کرنا چاہیے۔
### براؤزر میں Jupyter استعمال کرنا
### براؤزر میں Jupyter کا استعمال
آپ اپنے کمپیوٹر کے براؤزر سے Jupyter ماحول بھی استعمال کر سکتے ہیں۔ کلاسیکی Jupyter اور JupyterHub دونوں آٹو مکمل کرنے، کوڈ ہائلائٹنگ، وغیرہ کے ساتھ سہولت بخش ترقیاتی ماحول فراہم کرتے ہیں۔
آپ اپنے کمپیوٹر میں براؤزر سے Jupyter ماحول بھی استعمال کر سکتے ہیں۔ کلاسیکل Jupyter اور JupyterHub دونوں آسان ترقیاتی ماحول فراہم کرتے ہیں جن میں آٹو کمپلیشن، کوڈ ہائلائٹنگ وغیرہ شامل ہیں۔
مقامی Jupyter شروع کرنے کے لیے، کورس کی ڈائریکٹری میں جائیں، اور یہ کمانڈ چلائیں:
Jupyter کو مقامی طور پر شروع کرنے کے لیے، کورس کی ڈائریکٹری میں جائیں، اور درج ذیل کو چلائیں:
```bash
jupyter notebook
@ -40,32 +40,32 @@ jupyterhub
### کنٹینر میں چلانا
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** بٹن پر کلک کریں، 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 سپورٹ سے بہت فائدہ اٹھائیں گے۔ مثلاً ماڈل کی تربیت بصورت دیگر بہت سست ہو سکتی ہے۔ آپ چند اختیارات اپنائیں، خاص طور پر اگر آپ کے پاس کلاؤڈ تک رسائی ہو، چاہے وہ [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-سیریز 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 Notebooks اپ لوڈ کر کے انہیں ایک ایک کر کے چلا سکتے ہیں۔
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**انتباہ**:
یہ دستاویز AI ترجمہ سروس [Co-op Translator](https://github.com/Azure/co-op-translator) کے ذریعے ترجمہ کی گئی ہے۔ اگرچہ ہم درستگی کی کوشش کرتے ہیں، براہ کرم اس بات سے آگاہ رہیں کہ خودکار ترجمے میں غلطیاں یا عدم مطابقت ہو سکتی ہے۔ اصل دستاویز اپنی مادری زبان میں ماخذ کا معتبر ذریعہ سمجھا جانا چاہیے۔ اہم معلومات کے لیے پیشہ ور انسانی ترجمہ کی سفارش کی جاتی ہے۔ ہم اس ترجمے کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تشریح کے ذمہ دار نہیں ہیں۔
**ڈس کلیمر**:
یہ دستاویز AI ترجمہ سروس [Co-op Translator](https://github.com/Azure/co-op-translator) کے ذریعے ترجمہ کی گئی ہے۔ جبکہ ہم درستگی کے لیے کوشاں ہیں، براہ کرم اس بات سے آگاہ رہیں کہ خودکار ترجمے میں غلطیاں یا عدم درستیاں ہو سکتی ہیں۔ اصل دستاویز اپنے مادری زبان میں مستند ماخذ سمجھی جائے گی۔ حساس معلومات کے لیے پیشہ ور انسانی ترجمہ کی سفارش کی جاتی ہے۔ اس ترجمے کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تشریح کی ذمہ داری ہم قبول نہیں کرتے۔
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

View File

@ -4,11 +4,11 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"# پہلے سے تربیت یافتہ ماڈلز اور ٹرانسفر لرننگ\n",
"# پہلے سے تربیت یافتہ ماڈل اور منتقلی سیکھنا\n",
"\n",
"سی این اینز کی تربیت میں کافی وقت لگ سکتا ہے، اور اس کام کے لیے بہت زیادہ ڈیٹا کی ضرورت ہوتی ہے۔ تاہم، زیادہ تر وقت نیٹ ورک کے بہترین کم سطحی فلٹرز سیکھنے میں صرف ہوتا ہے جو تصاویر سے پیٹرنز نکالنے کے لیے استعمال ہوتے ہیں۔ ایک قدرتی سوال پیدا ہوتا ہے - کیا ہم ایک ڈیٹاسیٹ پر تربیت یافتہ نیورل نیٹ ورک کو استعمال کر سکتے ہیں اور اسے مختلف تصاویر کی درجہ بندی کے لیے بغیر مکمل تربیتی عمل کے ڈھال سکتے ہیں؟\n",
"CNNs کی تربیت میں بہت وقت لگ سکتا ہے، اور اس کام کے لیے بہت سا ڈیٹا درکار ہوتا ہے۔ تاہم، زیادہ تر وقت بہترین کم سطحی فلٹرز سیکھنے میں صرف ہوتا ہے جو نیٹ ورک تصویر سے پیٹرن نکالنے کے لیے استعمال کر رہا ہوتا ہے۔ ایک قدرتی سوال پیدا ہوتا ہے - کیا ہم کسی ایک ڈیٹا سیٹ پر تربیت یافتہ نیورل نیٹ ورک کو استعمال کر کے بغیر مکمل تربیتی عمل کے مختلف تصاویر کی درجہ بندی کے لیے ڈھال سکتے ہیں؟\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 Cats vs. Dogs Dataset](https://www.kaggle.com/c/dogs-vs-cats) استعمال کریں گے، جسے [مایکروسافٹ سے بھی ڈاؤن لوڈ کیا جا سکتا ہے](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"
"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",
@ -510,20 +520,17 @@
"cell_type": "markdown",
"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"
"یہاں چند اہم باتیں ہیں:\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": [
"## جی پی یو پر حساب کتاب\n",
"## جی پی یو کمپیوٹیشنز\n",
"\n",
"ڈیپ نیورل نیٹ ورکس، جیسے کہ VGG-16 اور دیگر جدید آرکیٹیکچرز، کو چلانے کے لیے کافی زیادہ کمپیوٹیشنل پاور کی ضرورت ہوتی ہے۔ اگر جی پی یو ایکسیلیریشن دستیاب ہو تو اسے استعمال کرنا سمجھداری کی بات ہے۔ خوش قسمتی سے، اگر جی پی یو دستیاب ہو تو کیراس خود بخود جی پی یو پر حساب کتاب کو تیز کر دیتا ہے۔ ہم درج ذیل کوڈ کے ذریعے چیک کر سکتے ہیں کہ آیا ٹینسر فلو جی پی یو استعمال کرنے کے قابل ہے یا نہیں:\n"
"ڈیپ نیورل نیٹ ورکس، جیسے کہ VGG-16 اور دیگر زیادہ جدید آرکیٹیکچرز کو چلانے کے لیے کافی زیادہ کمپیوٹیشنل طاقت کی ضرورت ہوتی ہے۔ اگر جی پی یو دستیاب ہو تو اسے استعمال کرنا منطقی ہے۔ خوش قسمتی سے، Keras خود بخود جی پی یو پر کمپیوٹیشنز کو تیز کرتا ہے اگر وہ دستیاب ہو۔ ہم یہ چیک کر سکتے ہیں کہ Tensorflow جی پی یو استعمال کرنے کے قابل ہے یا نہیں، درج ذیل کوڈ کے ذریعے:\n"
]
},
{
@ -629,9 +636,10 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"## وی جی جی فیچرز نکالنا\n",
"\n",
"اگر ہم اپنی تصاویر سے فیچرز نکالنے کے لیے وی جی جی-16 استعمال کرنا چاہتے ہیں، تو ہمیں ماڈل کی آخری درجہ بندی کی تہوں کے بغیر ضرورت ہوگی۔ ہم وی جی جی-16 ماڈل کو بغیر اوپر کی تہوں کے اس کوڈ کے ذریعے انسٹیٹیوٹ کر سکتے ہیں:\n"
"## VGG خصوصیات نکالنا\n",
"\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",
"## ایک 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 بطور فیچر ایکسٹریکٹر کام کرے، اور دوبارہ ٹرین نہ ہو۔ اس لیے، ہمیں **convolutional feature extractor کے وزنوں کو فریز کرنا** ہوگا۔ ہم نیٹ ورک کی پہلی پرت تک `model.layers[0]` کال کرکے رسائی حاصل کر سکتے ہیں، اور ہمیں صرف `trainable` پراپرٹی کو `False` پر سیٹ کرنا ہے۔\n",
"\n",
"> **نوٹ**: فیچر ایکسٹریکٹر کے ویٹس کو فریز کرنا ضروری ہے، کیونکہ بصورت دیگر غیر تربیت یافتہ کلاسیفائر لئیر کنوولوشنل ایکسٹریکٹر کے اصل پری ٹرینڈ ویٹس کو خراب کر سکتی ہے۔\n",
"> **نوٹ**: فیچر ایکسٹریکٹر کے وزنوں کو فریز کرنا ضروری ہے، کیونکہ ورنہ بغیر تربیت کی گئی کلاسیفائر پرت convolutional extractor کے اصل پری ٹرینڈ وزنوں کو خراب کر سکتی ہے۔\n",
"\n",
"آپ دیکھ سکتے ہیں کہ اگرچہ ہمارے نیٹ ورک میں کل پیرامیٹرز کی تعداد تقریباً 15 ملین ہے، ہم صرف 25 ہزار پیرامیٹرز کو تربیت دے رہے ہیں۔ باقی تمام ٹاپ لیول کنوولوشنل فلٹرز کے پیرامیٹرز پہلے سے تربیت یافتہ ہیں۔ یہ اچھی بات ہے، کیونکہ ہم کم تعداد میں مثالوں کے ساتھ کم تعداد میں پیرامیٹرز کو بہتر طریقے سے ٹرین کر سکتے ہیں۔\n",
"آپ نوٹ کر سکتے ہیں کہ اگرچہ ہمارے نیٹ ورک میں کل پیرامیٹرز کی تعداد تقریباً 15 ملین ہے، ہم صرف 25 ہزار پیرامیٹرز کو ٹرین کر رہے ہیں۔ باقی تمام ٹاپ لیول convolutional فلٹرز کے پیرامیٹرز پری ٹرینڈ ہیں۔ یہ اچھا ہے، کیونکہ ہم کم تعداد کے پیرامیٹرز کو کم تعداد کی مثالوں کے ساتھ فائن ٹیون کر سکتے ہیں۔\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",
"> **نوٹ:** یہ ضروری ہے کہ آپ پہلے پیرامیٹرز کو فریز کریں اور کئی ایپوکز کی تربیت کریں تاکہ کلاسفیکیشن لیئر میں ویٹس کو مستحکم کیا جا سکے۔ اگر آپ فوراً ان فریز پیرامیٹرز کے ساتھ اینڈ ٹو اینڈ نیٹ ورک کی تربیت شروع کر دیں، تو بڑے ایررز ممکنہ طور پر کنوولوشنل لیئرز میں پری ٹرینڈ ویٹس کو خراب کر سکتے ہیں۔\n",
"> **نوٹ:** یہ ضروری ہے کہ پہلے پیرامیٹرز کو فریز کریں اور کلاسی فیکیشن پرت میں وزن کو مستحکم کرنے کے لیے چند ایپکس کی تربیت انجام دیں۔ اگر آپ فوراً ان فریز کیے ہوئے پیرامیٹرز کے ساتھ اینڈ ٹو اینڈ نیٹ ورک کی تربیت شروع کر دیتے ہیں، تو بڑے نقص احتمالی طور پر کنولوشنل پرتوں میں پہلے سے تربیت دیے گئے وزن کو خراب کر سکتے ہیں۔\n",
"\n",
"ہمارا کنوولوشنل VGG-16 ماڈل پہلے لیئر کے اندر موجود ہے، اور یہ خود کئی لیئرز پر مشتمل ہے۔ ہم اس کی ساخت کو دیکھ سکتے ہیں:\n"
"ہمارا کنولوشنل VGG-16 ماڈل پہلی پرت کے اندر واقع ہے، اور خود کئی پرتوں پر مشتمل ہے۔ ہم اس کے ڈھانچے پر ایک نظر ڈال سکتے ہیں:\n"
]
},
{
@ -948,7 +956,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"ہم کنوولوشنل بیس کی تمام تہوں کو غیر منجمد کر سکتے ہیں:\n"
"ہم کنولوشنل بیس کی تمام پرتوں کو ان فریز کر سکتے ہیں:\n"
]
},
{
@ -964,7 +972,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"تاہم، ان سب کو ایک ساتھ غیر منجمد کرنا بہترین خیال نہیں ہے۔ ہم پہلے صرف چند آخری تہوں کو غیر منجمد کر سکتے ہیں، کیونکہ وہ اعلیٰ سطح کے نمونے رکھتے ہیں جو ہماری تصاویر کے لیے متعلقہ ہیں۔ مثال کے طور پر، شروع میں، ہم تمام تہوں کو منجمد کر سکتے ہیں سوائے آخری 4 کے:\n"
"تاہم، ایک ساتھ سب کو ان فریز کرنا بہترین خیال نہیں ہے۔ ہم پہلے صرف چند آخری کنولوشنز کی تہوں کو ان فریز کر سکتے ہیں، کیونکہ ان میں اعلیٰ سطح کے پیٹرنز ہوتے ہیں جو ہماری تصاویر کے لئے متعلقہ ہیں۔ مثال کے طور پر، شروع کرنے کے لئے، ہم آخری 4 کے علاوہ سب تہوں کو فریز کر سکتے ہیں: \n"
]
},
{
@ -1003,11 +1011,11 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"مشاہدہ کریں کہ تربیت کے قابل پیرامیٹرز کی تعداد میں نمایاں اضافہ ہوا ہے، لیکن یہ اب بھی تمام پیرامیٹرز کا تقریباً 50% ہے۔\n",
"نوٹ کریں کہ تربیت پذیر پیرامیٹرز کی تعداد میں نمایاں اضافہ ہوا ہے، لیکن یہ اب بھی تمام پیرامیٹرز کا تقریباً 50٪ ہے۔\n",
"\n",
"انجماد ختم کرنے کے بعد، ہم تربیت کے کچھ مزید دور کر سکتے ہیں (ہمارے مثال میں، ہم صرف ایک دور کریں گے)۔ آپ کم سیکھنے کی شرح بھی منتخب کر سکتے ہیں تاکہ پہلے سے تربیت شدہ وزن پر اثر کو کم کیا جا سکے۔ تاہم، کم سیکھنے کی شرح کے باوجود، آپ توقع کر سکتے ہیں کہ تربیت کے آغاز میں درستگی کم ہو جائے گی، اور آخر کار وہ سطح حاصل کرے گی جو مقررہ وزن کے معاملے میں تھوڑی زیادہ ہو۔\n",
"ان فریزنگ کے بعد، ہم کچھ مزید ادوار کی تربیت کر سکتے ہیں (ہمارے مثال میں، ہم صرف ایک کریں گے)۔ آپ کم سیکھنے کی شرح بھی منتخب کر سکتے ہیں، تاکہ پری ٹرینڈ وزنوں پر اثر کو کم سے کم کیا جا سکے۔ تاہم، کم سیکھنے کی شرح کے ساتھ بھی، آپ توقع کر سکتے ہیں کہ تربیت کے آغاز میں درستگی کم ہو جائے، جب تک کہ آخر کار یہ ٹرینڈ وزنوں کے معاملے سے تھوڑا زیادہ سطح تک پہنچ نہ جائے۔\n",
"\n",
"> **نوٹ:** یہ تربیت بہت زیادہ سست ہوتی ہے، کیونکہ ہمیں نیٹ ورک کی کئی تہوں کے ذریعے گریڈینٹس واپس بھیجنے کی ضرورت ہوتی ہے!\n"
"> **نوٹ:** یہ تربیت بہت سست ہوتی ہے، کیونکہ ہمیں نیٹ ورک کی بہت سی پرتوں کے ذریعے گریڈینٹس کو واپس پھیلانا ہوتا ہے!\n"
]
},
{
@ -1031,9 +1039,9 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"ہم ممکنہ طور پر زیادہ تربیتی درستگی حاصل کریں گے، کیونکہ ہم زیادہ طاقتور نیٹ ورک استعمال کر رہے ہیں جس میں زیادہ پیرامیٹرز ہیں، لیکن توثیقی درستگی اتنی زیادہ نہیں بڑھے گی۔\n",
"چونکہ ہم زیادہ طاقتور نیٹ ورک استعمال کر رہے ہیں جس میں زیادہ پیرا میٹرز ہیں، اس لیے ممکن ہے کہ ہم زیادہ تربیتی درستگی حاصل کریں، لیکن توثیقی درستگی اتنی زیادہ نہیں بڑھے گی۔\n",
"\n",
"مزید تہوں کو غیر منجمد کرنے اور مزید تربیت کرنے میں ہچکچاہٹ محسوس نہ کریں، تاکہ یہ دیکھ سکیں کہ کیا آپ زیادہ درستگی حاصل کر سکتے ہیں!\n"
"نیٹ ورک کی چند مزید تہوں کو غیر منجمد کرنے اور مزید تربیت دینے کے لیے بلا جھجھک کوشش کریں، تاکہ دیکھ سکیں کہ کیا آپ زیادہ درستگی حاصل کر سکتے ہیں!\n"
]
},
{
@ -1042,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** گوگل کی طرف سے ہے۔ مثال کے طور پر، آئیے سب سے آسان ResNet-50 ماڈل کی آرکیٹیکچر کو دریافت کرتے ہیں (ResNet مختلف گہرائیوں کے ماڈلز کا ایک خاندان ہے، اگر آپ واقعی گہرے ماڈل کو دیکھنا چاہتے ہیں تو ResNet-152 کے ساتھ تجربہ کر سکتے ہیں):\n"
]
},
{
@ -1444,11 +1452,11 @@
"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"
]
},
{
@ -1457,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<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**ڈس کلیمر**:\nیہ دستاویز AI ترجمہ سروس [Co-op Translator](https://github.com/Azure/co-op-translator) کے ذریعے ترجمہ کی گئی ہے۔ جبکہ ہم درستگی کے لیے کوشاں ہیں، براہ کرم اس بات سے آگاہ رہیں کہ خودکار ترجمے میں غلطیاں یا عدم درستیاں ہو سکتی ہیں۔ اصل دستاویز اپنے مادری زبان میں مستند ماخذ سمجھی جائے گی۔ حساس معلومات کے لیے پیشہ ور انسانی ترجمہ کی سفارش کی جاتی ہے۔ اس ترجمے کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تشریح کی ذمہ داری ہم قبول نہیں کرتے۔\n<!-- CO-OP TRANSLATOR DISCLAIMER END -->\n"
]
}
],
@ -1487,12 +1495,6 @@
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.10"
},
"coopTranslator": {
"original_hash": "c189abc107848f96051085cc30945129",
"translation_date": "2025-08-28T03:09:57+00:00",
"source_file": "lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb",
"language_code": "ur"
}
},
"nbformat": 4,

View File

@ -2,76 +2,72 @@
![NLP کے کاموں کا خلاصہ ایک خاکے میں](../../../../translated_images/ur/ai-nlp.b22dcb8ca4707cea.webp)
اس حصے میں، ہم نیورل نیٹ ورکس کا استعمال کرتے ہوئے **قدرتی زبان کی پروسیسنگ (NLP)** سے متعلق کاموں کو حل کرنے پر توجہ مرکوز کریں گے۔ NLP کے کئی مسائل ہیں جنہیں ہم چاہتے ہیں کہ کمپیوٹر حل کر سکیں:
اس سیکشن میں، ہم نیورل نیٹ ورکس کا استعمال کرتے ہوئے **قدرتی زبان کی پروسیسنگ (NLP)** سے متعلقہ کاموں پر توجہ مرکوز کریں گے۔ بہت سے NLP مسائل ہیں جنہیں ہم چاہتے ہیں کہ کمپیوٹر حل کر سکیں:
* **ٹیکسٹ کی درجہ بندی** ایک عام درجہ بندی کا مسئلہ ہے جو ٹیکسٹ سیکوئنسز سے متعلق ہے۔ مثال کے طور پر، ای میل پیغامات کو اسپام یا نان اسپام کے طور پر درجہ بندی کرنا، یا مضامین کو کھیل، کاروبار، سیاست وغیرہ کے زمرے میں تقسیم کرنا۔ اسی طرح، چیٹ بوٹس تیار کرتے وقت، ہمیں اکثر یہ سمجھنے کی ضرورت ہوتی ہے کہ صارف کیا کہنا چاہتا ہے -- اس صورت میں ہم **ارادے کی درجہ بندی** سے نمٹ رہے ہوتے ہیں۔ ارادے کی درجہ بندی میں اکثر ہمیں کئی زمروں سے نمٹنا پڑتا ہے۔
* **متن کی درجہ بندی** ایک عام درجہ بندی کا مسئلہ ہے جو متن کے سلسلوں سے متعلق ہوتا ہے۔ مثال کے طور پر ای میل پیغامات کو اسپیم اور نان اسپیم میں درجہ بندی کرنا، یا مضامین کو کھیل، کاروبار، سیاست وغیرہ میں تقسیم کرنا۔ اس کے علاوہ، جب چیٹ بوٹس تیار کرتے ہیں، تو اکثر ہمیں سمجھنا ہوتا ہے کہ صارف کیا کہنا چاہتا تھا -- اس صورت میں ہم **نیّت کی درجہ بندی** سے نمٹ رہے ہوتے ہیں۔ اکثر، نیّت کی درجہ بندی میں ہمیں کئی اقسام سے نمٹنا پڑتا ہے۔
* **جذباتی تحلیل** ایک عام ریگریشن مسئلہ ہے، جہاں ہمیں جملے کے مثبت/منفی مطلب کے مطابق ایک نمبر (جذبہ) تفویض کرنا ہوتا ہے۔ جذباتی تحلیل کا ایک زیادہ ترقی یافتہ ورژن **پہلو پر مبنی جذباتی تحلیل** (ABSA) ہے، جہاں ہم جذبات کو پورے جملے کے بجائے اس کے مختلف حصوں (پہلوؤں) سے منسوب کرتے ہیں، مثلاً *اس ریستوران میں میں نے کھانے کو پسند کیا، لیکن ماحول خراب تھا*۔
* **نامزد کردہ اکائی شناخت** (NER) سے مراد متن سے مخصوص اکائیوں کو نکالنے کا مسئلہ ہے۔ مثال کے طور پر، ہمیں سمجھنا ہو سکتا ہے کہ جملے *مجھے کل پیرس جانا ہے* میں لفظ *کل* تاریخ کی نمائندگی کرتا ہے، اور *پیرس* ایک مقام ہے۔
* **اہم الفاظ نکالنا** 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) کہتے ہیں۔
* **متن کا خلاصہ** ایک تکنیک ہے جب ہم کمپیوٹر سے چاہتے ہیں کہ وہ طویل متن "پڑے" اور اسے چند جملوں میں خلاصہ کرے۔
* **مشین ترجمہ** کو ایک زبان کے متن کی سمجھ اور دوسری زبان کے متن کی تخلیق کے امتزاج کے طور پر دیکھا جا سکتا ہے۔
* **جذبات کا تجزیہ** ایک عام ریگریشن مسئلہ ہے، جہاں ہمیں ایک جملے کے مثبت/منفی معنی کے مطابق ایک نمبر (جذبہ) تفویض کرنا ہوتا ہے۔ جذبات کے تجزیے کا ایک زیادہ جدید ورژن **پہلو پر مبنی جذبات کا تجزیہ** (ABSA) ہے، جہاں ہم جذبات کو پورے جملے کے بجائے اس کے مختلف حصوں (پہلوؤں) سے منسلک کرتے ہیں، جیسے: *اس ریستوران میں، مجھے کھانے کا ذائقہ پسند آیا، لیکن ماحول بہت خراب تھا*۔
شروع میں، زیادہ تر NLP کام روایتی طریقوں جیسے قواعد سے حل کیے جاتے تھے۔ مثال کے طور پر، مشین ترجمہ میں جملے کو ترتیب درخت میں تبدیل کرنے کے لیے پارسر استعمال کیے جاتے تھے، پھر جملے کے مطلب کی نمائندگی کے لیے اعلیٰ سطحی معنوی ڈھانچے نکالے جاتے تھے، اور اس مطلب اور ہدف زبان کے قواعد کی بنیاد پر نتیجہ تیار کیا جاتا تھا۔ آج کل، بہت سے NLP کام نیورل نیٹ ورکس کی مدد سے زیادہ مؤثر طریقے سے حل کیے جاتے ہیں۔
* **نامزد ادارے کی شناخت** (NER) اس مسئلے سے متعلق ہے کہ متن سے مخصوص اداروں کو نکالا جائے۔ مثال کے طور پر، ہمیں یہ سمجھنے کی ضرورت ہو سکتی ہے کہ جملے *مجھے کل پیرس جانا ہے* میں *کل* تاریخ کو ظاہر کرتا ہے، اور *پیرس* ایک مقام ہے۔
> بہت سے کلاسیکی NLP طریقے [Natural Language Processing Toolkit (NLTK)](https://www.nltk.org) پائتھن لائبریری میں نافذ کیے گئے ہیں۔ ایک بہترین [NLTK کتاب](https://www.nltk.org/book/) آن لائن دستیاب ہے جو بتاتی ہے کہ مختلف NLP کام NLTK کے ذریعے کیسے حل کیے جا سکتے ہیں۔
* **کلیدی الفاظ کا اخراج** NER سے ملتا جلتا ہے، لیکن ہمیں جملے کے معنی کے لیے اہم الفاظ کو خودکار طور پر نکالنا ہوتا ہے، بغیر کسی مخصوص ادارے کی اقسام کے لیے پہلے سے تربیت کیے۔
ہمارے کورس میں، ہم زیادہ تر نیورل نیٹ ورکس کا NLP کے لیے استعمال پر توجہ دیں گے، اور جہاں ضرورت ہو وہاں NLTK استعمال کریں گے۔
* **ٹیکسٹ کلسٹرنگ** اس وقت مفید ہو سکتی ہے جب ہم ایک جیسے جملوں کو گروپ کرنا چاہتے ہیں، جیسے تکنیکی مدد کی گفتگو میں ایک جیسے سوالات۔
ہم نیورل نیٹ ورکس کے استعمال کے بارے میں پہلے ہی سیکھ چکے ہیں جو ٹیبلر ڈیٹا اور تصاویر سے نمٹتے ہیں۔ ان ڈیٹا کی اقسام اور متن میں بنیادی فرق یہ ہے کہ متن ایک متغیر لمبائی کا سلسلہ ہوتا ہے، جبکہ تصاویر کے معاملے میں ان پٹ کا سائز پہلے سے معلوم ہوتا ہے۔ جب کہ کنولوشنل نیٹ ورکس ان پٹ ڈیٹا سے نمونے نکال سکتے ہیں، متن میں پیٹرنز زیادہ پیچیدہ ہوتے ہیں۔ مثلاً، منفی جملہ ہمیشہ موضوع سے قریب نہیں ہوتا بلکہ کئی الفاظ کے درمیان ہو سکتا ہے (جیسے *مجھے سنتری پسند نہیں* بمقابلہ *مجھے وہ بڑے رنگین مزیدار سنترے پسند نہیں*)، اور اسے ایک ہی پیٹرن کے طور پر سمجھنا چاہیے۔ اس لیے، زبان کو سنبھالنے کے لیے ہمیں نئے نیورل نیٹ ورک کی اقسام متعارف کرانی ہوتی ہیں، جیسے *ریکرنٹ نیٹ ورکس* اور *ٹرانسفارمرز*۔
* **سوالات کے جوابات دینا** ایک ماڈل کی صلاحیت کو ظاہر کرتا ہے کہ وہ کسی مخصوص سوال کا جواب دے سکے۔ ماڈل کو ایک متن کا حصہ اور ایک سوال ان پٹ کے طور پر دیا جاتا ہے، اور اسے متن میں وہ جگہ فراہم کرنی ہوتی ہے جہاں سوال کا جواب موجود ہو (یا بعض اوقات، جواب کا متن تیار کرنا ہوتا ہے)۔
## لائبریریز انسٹال کریں
* **ٹیکسٹ جنریشن** ایک ماڈل کی صلاحیت ہے کہ وہ نیا متن تیار کرے۔ اسے ایک درجہ بندی کے مسئلے کے طور پر سمجھا جا سکتا ہے جو کسی *ٹیکسٹ پرامپٹ* کی بنیاد پر اگلا حرف/لفظ پیش گوئی کرتا ہے۔ جدید ٹیکسٹ جنریشن ماڈلز، جیسے 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 طریقے [Natural Language Processing Toolkit (NLTK)](https://www.nltk.org) پائتھون لائبریری میں نافذ کیے گئے ہیں۔ ایک شاندار [NLTK کتاب](https://www.nltk.org/book/) آن لائن دستیاب ہے جو یہ بتاتی ہے کہ مختلف NLP کاموں کو NLTK کا استعمال کرتے ہوئے کیسے حل کیا جا سکتا ہے۔
ہمارے کورس میں، ہم زیادہ تر NLP کے لیے نیورل نیٹ ورکس کے استعمال پر توجہ مرکوز کریں گے، اور جہاں ضرورت ہو NLTK کا استعمال کریں گے۔
ہم نے پہلے ہی نیورل نیٹ ورکس کو ٹیبلر ڈیٹا اور تصاویر کے ساتھ کام کرنے کے لیے استعمال کرنے کے بارے میں سیکھا ہے۔ ان ڈیٹا کی اقسام اور متن کے درمیان بنیادی فرق یہ ہے کہ متن متغیر لمبائی کا ایک سلسلہ ہے، جبکہ تصاویر کے معاملے میں ان پٹ سائز پہلے سے معلوم ہوتا ہے۔ اگرچہ کنوولوشنل نیٹ ورکس ان پٹ ڈیٹا سے پیٹرن نکال سکتے ہیں، متن میں پیٹرن زیادہ پیچیدہ ہوتے ہیں۔ مثال کے طور پر، ہم یہ دیکھ سکتے ہیں کہ نفی کسی موضوع سے کئی الفاظ کے فاصلے پر ہو سکتی ہے (جیسے: *مجھے نارنگیاں پسند نہیں ہیں*، بمقابلہ *مجھے وہ بڑی رنگین مزیدار نارنگیاں پسند نہیں ہیں*)، اور اسے اب بھی ایک ہی پیٹرن کے طور پر سمجھا جانا چاہیے۔ لہذا، زبان کو سنبھالنے کے لیے ہمیں نیورل نیٹ ورکس کی نئی اقسام متعارف کرانے کی ضرورت ہے، جیسے *ریکررنٹ نیٹ ورکس* اور *ٹرانسفارمرز*۔
## لائبریریاں انسٹال کریں
اگر آپ اس کورس کو چلانے کے لیے مقامی پائتھون انسٹالیشن استعمال کر رہے ہیں، تو آپ کو NLP کے لیے تمام مطلوبہ لائبریریاں درج ذیل کمانڈز کے ذریعے انسٹال کرنے کی ضرورت ہو سکتی ہے:
**PyTorch کے لیے**
**پائٹورش کے لیے**
```bash
pip install -r requirements-torch.txt
```
**TensorFlow کے لیے**
pip install -r requirements-pytorch.txt
```
**ٹینسر فلو کے لیے**
```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 میموری کے مسائل کا سامنا ہو، تو اپنے کوڈ میں منی بیچ کے سائز کو کم کرنے پر غور کریں۔
* **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')
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) دیکھیں۔
اگر آپ کلاسیکی مشین لرننگ نقطہ نظر سے 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) کا استعمال کرتے ہوئے ترجمہ کی گئی ہے۔ ہم درستگی کے لیے کوشش کرتے ہیں، لیکن براہ کرم آگاہ رہیں کہ خودکار ترجمے میں غلطیاں یا غیر درستیاں ہو سکتی ہیں۔ اصل دستاویز کو اس کی اصل زبان میں مستند ذریعہ سمجھا جانا چاہیے۔ اہم معلومات کے لیے، پیشہ ور انسانی ترجمہ کی سفارش کی جاتی ہے۔ ہم اس ترجمے کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تشریح کے ذمہ دار نہیں ہیں۔
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**ڈس کلیمر**:
یہ دستاویز AI ترجمہ سروس [Co-op Translator](https://github.com/Azure/co-op-translator) کے ذریعے ترجمہ کی گئی ہے۔ جبکہ ہم درستگی کے لیے کوشاں ہیں، براہ کرم اس بات سے آگاہ رہیں کہ خودکار ترجمے میں غلطیاں یا عدم درستیاں ہو سکتی ہیں۔ اصل دستاویز اپنے مادری زبان میں مستند ماخذ سمجھی جائے گی۔ حساس معلومات کے لیے پیشہ ور انسانی ترجمہ کی سفارش کی جاتی ہے۔ اس ترجمے کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تشریح کی ذمہ داری ہم قبول نہیں کرتے۔
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

View File

@ -5,6 +5,12 @@
"source_file": "AGENTS.md",
"language_code": "zh-CN"
},
"CONTRIBUTING.md": {
"original_hash": "c6fd7e781b67111a90abd166d0ce4aa0",
"translation_date": "2026-07-08T18:45:17+00:00",
"source_file": "CONTRIBUTING.md",
"language_code": "zh-CN"
},
"README.md": {
"original_hash": "12c8eb6bf0867d2f1c32daf613ac5b8b",
"translation_date": "2026-04-06T15:57:19+00:00",
@ -17,6 +23,19 @@
"source_file": "SECURITY.md",
"language_code": "zh-CN"
},
"__translation_failures__": {
"lessons/sketchnotes/LICENSE.md": {
"original_hash": "45ab63a2cd8f5faef6c9b150618837a4",
"source_file": "lessons/sketchnotes/LICENSE.md",
"language_code": "zh-CN",
"failure_date": "2026-07-08T18:40:20+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-24T20:42:43+00:00",
@ -54,8 +73,8 @@
"language_code": "zh-CN"
},
"examples/README.md": {
"original_hash": "0d1babfdcbeb46525f2db3fbaaa54cd7",
"translation_date": "2025-10-03T11:27:26+00:00",
"original_hash": "7883d52c2e2a221e0b07a7b112a149b9",
"translation_date": "2026-07-08T18:36:57+00:00",
"source_file": "examples/README.md",
"language_code": "zh-CN"
},
@ -66,8 +85,8 @@
"language_code": "zh-CN"
},
"lessons/0-course-setup/how-to-run.md": {
"original_hash": "a4717bd9103b9f6cd84d534b83534689",
"translation_date": "2026-01-15T11:52:39+00:00",
"original_hash": "7ad8c7d8604c53649b3d4d1e2f3a6fa1",
"translation_date": "2026-07-08T18:37:16+00:00",
"source_file": "lessons/0-course-setup/how-to-run.md",
"language_code": "zh-CN"
},
@ -191,6 +210,12 @@
"source_file": "lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md",
"language_code": "zh-CN"
},
"lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb": {
"original_hash": "99b816b6a4957ef4100cee4c4221dff9",
"translation_date": "2026-07-08T18:30:04+00:00",
"source_file": "lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb",
"language_code": "zh-CN"
},
"lessons/4-ComputerVision/08-TransferLearning/lab/README.md": {
"original_hash": "7765935c35fcee69b9fe2d0cfd6963e2",
"translation_date": "2025-08-24T20:35:55+00:00",
@ -330,8 +355,8 @@
"language_code": "zh-CN"
},
"lessons/5-NLP/README.md": {
"original_hash": "8ef02a9318257ea140ed3ed74442096d",
"translation_date": "2025-08-24T20:28:41+00:00",
"original_hash": "038df6f1a73e49f6430740da083bfd6d",
"translation_date": "2026-07-08T18:37:38+00:00",
"source_file": "lessons/5-NLP/README.md",
"language_code": "zh-CN"
},

View File

@ -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 笔记本或课程 markdown 文件中发现拼写错误或 bug
1. 分叉仓库。
2. 修正拼写错误或损坏的链接。
3. 提交带有明确修正说明的拉取请求。
### 2. 提交翻译
我们欢迎将课程翻译成其他语言!请将翻译放置在 `translations/` 目录下,使用已有的文件夹名称(例如 `translations/es/`、`translations/pt-BR/`、`translations/zh-CN/`)。
更多详情,请参见 [etc/CONTRIBUTING.md](etc/CONTRIBUTING.md)。
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**免责声明**
本文件由 AI 翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 翻译完成。尽管我们力求准确,但请注意,自动翻译可能包含错误或不准确之处。原始语言版文件应视为权威来源。对于重要信息,建议使用专业人工翻译。我们对因使用本翻译而产生的任何误解或误释不承担责任。
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

View File

@ -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) | 使用预训练模型对图像进行分类 | ⭐⭐ 初学者+ | Pythonnumpy |
| [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 基础 |
| [简单神经网络](https://github.com/microsoft/AI-For-Beginners/blob/main/examples/02-simple-neural-network.py) | 从零搭建神经网络 | ⭐⭐ 初学者+ | Python基础数学 |
| [图像分类器](https://github.com/microsoft/AI-For-Beginners/blob/main/examples/03-image-classifier.ipynb) | 使用预训练模型分类图像 | ⭐⭐ 初学者+ | Pythonnumpy |
| [文本情感分析](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
# 用于Python脚本
pip install numpy
# For Jupyter notebooks (image classifier)
# 用于Jupyter笔记本图像分类器
pip install jupyter numpy pillow tensorflow
```
@ -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. **尝试图像分类器** - 使用真实图像体验 AI 的实际应用
4. **分析文本情感** - 探索自然语言处理
1. **从 “Hello AI World” 开始** - 学习模式识别基础
2. <strong>构建一个简单神经网络</strong> - 理解神经网络的工作原理
3. <strong>尝试图像分类器</strong> - 体验 AI 在真实图像中的应用
4. <strong>分析文本情感</strong> - 探索自然语言处理
## 💡 初学者提示
- **仔细阅读代码注释** - 它们解释了每一行代码的作用
- **大胆尝试!** - 尝试修改参数,观察结果
- **不要担心无法完全理解** - 学习是一个循序渐进的过程
- **提出问题** - 使用 [讨论板](https://github.com/microsoft/AI-For-Beginners/discussions)
- <strong>仔细阅读代码注释</strong> - 它们解释了每行代码的作用
- **多多实验!** - 尝试修改数值,观察结果
- <strong>不用担心一开始理解全部内容</strong> - 学习需要时间
- <strong>有问题就问</strong> - 使用[讨论区](https://github.com/microsoft/AI-For-Beginners/discussions)
## 🔗 下一步
## 🔗 后续步骤
完成这些示例后,可以探索完整课程:
- [AI 简介](../lessons/1-Intro/README.md)
完成这些示例后,继续探索完整课程:
- [AI 入门介绍](../lessons/1-Intro/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)进行翻译。尽管我们努力确保准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原始语言的文档为权威来源。对于关键信息,建议使用专业人工翻译。因使用本翻译而引起的任何误解或误读,我们概不负责。
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**免责声明**
本文件由 AI 翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 翻译完成。尽管我们力求准确,但请注意,自动翻译可能包含错误或不准确之处。原始语言版文件应视为权威来源。对于重要信息,建议使用专业人工翻译。我们对因使用本翻译而产生的任何误解或误释不承担责任。
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

View File

@ -1,12 +1,12 @@
# 如何运行代码
本课程包含许多可执行的示例和实验,您可能希望运行这些内容。为此,您需要能够在本课程提供的 Jupyter 笔记本中执行 Python 代码。运行代码时,您有以下几种选择:
本课程包含许多可执行示例和实验,您可能想运行它们。为此,您需要能够在本课程提供的 Jupyter Notebook 中执行 Python 代码。您有几种运行代码的选择:
## 在您电脑上本地运行
## 在您的计算机上本地运行
要在本地电脑上运行代码,需要安装 Python。推荐安装 **[miniconda](https://conda.io/en/latest/miniconda.html)** ——这是一种相对轻量级的安装方式,支持不同 Python **虚拟环境**`conda` 包管理器
要在您的计算机上本地运行代码,需要安装 Python。推荐安装 **[miniconda](https://conda.io/en/latest/miniconda.html)** —— 它是较轻量的安装,支持使用 `conda` 包管理器管理不同的 Python <strong>虚拟环境</strong>
安装 miniconda 后,克隆仓库并创建一个虚拟环境来用于本课程
安装 miniconda 后,克隆仓库并创建一个本课程用的虚拟环境:
```bash
git clone http://github.com/microsoft/ai-for-beginners
@ -17,17 +17,17 @@ conda activate ai4beg
### 使用带 Python 扩展的 Visual Studio Code
本课程建议使用带有 [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) 打开学习
在 [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。
> <strong>注意</strong>:克隆并在 VS Code 中打开目录后,它会自动提示您安装 Python 扩展。同时,您还需按照上面描述安装 miniconda。
> **注意**:如果 VS Code 建议您在容器中重新打开仓库,您应拒绝此操作以使用本地 Python 安装。
> <strong>注意</strong>:如果 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——您将进入 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 中打开仓库,这会迅速带您到 Binder 网站,它会构建底层容器,并无缝启动 Jupyter 网页界面。
> **注意**为防止滥用Binder 屏蔽了部分网络资源访问。这可能导致部分依赖于互联网获取模型和/或数据集的代码无法运行您可能需要寻找变通方案。此外Binder 提供的计算资源较为基础,因此训练速度较慢,特别是在后期较复杂的课程中。
> <strong>注意</strong>为防止滥用Binder 对某些网络资源有限制。这可能导致部分代码无法运行(尤其是那些从公共互联网获取模型和/或数据集的代码。您可能需要找到一些解决方法。另外Binder 提供的计算资源相当基础,训练过程会很慢,尤其是在后面更复杂的课程中。
## 在带 GPU 的云端运行
## 云端 GPU 运行
本课程后期一些课程如果支持 GPU 会大大加快速度。例如,模型训练在没有 GPU 的情况下会非常缓慢。您可以考虑以下几种方案,尤其是如果您通过 [Azure for Students](https://azure.microsoft.com/free/students/?WT.mc_id=academic-77998-cacaste) 或您的学校具备云资源访问权限
本课程后期的部分课程非常依赖 GPU 支持。例如模型训练,若无 GPU 会非常缓慢。如果您拥有云端账号,尤其是通过 [Azure for Students](https://azure.microsoft.com/free/students/?WT.mc_id=academic-77998-cacaste) 或您所在机构的云服务,可以采用以下几种方式
* 创建 [数据科学虚拟机](https://docs.microsoft.com/learn/modules/intro-to-azure-data-science-virtual-machine/?WT.mc_id=academic-77998-cacaste)通过 Jupyter 连接。您可以直接在虚拟机上克隆仓库开始学习。NC 系列虚拟机支持 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 系列虚拟机支持 GPU。
> **注意**:部分订阅,包括 Azure for Students开箱即用并不支持 GPU您可能需要通过技术支持请求申请额外 GPU 核心。
> <strong>注意</strong>:某些订阅(包括 Azure for Students默认不提供 GPU 支持。您可能需要通过技术支持请求额外申请 GPU 核心。
* 创建 [Azure 机器学习工作区](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 Notebook 中克隆仓库并开始使用。
* 创建 [Azure 机器学习工作区](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 Notebook 并开始使用。
还可以使用 Google Colab其免费提供部分 GPU 支持,并上传 Jupyter 笔记本逐个执行。
也可以使用 Google Colab它提供部分免费 GPU 支持,您可以上传 Jupyter Notebook 并逐个执行。
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**免责声明**
本文档使用 AI 翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 翻译成。尽管我们力求准确,但请注意,自动翻译可能包含错误或不准确之处。原始文档的母语版本应被视为权威来源。对于重要信息,建议采用专业人工翻译。我们不对因使用此翻译所引起的任何误解或错误解读承担责任。
**免责声明**
本文件由 AI 翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 翻译成。尽管我们力求准确,但请注意,自动翻译可能包含错误或不准确之处。原始语言版文件应视为权威来源。对于重要信息,建议使用专业人工翻译。我们对因使用本翻译而产生的任何误解或误释不承担责任。
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

View File

@ -6,9 +6,9 @@
"source": [
"# 预训练模型与迁移学习\n",
"\n",
"训练卷积神经网络CNN可能需要耗费大量时间,并且需要大量数据。然而,大部分时间实际上是用来学习网络用来从图像中提取模式的最佳低级滤波器。这时,一个自然的问题就出现了——我们是否可以使用在一个数据集上训练好的神经网络,并将其适配到对不同图像的分类任务,而无需完整的训练过程?\n",
"训练卷积神经网络CNN可能需要大量时间并且需要大量数据。然而大部分时间花费在学习网络用来从图像中提取模式的最佳低级滤波器上。一个自然的问题是——我们能否使用在一个数据集上训练的神经网络,并将其调整为对不同图像进行分类,而无需完整的训练过程?\n",
"\n",
"这种方法被称为**迁移学习**,因为我们将一个神经网络模型中的部分知识迁移到另一个模型中。在迁移学习中,我们通常从一个预训练模型开始,这个模型已经在某个大型图像数据集(例如 **ImageNet**)上进行了训练。这些模型已经能够很好地从通用图像中提取不同的特征,在许多情况下,仅仅在这些提取的特征之上构建一个分类器就能取得不错的效果。\n"
"这种方法称为<strong>迁移学习</strong>,因为我们将部分知识从一个神经网络模型转移到另一个模型中。在迁移学习中,我们通常从一个预训练模型开始,该模型已在某个大型图像数据集上训练过,比如<strong>ImageNet</strong>。这些模型已经能够很好地从通用图像中提取各种特征,在许多情况下,仅在这些提取的特征上构建一个分类器即可获得良好的结果。\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),也可以从[微软](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",
"在现实中,图像数据集的大小可能非常大,无法保证所有数据都能装入内存。因此,数据集通常表现为可按小批量返回数据以供训练的<strong>生成器</strong>。\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"
"> <strong>注意</strong>:数据集中所有图像都表示为范围在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",
@ -510,10 +520,10 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"这里有几个重要事项\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)。为了理解这个结果,我们还可以使用 `decode_predictions` 函数,它返回排名前n的类别及其名称。\n"
]
},
{
@ -597,9 +607,9 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"## GPU计算\n",
"## GPU 计算\n",
"\n",
"深度神经网络,例如VGG-16以及其他更现代的架构需要相当大的计算能力来运行。如果有GPU加速可用使用它是很合理的。幸运的是如果GPU可用Keras会自动加速计算。我们可以使用以下代码检查Tensorflow是否能够使用GPU\n"
"深度神经网络,比如 VGG-16 以及其他更现代的架构,需要相当多的计算能力来运行。如果有可用的 GPU 加速那使用它是很有意义的。幸运的是Keras 会自动加速在 GPU 上的计算(如果 GPU 可用)。我们可以用以下代码检查 Tensorflow 是否能使用 GPU\n"
]
},
{
@ -626,9 +636,10 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"## 提取 VGG 特征\n",
"\n",
"如果我们想使用 VGG-16 从图像中提取特征,需要使用没有最终分类层的模型。我们可以通过以下代码实例化没有顶层的 VGG-16 模型:\n"
"如果我们想使用 VGG-16 从图像中提取特征,我们需要一个没有最终分类层的模型。我们可以通过以下代码实例化没有顶层的 VGG-16 模型:\n"
]
},
{
@ -680,9 +691,9 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"特征张量的维度是 7x7x512但为了可视化我们需要将其重塑为二维形式。\n",
"特征张量的维度是7x7x512但为了可视化我们必须将其重塑为二维形式。\n",
"\n",
"现在让我们尝试看看这些特征是否可以用于图像分类。我们手动选取一部分图像(在我们的例子中是 50 个小批量),并预先计算它们的特征向量。我们可以使用 Tensorflow 的 **dataset** API 来完成这项工作。`map` 函数会接收一个数据集,并应用给定的 lambda 函数来对其进行转换。我们利用这一机制构建了新的数据集 `ds_features_train` 和 `ds_features_test`,这些数据集包含的是通过 VGG 提取的特征,而不是原始图像。\n"
"现在让我们尝试看看这些特征是否可以用来分类图像。让我们手动取一部分图像在我们的例子中是50个小批次并预先计算它们的特征向量。我们可以使用Tensorflow的<strong>dataset</strong> API来完成这项工作。`map`函数接受一个数据集并应用给定的lambda函数进行转换。我们利用这个机制构建了新的数据集`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": [
"结果非常我们可以以接近95%的概率区分猫和狗!不过,我们仅在所有图像的一个子集上测试了这种方法,因为手动提取特征似乎非常耗时。\n",
"结果非常我们可以以接近95%的概率区分猫和狗!然而,我们仅在所有图像的一个子集上测试了该方法,因为手动提取特征似乎需要花费大量时间。\n",
"\n",
"## 使用一个VGG网络进行迁移学习\n",
"\n",
"我们还可以通过在训练过程中使用完整的VGG-16网络来避免手动预计算特征将特征提取器作为网络的第一层。\n",
"我们还可以通过在训练期间将原始VGG-16网络作为整体并将特征提取器作为第一层添加到我们的网络中来避免手动预计算特征。\n",
"\n",
"Keras架构的妙处在于我们上面定义的VGG-16模型也可以作为另一个神经网络中的一层使用我们只需要在其顶部构建一个带有密集分类器的网络,然后通过反向传播训练整个网络。\n"
"Keras架构的优势在于我们上面定义的VGG-16模型也可以作为另一个神经网络中的一层使用我们只需构建一个在其顶部带有密集分类器的网络,然后使用反向传播训练整个网络。\n"
]
},
{
@ -793,13 +804,13 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"这个模型看起来像一个端到端的分类网络,它接收一张图片并返回类别。然而,关键点在于我们希望 VGG16 充当特征提取器,而不是重新训练。因此,我们需要**冻结卷积特征提取器的权重**。我们可以通过调用 `model.layers[0]` 访问网络的第一层,然后只需将 `trainable` 属性设置为 `False`。\n",
"这个模型看起来像一个端到端的分类网络,它接收一张图片并返回类别。然而,棘手的是我们希望VGG16作为特征提取器而不进行重新训练。因此我们需要<strong>冻结卷积特征提取器的权重</strong>。我们可以通过调用`model.layers[0]`访问网络的第一层,只需将`trainable`属性设置为`False`即可。\n",
"\n",
"> **注意**:冻结特征提取器的权重是必要的,因为否则未训练的分类器层可能会破坏卷积提取器的原始预训练权重。\n",
"> <strong>注意</strong>:需要冻结特征提取器的权重,否则未经训练的分类器层可能会破坏卷积提取器原本的预训练权重。\n",
"\n",
"你会注意到,虽然我们网络的总参数数量大约是 1500 万,但我们只训练了 2.5 万个参数。所有顶层卷积滤波器的其他参数都是预训练的。这是好事,因为我们可以用较少的样本微调较少的参数。\n",
"你可以注意到虽然我们网络中的参数总数约为1500万但我们实际上只训练了2.5万个参数。所有其他顶层卷积滤波器的参数都是预训练的。这是好事,因为我们能够用更少的样本微调更少的参数。\n",
"\n",
"现在我们将训练网络,看看能达到什么样的效果。预计运行时间会比较长,如果执行过程似乎有一段时间停滞,请不要担心。\n"
"我们现在将训练我们的网络,看看效果如何。请预计训练时间较长,如果执行过程似乎卡住一段时间,也不必担心。\n"
]
},
{
@ -824,11 +835,11 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"看起来我们已经获得了一个相当准确的猫狗分类器!\n",
"看起来我们已经获得了相当准确的猫狗分类器!\n",
"\n",
"## 保存和加载模型\n",
"\n",
"在训练好模型后,我们可以将模型的架构和训练好的权重保存到文件中,以便将来使用:\n"
"一旦我们训练好了模型,就可以将模型结构和训练好的权重保存到文件中以备将来使用:\n"
]
},
{
@ -852,7 +863,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"我们可以随时从文件中加载模型。您可能会发现这很有用,以防下一个实验破坏模型——您不必从头开始重新启动。\n"
"我们可以随时从文件加载模型。 如果下一个实验破坏了模型,这可能会很有用——这样你就不必从头重新开始。\n"
]
},
{
@ -870,13 +881,13 @@
"source": [
"## 微调迁移学习\n",
"\n",
"在上一节中,我们训练了最终的分类器层来对我们自己的数据集中的图像进行分类。然而,我们没有重新训练特征提取器,模型依赖于在 ImageNet 数据上学到的特征。如果你的目标对象在视觉上与普通的 ImageNet 图像有很大不同,这种特征组合可能无法达到最佳效果。因此,开始训练卷积层也是有意义的。\n",
"在上一节中,我们训练了最终的分类器层来对我们自己的数据集中的图像进行分类。然而,我们没有重新训练特征提取器,模型依赖于在 ImageNet 数据上学到的特征。如果你的对象在视觉上与普通的 ImageNet 图像不同,这种特征组合可能效果不佳。因此,开始训练卷积层也是有意义的。\n",
"\n",
"为此,我们可以解冻之前冻结的卷积滤波器参数。\n",
"\n",
"> **注意:** 首先冻结参数并进行几轮训练以稳定分类层的权重是很重要的。如果你直接在参数未冻结的情况下开始端到端训练网络,大的误差可能会破坏卷积层中的预训练权重。\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": [
"然而,一次解冻所有层并不是最好的主意。我们可以首先只解冻最后几层卷积层,因为它们包含与我们的图像相关的高级模式。例如,首先我们可以冻结所有层除了最后4层\n"
"但是,一次性解冻所有层并不是最好的主意。我们可以先只解冻几个最后的卷积层,因为它们包含与我们的图像相关的更高级别的模式。例如,开始时,我们可以冻结所有层除了最后4层\n"
]
},
{
@ -1000,11 +1011,11 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"注意到可训练参数的数量显著增加,但仍然只占所有参数的大约50%。\n",
"注意,可训练参数数量显著增加,但仍约占所有参数的50%。\n",
"\n",
"解冻后,我们可以再进行几个训练周期(在我们的例子中,我们只进行一个)。你也可以选择较低的学习率,以尽量减少对预训练权重的影响。然而,即使使用较低的学习率,你也可以预期在训练开始时准确率会有所下降,直到最终达到比固定权重情况下稍高的水平。\n",
"解冻后,我们可以进行更多轮的训练(在我们的示例中,我们只进行一轮)。你也可以选择较低的学习率,以尽量减少对预训练权重的影响。然而,即使学习率较低,你也可以预期训练开始时准确率会下降,直到最终达到比固定权重时略高的水平。\n",
"\n",
"> **注意:** 这种训练速度会慢得多,因为我们需要将梯度反向传播通过网络的许多层!\n"
"> **注意:** 这个训练过程要慢得多,因为我们需要将梯度反向传播通过网络的许多层!\n"
]
},
{
@ -1028,9 +1039,9 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"我们可能会获得更高的训练准确率,因为我们使用了更强大的网络并且拥有更多的参数,但验证准确率的提升可能不会那么显著。\n",
"我们可能会获得更高的训练准确率,因为我们使用了参数更多、更强大的网络,但验证准确率的提升不会那么显著。\n",
"\n",
"可以尝试解冻网络中的更多层并进行训练,看看是否能够获得更高的准确率!\n"
"随意解冻网络的更多层并进行训练,看看是否能获得更高的准确率!\n"
]
},
{
@ -1039,7 +1050,7 @@
"source": [
"## 其他计算机视觉模型\n",
"\n",
"VGG-16 是最简单的计算机视觉架构之一。Keras 提供了更多预训练网络。其中最常用的包括微软开发的 **ResNet** 架构和谷歌的 **Inception**。例如,让我们探索最简单的 ResNet-50 模型的架构ResNet 是一个具有不同深度的模型家族,如果你想看看真正深度的模型,可以尝试 ResNet-152\n"
"VGG-16 是最简单的计算机视觉架构之一。Keras 提供了更多预训练网络。其中最常用的微软开发的 **ResNet** 架构和谷歌的 **Inception**。例如,让我们探索最简单的 ResNet-50 模型的架构ResNet 是一系列不同深度的模型,如果你想看看真正深层模型的样子,可以尝试 ResNet-152\n"
]
},
{
@ -1441,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"
"该网络包含另一种类型的层:<strong>批归一化</strong>。批归一化的理念是将流经神经网络的值带到正确的区间。通常神经网络在所有值处于 [-1,1] 或 [0,1] 范围内时效果最好,这也是我们按此比例缩放/归一化输入数据的原因。然而,在训练深度网络时,值可能显著超出该范围,这会导致训练出现问题。批归一化层计算当前小批量的所有值的平均值和标准差,并在通过神经网络层之前使用它们来归一化信号。这显著提高了深度网络的稳定性。\n"
]
},
{
@ -1454,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<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**免责声明**\n本文件由 AI 翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 翻译完成。尽管我们力求准确,但请注意,自动翻译可能包含错误或不准确之处。原始语言版文件应视为权威来源。对于重要信息,建议使用专业人工翻译。我们对因使用本翻译而产生的任何误解或误释不承担责任。\n<!-- CO-OP TRANSLATOR DISCLAIMER END -->\n"
]
}
],
@ -1484,12 +1495,6 @@
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.10"
},
"coopTranslator": {
"original_hash": "c189abc107848f96051085cc30945129",
"translation_date": "2025-08-31T09:40:27+00:00",
"source_file": "lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb",
"language_code": "zh"
}
},
"nbformat": 4,

View File

@ -1,51 +1,51 @@
# 自然语言处理
![NLP任务总结图](../../../../translated_images/zh-CN/ai-nlp.b22dcb8ca4707cea.webp)
![自然语言处理任务概览草图](../../../../translated_images/zh-CN/ai-nlp.b22dcb8ca4707cea.webp)
在本节中,我们将重点使用神经网络来处理与**自然语言处理 (NLP)**相关的任务。我们希望计算机能够解决许多NLP问题
在本节中,我们将重点使用神经网络处理与<strong>自然语言处理NLP</strong>相关的任务。我们希望计算机能够解决许多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任务,例如分类。
* **文本摘要**是一种技术,我们希望计算机能够“阅读”长文本并用几句话进行总结
* **机器翻译**可以被视为一种结合一种语言的文本理解和另一种语言的文本生成的任务
* <strong>文本分类</strong>是一个典型的关于文本序列的分类问题。例子包括将电子邮件消息分类为垃圾邮件或非垃圾邮件,或将文章分类为体育、商业、政治等。同时,在开发聊天机器人时,我们常常需要理解用户的意图——这时我们处理的是<strong>意图分类</strong>。意图分类中通常需要处理很多类别。
<em> <strong>情感分析</strong>是一个典型的回归问题,我们需要给句子含义的正负程度赋予一个数值(情绪值)。情感分析的更高级版本是<strong>基于方面的情感分析</strong>ABSA我们不是对整个句子赋予情感而是对句子的不同部分方面赋予情感例如 </em>这家餐厅,我喜欢它的菜肴,但氛围很糟糕*。
<em> <strong>命名实体识别</strong>NER指的是从文本中提取特定实体的问题。例如我们需要理解短语 </em>我明天需要飞往巴黎<em> 中,</em>明天<em> 指的是日期,</em>巴黎* 是位置。
* <strong>关键词提取</strong>与NER类似但我们需要自动提取对句子意义重要的词,而无需针对特定实体类型进行预训练。
* <strong>文本聚类</strong>在我们希望将相似句子归为一组时非常有用,例如,在技术支持对话中相似的请求
* <strong>问答系统</strong>指模型回答具体问题的能力。模型输入一段文本和一个问题,需要在文本中找出包含问题答案的位置(或者有时直接生成答案文本)。
<em> <strong>文本生成</strong>是模型生成新文本的能力。它可以被视为一个基于某个</em>文本提示*预测下一个字母或单词的分类任务。先进的文本生成模型如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任务如分类。
* <strong>文本摘要</strong>是一种技术,我们希望计算机“阅读”长文本并将其总结成几句话
* <strong>机器翻译</strong>可以视为一种在一种语言上理解文本,在另一种语言上生成文本的结合
最初大多数NLP任务是通过传统方法(如语法)解决的。例如,在机器翻译中,解析器用于将初始句子转换为语法树,然后提取高级语义结构以表示句子的意义基于这种意义和目标语言的语法生成结果。如今许多NLP任务通过神经网络更有效地解决
最初大多数NLP任务是用传统方法如文法来解决的。例如,在机器翻译中,解析器用于将初始句子转换为语法树,然后提取更高层次的语义结构来表示句子的含义基于这个含义和目标语言的文法生成结果。如今许多NLP任务更有效的解决方法是使用神经网络
> 许多经典的NLP方法在[自然语言处理工具包 (NLTK)](https://www.nltk.org) Python库中实现。在线有一本很棒的[NLTK书籍](https://www.nltk.org/book/),涵盖了如何使用NLTK解决不同的NLP任务。
> 许多经典的NLP方法在[自然语言处理工具包NLTK](https://www.nltk.org) Python库中实现。网上有一本很棒的[NLTK书籍](https://www.nltk.org/book/),介绍了如何使用NLTK解决不同的NLP任务。
在我们的课程中,我们将主要关注使用神经网络进行NLP并在需要时使用NLTK。
在我们的课程中,我们将主要关注使用神经网络处理NLP并在需要时使用NLTK。
我们已经学习如何使用神经网络处理表格数据和图像。这些数据类型与文本的主要区别在于,文本是一个可变长度的序列,而图像的输入大小是预先确定的。虽然卷积网络可以从输入数据中提取模式,但文本中的模式更复杂。例如,否定可能与主语分隔许多单词(例如:*我不喜欢橙子*,与*我不喜欢那些又大又多彩又美味的橙子*),但仍应被解释为一个模式。因此,为了处理语言,我们需要引入新的神经网络类型,例如*循环网络*和*Transformer*
我们已经学习如何使用神经网络处理表格数据和图像。这些数据与文本的主要区别在于,文本是可变长度的序列,而图像的输入大小是预先已知的。虽然卷积网络可从输入数据中提取模式,但文本中的模式更为复杂。例如,否定词与主语之间可以隔开任意多个词(如 <em>我不喜欢橙子</em>,和 <em>我不喜欢那些又大又好吃的彩色橙子</em>),但仍然应被视为一个模式。因此,为了处理语言,我们需要引入新的神经网络类型,如<em>循环网络</em><em>transformer</em>
## 安装库
如果您使用本地Python安装运行本课程可能需要使用以下命令安装所有NLP所需的库
如果你在本地Python环境中运行本课程可能需要使用以下命令安装所有NLP所需的库
**对于PyTorch**
```bash
pip install -r requirements-torch.txt
pip install -r requirements-pytorch.txt
```
**对于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内存量取决于多个因素包括小批量大小。
* **最小化小批量大小**如果遇到GPU内存问题可以考虑减少代码中的小批量大小作为解决方案
* **TensorFlow GPU内存释放**旧版本的TensorFlow可能无法正确释放GPU内存尤其是在一个Python内核中训练多个模型时。为了有效管理GPU内存使用可以配置TensorFlow仅在需要时分配GPU内存。
* **代码包含**要设置TensorFlow仅在需要时增长GPU内存分配请在笔记本中包含以下代码:
本节中,在一些示例里我们将训练相当大型的模型。
* **使用支持GPU的电脑**建议在支持GPU的计算机上运行笔记本以减少使用大型模型时等待的时间。
* **GPU内存限制**使用GPU时训练大型模型可能会导致GPU内存不足
* **GPU内存消耗**:训练消耗的GPU内存量取决于多个因素包括小批量大小。
* <strong>尽可能减小小批量大小</strong>遇到GPU内存问题时可以尝试通过减小代码中的小批量大小来解决
* **TensorFlow GPU内存释放**较旧版本的TensorFlow在同一Python内核中训练多个模型时可能无法正确释放GPU内存。为有效管理GPU内存你可以配置TensorFlow按需分配GPU内存。
* <strong>代码示例</strong>要设置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)
```
如果您对从经典机器学习角度学习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)
* [语言](15-LanguageModeling/README.md)
* [循环神经网络](16-RNN/README.md)
* [生成网络](17-GenerativeNetworks/README.md)
* [Transformer](18-Transformers/README.md)
**免责声明**
本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原文档的原始语言版本为权威来源。对于关键信息,建议使用专业人工翻译。我们对因使用此翻译而引起的任何误解或误读不承担责任。
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**免责声明**
本文件由 AI 翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 翻译完成。尽管我们力求准确,但请注意,自动翻译可能包含错误或不准确之处。原始语言版文件应视为权威来源。对于重要信息,建议使用专业人工翻译。我们对因使用本翻译而产生的任何误解或误释不承担责任。
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

View File

@ -5,6 +5,12 @@
"source_file": "AGENTS.md",
"language_code": "zh-MO"
},
"CONTRIBUTING.md": {
"original_hash": "c6fd7e781b67111a90abd166d0ce4aa0",
"translation_date": "2026-07-08T18:45:24+00:00",
"source_file": "CONTRIBUTING.md",
"language_code": "zh-MO"
},
"README.md": {
"original_hash": "12c8eb6bf0867d2f1c32daf613ac5b8b",
"translation_date": "2026-04-06T15:59:55+00:00",
@ -17,6 +23,19 @@
"source_file": "SECURITY.md",
"language_code": "zh-MO"
},
"__translation_failures__": {
"lessons/sketchnotes/LICENSE.md": {
"original_hash": "45ab63a2cd8f5faef6c9b150618837a4",
"source_file": "lessons/sketchnotes/LICENSE.md",
"language_code": "zh-MO",
"failure_date": "2026-07-08T18:44:58+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:02+00:00",
@ -54,8 +73,8 @@
"language_code": "zh-MO"
},
"examples/README.md": {
"original_hash": "0d1babfdcbeb46525f2db3fbaaa54cd7",
"translation_date": "2025-10-03T11:27:40+00:00",
"original_hash": "7883d52c2e2a221e0b07a7b112a149b9",
"translation_date": "2026-07-08T18:40:54+00:00",
"source_file": "examples/README.md",
"language_code": "zh-MO"
},
@ -66,8 +85,8 @@
"language_code": "zh-MO"
},
"lessons/0-course-setup/how-to-run.md": {
"original_hash": "a4717bd9103b9f6cd84d534b83534689",
"translation_date": "2026-01-15T11:56:17+00:00",
"original_hash": "7ad8c7d8604c53649b3d4d1e2f3a6fa1",
"translation_date": "2026-07-08T18:41:17+00:00",
"source_file": "lessons/0-course-setup/how-to-run.md",
"language_code": "zh-MO"
},
@ -191,6 +210,12 @@
"source_file": "lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md",
"language_code": "zh-MO"
},
"lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb": {
"original_hash": "99b816b6a4957ef4100cee4c4221dff9",
"translation_date": "2026-07-08T18:31:48+00:00",
"source_file": "lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb",
"language_code": "zh-MO"
},
"lessons/4-ComputerVision/08-TransferLearning/lab/README.md": {
"original_hash": "7765935c35fcee69b9fe2d0cfd6963e2",
"translation_date": "2025-08-26T09:52:46+00:00",
@ -330,8 +355,8 @@
"language_code": "zh-MO"
},
"lessons/5-NLP/README.md": {
"original_hash": "8ef02a9318257ea140ed3ed74442096d",
"translation_date": "2025-08-26T08:02:59+00:00",
"original_hash": "038df6f1a73e49f6430740da083bfd6d",
"translation_date": "2026-07-08T18:41:44+00:00",
"source_file": "lessons/5-NLP/README.md",
"language_code": "zh-MO"
},

View File

@ -0,0 +1,29 @@
# 為初學者貢獻AI
感謝您有興趣為 AI-For-Beginners 貢獻!我們歡迎翻譯、課程修正和格式修正。
## 微軟貢獻者授權協議 (CLA)
本專案歡迎貢獻和建議。大多數貢獻需要您同意一份貢獻者授權協議 (CLA),宣告您有權利,並確實授予我們使用您的貢獻的權利。詳情請參閱 [https://cla.microsoft.com](https://cla.microsoft.com)。
當您提交拉取請求時CLA-bot 會自動判斷您是否需要提供 CLA 並適當標記該 PR例如標籤、評論。請按照機器人提供的指示操作。您只需在使用我們 CLA 的所有存儲庫中做一次此操作。
## 如何貢獻
### 1. 修正錯字 / 程式碼錯誤
如果您在任何 Jupyter 筆記本或課程 markdown 檔中發現錯字或錯誤:
1. 分叉該存儲庫。
2. 修正錯字或損壞的連結。
3. 提交拉取請求並清楚描述修正內容。
### 2. 提交翻譯
我們歡迎將課程翻譯成其他語言!請將翻譯內容放置於 `translations/` 目錄下,使用現有的資料夾名稱(例如 `translations/es/`、`translations/pt-BR/`、`translations/zh-CN/`)。
詳細資訊請參見 [etc/CONTRIBUTING.md](etc/CONTRIBUTING.md)。
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**免責聲明**
本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們力求準確,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於重要資訊,建議尋求專業人工翻譯。我們不對因使用本翻譯而引起的任何誤解或曲解承擔責任。
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

View File

@ -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
# 適用於 Python 腳本
pip install numpy
# For Jupyter notebooks (image classifier)
# 適用於 Jupyter 筆記本(圖像分類器)
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. **嘗試圖像分類器** - 使用真實圖像體驗 AI 的應用
4. **分析文本情感** - 探索自然語言處理
1. **從「Hello AI World」開始** - 學習模式識別基礎
2. <strong>建立簡單神經網絡</strong> - 理解神經網絡運作方式
3. <strong>嘗試圖像分類器</strong> - 見識 AI 的真實應用
4. <strong>分析文字情緒</strong> - 探索自然語言處理
## 💡 初學者提示
## 💡 初學者小貼士
- **仔細閱讀程式碼註解** - 它們解釋了每行程式碼的作用
- **多嘗試!** - 嘗試更改數值並觀察結果
- **不用擔心完全理解** - 學習需要時間
- **提出問題** - 使用 [討論板](https://github.com/microsoft/AI-For-Beginners/discussions)
- <strong>仔細閱讀程式註解</strong> - 它們說明每行程式碼的作用
- **多做實驗!** - 嘗試改變數值,看看結果如何
- <strong>不用擔心一次就懂</strong> - 學習需要時間
- <strong>提出問題</strong> - 使用 [討論板](https://github.com/microsoft/AI-For-Beginners/discussions)
## 🔗 下一步
## 🔗 後續步驟
完成這些範例後,探索完整課程:
- [AI 簡介](../lessons/1-Intro/README.md)
- [AI 入門](../lessons/1-Intro/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) 進行翻譯。雖然我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵資訊,建議使用專業人工翻譯。我們對因使用此翻譯而產生的任何誤解或錯誤解釋不承擔責任。
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**免責聲明**
本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們力求準確,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於重要資訊,建議尋求專業人工翻譯。我們不對因使用本翻譯而引起的任何誤解或曲解承擔責任。
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

View File

@ -1,12 +1,12 @@
# 如何執行程式碼
本課程包含許多可執行的範例和實驗室,您會想要執行它們。為此,您需要能夠在本課程所提供的 Jupyter 筆記本中執行 Python 程式碼。您有幾種選擇可以執行程式碼:
本課程包含許多可執行的範例和實驗室,您會想要執行它們。為此,您需要能夠在此課程提供的 Jupyter 筆記本中執行 Python 程式碼。有幾種方式可以執行程式碼:
## 在您電腦本地執行
## 在您電腦本地執行
要在您電腦本地執行程式碼,需要安裝 Python。建議安裝 **[miniconda](https://conda.io/en/latest/miniconda.html)** — 這是一個相對輕量的安裝,支援使用 `conda` 套件管理器管理不同的 Python **虛擬環境**
要在您電腦本地執行程式碼,需要安裝 Python。建議安裝 **[miniconda](https://conda.io/en/latest/miniconda.html)** — 這是一個輕量級安裝,支援使用 `conda` 套件管理器管理不同的 Python <strong>虛擬環境</strong>
安裝 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
### 使用 Visual Studio Code 與 Python 擴充套件
本課程最適合在安裝了 [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) 中開啟進行使用。
此課程建議在 [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。
> <strong>注意</strong>:當您複製並打開目錄於 VS Code 時,它會自動建議您安裝 Python 擴充套件。您還需要依照上述說明安裝 miniconda。
> **注意**:如果 VS Code 建議您在容器中重新開啟倉庫,您應該拒絕,以使用本地的 Python 安裝。
> <strong>注意</strong>:若 VS Code 建議您在容器中重新打開儲存庫,您應拒絕這個選項以使用本地的 Python 安裝。
### 在瀏覽器中使用 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 中開啟此倉庫 — 這會快速導向 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 中開啟儲存庫 — 它會快速帶您進入 Binder 網站,背後會建構容器並順利啟動 Jupyter 網頁介面。
> **注意**為防止濫用Binder 對部分網絡資源有限制有時會阻擋某些從公共網際網路下載模型或資料集的程式碼可能導致部分程式無法正常運行您可能需要尋找替代方案。此外Binder 提供的計算資源較基本,訓練過程會比較慢,尤其在後續較複雜課程中
> <strong>注意</strong>因預防濫用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 系列虛擬機支援 GPU。
* 建立 [資料科學虛擬機器](https://docs.microsoft.com/learn/modules/intro-to-azure-data-science-virtual-machine/?WT.mc_id=academic-77998-cacaste),並透過 Jupyter 連線。您可直接在該虛擬機器中複製儲存庫並開始學習。NC 系列虛擬機支援 GPU。
> **注意**:部分訂閱服務,包括 Azure for Students 預設不提供 GPU 支援,您可能需要透過技術支援申請額外 GPU 核心。
> <strong>注意</strong>:部分訂閱方案(包含 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 Notebook 並開始使用。
* 建立 [Azure 機器學習工作區](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 Notebook 並開始使用。
亦可使用 Google Colab它提供部分免費 GPU 支援,並能上傳 Jupyter 筆記本,一個一個地執行。
也可以使用 Google Colab其提供部分免費的 GPU 支援,並在那裡上傳 Jupyter 筆記本逐一執行。
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**免責聲明**
本文件經由 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們力求準確,請注意自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於重要資訊,建議使用專業人工翻譯。本公司不對使用本翻譯所引致的任何誤解或誤釋承擔責任。
**免責聲明**
本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們力求準確,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於重要資訊,建議尋求專業人工翻譯。我們不對因使用本翻譯而引起的任何誤解或曲解承擔責任。
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

View File

@ -4,11 +4,11 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"# 預訓練模型遷移學習\n",
"# 預訓練模型遷移學習\n",
"\n",
"訓練卷積神經網絡CNN可能需要花費大量時間並且需要大量數據。然而大部分時間其實是用來學習網絡用於從圖像中提取模式的最佳低階濾波器。這時自然會產生一個問題——我們是否可以使用在某個數據集上訓練好的神經網絡並將其適應於分類不同的圖像,而不需要完整的訓練過程?\n",
"訓練 CNN 可能需要大量時間,且這個任務需要大量數據。然而,大部分時間都花在學習網絡用來從圖像中提取模式的最佳低階濾波器上。這就產生了一個自然問題 —— 我們能否使用在一個數據集上訓練好的神經網絡,並將其調整用於分類不同的圖像,而不需要完整的訓練過程?\n",
"\n",
"這種方法被稱為**遷移學習**,因為我們將某個神經網絡模型的部分知識轉移到另一個模型中。在遷移學習中,我們通常從一個預訓練模型開始,該模型已經在一些大型圖像數據集(例如 **ImageNet**)上進行過訓練。這些模型已經能夠很好地從通用圖像中提取不同的特徵,在許多情況下,只需在這些提取的特徵之上構建一個分類器,就能獲得不錯的結果。\n"
"這種方法稱為<strong>遷移學習</strong>,因為我們將來自一個神經網絡模型的一些知識轉移到另一個模型。在遷移學習中,我們通常從一個預訓練模型開始,該模型已在一些大型圖像數據集上訓練,如<strong>ImageNet</strong>。這些模型已能有效地從通用圖像中提取不同特徵,而且在許多情況下,僅僅在這些提取的特徵之上構建一個分類器,就可以產生良好的結果。\n"
]
},
{
@ -29,11 +29,11 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"## 貓與狗數據集\n",
"## 貓與狗資料集\n",
"\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",
"在本單元中,我們將解決一個現實生活中的問題:分類貓和狗的圖片。為此,我們將使用[Kaggle 貓與狗資料集](https://www.kaggle.com/c/dogs-vs-cats),該資料集也可以從[微軟](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",
"在現實中,影像資料集的大小可能相當龐大,無法全部載入記憶體。因此,資料集通常會表示為<strong>產生器</strong>,能以適合訓練的小批量方式回傳資料。\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"
"> <strong>注意</strong>數據集中所有影像皆表示為範圍介乎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",
@ -510,20 +520,17 @@
"cell_type": "markdown",
"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"
"這裡有幾個重要的事情:\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"
]
},
{
@ -602,7 +609,7 @@
"source": [
"## GPU 計算\n",
"\n",
"深度神經網絡,例如 VGG-16 和其他更現代的架構,需要相當大的計算能力來運行。如果有可用的 GPU 加速,使用它是合理的。幸運的是,如果有可用的 GPUKeras 會自動加速 GPU 上的計算。我們可以使用以下程式碼檢查 Tensorflow 是否能使用 GPU\n"
"深度神經網絡,如 VGG-16 以及其他更現代的架構,需要相當多的計算能力來運行。如果有可用的 GPU 加速使用它是合理的。幸運的是Keras 會自動加速 GPU 上的計算(如果可用)。我們可以使用以下程式碼檢查 Tensorflow 是否能使用 GPU\n"
]
},
{
@ -629,9 +636,10 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"## 提取 VGG 特徵\n",
"\n",
"如果我們想使用 VGG-16 從圖片中提取特徵,我們需要一個沒有最終分類層的模型。我們可以使用以下程式碼來實例化沒有頂層的 VGG-16 模型:\n"
"## 擷取 VGG 特徵\n",
"\n",
"如果我們想使用 VGG-16 從圖像擷取特徵,我們需要移除最終分類層的模型。我們可以使用以下代碼實例化沒有頂層的 VGG-16 模型:\n"
]
},
{
@ -683,9 +691,9 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"特徵張量的維度是 7x7x512但為了方便視覺化,我們需要將其重塑為二維形式。\n",
"特徵張量的維度是 7x7x512但為了可視化,我們必須將其重塑為 2D 形式。\n",
"\n",
"現在讓我們嘗試看看這些特徵是否可以用來分類圖像。我們手動選取部分圖像(在此例中為 50 個小批次),並預先計算它們的特徵向量。我們可以使用 Tensorflow 的 **dataset** API 來完成這項工作。`map` 函數會接收一個數據集並應用指定的 lambda 函數來進行轉換。我們利用這個機制來構建新的數據集,`ds_features_train` 和 `ds_features_test`,這些數據集包含的是 VGG 提取的特徵,而不是原始圖像。\n"
"現在讓我們嘗試看看這些特徵是否可以用來分類圖片。讓我們手動取出部分圖片(在我們的例子中是 50 個小批次),並預先計算它們的特徵向量。我們可以使用 Tensorflow **dataset** API 來做到這點。`map` 函數接收一個數據集並應用給定的 lambda 函數來轉換它。我們使用這個機制來構造新的數據集 `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",
"## 使用一個 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擔當特徵擷取器而唔係重訓。噉我哋就需要<strong>凍結卷積特徵擷取器嘅權重</strong>。我哋可以透過叫用 `model.layers[0]` 去接觸網絡嘅第一層,然後只需將 `trainable` 屬性設為 `False`。\n",
"\n",
"> **注意**:凍結特徵提取器的權重是必要的,因為如果不這樣做,未訓練的分類層可能會破壞卷積提取器原本的預訓練權重。\n",
"> <strong>註</strong>:需要凍結特徵擷取器嘅權重,因為如果唔係,未受訓嘅分類層會破壞卷積擷取器原本嘅預訓練權重。\n",
"\n",
"你會注意到,儘管我們的網絡總參數數量約為 1500 萬,但我們只訓練了 2.5 萬個參數。所有其他頂層卷積濾波器的參數都是預訓練的。這是好的,因為我們能夠用較少的樣本微調較少的參數。\n",
"你會注意到,雖然我哋網絡嘅參數總數約有1500萬但我哋只訓練緊25,000個參數。所有頂層嘅卷積濾波器嘅其他參數都係預先訓練好嘅。噉做係好嘅因為我哋可以用較少嘅示例嚟微調較少嘅參數。\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",
"在解凍後,我們可以再進行幾個訓練週期(在我們的例子中,我們只進行一個)。您也可以選擇較低的學習率,以減少對預訓練權重的影響。然而,即使使用較低的學習率,您仍然可以預期在訓練開始時準確率會下降,直到最終達到略高於固定權重情況的水平。\n",
"解凍後,我們可以進行幾輪訓練(在我們的範例中,我們只做一輪)。你也可以選擇更低的學習率,以減少對預訓練權重的影響。然而,即使在低學習率的情況下,你也可以預期訓練初期準確度會下降,直到最終達到比固定權重情況下稍高的水平。\n",
"\n",
"> **注意:** 這種訓練速度會慢得多,因為我們需要將梯度反向傳播通過網絡的多個層\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 提供了更多預訓練的網路模型。其中最常用的是由 Microsoft 開發的 **ResNet** 架構,以及 Google 的 **Inception**。例如,我們來探討最簡單的 ResNet-50 模型的架構ResNet 是一個具有不同深度的模型家族,如果你想了解真正深層的模型,可以嘗試 ResNet-152\n"
"VGG-16 是最簡單的電腦視覺架構之一。Keras 提供更多預訓練網絡。在這些中最常用的是微軟開發的 **ResNet** 架構和谷歌的 **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",
"\n",
"這個網路還包含另一種類型的層:**批量正規化**。批量正規化的概念是將流經神經網路的值調整到正確的範圍。通常,當所有值都在 [-1,1] 或 [0,1] 的範圍內時,神經網路的效果最好,這也是為什麼我們會相應地縮放/正規化輸入數據。然而,在深度網路的訓練過程中,可能會出現值顯著超出這個範圍的情況,這會導致訓練變得困難。批量正規化層會計算當前小批量數據的平均值和標準差,並在信號通過神經網路層之前使用這些值對其進行正規化。這顯著提高了深度網路的穩定性。\n"
"這個網絡還包含另一種類型的層:<strong>批次正規化</strong>。批次正規化的概念是將流經神經網絡的值帶到正確區間。通常神經網絡在所有值都在 [-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<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**免責聲明**\n本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們力求準確,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於重要資訊,建議尋求專業人工翻譯。我們不對因使用本翻譯而引起的任何誤解或曲解承擔責任。\n<!-- CO-OP TRANSLATOR DISCLAIMER END -->\n"
]
}
],
@ -1485,12 +1495,6 @@
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.10"
},
"coopTranslator": {
"original_hash": "c189abc107848f96051085cc30945129",
"translation_date": "2025-08-28T11:01:09+00:00",
"source_file": "lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb",
"language_code": "mo"
}
},
"nbformat": 4,

View File

@ -1,51 +1,51 @@
# 自然語言處理
![NLP 任務的手繪摘要](../../../../translated_images/zh-MO/ai-nlp.b22dcb8ca4707cea.webp)
![自然語言處理任務摘要手繪圖](../../../../translated_images/zh-MO/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 任務,例如分類。
* **文本摘要** 是一種技術,我們希望計算機能夠“閱讀”長文本並將其總結為幾句話
* **機器翻譯** 可以被視為一種將一種語言的文本理解與另一種語言的文本生成相結合的任務
* <strong>文本分類</strong> 是一個典型的分類問題,涉及文本序列。例如,將電子郵件分類為垃圾郵件或非垃圾郵件,或將文章分類為體育、商業、政治等。此外,在開發聊天機器人時,我們通常需要理解用戶想表達的意圖——這種情況下我們處理的是 <strong>意圖分類</strong>。通常在意圖分類中,我們需要處理許多類別。
<em> <strong>情感分析</strong> 是一個典型的迴歸問題,我們需要為一句話的正面/負面意義屬性一個數字(情感分數)。情感分析的更進階版本是 <strong>基於方面的情感分析</strong>ABSA我們不是為整句話給出情感而是給不同部分方面賦予情感例如</em>在這家餐廳,我喜歡它的菜式,但氣氛很糟糕*。
<em> <strong>命名實體識別</strong>NER指的是從文本中提取特定實體的問題。例如我們需要理解短語 </em>我明天要飛到巴黎<em> 中的 </em>明天<em> 指的是日期,</em>巴黎* 是一個地點。
* <strong>關鍵詞提取</strong> 與命名實體識別類似,但我們需要自動提取對句子意義重要的詞,而無需針對特定實體類型進行預訓練。
* <strong>文本聚類</strong> 在我們想將相似的句子分組時非常有用,例如,技術支持對話中的類似請求。
* <strong>問答系統</strong> 指模型回答特定問題的能力。模型接收文本段落和問題作為輸入,並需要提供文本中包含問題答案的地方(或者有時生成答案文本)。
<em> <strong>文本生成</strong> 是模型生成新文本的能力。可以將其視為一個分類任務,通過某些</em>文本提示*來預測下一個字母/詞。先進的文本生成模型如GPT-3能使用稱為 [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任務例如分類。
* <strong>文本摘要</strong> 是一種技術,讓電腦「閱讀」長文本並用幾句話來總結
* <strong>機器翻譯</strong> 可以被看作是將一種語言的文本理解與另一種語言的文本生成結合起來
最初,大多數 NLP 任務是通過傳統方法(如語法)解決的。例如,在機器翻譯中,解析器被用來將初始句子轉換為語法樹,然後提取高層語義結構來表示句子的含義,基於這些含義和目標語言的語法生成結果。如今,許多 NLP 任務使用神經網絡更有效地解決。
最初,大多數NLP任務是使用傳統方法如語法規則來解決。例如在機器翻譯中使用解析器將初始句子轉換為語法樹然後提取高層次的語義結構來表徵句子的意義並根據這個意義和目標語言的語法生成結果。如今許多NLP任務使用神經網絡更有效地解決。
> 許多經典的 NLP 方法已在 [Natural Language Processing Toolkit (NLTK)](https://www.nltk.org) Python 庫中實現。網上有一本很棒的 [NLTK 書](https://www.nltk.org/book/),涵蓋了如何使用 NLTK 解決不同的 NLP 任務。
> 許多經典的NLP方法已實現Python函式庫 [Natural Language Processing Toolkit (NLTK)](https://www.nltk.org) 中。網上有一本很棒的 [NLTK書籍](https://www.nltk.org/book/) 介紹如何使用NLTK解決不同的NLP任務。
我們的課程中,我們將主要專注於使用神經網絡進行 NLP並在需要時使用 NLTK。
本課程中我們大部分時間會專注於使用神經網絡來處理NLP並且會在需要時使用NLTK。
我們已經學習了如何使用神經網絡處理表格數據和圖像。這些數據類型與文本的主要區別在於,文本是可變長度的序列,而圖像的輸入大小是預先確定的。雖然卷積網絡可以從輸入數據中提取模式,但文本中的模式更為複雜。例如,否定可能與主語之間隔著許多單詞(例如:*我不喜歡橙子*,與 *我不喜歡那些又大又多彩又美味的橙子*),但仍應被解釋為一種模式。因此,為了處理語言,我們需要引入新的神經網絡類型,例如*循環網絡*和*Transformer*
我們已經學習過用神經網絡處理表格數據和影像。這些數據類型和文本的主要區別在於,文本是可變長序列,而影像的輸入尺寸是事先已知的。雖然卷積網絡能從輸入數據中提取模式,但文本中的模式更為複雜。例如,否定詞與主語可能被多個詞語任意分開(如 <em>我不喜歡橙子</em><em>我不喜歡那些大顏色鮮豔且美味的橙子</em>),這應該被解釋為同一種模式。因此,為了處理語言,我們需要引入新的神經網絡類型,如<em>循環網絡</em><em>變壓器</em>
## 安裝庫
## 安裝函式
如果您使用本地 Python 安裝來運行本課程,您可能需要使用以下命令安裝 NLP 所需的所有庫:
如果你使用本地的Python安裝來運行本課程可能需要使用以下命令安裝所有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 在一個 Python 內核中訓練多個模型時可能無法正確釋放 GPU 記憶體。為了有效管理 GPU 記憶體使用,您可以配置 TensorFlow 僅在需要時分配 GPU 記憶體。
* **代碼包含**:要設置 TensorFlow 僅在需要時增長 GPU 記憶體分配,請在筆記本中包含以下代碼:
在本節中,我們的一些範例將訓練相當大型的模型。
* **使用支援GPU的電腦**建議在支援GPU的電腦上運行筆記本,以減少處理大型模型時的等待時間。
* **GPU 記憶體限制**:在GPU上運行可能會造成GPU記憶體不足的情況特別是訓練大型模型時。
* **GPU 記憶體使用量**訓練時GPU記憶體的消耗取決於多種因素包括小批量大小minibatch size
* <strong>減小小批量大小</strong>如果遇到GPU記憶體問題可以嘗試減小程式碼中的小批量大小作為解決方案。
* **TensorFlow GPU 記憶體釋放**舊版本的TensorFlow在一個Python內核中訓練多個模型時可能無法正確釋放GPU記憶體。為了有效管理GPU記憶體使用可以設置TensorFlow僅在需要時分配GPU記憶體。
* <strong>代碼示範</strong>要讓TensorFlow在需要時才增加GPU記憶體分配在你的筆記本中加入以下代碼:
```python
physical_devices = tf.config.list_physical_devices('GPU')
@ -53,7 +53,7 @@ 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)
如果你有興趣從經典機器學習視角學習NLP請參閱 [這套課程](https://github.com/microsoft/ML-For-Beginners/tree/main/6-NLP)
## 本節內容
在本節中,我們將學習:
@ -63,7 +63,11 @@ if len(physical_devices)>0:
* [語言建模](15-LanguageModeling/README.md)
* [循環神經網絡](16-RNN/README.md)
* [生成網絡](17-GenerativeNetworks/README.md)
* [Transformer](18-Transformers/README.md)
* [變壓器](18-Transformers/README.md)
**免責聲明**
本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用本翻譯而產生的任何誤解或錯誤解讀概不負責。
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**免責聲明**
本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們力求準確,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於重要資訊,建議尋求專業人工翻譯。我們不對因使用本翻譯而引起的任何誤解或曲解承擔責任。
<!-- CO-OP TRANSLATOR DISCLAIMER END -->