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

This commit is contained in:
localizeflow[bot] 2026-07-08 17:14:17 +00:00
parent 63aea85bca
commit e267e4ce47
19 changed files with 753 additions and 535 deletions

View File

@ -5,6 +5,12 @@
"source_file": "AGENTS.md",
"language_code": "cs"
},
"CONTRIBUTING.md": {
"original_hash": "c6fd7e781b67111a90abd166d0ce4aa0",
"translation_date": "2026-07-08T17:14:02+00:00",
"source_file": "CONTRIBUTING.md",
"language_code": "cs"
},
"README.md": {
"original_hash": "12c8eb6bf0867d2f1c32daf613ac5b8b",
"translation_date": "2026-04-06T16:47:34+00:00",
@ -17,6 +23,19 @@
"source_file": "SECURITY.md",
"language_code": "cs"
},
"__translation_failures__": {
"lessons/sketchnotes/LICENSE.md": {
"original_hash": "45ab63a2cd8f5faef6c9b150618837a4",
"source_file": "lessons/sketchnotes/LICENSE.md",
"language_code": "cs",
"failure_date": "2026-07-08T17:07:04+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-26T00:44:28+00:00",
@ -54,8 +73,8 @@
"language_code": "cs"
},
"examples/README.md": {
"original_hash": "0d1babfdcbeb46525f2db3fbaaa54cd7",
"translation_date": "2025-10-03T11:33:39+00:00",
"original_hash": "7883d52c2e2a221e0b07a7b112a149b9",
"translation_date": "2026-07-08T17:00:16+00:00",
"source_file": "examples/README.md",
"language_code": "cs"
},
@ -66,8 +85,8 @@
"language_code": "cs"
},
"lessons/0-course-setup/how-to-run.md": {
"original_hash": "a4717bd9103b9f6cd84d534b83534689",
"translation_date": "2026-01-16T04:54:29+00:00",
"original_hash": "7ad8c7d8604c53649b3d4d1e2f3a6fa1",
"translation_date": "2026-07-08T17:00:46+00:00",
"source_file": "lessons/0-course-setup/how-to-run.md",
"language_code": "cs"
},
@ -191,6 +210,12 @@
"source_file": "lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md",
"language_code": "cs"
},
"lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb": {
"original_hash": "99b816b6a4957ef4100cee4c4221dff9",
"translation_date": "2026-07-08T16:51:17+00:00",
"source_file": "lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb",
"language_code": "cs"
},
"lessons/4-ComputerVision/08-TransferLearning/lab/README.md": {
"original_hash": "7765935c35fcee69b9fe2d0cfd6963e2",
"translation_date": "2025-08-25T23:16:27+00:00",
@ -330,8 +355,8 @@
"language_code": "cs"
},
"lessons/5-NLP/README.md": {
"original_hash": "8ef02a9318257ea140ed3ed74442096d",
"translation_date": "2025-08-25T21:27:40+00:00",
"original_hash": "038df6f1a73e49f6430740da083bfd6d",
"translation_date": "2026-07-08T17:01:25+00:00",
"source_file": "lessons/5-NLP/README.md",
"language_code": "cs"
},

View File

@ -0,0 +1,29 @@
# Přispívání do AI-For-Beginners
Děkujeme za váš zájem přispět do AI-For-Beginners! Vítáme překlady, opravy lekcí a úpravy formátování.
## Licenční smlouva přispěvatele Microsoft (CLA)
Tento projekt vítá příspěvky a návrhy. Většina příspěvků vyžaduje, abyste souhlasili s Licenční smlouvou přispěvatele (CLA), v níž prohlašujete, že máte právo a skutečně nám udělujete práva na využití vašeho příspěvku. Podrobnosti najdete na [https://cla.microsoft.com](https://cla.microsoft.com).
Když odešlete pull request, CLA-bot automaticky zjistí, zda musíte poskytnout CLA, a příslušně označí PR (například štítek, komentář). Jednoduše postupujte podle pokynů, které bot poskytne. Toto bude potřeba udělat pouze jednou pro všechny repozitáře používající naši CLA.
## Jak přispět
### 1. Oprava překlepů / Chyb v kódu
Pokud najdete překlep nebo chybu v jakémkoli Jupyter notebooku nebo lekci ve formátu markdown:
1. Vytvořte fork repozitáře.
2. Opravte překlep nebo nefunkční odkaz.
3. Odešlete Pull Request s jasným popisem opravy.
### 2. Odesílání překladů
Vítáme překlady lekcí do dalších jazyků! Překlady umístěte do složky `translations/`, přičemž používejte stávající názvy složek (například `translations/es/`, `translations/pt-BR/`, `translations/zh-CN/`).
Podrobnější informace naleznete v souboru [etc/CONTRIBUTING.md](etc/CONTRIBUTING.md).
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Prohlášení o omezení odpovědnosti**:
Tento dokument byl přeložen pomocí AI překladatelské služby [Co-op Translator](https://github.com/Azure/co-op-translator). Přestože usilujeme o co největší přesnost, mějte prosím na paměti, že automatizované překlady mohou obsahovat chyby nebo nepřesnosti. Originální dokument v jeho mateřském jazyce by měl být považován za autoritativní zdroj. Pro kritické informace se doporučuje profesionální lidský překlad. Nejsme odpovědní za jakékoli nedorozumění nebo nesprávné interpretace vzniklé použitím tohoto překladu.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

View File

@ -1,27 +1,27 @@
# Příklady AI pro začátečníky
# Příklady pro začátečníky s AI
Vítejte! Tento adresář obsahuje jednoduché, samostatné příklady, které vám pomohou začít s AI a strojovým učením. Každý příklad je navržen tak, aby byl přívětivý pro začátečníky, s podrobnými komentáři a postupnými vysvětleními.
Vítejte! Tento adresář obsahuje jednoduché, samostatné příklady, které vám pomohou začít s AI a strojovým učením. Každý příklad je navržen tak, aby byl přívětivý pro začátečníky s podrobnými komentáři a krok za krokem vysvětleními.
## 📚 Přehled příkladů
| Příklad | Popis | Obtížnost | Předpoklady |
|---------|-------|-----------|-------------|
| [Hello AI World](../../../examples/01-hello-ai-world.py) | Váš první AI program - jednoduché rozpoznávání vzorů | ⭐ Začátečník | Základy Pythonu |
| [Jednoduchá neuronová síť](../../../examples/02-simple-neural-network.py) | Vytvořte neuronovou síť od základu | ⭐⭐ Začátečník+ | Python, základní matematika |
| [Klasifikátor obrázků](./03-image-classifier.ipynb) | Klasifikujte obrázky pomocí předtrénovaného modelu | ⭐⭐ Začátečník+ | Python, numpy |
| [Textová sentimentální analýza](../../../examples/04-text-sentiment.py) | Analyzujte sentiment textu (pozitivní/negativní) | ⭐⭐ Začátečník+ | Python |
|---------|-------------|------------|---------------|
| [Hello AI World](https://github.com/microsoft/AI-For-Beginners/blob/main/examples/01-hello-ai-world.py) | Váš první program s AI - jednoduché rozpoznávání vzorů | ⭐ Začátečník | Základy Pythonu |
| [Jednoduchá neuronová síť](https://github.com/microsoft/AI-For-Beginners/blob/main/examples/02-simple-neural-network.py) | Vytvořte neuronovou síť od začátku | ⭐⭐ Pokročilý začátečník | Python, základní matematika |
| [Klasifikátor obrázků](https://github.com/microsoft/AI-For-Beginners/blob/main/examples/03-image-classifier.ipynb) | Klasifikujte obrázky s předtrénovaným modelem | ⭐⭐ Pokročilý začátečník | Python, numpy |
| [Sentiment textu](https://github.com/microsoft/AI-For-Beginners/blob/main/examples/04-text-sentiment.py) | Analyzujte sentiment textu (pozitivní/negativní) | ⭐⭐ Pokročilý začátečník | Python |
## 🚀 Začínáme
### Předpoklady
Ujistěte se, že máte nainstalovaný Python (doporučujeme verzi 3.8 nebo vyšší). Nainstalujte potřebné balíčky:
Ujistěte se, že máte nainstalovaný Python (doporučeno verze 3.8 nebo vyšší). Nainstalujte požadované balíčky:
```bash
# For Python scripts
# Pro Python skripty
pip install numpy
# For Jupyter notebooks (image classifier)
# Pro Jupyter notebooky (klasifikátor obrazů)
pip install jupyter numpy pillow tensorflow
```
@ -32,7 +32,7 @@ conda env create --name ai4beg --file ../environment.yml
conda activate ai4beg
```
### Spouštění příkladů
### Spuštění příkladů
**Pro Python skripty (.py soubory):**
```bash
@ -44,21 +44,21 @@ python 01-hello-ai-world.py
jupyter notebook 03-image-classifier.ipynb
```
## 📖 Učební cesta
## 📖 Studijní cesta
Doporučujeme postupovat podle příkladů v tomto pořadí:
1. **Začněte s "Hello AI World"** - Naučte se základy rozpoznávání vzorů
2. **Vytvořte jednoduchou neuronovou síť** - Pochopte, jak fungují neuronové sítě
3. **Vyzkoušejte klasifikátor obrázků** - Podívejte se na AI v akci s reálnými obrázky
1. **Začněte s „Hello AI World“** - Naučte se základy rozpoznávání vzorů
2. **Postavte jednoduchou neuronovou síť** - Pochopte, jak neuronové sítě fungují
3. **Vyzkoušejte klasifikátor obrázků** - Uvidíte AI v akci s reálnými obrázky
4. **Analyzujte sentiment textu** - Prozkoumejte zpracování přirozeného jazyka
## 💡 Tipy pro začátečníky
- **Pečlivě čtěte komentáře v kódu** - Vysvětlují, co každá řádka dělá
- **Experimentujte!** - Zkuste měnit hodnoty a sledujte, co se stane
- **Nedělejte si starosti, pokud všemu nerozumíte** - Učení vyžaduje čas
- **Ptejte se** - Použijte [diskusní fórum](https://github.com/microsoft/AI-For-Beginners/discussions)
- **Pečlivě si přečtěte komentáře v kódu** - Vysvětlují, co každý řádek dělá
- **Experimentujte!** - Zkoušejte měnit hodnoty a sledujte, co se stane
- **Nebuďte znepokojeni, když nerozumíte hned všemu** - Učení vyžaduje čas
- **Ptejte se** - Použijte [diskuzní fórum](https://github.com/microsoft/AI-For-Beginners/discussions)
## 🔗 Další kroky
@ -68,18 +68,20 @@ Po dokončení těchto příkladů prozkoumejte celý kurz:
- [Počítačové vidění](../lessons/4-ComputerVision/README.md)
- [Zpracování přirozeného jazyka](../lessons/5-NLP/README.md)
## 🤝 Přispívá
## 🤝 Přispě
Pomohly vám tyto příklady? Pomozte nám je zlepšit:
- Nahlaste problémy nebo navrhněte vylepšení
- Přidejte další příklady pro začátečníky
- Zlepšete dokumentaci a komentáře
Považujete tyto příklady za užitečné? Pomozte nám je zlepšit:
- Nahlaste problémy nebo navrhněte zlepšení
- Přidejte více příkladů pro začátečníky
- Vylepšete dokumentaci a komentáře
---
*Pamatujte: Každý expert byl kdysi začátečníkem. Přejeme vám příjemné učení! 🎓*
*Pamatujte: Každý expert byl jednou začátečník. Přejeme šťastné učení! 🎓*
---
**Upozornění**:
Tento dokument byl přeložen pomocí služby AI pro překlad [Co-op Translator](https://github.com/Azure/co-op-translator). I když se snažíme o přesnost, mějte prosím na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace se doporučuje profesionální lidský překlad. Nejsme zodpovědní za jakékoli nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu.
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Prohlášení o omezení odpovědnosti**:
Tento dokument byl přeložen pomocí AI překladatelské služby [Co-op Translator](https://github.com/Azure/co-op-translator). Přestože usilujeme o co největší přesnost, mějte prosím na paměti, že automatizované překlady mohou obsahovat chyby nebo nepřesnosti. Originální dokument v jeho mateřském jazyce by měl být považován za autoritativní zdroj. Pro kritické informace se doporučuje profesionální lidský překlad. Nejsme odpovědní za jakékoli nedorozumění nebo nesprávné interpretace vzniklé použitím tohoto překladu.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

View File

@ -1,12 +1,12 @@
# Jak spustit kód
Tento kurz obsahuje spoustu spustitelných příkladů a laboratorních cvičení, která budete chtít spustit. K tomu je potřeba mít možnost spouštět Python kód v Jupyter Noteboocích poskytnutých jako součást tohoto kurzu. Pro spuštění kódu máte několik možností:
Tento učební plán obsahuje spoustu spustitelných příkladů a laboratoří, které budete chtít spustit. Abyste to mohli udělat, potřebujete možnost spouštět Python kód v Jupyter Noteboocích, které jsou součástí tohoto učebního plánu. Máte několik možností, jak kód spustit:
## Spuštění lokálně na vašem počítači
Pro spuštění kódu lokálně na vašem počítači je potřeba mít nainstalovaný Python. Jedním z doporučení je instalace **[miniconda](https://conda.io/en/latest/miniconda.html)** jedná se o poměrně lehkou instalaci, která podporuje správce balíčků `conda` pro různé Python **virtuální prostředí**.
Pro spuštění kódu lokálně na vašem počítači je potřeba nainstalovat Python. Jedním z doporučení je instalace **[miniconda](https://conda.io/en/latest/miniconda.html)** - jde o poměrně lehkou instalaci, která podporuje správce balíčků `conda` pro různé Python **virtuální prostředí**.
Po instalaci minicondy si klonujte repozitář a vytvořte virtuální prostředí, které budete používat pro tento kurz:
Po instalaci minicondy naklonujte repozitář a vytvořte virtuální prostředí, které budete používat pro tento kurz:
```bash
git clone http://github.com/microsoft/ai-for-beginners
@ -17,17 +17,17 @@ conda activate ai4beg
### Použití Visual Studio Code s Python rozšířením
Tento kurz je nejlepší používat, když jej otevřete v [Visual Studio Code](http://code.visualstudio.com/?WT.mc_id=academic-77998-cacaste) s [Python rozšířením](https://marketplace.visualstudio.com/items?itemName=ms-python.python&WT.mc_id=academic-77998-cacaste).
Tento učební plán je nejlepší používat po otevření v [Visual Studio Code](http://code.visualstudio.com/?WT.mc_id=academic-77998-cacaste) s [Python rozšířením](https://marketplace.visualstudio.com/items?itemName=ms-python.python&WT.mc_id=academic-77998-cacaste).
> **Poznámka**: Jakmile repozitář klonujete a otevřete ve VS Code, automaticky se vám nabídne instalace Python rozšíření. Také budete muset nainstalovat miniconda, jak je popsáno výše.
> **Poznámka**: Jakmile naklonujete a otevřete složku ve VS Code, automaticky vám navrhne instalovat Python rozšíření. Dále je potřeba nainstalovat miniconda, jak je popsáno výše.
> **Poznámka**: Pokud vám VS Code nabídne znovu otevřít repozitář v kontejneru, měli byste to zamítnout, pokud chcete používat lokální Python instalaci.
> **Poznámka**: Pokud vám VS Code navrhne znovu otevřít repozitář v kontejneru, měli byste to odmítnout, abyste mohli používat lokální instalaci Pythonu.
### Použití Jupyter v prohlížeči
### Použití Jupyteru v prohlížeči
Můžete také používat prostředí Jupyter přímo v prohlížeči na vašem počítači. Jak klasický Jupyter, tak JupyterHub poskytují pohodlné vývojové prostředí s automatickým dokončováním, zvýrazňováním kódu atd.
Můžete také použít Jupyter prostředí z prohlížeče na svém vlastním počítači. Jak klasický Jupyter, tak JupyterHub poskytují pohodlné vývojové prostředí s automatickým doplňováním, zvýrazněním kódu atd.
Pro spuštění Jupyter lokálně přejděte do adresáře kurzu a spusťte:
Pro spuštění Jupyteru lokálně přejděte do složky kurzu a spusťte:
```bash
jupyter notebook
@ -36,36 +36,36 @@ nebo
```bash
jupyterhub
```
Poté můžete přejít k libovolnému souboru `.ipynb`, otevřít ho a začít pracovat.
Poté můžete přejít k jakémukoliv `.ipynb` souboru, otevřít ho a začít pracovat.
### Spuštění v kontejneru
Jinou možností místo instalace Pythonu je spuštění kódu v kontejneru. Jelikož náš repozitář obsahuje speciální složku `.devcontainer`, která určuje, jak postavit kontejner pro tento repozitář, VS Code nabízí možnost znovu otevřít kód přímo v kontejneru. To ale vyžaduje instalaci Dockeru a je to složitější, takže toto doporučujeme spíše zkušenějším uživatelům.
Alternativou k instalaci Pythonu je spustit kód v kontejneru. Náš repozitář obsahuje speciální složku `.devcontainer`, která udává, jak kontejner pro tento repozitář sestavit, a VS Code nabízí možnost kód znovu otevřít v kontejneru. To vyžaduje instalaci Dockeru a je to složitější, proto doporučujeme tuto možnost spíše pokročilým uživatelům.
## Spuštění v cloudu
Pokud nechcete Python instalovat lokálně a máte přístup k nějakým cloudovým zdrojům, dobrou alternativou je spuštění kódu v cloudu. Nabízí se několik variant:
Pokud nechcete instalovat Python lokálně a máte přístup k nějakým cloudovým zdrojům, dobrou alternativou je spustit kód v cloudu. Existuje několik způsobů, jak to udělat:
* Použít **[GitHub Codespaces](https://github.com/features/codespaces)**, což je virtuální prostředí vytvořené pro vás na GitHubu, přístupné přes VS Code v prohlížeči. Pokud máte přístup ke Codespaces, stačí kliknout na tlačítko **Code** v repozitáři, spustit Codespace a hned můžete začít.
* Použít **[Binder](https://mybinder.org/v2/gh/microsoft/ai-for-beginners/HEAD)**. [Binder](https://mybinder.org) nabízí zdarma výpočetní prostředky v cloudu, kde si můžete zkusit spustit nějaký kód z GitHubu. Na úvodní stránce je tlačítko pro otevření repozitáře v Binderu to vás rychle převeze na stránku Binderu, která sestaví podkladový kontejner a bez problémů spustí webové rozhraní Jupyter.
* Použití **[GitHub Codespaces](https://github.com/features/codespaces)**, což je virtuální prostředí vytvořené pro vás na GitHubu, přístupné přes VS Code v prohlížeči. Pokud máte přístup ke Codespaces, stačí kliknout na tlačítko **Code** v repozitáři, spustit codespace a můžete začít během chvíle.
* Použití **[Binder](https://mybinder.org/v2/gh/microsoft/ai-for-beginners/HEAD)**. [Binder](https://mybinder.org) nabízí zdarma výpočetní zdroje v cloudu, aby lidé jako vy mohli vyzkoušet nějaký kód na GitHubu. Na hlavní stránce je tlačítko pro otevření repozitáře v Binderu - to by vás rychle mělo přesměrovat na stránku binderu, která sestaví základní kontejner a spustí pro vás Jupyter webové rozhraní bez problémů.
> **Poznámka**: Pro zamezení zneužití má Binder blokovaný přístup k některým webovým zdrojům. Může se tak stát, že některé části kódu, které stahují modely nebo dataset z Internetu, nebudou fungovat. Budete si muset najít nějaké alternativy. Compute zdroje, které Binder poskytuje, jsou základní, takže trénování bude pomalé, zejména v pozdějších, složitějších lekcích.
> **Poznámka**: Aby se zabránilo zneužití, má Binder blokovaný přístup k některým webovým zdrojům. To může znemožnit běh některých částí kódu, které stahují modely a/nebo datasety z veřejného internetu. Možná budete muset najít nějaká obcházení. Také výpočetní zdroje poskytované Binderem jsou poměrně základní, takže trénink bude pomalý, zejména v pozdějších, složitějších lekcích.
## Spuštění v cloudu s GPU
Některé pokročilejší lekce v tomto kurzu by velmi výrazně profitovaly z podpory GPU. Trénování modelů by jinak mohlo být bolestivě pomalé. Máte pár možností, zejména pokud máte přístup do cloudu přes [Azure for Students](https://azure.microsoft.com/free/students/?WT.mc_id=academic-77998-cacaste) nebo přes vaši instituci:
Některé z pozdějších lekcí v tomto učebním plánu by výrazně profitovaly z podpory GPU. Trénink modelů může být jinak bolestivě pomalý. Existuje několik možností, které můžete využít, obzvlášť pokud máte přístup k cloudu buď přes [Azure for Students](https://azure.microsoft.com/free/students/?WT.mc_id=academic-77998-cacaste) nebo přes vaši instituci:
* Vytvořit [Data Science Virtual Machine](https://docs.microsoft.com/learn/modules/intro-to-azure-data-science-virtual-machine/?WT.mc_id=academic-77998-cacaste) a připojit se k ní přes Jupyter. Pak si můžete přímo na této VM klonovat repozitář a začít se učit. NC série VM mají podporu GPU.
* Vytvořte [Data Science Virtual Machine](https://docs.microsoft.com/learn/modules/intro-to-azure-data-science-virtual-machine/?WT.mc_id=academic-77998-cacaste) a připojte se k ní přes Jupyter. Můžete pak naklonovat repozitář přímo na stroj a začít se učit. VM řady NC mají podporu GPU.
> **Poznámka**: Některé typy předplatného, včetně Azure for Students, GPU podporu hned v základu neposkytují. Může být potřeba požádat o další GPU jádra přes technickou podporu.
> **Poznámka**: Některé předplatné, včetně Azure for Students, neposkytují podporu GPU automaticky. Možná budete muset požádat o dodatečné GPU jádra pomocí technické podpory.
* Vytvořit [Azure Machine Learning Workspace](https://azure.microsoft.com/services/machine-learning/?WT.mc_id=academic-77998-cacaste) a využít tamní funkci Notebooks. [Toto video](https://azure-for-academics.github.io/quickstart/azureml-papers/) ukazuje, jak klonovat repozitář do Azure ML notebooku a začít jej používat.
* Vytvořte [Azure Machine Learning Workspace](https://azure.microsoft.com/services/machine-learning/?WT.mc_id=academic-77998-cacaste) a použijte tam funkci Notebook. [Toto video](https://azure-for-academics.github.io/quickstart/azureml-papers/) ukazuje, jak naklonovat repozitář do Azure ML notebooku a začít ho používat.
Můžete také využít Google Colab, který nabízí nějakou výpočetní kapacitu s GPU zdarma, a do něj nahrávat Jupyter Notebooky a spouštět je jednotlivě.
Můžete také použít Google Colab, který nabízí nějakou bezplatnou podporu GPU, a tam nahrát Jupyter Notebooky ke spouštění jeden po druhém.
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Prohlášení o vyloučení odpovědnosti**:
Tento dokument byl přeložen pomocí AI překladatelské služby [Co-op Translator](https://github.com/Azure/co-op-translator). Přestože usilujeme o přesnost, mějte prosím na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Originální dokument v jeho mateřském jazyce by měl být považován za autoritativní zdroj. Pro kritické informace se doporučuje profesionální lidský překlad. Nejsme odpovědní za jakékoliv nepochopení nebo nesprávné výklady vyplývající z použití tohoto překladu.
**Prohlášení o omezení odpovědnosti**:
Tento dokument byl přeložen pomocí AI překladatelské služby [Co-op Translator](https://github.com/Azure/co-op-translator). Přestože usilujeme o co největší přesnost, mějte prosím na paměti, že automatizované překlady mohou obsahovat chyby nebo nepřesnosti. Originální dokument v jeho mateřském jazyce by měl být považován za autoritativní zdroj. Pro kritické informace se doporučuje profesionální lidský překlad. Nejsme odpovědní za jakékoli nedorozumění nebo nesprávné interpretace vzniklé použitím tohoto překladu.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

View File

@ -4,11 +4,11 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"# Předtrénované modely a transfer learning\n",
"# Předtrénované modely a transferové učení\n",
"\n",
"Trénování CNN může zabrat hodně času a vyžaduje velké množství dat. Většina času je však věnována učení nejlepších nízkoúrovňových filtrů, které síť používá k extrakci vzorů z obrázků. Přirozeně se nabízí otázka můžeme použít neuronovou síť natrénovanou na jednom datasetu a přizpůsobit ji klasifikaci jiných obrázků bez kompletního trénovacího procesu?\n",
"Trénování CNN může zabrat hodně času a pro tento úkol je potřeba mnoho dat. Nicméně, většina času je věnována učení nejlepších nízkoúrovňových filtrů, které síť používá k extrakci vzorů z obrázků. Vzniká přirozená otázka můžeme použít neuronovou síť vytrénovanou na jednom datasetu a přizpůsobit ji klasifikaci jiných obrázků bez celého tréninkového procesu?\n",
"\n",
"Tento přístup se nazývá **transfer learning**, protože přenášíme určité znalosti z jednoho modelu neuronové sítě na jiný. Při transfer learningu obvykle začínáme s předtrénovaným modelem, který byl natrénován na nějakém velkém datasetu obrázků, například na **ImageNet**. Tyto modely už dokážou dobře extrahovat různé rysy z obecných obrázků a v mnoha případech stačí postavit klasifikátor na vrcholu těchto extrahovaných rysů, aby bylo dosaženo dobrého výsledku.\n"
"Tento přístup se nazývá **transferové učení**, protože přenášíme určité znalosti z jednoho modelu neuronové sítě do druhého. V transferovém učení obvykle začínáme s předtrénovaným modelem, který byl vytrénován na nějakém velkém obrazovém datasetu, jako je například **ImageNet**. Tyto modely už umí dobře extrahovat různé rysy z obecných obrázků a v mnoha případech stačí postavit klasifikátor na těchto extrahovaných rysech, aby byl dosažen dobrý výsledek.\n"
]
},
{
@ -29,11 +29,11 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"## Dataset kočky vs. psi\n",
"## Datová sada Kočky vs. Psi\n",
"\n",
"V této lekci budeme řešit reálný problém klasifikace obrázků koček a psů. K tomu využijeme [Kaggle Cats vs. Dogs Dataset](https://www.kaggle.com/c/dogs-vs-cats), který lze také stáhnout [od Microsoftu](https://www.microsoft.com/en-us/download/details.aspx?id=54765&WT.mc_id=academic-77998-cacaste).\n",
"V této jednotce vyřešíme reálný problém klasifikace obrázků koček a psů. K tomuto účelu využijeme [Kaggle Cats vs. Dogs Dataset](https://www.kaggle.com/c/dogs-vs-cats), kterou je také možné stáhnout [z Microsoftu](https://www.microsoft.com/en-us/download/details.aspx?id=54765&WT.mc_id=academic-77998-cacaste).\n",
"\n",
"Stáhněme si tento dataset a rozbalme ho do adresáře `data` (tento proces může chvíli trvat!):\n"
"Stáhněme si tuto datovou sadu a rozbalme ji do adresáře `data` (tento proces může chvíli trvat!):\n"
]
},
{
@ -64,7 +64,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Bohužel, v datové sadě jsou některé poškozené obrazové soubory. Musíme provést rychlé čištění, abychom zkontrolovali poškozené soubory. Abychom nenarušili tento tutoriál, přesunuli jsme kód pro ověření datové sady do modulu.\n"
"Bohužel je v datové sadě několik poškozených obrazových souborů. Musíme rychle vyčistit a zkontrolovat, zda nejsou soubory poškozené. Abychom tento návod nepřerušili, přesunuli jsme kód pro ověření datové sady do modulu.\n"
]
},
{
@ -335,11 +335,11 @@
"source": [
"## Načítání datasetu\n",
"\n",
"V předchozích příkladech jsme načítali datasety, které jsou součástí Keras. Nyní se budeme zabývat vlastním datasetem, který potřebujeme načíst z adresáře s obrázky.\n",
"V předchozích příkladech jsme načítali datasety, které jsou součástí Kerasu. Nyní se budeme zabývat vlastním datasetem, který potřebujeme načíst z adresáře s obrázky.\n",
"\n",
"V reálném životě může být velikost datasetů obrázků poměrně velká a nelze se spoléhat na to, že všechna data se vejdou do paměti. Proto jsou datasety často reprezentovány jako **generátory**, které mohou vracet data v minibatchích vhodných pro trénování.\n",
"V reálném životě mohou být velikosti obrazových datasetů docela velké a nelze spoléhat na to, že všechna data se vejdou do paměti. Proto jsou datasety často reprezentovány jako **generátory**, které mohou vracet data po minibatchích vhodných pro trénink.\n",
"\n",
"Pro práci s klasifikací obrázků obsahuje Keras speciální funkci `image_dataset_from_directory`, která dokáže načítat obrázky z podadresářů odpovídajících různým třídám. Tato funkce se také postará o škálování obrázků a může dataset rozdělit na trénovací a testovací podmnožiny:\n"
"Pro řešení klasifikace obrázků Keras obsahuje speciální funkci `image_dataset_from_directory`, která dokáže načíst obrázky z podsložek odpovídajících různým třídám. Tato funkce se také postará o škálování obrázků a může také rozdělit dataset na trénovací a testovací podmnožiny:\n"
]
},
{
@ -383,9 +383,9 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Je důležité nastavit stejnou hodnotu `seed` pro oba volání, protože ovlivňuje rozdělení obrázků mezi trénovací a testovací dataset.\n",
"Je důležité nastavit stejnou hodnotu `seed` pro oba volání, protože to ovlivňuje rozdělení obrázků mezi tréninkovou a testovací sadu.\n",
"\n",
"Dataset automaticky načítá názvy tříd z adresářů a můžete k nim přistupovat, pokud je to potřeba, zavoláním:\n"
"Dataset automaticky načítá názvy tříd z adresářů a k těmto názvům se můžete případně dostat zavoláním:\n"
]
},
{
@ -412,7 +412,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Datové sady, které jsme získali, lze přímo předat funkci `fit` pro natrénování modelu. Obsahují jak odpovídající obrázky, tak i štítky, které lze procházet pomocí následující konstrukce:\n"
"Dataset, které jsme získali, lze přímo předat funkci `fit` pro trénování modelu. Obsahují jak příslušné obrázky, tak štítky, přes které lze procházet pomocí následující konstrukce:\n"
]
},
{
@ -453,7 +453,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"> **Poznámka**: Všechny obrázky v datové sadě jsou reprezentovány jako tenzory s plovoucí desetinnou čárkou v rozsahu 0-255. Před jejich předáním do neuronové sítě je potřeba tyto hodnoty škálovat do rozsahu 0-1. Při vykreslování obrázků musíme udělat totéž, nebo převést hodnoty na typ `int` (což děláme v kódu výše), abychom ukázali `matplotlib`, že chceme vykreslit původní neškálovaný obrázek.\n"
"> **Poznámka**: Všechny obrázky v datasetu jsou reprezentovány jako tenzory s plovoucí desetinnou čárkou v rozsahu 0-255. Před předáním do neuronové sítě je třeba tyto hodnoty škálovat do rozsahu 0-1. Při vykreslování obrázků je třeba udělat totéž, nebo převést hodnoty na typ `int` (což děláme v kódu výše), aby `matplotlib` ukázal, že chceme vykreslit původní neschálovaný obrázek.\n"
]
},
{
@ -462,7 +462,7 @@
"source": [
"## Předtrénované modely\n",
"\n",
"Pro mnoho úloh klasifikace obrázků lze najít předtrénované modely neuronových sítí. Mnoho z těchto modelů je dostupných v rámci jmenného prostoru `keras.applications` a ještě více modelů lze nalézt na internetu. Podívejme se, jak lze načíst a použít nejjednodušší model VGG-16:\n"
"Pro mnoho úloh klasifikace obrázků lze nalézt předtrénované modely neuronových sítí. Mnoho z těchto modelů je dostupných v jmenném prostoru `keras.applications` a ještě více modelů lze najít na internetu. Podívejme se, jak lze nejjednodušší model VGG-16 načíst a používat:\n"
]
},
{
@ -497,7 +497,17 @@
}
],
"source": [
"vgg = keras.applications.VGG16()\n",
"# SHA-256 of VGG16 weights (with top)\n",
"VGG16_WEIGHTS_SHA256 = '64373286793e3c8b2b4e3219cbf3544bce2f55ab4682710a29f5e7af8f5e4f61'\n",
"\n",
"_weights_path = keras.utils.get_file(\n",
" 'vgg16_weights_tf_dim_ordering_tf_kernels.h5',\n",
" 'https://storage.googleapis.com/tensorflow/keras-applications/vgg16/vgg16_weights_tf_dim_ordering_tf_kernels.h5',\n",
" file_hash=VGG16_WEIGHTS_SHA256,\n",
" hash_algorithm='sha256',\n",
")\n",
"\n",
"vgg = keras.applications.VGG16(weights=_weights_path)\n",
"inp = keras.applications.vgg16.preprocess_input(x_sample[:1])\n",
"\n",
"res = vgg(inp)\n",
@ -510,11 +520,10 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Existuje několik důležitých věcí:\n",
"\n",
"* Před předáním vstupu do jakékoli předtrénované sítě je nutné jej určitým způsobem předzpracovat. To se provádí voláním odpovídající funkce `preprocess_input`, která přijímá dávku obrázků a vrací jejich zpracovanou podobu. V případě VGG-16 jsou obrázky normalizovány a od každého kanálu je odečtena předem definovaná průměrná hodnota. To je proto, že VGG-16 byla původně trénována s tímto předzpracováním.\n",
"* Neuronová síť je aplikována na vstupní dávku a výsledkem je dávka 1000-prvkových tenzorů, které ukazují pravděpodobnost každé třídy. Nejpravděpodobnější číslo třídy můžeme najít voláním `argmax` na tomto tenzoru.\n",
"* Získaný výsledek je [číslo třídy `ImageNet`](https://gist.github.com/yrevar/942d3a0ac09ec9e5eb3a). Abychom tomuto výsledku porozuměli, můžeme také použít funkci `decode_predictions`, která vrací n nejlepších tříd spolu s jejich názvy.\n"
"Zde je několik důležitých věcí:\n",
"* Než předáte vstup do jakékoli předtrénované sítě, musí být určitým způsobem předzpracován. To se provádí voláním odpovídající funkce `preprocess_input`, která přijímá dávku obrázků a vrací jejich zpracovanou podobu. V případě VGG-16 jsou obrázky normalizovány a od každého kanálu je odečtena předdefinovaná průměrná hodnota. To proto, že VGG-16 byl původně trénován s tímto předzpracováním.\n",
"* Neuronová síť se aplikuje na vstupní dávku a jako výsledek obdržíme dávku tenzorů o 1000 prvcích, které ukazují pravděpodobnost každé třídy. Nejpravděpodobnější číslo třídy můžeme najít zavoláním `argmax` na tomto tenzoru.\n",
"* Získaný výsledek je [číslo třídy `ImageNet`](https://gist.github.com/yrevar/942d3a0ac09ec9e5eb3a). Pro lepší pochopení tohoto výsledku můžeme také použít funkci `decode_predictions`, která vrátí n nejlepších tříd spolu s jejich názvy.\n"
]
},
{
@ -600,7 +609,7 @@
"source": [
"## Výpočty na GPU\n",
"\n",
"Hluboké neuronové sítě, jako je VGG-16 a další modernější architektury, vyžadují poměrně velký výpočetní výkon pro svůj běh. Má smysl využít akceleraci pomocí GPU, pokud je k dispozici. Naštěstí Keras automaticky zrychluje výpočty na GPU, pokud je dostupné. Můžeme ověřit, zda Tensorflow dokáže využít GPU, pomocí následujícího kódu:\n"
"Hluboké neuronové sítě, jako VGG-16 a další modernější architektury, vyžadují pro běh poměrně mnoho výpočetního výkonu. Má smysl používat akceleraci na GPU, pokud je k dispozici. Naštěstí Keras automaticky zrychluje výpočty na GPU, pokud je dostupné. Můžeme zkontrolovat, zda Tensorflow dokáže použít GPU, pomocí následujícího kódu:\n"
]
},
{
@ -627,9 +636,10 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"## Extrahování funkcí VGG\n",
"\n",
"Pokud chceme použít VGG-16 k extrahování funkcí z našich obrázků, potřebujeme model bez závěrečných klasifikačních vrstev. Model VGG-16 bez horních vrstev můžeme vytvořit pomocí tohoto kódu:\n"
"## Extrahování VGG rysů\n",
"\n",
"Pokud chceme použít VGG-16 k extrahování rysů z našich obrázků, potřebujeme model bez finálních klasifikačních vrstev. Model VGG-16 bez vrchních vrstev můžeme vytvořit pomocí tohoto kódu:\n"
]
},
{
@ -681,9 +691,9 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Rozměr tenzoru příznaků je 7x7x512, ale abychom jej mohli vizualizovat, museli jsme jej převést do 2D formy.\n",
"Rozměr tenzoru rysů je 7x7x512, ale aby bylo možné jej vizualizovat, museli jsme jej přetvarovat do 2D formy.\n",
"\n",
"Teď se pokusme zjistit, zda lze tyto příznaky použít k klasifikaci obrázků. Ručně vezmeme určitou část obrázků (v našem případě 50 minibatchů) a předem vypočítáme jejich vektor příznaků. K tomu můžeme použít Tensorflow **dataset** API. Funkce `map` vezme dataset a aplikuje na něj zadanou lambda-funkci pro jeho transformaci. Tento mechanismus využíváme k vytvoření nových datasetů, `ds_features_train` a `ds_features_test`, které obsahují příznaky extrahované pomocí VGG namísto původních obrázků.\n"
"Teď se pokusme zjistit, jestli by tyto rysy šly použít ke klasifikaci obrázků. Ručně vybereme nějakou část obrázků (v našem případě 50 minibatchů) a předpočítáme jejich vektor rysů. K tomu můžeme použít Tensorflow **dataset** API. Funkce `map` vezme dataset a aplikuje danou lambda-funkci pro jeho transformaci. Tento mechanismus použijeme k vytvoření nových datasetů, `ds_features_train` a `ds_features_test`, které obsahují rysy vyextrahované modelem VGG místo původních obrázků.\n"
]
},
{
@ -713,9 +723,9 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Použili jsme konstrukci `.take(50)` k omezení velikosti datové sady, abychom urychlili naši demonstraci. Samozřejmě můžete tento experiment provést na celé datové sadě.\n",
"Použili jsme konstrukci `.take(50)` k omezení velikosti datasetu, abychom urychlili naši ukázku. Samozřejmě můžete tento experiment provést na celém datasetu.\n",
"\n",
"Nyní, když máme datovou sadu s extrahovanými příznaky, můžeme natrénovat jednoduchý hustý klasifikátor, který rozlišuje mezi kočkami a psy. Tato síť přijme vektor příznaků o tvaru (7,7,512) a vytvoří jeden výstup, který odpovídá buď psovi, nebo kočce. Protože se jedná o binární klasifikaci, použijeme aktivační funkci `sigmoid` a ztrátovou funkci `binary_crossentropy`.\n"
"Nyní, když máme dataset s extrahovanými rysy, můžeme trénovat jednoduchý hustý klasifikátor, který rozliší kočky a psy. Tato síť převezme vektor rysů tvaru (7,7,512) a vytvoří jeden výstup, který odpovídá buď psovi, nebo kočce. Protože se jedná o binární klasifikaci, používáme aktivační funkci `sigmoid` a ztrátovou funkci `binary_crossentropy`.\n"
]
},
{
@ -744,13 +754,13 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Výsledek je skvělý, dokážeme rozlišit mezi kočkou a psem s téměř 95% pravděpodobností! Nicméně, tento přístup jsme testovali pouze na podmnožině všech obrázků, protože manuální extrakce příznaků se zdá být velmi časově náročná.\n",
"Výsledek je skvělý, můžeme s téměř 95% pravděpodobností rozlišit mezi kočkou a psem! Nicméně jsme tento přístup testovali pouze na podmnožině všech obrázků, protože manuální extrakce rysů se zdá být časově náročná.\n",
"\n",
"## Transfer learning pomocí jedné VGG sítě\n",
"## Přenosové učení pomocí jedné sítě VGG\n",
"\n",
"Manuálnímu předběžnému výpočtu příznaků se můžeme také vyhnout tím, že během trénování použijeme původní síť VGG-16 jako celek, a přidáme extraktor příznaků jako první vrstvu naší sítě.\n",
"Můžeme se také vyhnout manuálnímu předpočítávání rysů použitím původní sítě VGG-16 jako celku během tréninku, tím, že přidáme extraktor rysů do naší sítě jako první vrstvu.\n",
"\n",
"Krása architektury Keras spočívá v tom, že model VGG-16, který jsme definovali výše, může být použit také jako vrstva v jiné neuronové síti! Stačí vytvořit síť s hustým klasifikátorem na vrcholu a poté trénovat celou síť pomocí zpětného šíření.\n"
"Krása architektury Keras spočívá v tom, že model VGG-16, který jsme definovali výše, může být také použit jako vrstva v jiné neuronové síti! Stačí nám sestavit síť s hustým klasifikátorem na vrchu a poté trénovat celou síť pomocí zpětné propagace.\n"
]
},
{
@ -794,13 +804,13 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Tento model vypadá jako end-to-end klasifikační síť, která přijímá obrázek a vrací třídu. Nicméně, složitější částí je, že chceme, aby VGG16 fungoval jako extraktor příznaků, a ne aby byl znovu trénován. Proto je potřeba **zmrazit váhy konvolučního extraktoru příznaků**. K první vrstvě sítě se můžeme dostat voláním `model.layers[0]`, a stačí jen nastavit vlastnost `trainable` na `False`.\n",
"Tento model vypadá jako end-to-end klasifikační síť, která přijímá obrázek a vrací třídu. Ovšem složitá věc je, že chceme, aby VGG16 fungoval jako extraktor rysů, a aby nebyl znovu trénován. Proto potřebujeme **zamrazit váhy konvolučního extraktoru rysů**. K první vrstvě sítě můžeme přistoupit zavoláním `model.layers[0]` a stačí nastavit vlastnost `trainable` na `False`.\n",
"\n",
"> **Poznámka**: Zmrazení vah extraktoru příznaků je nutné, protože jinak by netrénovaná klasifikační vrstva mohla zničit původní předtrénované váhy konvolučního extraktoru.\n",
"> **Poznámka**: Zamrznutí vah extraktoru rysů je potřeba, protože jinak by netrénovaná klasifikační vrstva mohla zničit původní předtrénované váhy konvolučního extraktoru.\n",
"\n",
"Můžete si všimnout, že zatímco celkový počet parametrů v naší síti je přibližně 15 milionů, trénujeme pouze 25 tisíc parametrů. Všechny ostatní parametry konvolučních filtrů na vyšší úrovni jsou předtrénované. To je dobré, protože můžeme doladit menší počet parametrů s menším počtem příkladů.\n",
"Můžete si všimnout, že i když je celkový počet parametrů v naší síti kolem 15 milionů, trénujeme pouze 25 tisíc parametrů. Všechny ostatní parametry nejvyšších konvolučních filtrů jsou předtrénované. To je dobré, protože tak můžeme ladit menší počet parametrů s menším počtem příkladů.\n",
"\n",
"Nyní budeme trénovat naši síť a uvidíme, jak dobrých výsledků můžeme dosáhnout. Očekávejte poměrně dlouhou dobu běhu a nebojte se, pokud se zdá, že provádění na chvíli zamrzlo.\n"
"Nyní budeme trénovat naši síť a uvidíme, jak dobrých výsledků můžeme dosáhnout. Čekejte spíše delší dobu běhu a nedělejte si starosti, jestli se vykonávání na chvíli zdá zamrzlé.\n"
]
},
{
@ -825,11 +835,11 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Vypadá to, že jsme získali poměrně přesný klasifikátor koček a psů!\n",
"Vypadá to, že jsme získali poměrně přesný klasifikátor koček a psů! \n",
"\n",
"## Ukládání a načítání modelu\n",
"\n",
"Jakmile model natrénujeme, můžeme uložit architekturu modelu a natrénované váhy do souboru pro budoucí použití:\n"
"Jakmile máme model natrénovaný, můžeme uložit architekturu modelu a natrénované váhy do souboru pro budoucí použití:\n"
]
},
{
@ -853,7 +863,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Model můžeme kdykoli načíst ze souboru. Může to být užitečné v případě, že další experiment model zničí nemuseli byste začínat úplně od začátku.\n"
"Model pak můžeme kdykoli načíst ze souboru. Může se vám to hodit, pokud by další experiment model poškodil nebudete muset začínat od začátku.\n"
]
},
{
@ -869,15 +879,15 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"## Doladění přenosového učení\n",
"## Doladění transferového učení\n",
"\n",
"V předchozí části jsme natrénovali finální vrstvu klasifikátoru, aby klasifikovala obrázky v našem vlastním datasetu. Nicméně jsme znovu netrénovali extraktor příznaků a náš model se spoléhal na příznaky, které se naučil na datech ImageNet. Pokud se vaše objekty vizuálně liší od běžných obrázků ImageNet, tato kombinace příznaků nemusí fungovat nejlépe. Proto má smysl začít trénovat i konvoluční vrstvy.\n",
"V předchozí části jsme trénovali pouze konečnou klasifikační vrstvu pro klasifikaci obrázků v našem vlastním datovém souboru. Nicméně jsme nepře-trénovali extraktor rysů a náš model se spoléhal na rysy, které se model naučil na datech ImageNet. Pokud vaše objekty vizuálně odlišují od běžných obrázků ImageNet, tato kombinace rysů nemusí fungovat nejlépe. Proto je rozumné začít trénovat také konvoluční vrstvy.\n",
"\n",
"K tomu můžeme odemknout parametry konvolučních filtrů, které jsme dříve zamkli.\n",
"Pro to můžeme \"odemknout\" parametry filtru konvoluce, které jsme předtím zamrazili.\n",
"\n",
"> **Note:** Je důležité nejprve zamknout parametry a provést několik epoch tréninku, aby se stabilizovaly váhy ve vrstvě klasifikátoru. Pokud ihned začnete trénovat síť od začátku do konce s odemčenými parametry, je pravděpodobné, že velké chyby zničí předtrénované váhy v konvolučních vrstvách.\n",
"> **Poznámka:** Je důležité nejprve zamrazit parametry a provést několik epoch tréninku, aby se stabilizovaly váhy v klasifikační vrstvě. Pokud okamžitě začnete trénovat síť end-to-end s odemčenými parametry, velké chyby pravděpodobně zničí před-trénované váhy v konvolučních vrstvách.\n",
"\n",
"Náš konvoluční model VGG-16 se nachází uvnitř první vrstvy a sám o sobě se skládá z mnoha vrstev. Můžeme se podívat na jeho strukturu:\n"
"Náš konvoluční VGG-16 model se nachází uvnitř první vrstvy, a sám se skládá z mnoha vrstev. Můžeme se podívat na jeho strukturu:\n"
]
},
{
@ -946,7 +956,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Můžeme rozmrazit všechny vrstvy konvoluční základny:\n"
"Můžeme odemknout všechny vrstvy konvoluční základny:\n"
]
},
{
@ -962,7 +972,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Nicméně, rozmrazit všechny najednou není nejlepší nápad. Nejprve můžeme rozmrazit jen několik posledních vrstev konvolucí, protože obsahují vyšší úrovně vzorů, které jsou relevantní pro naše obrázky. Například, na začátek můžeme zmrazit všechny vrstvy kromě posledních 4:\n"
"Nicméně, úplné rozmrazení všech najednou není nejlepší nápad. Můžeme nejprve rozmrazit jen několik posledních vrstev konvolucí, protože ty obsahují vyšší úrovně vzorů, které jsou relevantní pro naše obrázky. Například na začátek můžeme zmrazit všechny vrstvy kromě posledních 4: \n"
]
},
{
@ -1001,11 +1011,11 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Pozorujte, že počet trénovatelných parametrů se výrazně zvýšil, ale stále tvoří přibližně 50 % všech parametrů.\n",
"Všimněte si, že počet trénovatelných parametrů se výrazně zvýšil, ale stále je to přibližně 50 % ze všech parametrů.\n",
"\n",
"Po odemknutí můžeme provést několik dalších epoch trénování (v našem příkladu provedeme pouze jednu). Můžete také zvolit nižší hodnotu učícího se kroku, abyste minimalizovali dopad na předem naučené váhy. Nicméně, i při nízké hodnotě učícího se kroku můžete očekávat, že přesnost na začátku trénování klesne, než nakonec dosáhne mírně vyšší úrovně než v případě fixních vah.\n",
"Po odemčení můžeme provést ještě pár epoch trénování (v našem příkladu uděláme jen jednu). Můžete také zvolit nižší rychlost učení, aby byl minimalizován dopad na předtrénované váhy. Nicméně i při nízké rychlosti učení můžete očekávat, že přesnost na začátku tréninku poklesne, až nakonec dosáhne mírně vyšší úrovně než v případě fixních vah.\n",
"\n",
"> **Note:** Toto trénování probíhá mnohem pomaleji, protože je potřeba propagovat gradienty zpět skrz mnoho vrstev sítě!\n"
"> **Poznámka:** Toto trénování probíhá mnohem pomaleji, protože musíme propagovat gradienty zpět skrz mnoho vrstev sítě!\n"
]
},
{
@ -1029,9 +1039,9 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Pravděpodobně dosáhneme vyšší přesnosti při trénování, protože používáme výkonnější síť s více parametry, ale přesnost při validaci se nezvýší tolik.\n",
"Pravděpodobně dosáhneme vyšší přesnosti při tréninku, protože používáme výkonnější síť s více parametry, ale přesnost na validačních datech by se nezvýšila tolik.\n",
"\n",
"Neváhejte uvolnit několik dalších vrstev sítě a trénovat dál, abyste zjistili, zda můžete dosáhnout vyšší přesnosti!\n"
"Klidně odemkněte několik dalších vrstev sítě a trénujte dále, abyste zjistili, jestli dokážete dosáhnout vyšší přesnosti!\n"
]
},
{
@ -1040,7 +1050,7 @@
"source": [
"## Další modely počítačového vidění\n",
"\n",
"VGG-16 je jednou z nejjednodušších architektur pro počítačové vidění. Keras nabízí mnoho dalších předtrénovaných sítí. Mezi nejčastěji používané patří architektury **ResNet**, vyvinuté společností Microsoft, a **Inception** od Googlu. Například se podívejme na architekturu nejjednoduššího modelu ResNet-50 (ResNet je rodina modelů s různou hloubkou, můžete zkusit experimentovat s ResNet-152, pokud chcete vidět, jak vypadá opravdu hluboký model):\n"
"VGG-16 je jednou z nejjednodušších architektur počítačového vidění. Keras poskytuje mnoho dalších předtrénovaných sítí. Mezi nejčastěji používané patří architektury **ResNet** vyvinuté Microsoftem a **Inception** od Googlu. Například si prozkoumejme architekturu nejjednoduššího modelu ResNet-50 (ResNet je rodina modelů s různou hloubkou, můžete zkusit experimentovat s ResNet-152, pokud chcete vidět, jak vypadá opravdu hluboký model):\n"
]
},
{
@ -1442,29 +1452,29 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Jak vidíte, model obsahuje stejné známé stavební bloky: konvoluční vrstvy, pooling vrstvy a finální hustý klasifikátor. Tento model můžeme použít stejným způsobem, jakým jsme používali VGG-16 pro transferové učení. Můžete zkusit experimentovat s výše uvedeným kódem, použít různé modely ResNet jako základní model a sledovat, jak se mění přesnost.\n",
"Jak vidíte, model obsahuje ty stejné známé stavební bloky: konvoluční vrstvy, poolingové vrstvy a závěrečný hustý klasifikátor. Tento model můžeme použít přesně stejným způsobem, jako jsme používali VGG-16 pro přenosové učení. Můžete si vyzkoušet experimentovat s výše uvedeným kódem, použít různé modely ResNet jako základní model a sledovat, jak se mění přesnost.\n",
"\n",
"## Batch Normalizace\n",
"\n",
"Tato síť obsahuje ještě jeden typ vrstvy: **Batch Normalizace**. Myšlenka batch normalizace spočívá v tom, že hodnoty, které procházejí neuronovou sítí, jsou přivedeny do správného intervalu. Obvykle neuronové sítě fungují nejlépe, když jsou všechny hodnoty v rozmezí [-1,1] nebo [0,1], a právě proto škálujeme/normalizujeme naše vstupní data odpovídajícím způsobem. Během trénování hluboké sítě se však může stát, že hodnoty výrazně vybočí z tohoto rozmezí, což činí trénování problematickým. Vrstva batch normalizace vypočítá průměr a standardní odchylku pro všechny hodnoty aktuálního minibatchu a použije je k normalizaci signálu před jeho průchodem vrstvou neuronové sítě. To výrazně zlepšuje stabilitu hlubokých sítí.\n"
"Tato síť obsahuje ještě další typ vrstvy: **Batch Normalizaci**. Myšlenkou batch normalizace je přivést hodnoty, které procházejí neuronovou sítí, do správného intervalu. Obvykle neuronové sítě fungují nejlépe, když jsou všechny hodnoty v rozsahu [-1,1] nebo [0,1], a proto naše vstupní data odpovídajícím způsobem škálujeme/normalizujeme. Během tréninku hluboké sítě se však může stát, že hodnoty se významně dostanou mimo tento rozsah, což činí trénink problematickým. Vrstva batch normalizace vypočítá průměr a směrodatnou odchylku pro všechny hodnoty aktuální mini dávky a použije je k normalizaci signálu před jeho předáním neuronové vrstvě. To významně zlepšuje stabilitu hlubokých sítí.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Shrnutí\n",
"## Závěr\n",
"\n",
"Pomocí transferového učení jsme byli schopni rychle sestavit klasifikátor pro náš vlastní úkol klasifikace objektů a dosáhnout vysoké přesnosti. Tento příklad však nebyl zcela spravedlivý, protože původní síť VGG-16 byla předem natrénována na rozpoznávání koček a psů, a my jsme tak pouze znovu využili většinu vzorů, které již v síti byly přítomny. U exotičtějších objektů specifických pro určité domény, jako jsou detaily na výrobní lince v továrně nebo různé listy stromů, můžete očekávat nižší přesnost.\n",
"Pomocí transferového učení jsme dokázali rychle sestavit klasifikátor pro náš vlastní úkol klasifikace objektů a dosáhnout vysoké přesnosti. Tento příklad však nebyl zcela férový, protože původní síť VGG-16 byla předem natrénována na rozpoznávání koček a psů, a tak jsme znovu použili většinu vzorů, které byla síť již naučena. Můžete očekávat nižší přesnost u více exotických a doménově specifických objektů, jako jsou detaily na výrobní lince v závodě nebo různé listy stromů.\n",
"\n",
"Je vidět, že složitější úkoly, které nyní řešíme, vyžadují vyšší výpočetní výkon a nelze je snadno řešit na CPU. V další části se pokusíme použít lehčí implementaci k natrénování stejného modelu s nižšími výpočetními nároky, což povede jen k mírně nižší přesnosti.\n"
"Vidíte, že složitější úkoly, které nyní řešíme, vyžadují vyšší výpočetní výkon a nelze je snadno vyřešit na CPU. V další části se pokusíme použít lehčí implementaci k trénování stejného modelu s nižšími výpočetními zdroji, což povede jen k mírně nižší přesnosti.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n---\n\n**Prohlášení**: \nTento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). I když se snažíme o co největší přesnost, mějte prosím na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za závazný zdroj. Pro důležité informace doporučujeme profesionální lidský překlad. Neodpovídáme za žádná nedorozumění nebo nesprávné výklady vyplývající z použití tohoto překladu.\n"
"---\n\n<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**Prohlášení o omezení odpovědnosti**:\nTento dokument byl přeložen pomocí AI překladatelské služby [Co-op Translator](https://github.com/Azure/co-op-translator). Přestože usilujeme o co největší přesnost, mějte prosím na paměti, že automatizované překlady mohou obsahovat chyby nebo nepřesnosti. Originální dokument v jeho mateřském jazyce by měl být považován za autoritativní zdroj. Pro kritické informace se doporučuje profesionální lidský překlad. Nejsme odpovědní za jakékoli nedorozumění nebo nesprávné interpretace vzniklé použitím tohoto překladu.\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-29T13:42:32+00:00",
"source_file": "lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb",
"language_code": "cs"
}
},
"nbformat": 4,

View File

@ -1,51 +1,51 @@
# Zpracování přirozeného jazyka
![Shrnutí úkolů NLP na kresbě](../../../../translated_images/cs/ai-nlp.b22dcb8ca4707cea.webp)
![Shrnutí úkolů NLP ve skicáku](../../../../translated_images/cs/ai-nlp.b22dcb8ca4707cea.webp)
V této sekci se zaměříme na použití neuronových sítí k řešení úkolů spojených se **zpracováním přirozeného jazyka (NLP)**. Existuje mnoho problémů v oblasti NLP, které bychom chtěli, aby počítače dokázaly vyřešit:
V této sekci se zaměříme na využití neuronových sítí k řešení úkolů souvisejících se **zpracováním přirozeného jazyka (NLP)**. Existuje mnoho problémů NLP, které chceme, aby počítače dokázaly řešit:
* **Klasifikace textu** je typický klasifikační problém týkající se textových sekvencí. Příklady zahrnují klasifikaci e-mailových zpráv jako spam vs. ne-spam nebo kategorizaci článků jako sport, obchod, politika atd. Při vývoji chatbotů často potřebujeme pochopit, co uživatel chtěl říct v tomto případě se jedná o **klasifikaci záměru**. Často je při klasifikaci záměru nutné pracovat s mnoha kategoriemi.
* **Analýza sentimentu** je typický regresní problém, kdy potřebujeme přiřadit číslo (sentiment), které odpovídá tomu, jak pozitivní/negativní je význam věty. Pokročilejší verzí analýzy sentimentu je **analýza sentimentu na základě aspektů** (ABSA), kdy sentiment nepřiřazujeme celé větě, ale jejím různým částem (aspektům), např. *V této restauraci mi chutnala kuchyně, ale atmosféra byla příšerná*.
* **Rozpoznávání pojmenovaných entit** (NER) se týká problému extrakce určitých entit z textu. Například můžeme potřebovat pochopit, že ve frázi *Potřebuji letět do Paříže zítra* slovo *zítra* odkazuje na DATUM a *Paříž* je LOKACE.
* **Extrakce klíčových slov** je podobná NER, ale potřebujeme automaticky extrahovat slova důležitá pro význam věty, aniž bychom předem trénovali na konkrétní typy entit.
* **Klasifikace textu** je typický klasifikační problém týkající se sekvencí textu. Příklady zahrnují klasifikaci e-mailových zpráv jako spam vs. ne-spam nebo kategorizaci článků jako sport, obchod, politika atd. Také při vývoji chatbotů často potřebujeme pochopit, co uživatel chtěl říct v tomto případě řešíme **klasifikaci záměru**. Často v klasifikaci záměru musíme pracovat s mnoha kategoriemi.
* **Analýza sentimentu** je typický regresní problém, kde je potřeba přidělit číslo (sentiment) odpovídající tomu, jak pozitivní/negativní je význam věty. Pokročilejší verzí analýzy sentimentu je **analýza sentimentu založená na aspektech** (ABSA), kde přidělujeme sentiment ne celému textu, ale různým jeho částem (aspektům), např. *V této restauraci se mi líbila kuchyně, ale atmosféra byla hrozná*.
* **Rozpoznávání pojmenovaných entit** (NER) se týká problému vyhledávání určitých entit v textu. Například je potřeba pochopit, že ve frázi *Musím zítra letět do Paříže* slovo *zítra* odkazuje na DATUM a *Paříž* je LOKALITA.
* **Extrahování klíčových slov** je podobné jako NER, ale je potřeba automaticky extrahovat slova důležitá pro význam věty bez předchozího tréninku na konkrétní typy entit.
* **Shlukování textu** může být užitečné, když chceme seskupit podobné věty, například podobné požadavky v konverzacích technické podpory.
* **Odpovídání na otázky** se týká schopnosti modelu odpovědět na konkrétní otázku. Model dostane jako vstup textový úryvek a otázku a musí poskytnout místo v textu, kde se odpověď na otázku nachází (nebo někdy vygenerovat text odpovědi).
* **Generování textu** je schopnost modelu generovat nový text. Může být považováno za klasifikační úkol, který předpovídá další písmeno/slovo na základě nějakého *textového podnětu*. Pokročilé modely generování textu, jako je GPT-3, dokážou řešit i jiné úkoly NLP pomocí techniky zvané [programování pomocí podnětů](https://towardsdatascience.com/software-3-0-how-prompting-will-change-the-rules-of-the-game-a982fbfe1e0) nebo [inženýrství podnětů](https://medium.com/swlh/openai-gpt-3-and-prompt-engineering-dcdc2c5fcd29).
* **Shrnutí textu** je technika, kdy chceme, aby počítač "přečetl" dlouhý text a shrnul ho do několika vět.
* **Odpovídání na otázky** je schopnost modelu odpovědět na konkrétní otázku. Model dostane jako vstup textový úsek a otázku a potřebuje poskytnout místo v textu, kde je odpověď (nebo někdy také vygenerovat text odpovědi).
* **Generování textu** je schopnost modelu generovat nový text. Může být považováno za klasifikační úkol, který předpovídá další písmeno/slovo na základě nějaké *textové výzvy*. Pokročilé modely generování textu, jako GPT-3, dokážou řešit i jiné NLP úkoly, například klasifikaci, pomocí techniky zvané [prompt programming](https://towardsdatascience.com/software-3-0-how-prompting-will-change-the-rules-of-the-game-a982fbfe1e0) nebo [prompt engineering](https://medium.com/swlh/openai-gpt-3-and-prompt-engineering-dcdc2c5fcd29)
* **Shrnutí textu** je technika, kdy chceme, aby počítač „přečetl“ dlouhý text a shrnul ho do několika vět.
* **Strojový překlad** lze vnímat jako kombinaci porozumění textu v jednom jazyce a generování textu v jiném.
Zpočátku byly většina úkolů NLP řešena tradičními metodami, jako jsou gramatiky. Například při strojovém překladu byly použity analyzátory k transformaci původní věty na syntaktický strom, poté byly extrahovány vyšší úrovně sémantických struktur k reprezentaci významu věty a na základě tohoto významu a gramatiky cílového jazyka byl generován výsledek. Dnes je mnoho úkolů NLP efektivněji řešeno pomocí neuronových sítí.
Zpočátku byla většina NLP úkolů řešena tradičními metodami, jako byly gramatiky. Například při strojovém překladu se používaly parsery k transformaci počáteční věty do syntaktického stromu, poté byly extrahovány vyšší úrovně sémantických struktur reprezentujících význam věty a na základě tohoto významu a gramatiky cílového jazyka byl generován výsledek. V současnosti je mnoho úkolů NLP efektivněji řešeno pomocí neuronových sítí.
> Mnoho klasických metod NLP je implementováno v Python knihovně [Natural Language Processing Toolkit (NLTK)](https://www.nltk.org). Online je dostupná skvělá [NLTK kniha](https://www.nltk.org/book/), která pokrývá, jak lze různé úkoly NLP řešit pomocí NLTK.
> Mnoho klasických NLP metod je implementováno v Python knihovně [Natural Language Processing Toolkit (NLTK)](https://www.nltk.org). Online je dostupná skvělá [kniha k NLTK](https://www.nltk.org/book/), která pokrývá, jak lze různé úkoly NLP řešit pomocí NLTK.
V našem kurzu se budeme převážně zaměřovat na použití neuronových sítí pro NLP a NLTK použijeme tam, kde to bude potřeba.
V našem kurzu se budeme převážně zaměřovat na využití neuronových sítí pro NLP a NLTK použijeme tam, kde to bude potřeba.
Již jsme se naučili používat neuronové sítě pro práci s tabulkovými daty a obrázky. Hlavní rozdíl mezi těmito typy dat a textem je, že text je sekvence proměnné délky, zatímco velikost vstupu v případě obrázků je předem známá. Zatímco konvoluční sítě dokážou extrahovat vzory z vstupních dat, vzory v textu jsou složitější. Například negace může být oddělena od subjektu libovolným počtem slov (např. *Nemám rád pomeranče* vs. *Nemám rád ty velké barevné chutné pomeranče*), a to by mělo být stále interpretováno jako jeden vzor. Proto je pro práci s jazykem nutné zavést nové typy neuronových sítí, jako jsou *rekurentní sítě* a *transformery*.
Už jsme se naučili využívat neuronové sítě pro práci s tabulkovými daty a s obrázky. Hlavní rozdíl mezi těmito typy dat a textem je, že text je sekvence proměnné délky, zatímco velikost vstupu u obrázků je předem známá. Zatímco konvoluční sítě dokážou extrahovat vzory ze vstupních dat, vzory v textu jsou složitější. Například zápor může být od předmětu oddělen libovolným počtem slov (např. *Nemám rád pomeranče* vs. *Nemám rád ty velké barevné chutné pomeranče*), ale mělo by to být stále interpretováno jako jeden vzor. Proto pro práci s jazykem potřebujeme zavést nové typy neuronových sítí, jako jsou *rekurentní sítě* a *transformery*.
## Instalace knihoven
Pokud používáte lokální instalaci Pythonu pro spuštění tohoto kurzu, možná budete muset nainstalovat všechny potřebné knihovny pro NLP pomocí následujících příkazů:
Pokud používáte lokální instalaci Pythonu pro spuštění tohoto kurzu, možná budete muset nainstalovat všechny požadované knihovny pro NLP pomocí následujících příkazů:
**Pro PyTorch**
```bash
pip install -r requirements-torch.txt
pip install -r requirements-pytorch.txt
```
**Pro TensorFlow**
```bash
pip install -r requirements-tf.txt
```
> NLP s TensorFlow si můžete vyzkoušet na [Microsoft Learn](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-tensorflow/?WT.mc_id=academic-77998-cacaste)
> NLP s TensorFlow můžete zkusit na [Microsoft Learn](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-tensorflow/?WT.mc_id=academic-77998-cacaste)
## Upozornění na GPU
## Varování ohledně GPU
V této sekci budeme v některých příkladech trénovat poměrně velké modely.
* **Použijte počítač s podporou GPU**: Doporučuje se spouštět vaše notebooky na počítači s podporou GPU, aby se zkrátila doba čekání při práci s velkými modely.
* **Omezení paměti GPU**: Při běhu na GPU může dojít k situacím, kdy vám dojde paměť GPU, zejména při trénování velkých modelů.
* **Spotřeba paměti GPU**: Množství paměti GPU spotřebované během trénování závisí na různých faktorech, včetně velikosti minibatch.
* **Minimalizujte velikost minibatch**: Pokud narazíte na problémy s pamětí GPU, zvažte snížení velikosti minibatch ve vašem kódu jako možné řešení.
* **Uvolnění paměti GPU v TensorFlow**: Starší verze TensorFlow nemusí správně uvolňovat paměť GPU při trénování více modelů v jednom Python kernelu. Pro efektivní správu paměti GPU můžete nastavit TensorFlow tak, aby alokoval paměť GPU pouze podle potřeby.
* **Zahrnutí kódu**: Chcete-li nastavit TensorFlow tak, aby alokoval paměť GPU pouze podle potřeby, zahrňte následující kód do svých notebooků:
* **Použijte počítač s podporou GPU**: Doporučuje se spouštět notebooky na počítači s podporou GPU, aby se zkrátila čekací doba při práci s velkými modely.
* **Omezení paměti GPU**: Práce na GPU může vést k situacím, kdy dojde k vyčerpání paměti GPU, zejména při tréninku velkých modelů.
* **Spotřeba paměti GPU**: Množství paměti GPU spotřebované během tréninku závisí na různých faktorech, včetně velikosti minibatch.
* **Minimalizujte velikost minibatch**: Pokud narazíte na problémy s pamětí GPU, zvažte snížení velikosti minibatch ve svém kódu jako možné řešení.
* **Uvolnění paměti GPU v TensorFlow**: Starší verze TensorFlow nemusí spr správně uvolnit paměť GPU při tréninku více modelů v jednom Python kernelu. Pro efektivní správu paměti GPU je možné nastavit TensorFlow tak, aby alokoval GPU paměť pouze podle potřeby.
* **Začlenění kódu**: Pro nastavení TensorFlow, aby rozšiřoval alokaci GPU paměti pouze podle potřeby, zahrňte v notebooku následující kód:
```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)
```
Pokud vás zajímá učení NLP z pohledu klasického strojového učení, navštivte [tento soubor lekcí](https://github.com/microsoft/ML-For-Beginners/tree/main/6-NLP).
Pokud máte zájem učit se o NLP z klasické perspektivy strojového učení, navštivte [tuto sadu lekcí](https://github.com/microsoft/ML-For-Beginners/tree/main/6-NLP)
## V této sekci
V této sekci se naučíme:
V této sekci se naučíme o:
* [Reprezentace textu jako tenzorů](13-TextRep/README.md)
* [Vektorové reprezentace slov](14-Emdeddings/README.md)
* [Modelování jazyka](15-LanguageModeling/README.md)
* [Rekurentní neuronové sítě](16-RNN/README.md)
* [Generativní sítě](17-GenerativeNetworks/README.md)
* [Transformery](18-Transformers/README.md)
* [Reprezentaci textu jako tenzorů](13-TextRep/README.md)
* [Word Embeddings](14-Emdeddings/README.md)
* [Jazykovém modelování](15-LanguageModeling/README.md)
* [Rekurentních neuronových sítích](16-RNN/README.md)
* [Generativních sítích](17-GenerativeNetworks/README.md)
* [Transformerech](18-Transformers/README.md)
**Prohlášení:**
Tento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). Ačkoli se snažíme o přesnost, mějte na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace se doporučuje profesionální lidský překlad. Neodpovídáme za žádná nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu.
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Prohlášení o omezení odpovědnosti**:
Tento dokument byl přeložen pomocí AI překladatelské služby [Co-op Translator](https://github.com/Azure/co-op-translator). Přestože usilujeme o co největší přesnost, mějte prosím na paměti, že automatizované překlady mohou obsahovat chyby nebo nepřesnosti. Originální dokument v jeho mateřském jazyce by měl být považován za autoritativní zdroj. Pro kritické informace se doporučuje profesionální lidský překlad. Nejsme odpovědní za jakékoli nedorozumění nebo nesprávné interpretace vzniklé použitím tohoto překladu.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

View File

@ -5,6 +5,12 @@
"source_file": "AGENTS.md",
"language_code": "hu"
},
"CONTRIBUTING.md": {
"original_hash": "c6fd7e781b67111a90abd166d0ce4aa0",
"translation_date": "2026-07-08T17:13:51+00:00",
"source_file": "CONTRIBUTING.md",
"language_code": "hu"
},
"README.md": {
"original_hash": "12c8eb6bf0867d2f1c32daf613ac5b8b",
"translation_date": "2026-04-06T16:45:37+00:00",
@ -17,6 +23,19 @@
"source_file": "SECURITY.md",
"language_code": "hu"
},
"__translation_failures__": {
"lessons/sketchnotes/LICENSE.md": {
"original_hash": "45ab63a2cd8f5faef6c9b150618837a4",
"source_file": "lessons/sketchnotes/LICENSE.md",
"language_code": "hu",
"failure_date": "2026-07-08T16:58:38+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-26T00:44:21+00:00",
@ -54,8 +73,8 @@
"language_code": "hu"
},
"examples/README.md": {
"original_hash": "0d1babfdcbeb46525f2db3fbaaa54cd7",
"translation_date": "2025-10-03T11:33:24+00:00",
"original_hash": "7883d52c2e2a221e0b07a7b112a149b9",
"translation_date": "2026-07-08T16:53:31+00:00",
"source_file": "examples/README.md",
"language_code": "hu"
},
@ -66,8 +85,8 @@
"language_code": "hu"
},
"lessons/0-course-setup/how-to-run.md": {
"original_hash": "a4717bd9103b9f6cd84d534b83534689",
"translation_date": "2026-01-16T04:46:36+00:00",
"original_hash": "7ad8c7d8604c53649b3d4d1e2f3a6fa1",
"translation_date": "2026-07-08T16:53:58+00:00",
"source_file": "lessons/0-course-setup/how-to-run.md",
"language_code": "hu"
},
@ -191,6 +210,12 @@
"source_file": "lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md",
"language_code": "hu"
},
"lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb": {
"original_hash": "99b816b6a4957ef4100cee4c4221dff9",
"translation_date": "2026-07-08T16:49:22+00:00",
"source_file": "lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb",
"language_code": "hu"
},
"lessons/4-ComputerVision/08-TransferLearning/lab/README.md": {
"original_hash": "7765935c35fcee69b9fe2d0cfd6963e2",
"translation_date": "2025-08-25T23:16:18+00:00",
@ -330,8 +355,8 @@
"language_code": "hu"
},
"lessons/5-NLP/README.md": {
"original_hash": "8ef02a9318257ea140ed3ed74442096d",
"translation_date": "2025-08-25T21:27:16+00:00",
"original_hash": "038df6f1a73e49f6430740da083bfd6d",
"translation_date": "2026-07-08T16:54:28+00:00",
"source_file": "lessons/5-NLP/README.md",
"language_code": "hu"
},
@ -355,7 +380,7 @@
},
"lessons/6-Other/23-MultiagentSystems/README.md": {
"original_hash": "38a1185ae3d54b180378bbd71ae3ef16",
"translation_date": "2025-09-23T11:08:38+00:00",
"translation_date": "2026-07-08T16:59:49+00:00",
"source_file": "lessons/6-Other/23-MultiagentSystems/README.md",
"language_code": "hu"
},

View File

@ -0,0 +1,29 @@
# Hozzájárulás az AI-For-Beginners projekthez
Köszönjük érdeklődését az AI-For-Beginners projekthez való hozzájárulás iránt! Szívesen fogadjuk a fordításokat, tananyaggondozásokat és formázási javításokat.
## Microsoft Contributor License Agreement (CLA)
Ez a projekt fogadja a hozzájárulásokat és javaslatokat. A legtöbb hozzájáruláshoz el kell fogadnia egy Contributor License Agreement (CLA) megállapodást, amely nyilatkozza, hogy joga van hozzájárulásának felhasználására, és ténylegesen megadja nekünk ennek jogát. Részletekért látogasson el a [https://cla.microsoft.com](https://cla.microsoft.com) oldalra.
Amikor pull request-et nyújt be, a CLA-bot automatikusan eldönti, hogy szükséges-e CLA-t szolgáltatnia, és ez alapján címkézi, jegyzeteli a PR-t (például címke, komment). Csak kövesse a bot utasításait. Ezt csak egyszer kell elvégeznie minden olyan tárhely esetén, amelynél a CLA-t használjuk.
## Hogyan járuljon hozzá
### 1. Elírások / Kódhibák javítása
Ha elírást vagy hibát talál bármely Jupyter notebookban vagy tananyagmelléklet fájlban:
1. Forkolja a tárhelyet.
2. Javítsa az elírást vagy hibás hivatkozást.
3. Nyújtson be egy Pull Request-et egyértelmű javítási leírással.
### 2. Fordítások beküldése
Szívesen fogadjuk a tananyagot más nyelvekre történő fordításban is! Kérjük, a fordításokat helyezze el a `translations/` könyvtár alatt a meglévő mappaneveket használva (például `translations/es/`, `translations/pt-BR/`, `translations/zh-CN/`).
Részletekért lásd: [etc/CONTRIBUTING.md](etc/CONTRIBUTING.md).
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Jogi nyilatkozat**:
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével készült. Bár az pontosságra törekszünk, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az anyanyelvén tekintendő hiteles forrásnak. Fontos információk esetén professzionális emberi fordítást javasolunk. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely ebből a fordításból ered.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

View File

@ -1,85 +1,87 @@
# Kezdőbarát AI Példák
# Kezdőknek Szóló AI Példák
Üdvözlünk! Ez a könyvtár egyszerű, önálló példákat tartalmaz, amelyek segítenek az AI és a gépi tanulás alapjainak elsajátításában. Minden példa kezdőbarát, részletes megjegyzésekkel és lépésről lépésre történő magyarázatokkal.
Üdvözlünk! Ez a könyvtár egyszerű, önálló példákat tartalmaz, hogy segítsen elindulni az AI és a gépi tanulás világában. Minden példa kezdőbarát, részletes megjegyzésekkel és lépésről lépésre történő magyarázatokkal.
## 📚 Példák Áttekintése
| Példa | Leírás | Nehézség | Előfeltételek |
|-------|--------|----------|---------------|
| [Hello AI World](../../../examples/01-hello-ai-world.py) | Az első AI programod - egyszerű mintafelismerés | ⭐ Kezdő | Python alapok |
| [Egyszerű Neurális Hálózat](../../../examples/02-simple-neural-network.py) | Neurális hálózat építése az alapoktól | ⭐⭐ Kezdő+ | Python, alap matematikai ismeretek |
| [Képosztályozó](./03-image-classifier.ipynb) | Képek osztályozása előre betanított modellel | ⭐⭐ Kezdő+ | Python, numpy |
| [Szöveg Hangulata](../../../examples/04-text-sentiment.py) | Szövegek hangulatának elemzése (pozitív/negatív) | ⭐⭐ Kezdő+ | Python |
|---------|-------------|------------|---------------|
| [Hello AI World](https://github.com/microsoft/AI-For-Beginners/blob/main/examples/01-hello-ai-world.py) | Az első AI programod egyszerű minta felismerés | ⭐ Kezdő | Python alapjai |
| [Simple Neural Network](https://github.com/microsoft/AI-For-Beginners/blob/main/examples/02-simple-neural-network.py) | Hozz létre egy neurális hálózatot a semmiből | ⭐⭐ Kezdő+ | Python, alap matematikai ismeretek |
| [Image Classifier](https://github.com/microsoft/AI-For-Beginners/blob/main/examples/03-image-classifier.ipynb) | Kép osztályozás előre betanított modellel | ⭐⭐ Kezdő+ | Python, numpy |
| [Text Sentiment](https://github.com/microsoft/AI-For-Beginners/blob/main/examples/04-text-sentiment.py) | Szövegérzelem elemzése (pozitív/negatív) | ⭐⭐ Kezdő+ | Python |
## 🚀 Első Lépések
## 🚀 Kezdjünk neki
### Előfeltételek
Győződj meg róla, hogy a Python telepítve van (ajánlott verzió: 3.8 vagy újabb). Telepítsd a szükséges csomagokat:
Győződj meg róla, hogy telepítve van a Python (3.8 vagy újabb verzió ajánlott). Telepítsd a szükséges csomagokat:
```bash
# For Python scripts
# Python szkriptekhez
pip install numpy
# For Jupyter notebooks (image classifier)
# Jupyter jegyzetfüzetekhez (kép osztályozó)
pip install jupyter numpy pillow tensorflow
```
Vagy használd a fő tananyag conda környezetét:
Vagy használd a conda környezetet a fő tananyagból:
```bash
conda env create --name ai4beg --file ../environment.yml
conda activate ai4beg
```
### Példák Futattása
### Példák futtatása
**Python szkriptekhez (.py fájlok):**
```bash
python 01-hello-ai-world.py
```
**Jupyter notebookokhoz (.ipynb fájlok):**
**Jupyter jegyzetfüzetekhez (.ipynb fájlok):**
```bash
jupyter notebook 03-image-classifier.ipynb
```
## 📖 Tanulási Útmutató
## 📖 Tanulási útvonal
Javasoljuk, hogy a példákat sorrendben kövesd:
Ajánljuk, hogy a példákat sorrendben kövesd:
1. **Kezdd a "Hello AI World"-del** - Ismerd meg a mintafelismerés alapjait
2. **Építs egy Egyszerű Neurális Hálót** - Értsd meg, hogyan működnek a neurális hálók
3. **Próbáld ki a Képosztályozót** - Nézd meg az AI-t működés közben valódi képekkel
4. **Elemezd a Szöveg Hangulatát** - Fedezd fel a természetes nyelvfeldolgozást
1. **Kezdd a "Hello AI World"-del** Ismerd meg az alapvető minta felismerést
2. **Építs egy egyszerű neurális hálózatot** Értsd meg, hogyan működnek a neurális hálózatok
3. **Próbáld ki a kép osztályozót** Nézd meg az AI működését valós képekkel
4. **Elemzd a szövegérzelmeket** Fedezd fel a természetes nyelvfeldolgozást
## 💡 Tippek Kezdőknek
## 💡 Tippek kezdőknek
- **Olvasd el figyelmesen a kódban található megjegyzéseket** - Ezek elmagyarázzák, hogy mit csinál minden sor
- **Kísérletezz!** - Próbálj meg értékeket módosítani, és figyeld meg, mi történik
- **Ne aggódj, ha nem értesz mindent azonnal** - A tanulás időt vesz igénybe
- **Tegyél fel kérdéseket** - Használd a [Vita fórumot](https://github.com/microsoft/AI-For-Beginners/discussions)
- **Olvasd el alaposan a kód megjegyzéseit** Elmagyarázzák, mit csinál minden sor
- **Kísérletezz!** Próbálj meg értékeket változtatni és figyeld meg, mi történik
- **Ne aggódj, ha nem értesz mindent elsőre** A tanulás időt vesz igénybe
- **Tegyél fel kérdéseket** Használd a [Vita fórumot](https://github.com/microsoft/AI-For-Beginners/discussions)
## 🔗 Következő Lépések
## 🔗 Következő lépések
Miután befejezted ezeket a példákat, fedezd fel a teljes tananyagot:
Miután elvégezted ezeket a példákat, fedezd fel a teljes tananyagot:
- [Bevezetés az AI-ba](../lessons/1-Intro/README.md)
- [Neurális Hálók](../lessons/3-NeuralNetworks/README.md)
- [Számítógépes Látás](../lessons/4-ComputerVision/README.md)
- [Természetes Nyelvfeldolgozás](../lessons/5-NLP/README.md)
- [Neurális hálózatok](../lessons/3-NeuralNetworks/README.md)
- [Számítógépes látás](../lessons/4-ComputerVision/README.md)
- [Természetes nyelvfeldolgozás](../lessons/5-NLP/README.md)
## 🤝 Közreműködés
## 🤝 Hozzájárulás
Hasznosnak találtad ezeket a példákat? Segíts nekünk javítani rajtuk:
Hasznosnak találtad ezeket a példákat? Segíts nekünk fejleszteni őket:
- Jelents hibákat vagy javasolj fejlesztéseket
- Adj hozzá további példákat kezdők számára
- Adj hozzá több példát kezdőknek
- Fejleszd a dokumentációt és a megjegyzéseket
---
*Ne feledd: Minden szakértő egyszer kezdő volt. Jó tanulást! 🎓*
*Emlékezz: minden szakértő egyszer kezdő volt. Jó tanulást! 🎓*
---
**Felelősség kizárása**:
Ez a dokumentum az [Co-op Translator](https://github.com/Azure/co-op-translator) AI fordítási szolgáltatás segítségével került lefordításra. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget az ebből a fordításból eredő félreértésekért vagy téves értelmezésekért.
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Jogi nyilatkozat**:
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével készült. Bár az pontosságra törekszünk, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az anyanyelvén tekintendő hiteles forrásnak. Fontos információk esetén professzionális emberi fordítást javasolunk. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely ebből a fordításból ered.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

View File

@ -1,12 +1,12 @@
# Hogyan futtassuk a kódot
Ez a tananyag rengeteg futtatható példát és laborokat tartalmaz, amelyeket érdemes lefuttatni. Ehhez szükség van arra, hogy Python kódot tudj végrehajtani a jupyter notebookokban, amelyek a tananyag részeként elérhetőek. Több lehetőséged is van a kód futtatására:
Ez a tanterv sok futtatható példát és laboratóriumi gyakorlatot tartalmaz, amelyeket szeretnél futtatni. Ehhez szükséged van arra, hogy képes legyél Python kódot futtatni a tananyag részeként biztosított Jupyter Notebook-okban. Több lehetőséged is van a kód futtatására:
## Lokálisan a saját számítógépeden
## Lokális futtatás a számítógépeden
A kód lokális futtatásához Python telepítés szükséges a gépeden. Egy ajánlás a **[miniconda](https://conda.io/en/latest/miniconda.html)** telepítése ez egy viszonylag könnyű telepítés, amely támogatja a `conda` csomagkezelőt különböző Python **virtuális környezetek** használatára.
A kód futtatásához lokálisan Python telepítés szükséges. Egy ajánlott megoldás a **[miniconda](https://conda.io/en/latest/miniconda.html)** telepítése ez egy viszonylag könnyű telepítés, ami támogatja a `conda` csomagkezelőt különböző Python **virtuális környezetek** kezeléséhez.
Miután telepítetted a minicondát, klónozd a repozitóriumot, és hozz létre egy virtuális környezetet, amelyet ezen a tanfolyamon használni fogsz:
Miután telepítetted a minicondát, klónozd a tárolót és hozz létre egy virtuális környezetet, amit a kurzus során fogsz használni:
```bash
git clone http://github.com/microsoft/ai-for-beginners
@ -15,57 +15,57 @@ conda env create --name ai4beg --file .devcontainer/environment.yml
conda activate ai4beg
```
### Visual Studio Code használata Python kiterjesztéssel
### Visual Studio Code használata Python bővítménnyel
A tananyagot a legjobban úgy használhatod, ha megnyitod [Visual Studio Code](http://code.visualstudio.com/?WT.mc_id=academic-77998-cacaste) alkalmazásban, a [Python kiterjesztéssel](https://marketplace.visualstudio.com/items?itemName=ms-python.python&WT.mc_id=academic-77998-cacaste).
A tananyagot legjobban úgy használhatod, ha [Visual Studio Code](http://code.visualstudio.com/?WT.mc_id=academic-77998-cacaste)-ban nyitod meg a projekttárat, a [Python bővítmény](https://marketplace.visualstudio.com/items?itemName=ms-python.python&WT.mc_id=academic-77998-cacaste) telepítésével.
> **Megjegyzés**: Miután klónoztad és megnyitottad a mappát VS Code-ban, automatikusan javasolni fogja a Python kiterjesztések telepítését. A minconda telepítését is el kell végezned a fentiek szerint.
> **Megjegyzés**: Amint klónozod és megnyitod a könyvtárat VS Code-ban, automatikusan javasolni fogja a Python bővítmények telepítését. Emellett telepítened kell a minicondát, ahogy azt fent leírtuk.
> **Megjegyzés**: Ha a VS Code felajánlja, hogy egy konténerben nyissa meg újra a repozitóriumot, akkor ezt el kell utasítanod, ha a helyi Python telepítést szeretnéd használni.
> **Megjegyzés**: Ha VS Code azt javasolja, hogy nyisd meg újra a tárolót egy konténerben, akkor ezt utasítsd el, hogy a lokális Python telepítést használd.
### Jupyter használata böngészőben
### Jupyter futtatása böngészőben
Használhatsz Jupyter környezetet is a böngészőből a saját számítógépeden. Mind a klasszikus Jupyter, mind a JupyterHub kényelmes fejlesztői környezetet nyújt automatikus kiegészítéssel, kódkiemeléssel stb.
Használhatsz Jupytert is a böngészőben a saját számítógépeden. Mind az alap Jupyter, mind a JupyterHub kényelmes fejlesztői környezetet biztosít automatikus kiegészítéssel, kódkijelöléssel stb.
A Jupyter lokális elindításához menj a tananyag könyvtárába, és futtasd:
A helyi Jupyter indításához lépj a kurzus könyvtárába, és futtasd:
```bash
jupyter notebook
```
vagy
vagy
```bash
jupyterhub
```
Ezután tetszőleges `.ipynb` fájlra navigálhatsz, megnyithatod azokat és elkezdhetsz dolgozni.
Ezután bármely `.ipynb` fájlra navigálhatsz, megnyithatod és elkezdhetsz dolgozni.
### Konténerben futtatás
### Konténerben való futtatás
A Python telepítés alternatívája lehet, hogy a kódot egy konténerben futtatod. Mivel a repozitórium tartalmaz egy speciális `.devcontainer` mappát, amely útmutatást ad egy konténer felépítéséhez, a VS Code lehetőséget nyújt arra, hogy a kódot konténerben nyisd meg újra. Ehhez Docker telepítés szükséges, és bonyolultabb is, ezért ezt inkább haladóbb felhasználóknak ajánljuk.
Egy alternatíva a Python telepítés helyett, ha a kódot konténerben futtatod. Mivel a tárolónk tartalmaz egy speciális `.devcontainer` mappát, ami leírja, hogyan építhető fel a konténer, a VS Code kínál lehetőséget a kód konténerben való újranyitására. Ehhez Docker telepítés szükséges, és technikailag bonyolultabb, így ezt tapasztaltabb felhasználóknak ajánljuk.
## Felhőben futtatás
## Futtatás a felhőben
Ha nem szeretnéd helyben telepíteni a Pythont, és van hozzáférésed valamilyen felhő erőforráshoz akkor jó alternatíva a kód futtatása a felhőben. Többféleképpen is megteheted ezt:
Ha nem szeretnél helyileg Python-t telepíteni, és vannak felhő erőforrásaid, jó alternatíva a kód futtatása a felhőben. Több módja van ennek:
* Használhatod a **[GitHub Codespaces](https://github.com/features/codespaces)** szolgáltatást, amely egy virtuális környezet a GitHub-on, a VS Code böngészős felületén keresztül elérhető. Ha hozzáférsz Codespaces-hez, csak kattints a **Code** gombra a repóban, indíts el egy codespace-et és pillanatok alatt futtathatod a kódot.
* Használhatod a **[Binder](https://mybinder.org/v2/gh/microsoft/ai-for-beginners/HEAD)** szolgáltatást. A [Binder](https://mybinder.org) ingyenes számítási erőforrásokat biztosít a felhőben, hogy kipróbálhass kódokat a GitHub-ról. Van egy gomb a főoldalon, amely megnyitja a repót Binder-ben ez gyorsan átvezet a Binder oldalra, amely felépíti a háttérben a konténert és elindít egy Jupyter webes felületet zökkenőmentesen.
* Használhatod a **[GitHub Codespaces](https://github.com/features/codespaces)** szolgáltatást, amely egy virtuális környezet, amit a GitHub hoz létre számodra, és amit egy VS Code böngésző felületén keresztül érhetsz el. Ha hozzáférsz a Codespaces-hez, csak kattints a **Code** gombra a tárolóban, indíts el egy codespace-et, és máris futtathatod a kódot.
* Használhatod a **[Binder](https://mybinder.org/v2/gh/microsoft/ai-for-beginners/HEAD)** szolgáltatást is. A [Binder](https://mybinder.org) ingyenes felhő alapú számítási erőforrásokat biztosít, hogy GitHub kódokat kipróbálhass. Az oldal kezdőlapján van gomb a tároló megnyitására Binder-ben ez gyorsan átvezet a binder oldalra, amely felépít egy mögöttes konténert és zökkenőmentesen elindít egy Jupyter webes felületet.
> **Megjegyzés**: A visszaélések elkerülése érdekében Binder korlátozott hozzáféréssel rendelkezik bizonyos webes erőforrásokhoz. Ez megakadályozhat bizonyos kódok működését, amelyek modelleket és/vagy adatállományokat töltenek le a nyilvános internetről. Lehet, hogy megoldásokat kell keresned. Emellett a Binder által nyújtott számítási erőforrások alapvetőek, így az edzések lassúak lesznek, főleg a későbbi, összetettebb leckék esetén.
> **Megjegyzés**: A Binder biztonsági okokból bizonyos webes forrásokhoz nem enged hozzáférést. Ez megakadályozhatja, hogy néhány kód működjön, amely modelleket és/vagy adatállományokat tölt le a nyilvános internetről. Lehet, hogy kerülő megoldásokat kell találnod. Emellett a Binder által biztosított számítási erőforrások meglehetősen alap szintűek, így az edzések lassúak lesznek, különösen a későbbi, összetettebb leckékben.
## Felhőben való futtatás GPU-val
## Futtatás a felhőben GPU-val
A tananyag egyes későbbi leckéi nagyon profitálhatnak GPU támogatásból. Például a modell betanítása máskülönben fájdalmasan lassú lehet. Több lehetőség közül választhatsz, főleg ha hozzáférsz a felhőhöz az [Azure for Students](https://azure.microsoft.com/free/students/?WT.mc_id=academic-77998-cacaste) segítségével, vagy az intézményeden keresztül:
A tananyag későbbi leckéi nagyban profitálnak a GPU támogatásból. Például a modell edzés máskülönben nagyon lassú lehet. Több lehetőséged is van, különösen ha van hozzáférésed a felhőhöz a [Azure for Students](https://azure.microsoft.com/free/students/?WT.mc_id=academic-77998-cacaste) vagy az intézményed révén:
* Hozz létre egy [Data Science Virtual Machine](https://docs.microsoft.com/learn/modules/intro-to-azure-data-science-virtual-machine/?WT.mc_id=academic-77998-cacaste) virtuális gépet, és csatlakozz hozzá Jupyter segítségével. Ezt követően klónozhatod a repozitóriumot közvetlenül a gépre, és elkezdheted a tanulást. Az NC-sorozatú VM-ek támogatják a GPU-t.
* Hozz létre [Data Science Virtual Machine](https://docs.microsoft.com/learn/modules/intro-to-azure-data-science-virtual-machine/?WT.mc_id=academic-77998-cacaste)-t, és csatlakozz hozzá Jupyteren keresztül. Ekkor közvetlenül a gépre klónozhatod a tárolót és elkezdheted a tanulást. Az NC-sorozatú VM-ek támogatják a GPU-t.
> **Megjegyzés**: Egyes előfizetések, köztük az Azure for Students sem tartalmaznak GPU támogatást alapból. Ekkor további GPU magokat technikai támogatási kérelmen keresztül kell kérned.
> **Megjegyzés**: Egyes előfizetések, így az Azure for Students sem biztosít alapból GPU támogatást. Elképzelhető, hogy technikai támogatási kéréssel kell további GPU magokat igényelned.
* Hozz létre egy [Azure Machine Learning Workspace-et](https://azure.microsoft.com/services/machine-learning/?WT.mc_id=academic-77998-cacaste), majd használd a Notebook funkciót ott. [Ez a videó](https://azure-for-academics.github.io/quickstart/azureml-papers/) bemutatja, hogyan klónozz egy repót az Azure ML notebookba, és hogyan kezd el használni.
* Hozz létre egy [Azure Machine Learning Workspace](https://azure.microsoft.com/services/machine-learning/?WT.mc_id=academic-77998-cacaste)-et, és használd ott a Notebook funkciót. [Ez a videó](https://azure-for-academics.github.io/quickstart/azureml-papers/) bemutatja, hogyan lehet egy tárolót Azure ML notebook-ba klónozni és használni.
Használhatod a Google Colab-ot is, amely ingyenes GPU támogatással rendelkezik, és feltöltheted oda a Jupyter Notebookokat, hogy egyenként végrehajtsd őket.
Használhatod a Google Colabot is, amely bizonyos ingyenes GPU támogatással rendelkezik, és egyesével töltheted fel és futtathatod benne a Jupyter Notebook-okat.
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Jogi nyilatkozat**:
Ez a dokumentum az AI fordító szolgáltatás [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével készült. Bár az pontosságra törekszünk, kérjük, vegye figyelembe, hogy az automatikus fordítások tartalmazhatnak hibákat vagy pontatlanságokat. Az eredeti, anyanyelvi dokumentum tekintendő az illetékes forrásnak. Kritikus információk esetén professzionális, emberi fordítást javaslunk. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely ebből a fordításból ered.
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével készült. Bár az pontosságra törekszünk, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az anyanyelvén tekintendő hiteles forrásnak. Fontos információk esetén professzionális emberi fordítást javasolunk. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely ebből a fordításból ered.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

View File

@ -4,11 +4,11 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"# Előre betanított modellek és transzfer tanulás\n",
"# Előre betanított modellek és átvitel alapú tanulás\n",
"\n",
"A CNN-ek tanítása sok időt vehet igénybe, és ehhez nagy mennyiségű adat szükséges. Azonban az idő nagy részét azzal töltjük, hogy megtanuljuk azokat az alacsony szintű szűrőket, amelyeket a hálózat használ a minták kinyerésére a képekből. Felmerül egy természetes kérdés - használhatunk-e egy olyan neurális hálózatot, amelyet már egy adott adathalmazon betanítottak, és adaptálhatjuk-e különböző képek osztályozására anélkül, hogy teljes tanítási folyamatot végeznénk?\n",
"A CNN-ek betanítása sok időt vehet igénybe, és ehhez rengeteg adat szükséges. Az idő nagy részét azonban arra fordítjuk, hogy megtanuljuk azokat a legjobb alacsony szintű szűrőket, amelyeket a hálózat a képekből minták kinyerésére használ. Felmerül a kérdés használhatunk-e egy egyik adatbázison betanított neurális hálózatot úgy, hogy azt más képek osztályozására adaptáljuk teljes betanítási folyamat nélkül?\n",
"\n",
"Ezt a megközelítést **transzfer tanulásnak** nevezzük, mivel bizonyos tudást átviszünk az egyik neurális hálózati modellből a másikba. A transzfer tanulás során általában egy előre betanított modellel kezdünk, amelyet már valamilyen nagy képadathalmazon, például az **ImageNet**-en tanítottak. Ezek a modellek már képesek különböző jellemzők kinyerésére általános képekből, és sok esetben elegendő egy osztályozót építeni ezekre a kinyert jellemzőkre, hogy jó eredményt érjünk el.\n"
"Ezt a megközelítést **átvitel alapú tanulásnak** nevezzük, mert valamennyi tudást továbbítunk az egyik neurális hálózati modellről a másikra. Átvitel alapú tanulás során általában egy előre betanított modellt használunk, amelyet egy nagy képadatbázison, például az **ImageNet**-en tanítottak. Ezek a modellek már jól képesek különböző jellemzőket kinyerni általános képekből, és sok esetben elegendő, ha erre a kinyert jellemzőkre egy osztályozót építünk, hogy jó eredményt érjünk el.\n"
]
},
{
@ -29,11 +29,11 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"## Macskák vs. Kutyák Adathalmaz\n",
"## Macskák vs. Kutyák Adatkészlet\n",
"\n",
"Ebben az egységben egy valós problémát fogunk megoldani: macskák és kutyák képeinek osztályozását. Ehhez a [Kaggle Cats vs. Dogs Dataset](https://www.kaggle.com/c/dogs-vs-cats) adathalmazt fogjuk használni, amely letölthető [a Microsofttól is](https://www.microsoft.com/en-us/download/details.aspx?id=54765&WT.mc_id=academic-77998-cacaste).\n",
"Ebben az egységben egy valós problémát oldunk meg, macskák és kutyák képeinek osztályozását. Ehhez a [Kaggle Cats vs. Dogs Dataset](https://www.kaggle.com/c/dogs-vs-cats) adatkészletet fogjuk használni, amely letölthető [a Microsofttól is](https://www.microsoft.com/en-us/download/details.aspx?id=54765&WT.mc_id=academic-77998-cacaste).\n",
"\n",
"Töltsük le ezt az adathalmazt, és csomagoljuk ki a `data` könyvtárba (ez a folyamat eltarthat egy ideig!):\n"
"Töltsük le ezt az adatkészletet, és csomagoljuk ki a `data` könyvtárba (ez a folyamat eltarthat egy ideig!):\n"
]
},
{
@ -64,7 +64,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Sajnos a datasetben van néhány sérült képfájl. Gyors tisztítást kell végeznünk, hogy ellenőrizzük a sérült fájlokat. Annak érdekében, hogy ne zavarjuk meg ezt az oktatóanyagot, a dataset ellenőrzésére szolgáló kódot egy modulba helyeztük át.\n"
"Sajnos vannak sérült képállományok az adathalmazban. Gyors tisztítást kell végeznünk a sérült fájlok ellenőrzésére. Annak érdekében, hogy ez a bemutató ne sérüljön, a kódrészletet, amely az adathalmaz ellenőrzését végzi, egy modulba helyeztük át.\n"
]
},
{
@ -333,13 +333,13 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"## A dataset betöltése\n",
"## Az adathalmaz betöltése\n",
"\n",
"Korábbi példákban olyan dataseteket töltöttünk be, amelyek beépítve vannak a Kerasba. Most viszont a saját datasetünkkel fogunk dolgozni, amelyet egy képekből álló könyvtárból kell betöltenünk.\n",
"Az előző példákban beépített Keras adathalmazokat töltöttünk be. Most pedig a saját adathalmazunkkal foglalkozunk, amelyet egy képeket tartalmazó könyvtárból kell betöltenünk.\n",
"\n",
"A valóságban a képdatasetek mérete elég nagy lehet, és nem lehet arra hagyatkozni, hogy az összes adat elfér a memóriában. Ezért a dataseteket gyakran **generátorokként** ábrázolják, amelyek minibatch-ekben tudják visszaadni az adatokat, így alkalmasak a tanításra.\n",
"A valós életben a képadathalmazok mérete meglehetősen nagy lehet, és nem lehet arra hagyatkozni, hogy az összes adat memóriában elférjen. Ezért az adathalmazokat gyakran **generátorokként** ábrázolják, amelyek tanításhoz alkalmas minibatch-ekben adják vissza az adatot.\n",
"\n",
"A képosztályozás kezeléséhez a Keras tartalmaz egy speciális `image_dataset_from_directory` függvényt, amely képes betölteni képeket az egyes osztályoknak megfelelő alkönyvtárakból. Ez a függvény gondoskodik a képek skálázásáról, és képes a datasetet train és test részekre osztani:\n"
"Az képosztályozás kezeléséhez a Keras tartalmaz egy speciális `image_dataset_from_directory` függvényt, amely a különböző osztályoknak megfelelő alkönyvtárakból tud képeket betölteni. Ez a függvény gondoskodik a képek átméretezéséről is, és az adathalmazt fel tudja osztani tanító és teszt részhalmazokra is:\n"
]
},
{
@ -383,9 +383,9 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Fontos, hogy mindkét hívásnál ugyanazt a `seed` értéket állítsd be, mivel ez befolyásolja a képek elosztását a tanító és teszt adathalmaz között.\n",
"Fontos, hogy mindkét hívásnál ugyanazt a `seed` értéket állítsuk be, mert ez befolyásolja a képek megosztását a tanító és teszt adathalmaz között.\n",
"\n",
"Az adathalmaz automatikusan felismeri az osztályneveket a könyvtárakból, és szükség esetén elérheted őket a következő hívással:\n"
"Az adathalmaz automatikusan veszi az osztályneveket a könyvtárakból, és szükség esetén elérhetőek a következő hívással:\n"
]
},
{
@ -412,7 +412,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Az adatokat, amelyeket megszereztünk, közvetlenül átadhatjuk a `fit` függvénynek a modell betanításához. Ezek tartalmazzák a megfelelő képeket és címkéket, amelyeken a következő konstrukcióval lehet végigiterálni:\n"
"A megszerzett adatállományokat közvetlenül át lehet adni a `fit` függvénynek a modell betanításához. Ezek tartalmazzák a megfelelő képeket és címkéket is, amelyeken a következő szerkezet használatával lehet végigiterálni:\n"
]
},
{
@ -453,7 +453,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"> **Megjegyzés**: Az adathalmazban található összes kép lebegőpontos tenzorként van ábrázolva, 0-255 tartományban. Mielőtt átadnánk őket a neurális hálózatnak, ezeket az értékeket 0-1 tartományba kell skálázni. Képek megjelenítésekor ugyanezt kell tennünk, vagy az értékeket `int` típusra kell konvertálnunk (ahogy a fenti kódban tesszük), hogy jelezzük a `matplotlib` számára, hogy az eredeti, nem skálázott képet szeretnénk megjeleníteni.\n"
"> **Megjegyzés**: Az adathalmazban található összes kép lebegőpontos tenzorokként van ábrázolva 0-255 tartományban. Mielőtt átadnánk őket a neurális hálózatnak, ezeket az értékeket 0-1 tartományra kell skálázni. Képek megjelenítésekor ugyanezt kell tennünk, vagy az értékeket `int` típusra kell konvertálnunk (ahogy a fenti kódban is tesszük), hogy a `matplotlib` számára jelezzük, hogy az eredeti, nem skálázott képet szeretnénk megjeleníteni.\n"
]
},
{
@ -462,7 +462,7 @@
"source": [
"## Előre betanított modellek\n",
"\n",
"Számos képosztályozási feladathoz találhatók előre betanított neurális hálózati modellek. Ezek közül sok elérhető a `keras.applications` névtérben, és még több modell található az interneten. Nézzük meg, hogyan tölthető be és használható a legegyszerűbb VGG-16 modell:\n"
"Sok képosztályozási feladathoz találhatók előre betanított neurális hálózati modellek. Ezek közül sok megtalálható a `keras.applications` névtérben, és még több modell található az interneten. Nézzük meg, hogyan lehet a legegyszerűbb VGG-16 modellt betölteni és használni:\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": [
"Van néhány fontos dolog, amit itt érdemes megjegyezni:\n",
"* Mielőtt bármilyen előre betanított hálózat bemenetet kapna, azt egy bizonyos módon elő kell dolgozni. Ezt a megfelelő `preprocess_input` függvény meghívásával végezzük el, amely egy képcsomagot kap bemenetként, és visszaadja azok feldolgozott formáját. A VGG-16 esetében a képek normalizálva vannak, és minden csatornához egy előre meghatározott átlagérték kerül levonásra. Ennek az az oka, hogy a VGG-16 eredetileg ezzel az előfeldolgozással lett betanítva.\n",
"* Az ideghálózatot alkalmazzuk a bemeneti csomagra, és eredményként kapunk egy 1000 elemű tenzorcsomagot, amely az egyes osztályok valószínűségét mutatja. A legvalószínűbb osztály számát az `argmax` függvény meghívásával találhatjuk meg ezen a tenzoron.\n",
"* A kapott eredmény egy [`ImageNet` osztály száma](https://gist.github.com/yrevar/942d3a0ac09ec9e5eb3a). Ennek az eredménynek az értelmezéséhez használhatjuk a `decode_predictions` függvényt is, amely visszaadja a legvalószínűbb n osztályt a nevükkel együtt.\n"
"Itt van néhány fontos dolog:\n",
"* Bármely előre betanított hálózat bemenetként való használata előtt az adatoknak egy bizonyos módon elő kell készülniük. Ezt a hozzá tartozó `preprocess_input` függvény hívásával végzik, amely képek egy csomagját kapja, és visszaadja azok feldolgozott formáját. A VGG-16 esetében a képeket normalizálják, és minden csatornához előre meghatározott átlagértéket vonnak ki. Ennek oka, hogy a VGG-16 eredetileg ezzel az előkészítéssel lett betanítva.\n",
"* A neurális hálózatot alkalmazzák a bemeneti csomagra, és az eredményként egy 1000 elemből álló tenzorcsoportot kapunk, amely megmutatja az egyes osztályok valószínűségét. A legvalószínűbb osztály számát a tenzoron `argmax` függvény hívásával találhatjuk meg.\n",
"* A kapott eredmény egy [egy `ImageNet` osztály száma](https://gist.github.com/yrevar/942d3a0ac09ec9e5eb3a). Ennek az eredménynek az értelmezéséhez használhatjuk a `decode_predictions` függvényt is, amely visszaadja a legjobb n osztályt a nevükkel együtt.\n"
]
},
{
@ -599,7 +609,7 @@
"source": [
"## GPU számítások\n",
"\n",
"A mély neurális hálózatok, mint például a VGG-16 és más, modernebb architektúrák, jelentős számítási kapacitást igényelnek a futtatáshoz. Érdemes GPU-gyorsítást használni, ha elérhető. Szerencsére a Keras automatikusan felgyorsítja a számításokat a GPU-n, ha az rendelkezésre áll. Az alábbi kóddal ellenőrizhetjük, hogy a Tensorflow képes-e használni a GPU-t:\n"
"Mély neurális hálózatok, mint például a VGG-16 és más, modernebb architektúrák futtatásához elég sok számítási kapacitás szükséges. Érdemes használni a GPU gyorsítást, ha elérhető. Szerencsére a Keras automatikusan felgyorsítja a számításokat a GPU-n, ha az rendelkezésre áll. Ellenőrizhetjük, hogy a Tensorflow képes-e GPU-t használni az alábbi kód segítségével:\n"
]
},
{
@ -626,9 +636,10 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"## VGG jellemzők kinyerése\n",
"\n",
"Ha a VGG-16 modellt szeretnénk használni képeink jellemzőinek kinyerésére, akkor a végső osztályozó rétegek nélküli modellre van szükségünk. A VGG-16 modellt a felső rétegek nélkül az alábbi kóddal hozhatjuk létre:\n"
"Ha a VGG-16-ot szeretnénk használni képeink jellemzőinek kinyerésére, akkor az utolsó osztályozó rétegek nélküli modellre van szükségünk. A VGG-16 modellt a felső rétegek nélkül a következő kóddal példányosíthatjuk:\n"
]
},
{
@ -680,9 +691,9 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"A jellemző tensor dimenziója 7x7x512, de ahhoz, hogy vizualizálni tudjuk, 2D formára kellett átalakítanunk.\n",
"A jellemzőtenzor dimenziója 7x7x512, de annak megjelenítéséhez 2D formára kellett alakítanunk.\n",
"\n",
"Most nézzük meg, hogy ezek a jellemzők használhatók-e képek osztályozására. Vegyünk manuálisan néhány képet (esetünkben 50 minibatch-et), és előre számítsuk ki a jellemző vektoraikat. Ehhez használhatjuk a Tensorflow **dataset** API-t. A `map` függvény egy datasetet vesz, és egy megadott lambda-függvényt alkalmazva átalakítja azt. Ezt a mechanizmust használjuk új datasetek létrehozására, `ds_features_train` és `ds_features_test`, amelyek az eredeti képek helyett VGG által kinyert jellemzőket tartalmaznak.\n"
"Most próbáljuk meg megnézni, hogy ezeket a jellemzőket fel lehet-e használni képosztályozásra. Vegyünk manuálisan néhány képrészletet (esetünkben 50 minibatch-et), és előre számítsuk ki a jellemzővektorokat. Ehhez használhatjuk a Tensorflow **dataset** API-ját. A `map` függvény egy adatbázist vesz át, és alkalmaz rá egy adott lambda-függvényt, hogy átalakítsa azt. Ezzel a mechanizmussal új adatbázisokat, a `ds_features_train` és `ds_features_test` adatbázisokat hozunk létre, amelyek az eredeti képek helyett VGG-vel kinyert jellemzőket tartalmaznak.\n"
]
},
{
@ -712,9 +723,9 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"A `.take(50)` konstrukciót használtuk az adathalmaz méretének korlátozására, hogy felgyorsítsuk a bemutatót. Természetesen ezt a kísérletet a teljes adathalmazon is elvégezheted.\n",
"A nagyítás további lépéseinek felgyorsítása érdekében az adathalmaz méretét a `.take(50)` használatával korlátoztuk. Természetesen ezt a kísérletet az egész adathalmazon is elvégezheti.\n",
"\n",
"Most, hogy van egy adathalmazunk kinyert jellemzőkkel, betaníthatunk egy egyszerű sűrű osztályozót, amely megkülönbözteti a macskákat és a kutyákat. Ez a hálózat egy (7,7,512) alakú jellemzővektort fogad bemenetként, és egy kimenetet állít elő, amely vagy egy kutyának, vagy egy macskának felel meg. Mivel ez egy bináris osztályozási feladat, a `sigmoid` aktivációs függvényt és a `binary_crossentropy` veszteségfüggvényt használjuk.\n"
"Most, hogy van egy olyan adathalmazunk, amelyből kinyertük a jellemzőket, betaníthatunk egy egyszerű denz osztályozót, amely képes megkülönböztetni a macskákat és a kutyákat. Ez a hálózat (7,7,512) alakú jellemzővektort fogad bemenetként, és egy kimenetet ad, amely vagy kutyát, vagy macskát jelöl. Mivel bináris osztályozásról van szó, `sigmoid` aktivációs függvényt és `binary_crossentropy` veszteségfüggvényt használunk.\n"
]
},
{
@ -743,13 +754,13 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Az eredmény nagyszerű, szinte 95%-os valószínűséggel meg tudjuk különböztetni a macskát a kutyától! Azonban ezt a megközelítést csak az összes kép egy részhalmazán teszteltük, mivel a manuális jellemzők kinyerése nagyon időigényesnek bizonyult.\n",
"Az eredmény nagyszerű, több mint 95% valószínűséggel meg tudjuk különböztetni a macskát és a kutyát! Azonban ezt a megközelítést eddig csak a képek egy részhalmazán teszteltük, mert a manuális jellemzőkinyerés nagyon időigényesnek tűnik.\n",
"\n",
"## Transzfer tanulás egy VGG hálózat használatával\n",
"## Átviteli tanulás egy VGG hálózat használatával\n",
"\n",
"Elkerülhetjük a jellemzők manuális előzetes kiszámítását az eredeti VGG-16 hálózat teljes használatával a tanítás során, ha a hálózatunkhoz egy jellemzők kinyerő réteget adunk első rétegként.\n",
"Elkerülhetjük a jellemzők manuális előszámítását is azáltal, hogy az eredeti VGG-16 hálózatot egészében használjuk az edzés során, és a jellemzőkinyerőt az első rétegként adjuk hozzá a hálózatunkhoz.\n",
"\n",
"A Keras architektúra szépsége abban rejlik, hogy az általunk fentebb definiált VGG-16 modell egy másik neurális hálózat rétegeként is használható! Csak egy hálózatot kell felépítenünk, amelynek tetején egy sűrű osztályozó található, majd az egész hálózatot visszacsatolásos tanítással kell betanítanunk.\n"
"A Keras architektúra szépsége, hogy a fent definiált VGG-16 modellt egy másik neurális hálózatban is rétegként használhatjuk! Csak annyit kell tennünk, hogy egy sűrű osztályozóval építünk rá a hálózatra, majd az egész hálózatot visszaterjesztéssel tanítjuk.\n"
]
},
{
@ -793,13 +804,13 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Ez a modell egy végponttól végpontig tartó osztályozó hálózatként működik, amely egy képet vesz bemenetként, és visszaadja az osztályt. Azonban a trükkös rész az, hogy azt szeretnénk, ha a VGG16 funkciókinyerőként működne, és ne legyen újratanítva. Ezért szükséges, hogy **a konvolúciós funkciókinyerő súlyait befagyasszuk**. A hálózat első rétegéhez a `model.layers[0]` hívással férhetünk hozzá, és csak annyit kell tennünk, hogy a `trainable` tulajdonságot `False` értékre állítjuk.\n",
"Ez a modell egy végponttól végpontig tartó osztályozó hálózatra hasonlít, amely egy képet vesz be, és visszaadja az osztályt. Azonban a trükk az, hogy a VGG16-ot jellemzők kinyerőjeként szeretnénk használni, és nem újra tanítani. Így **meg kell fagytatnunk a konvolúciós jellemzőkinyerő súlyait**. A hálózat első rétegéhez a `model.layers[0]` hívásával férünk hozzá, és csak a `trainable` tulajdonságot kell `False`-ra állítanunk.\n",
"\n",
"> **Megjegyzés**: A funkciókinyerő súlyainak befagyasztása azért szükséges, mert különben a nem tanított osztályozó réteg tönkreteheti a konvolúciós kinyerő eredeti, előre betanított súlyait.\n",
"> **Megjegyzés**: A jellemzőkinyerő súlyainak lefagyasztása azért szükséges, mert különben a nem betanított osztályozó réteg tönkreteheti az eredeti, előre betanított konvolúciós súlyokat.\n",
"\n",
"Észreveheted, hogy bár a hálózatunkban a paraméterek teljes száma körülbelül 15 millió, valójában csak 25 ezer paramétert tanítunk. Az összes többi, felső szintű konvolúciós szűrőhöz tartozó paraméter előre betanított. Ez jó, mert így kisebb számú paramétert tudunk finomhangolni kevesebb példával.\n",
"Megfigyelhető, hogy míg a hálózatunkban az összes paraméter száma körülbelül 15 millió, csak 25 ezer paramétert tanítunk. Az összes többi, felső szintű konvolúciós szűrő előre betanított. Ez jó, mert kevesebb paramétert tudunk finomhangolni kevesebb példával.\n",
"\n",
"Most betanítjuk a hálózatunkat, és megnézzük, milyen jó eredményt érhetünk el. Számíts hosszabb futási időre, és ne aggódj, ha a végrehajtás egy ideig lefagyottnak tűnik.\n"
"Most betanítjuk a hálózatot, és megnézzük, milyen jó eredményt érhetünk el. Számítsunk viszonylag hosszú futási időre, és ne aggódjunk, ha a végrehajtás egy időre megfagy.\n"
]
},
{
@ -824,11 +835,11 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Úgy tűnik, hogy sikerült egy meglehetősen pontos macskák vs. kutyák osztályozót létrehoznunk!\n",
"Úgy tűnik, hogy egy meglehetősen pontos macskák vs. kutyák osztályozót szereztünk! \n",
"\n",
"## A modell mentése és betöltése\n",
"\n",
"Miután betanítottuk a modellt, elmenthetjük a modell architektúráját és a betanított súlyokat egy fájlba, hogy később is használhassuk:\n"
"Miután betanítottuk a modellt, elmenthetjük a modell architektúráját és a betanított súlyokat egy fájlba a későbbi használathoz:\n"
]
},
{
@ -852,7 +863,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"A modellt bármikor betölthetjük a fájlból. Hasznosnak találhatod, ha a következő kísérlet tönkreteszi a modellt - így nem kellene újrakezdened az elejéről.\n"
"Ezután bármikor betölthetjük a modellt fájlból. Hasznos lehet, ha a következő kísérlet tönkreteszi a modellt így nem kell újrakezdeni az egészet az elejéről.\n"
]
},
{
@ -868,15 +879,15 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"## Finomhangolás transzfer tanulással\n",
"## Finomhangolás transfer tanulással\n",
"\n",
"Az előző részben a végső osztályozó réteget képeztük ki, hogy képeket osztályozzon a saját adatállományunkban. Azonban nem képeztük újra a jellemzők kinyeréséért felelős réteget, így a modell az ImageNet adatokon tanult jellemzőkre támaszkodott. Ha az objektumok vizuálisan eltérnek a szokásos ImageNet képektől, ez a jellemzőkombináció nem biztos, hogy a legjobban működik. Ezért érdemes elkezdeni a konvolúciós rétegek tanítását is.\n",
"Az előző szakaszban az utolsó osztályozó réteget tanítottuk be saját adatbázisunk képeinek osztályozására. Azonban a jellemzőkivonót nem tanítottuk újra, és a modellünk az ImageNet adatokon tanult jellemzőkre támaszkodott. Ha az objektumaid vizuálisan eltérnek a szokásos ImageNet képektől, akkor ez a jellemzőkombináció nem biztos, hogy a legjobban működik. Ezért érdemes elkezdeni a konvolúciós rétegek tanítását is.\n",
"\n",
"Ehhez feloldhatjuk a korábban befagyasztott konvolúciós szűrő paramétereket.\n",
"Ehhez fel kell oldanunk a korábban lefagyasztott konvolúciós szűrő paramétereket.\n",
"\n",
"> **Note:** Fontos, hogy először fagyassza be a paramétereket, és végezzen el néhány tanítási epochot, hogy stabilizálja a súlyokat az osztályozó rétegben. Ha azonnal elkezdi az end-to-end hálózat tanítását feloldott paraméterekkel, nagy hibák valószínűleg tönkreteszik a konvolúciós rétegek előre betanított súlyait.\n",
"> **Megjegyzés:** Fontos, hogy először lefagyaszd a paramétereket, és néhány epizódnyi tanítást végezz, hogy stabilizáld a súlyokat az osztályozó rétegben. Ha azonnal elkezdenéd az egész hálózat végponttól való tanítását lefagyasztás nélküli paraméterekkel, akkor nagy hibák valószínűleg tönkretennék a konvolúciós rétegek előzetesen tanult súlyait.\n",
"\n",
"A konvolúciós VGG-16 modellünk az első rétegben található, és önmagában is sok rétegből áll. Megnézhetjük a szerkezetét:\n"
"A konvolúciós VGG-16 modellünk az első rétegen belül található, és sok rétegből áll. Nézzük meg a szerkezetét:\n"
]
},
{
@ -945,7 +956,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Feloldhatjuk a konvolúciós alap összes rétegének zárolását:\n"
"Feloldhatjuk a konvolúciós alapréteg összes rétegének lefagyasztását:\n"
]
},
{
@ -961,7 +972,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Azonban nem a legjobb ötlet mindet egyszerre feloldani. Először csak néhány utolsó konvolúciós réteget oldhatunk fel, mivel ezek magasabb szintű mintázatokat tartalmaznak, amelyek relevánsak a képeink számára. Például kezdetben feloldhatjuk az összes réteget, kivéve az utolsó 4-et:\n"
"Azonban mindegyiket egyszerre feloldani nem a legjobb ötlet. Először csak néhány utolsó konvolúciós réteget oldhatunk fel, mert ezek magasabb szintű mintázatokat tartalmaznak, amelyek relevánsak a képeink számára. Például kezdetben lefagyaszthatjuk az összes réteget az utolsó 4 kivételével: \n"
]
},
{
@ -1000,11 +1011,11 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Figyeljük meg, hogy a tanítható paraméterek száma jelentősen megnőtt, de még mindig az összes paraméter körülbelül 50%-át teszi ki.\n",
"Figyeljük meg, hogy a tanulható paraméterek száma jelentősen megnőtt, de még mindig az összes paraméter körülbelül 50%-át teszi ki.\n",
"\n",
"A rétegek feloldása után végezhetünk még néhány tanítási epoch-ot (példánkban csak egyet fogunk végezni). Választhatunk alacsonyabb tanulási rátát is, hogy minimalizáljuk az előre betanított súlyokra gyakorolt hatást. Azonban még alacsony tanulási ráta mellett is számíthatunk arra, hogy a pontosság a tanítás elején csökkenni fog, mielőtt végül kissé magasabb szintet érne el, mint a rögzített súlyok esetében.\n",
"A feloldás után néhány további epochot végezhetünk a tanítással (a példánkban csak egyet fogunk csinálni). Alacsonyabb tanulási sebességet is választhat, hogy minimalizálja a hatást az előre betanított súlyokra. Azonban még alacsony tanulási sebességgel is számíthat arra, hogy a pontosság a tanítás kezdetén csökkenni fog, amíg végül egy kicsit magasabb szintre nem ér, mint a rögzített súlyok esetén.\n",
"\n",
"> **Megjegyzés:** Ez a tanítás sokkal lassabban zajlik, mivel a grádienseket vissza kell vezetnünk a hálózat számos rétegén keresztül!\n"
"> **Megjegyzés:** Ez a tanítás sokkal lassabb, mert a gradienseket vissza kell juttatni a hálózat számos rétegén keresztül!\n"
]
},
{
@ -1028,18 +1039,18 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Valószínűleg magasabb tanítási pontosságot érünk el, mivel egy erősebb hálózatot használunk több paraméterrel, de a validációs pontosság nem fog annyira növekedni.\n",
"Valószínűleg magasabb tanítási pontosságot érünk el, mert erősebb hálózatot használunk több paraméterrel, de a validációs pontosság nem fog ilyen mértékben növekedni.\n",
"\n",
"Nyugodtan oldj fel néhány további réteget a hálózatban, és tanítsd tovább, hogy megnézd, el tudsz-e érni magasabb pontosságot!\n"
"Nyugodtan oldj fel még néhány réteget a hálózatban és taníts tovább, hogy megnézd, képes vagy-e magasabb pontosságot elérni!\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Egyéb számítógépes látásmodellek\n",
"## Egyéb számítógépes látás modellek\n",
"\n",
"A VGG-16 az egyik legegyszerűbb számítógépes látásarchitektúra. A Keras számos más előre betanított hálózatot is kínál. Ezek közül a leggyakrabban használtak a **ResNet** architektúrák, amelyeket a Microsoft fejlesztett, valamint a Google által készített **Inception**. Például nézzük meg a legegyszerűbb ResNet-50 modell architektúráját (a ResNet egy modellekből álló család különböző mélységekkel, kipróbálhatod a ResNet-152-t, ha szeretnéd látni, hogy néz ki egy igazán mély modell):\n"
"A VGG-16 az egyik legegyszerűbb számítógépes látás architektúra. A Keras sok más előre betanított hálózatot is biztosít. A leggyakrabban használtak közülük a Microsoft által fejlesztett **ResNet** architektúrák és a Google által készített **Inception**. Például nézzük meg a legegyszerűbb ResNet-50 modell architektúráját (a ResNet egy modellcsalád, amely különböző mélységű modelleket tartalmaz, ha szeretnéd látni, milyen egy igazán mély modell, kipróbálhatod a ResNet-152-t):\n"
]
},
{
@ -1441,29 +1452,29 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Amint látható, a modell ugyanazokat az ismerős építőelemeket tartalmazza: konvolúciós rétegek, pooling rétegek és egy végső sűrű osztályozó. Ezt a modellt pontosan ugyanúgy használhatjuk, mint ahogy a VGG-16-ot használtuk a transfer learning során. Kipróbálhatod a fenti kódot különböző ResNet modellek alapmodellként való használatával, és megfigyelheted, hogyan változik a pontosság.\n",
"Ahogy látható, a modell ugyanazokat a jól ismert építőelemeket tartalmazza: konvolúciós rétegek, pooling rétegek és végső sűrű osztályozó. Ezt a modellt pontosan ugyanúgy használhatjuk, mint ahogyan a VGG-16-ot használtuk átviteli tanuláshoz. Kísérletezhetsz a fenti kóddal, különböző ResNet modelleket használva alapmodellként, és megnézheted, hogyan változik a pontosság.\n",
"\n",
"## Batch Normalization\n",
"## Batch Normalizáció\n",
"\n",
"Ez a hálózat egy másik típusú réteget is tartalmaz: **Batch Normalization**. A batch normalization ötlete az, hogy a neurális hálózaton keresztül áramló értékeket a megfelelő intervallumba hozza. Általában a neurális hálózatok akkor működnek a legjobban, ha minden érték a [-1,1] vagy [0,1] tartományban van, ezért skálázzuk/normalizáljuk az input adatokat ennek megfelelően. Azonban egy mély hálózat tanítása során előfordulhat, hogy az értékek jelentősen kikerülnek ebből a tartományból, ami problémássá teszi a tanítást. A batch normalization réteg kiszámítja az aktuális minibatch összes értékének átlagát és szórását, és ezeket használja az adatok normalizálására, mielőtt azokat egy neurális hálózati rétegen keresztül továbbítaná. Ez jelentősen javítja a mély hálózatok stabilitását.\n"
"Ez a hálózat tartalmaz egy másik rétegtípust is: **Batch Normalizáció**. A batch normalizáció célja, hogy a neurális hálózaton áthaladó értékeket a megfelelő tartományba hozza. Általában a neurális hálózatok akkor működnek a legjobban, ha minden érték a [-1,1] vagy [0,1] intervallumban van, és ezért méretezzük/normáljuk be ennek megfelelően a bemeneti adatokat. Azonban egy mély hálózat tréningje során előfordulhat, hogy az értékek jelentősen kilépnek ebből a tartományból, ami megnehezíti a tanulást. A batch normalizációs réteg kiszámítja az aktuális minibatch összes értékének átlagát és szórását, és ezeket felhasználva normalizálja a jelet, mielőtt az áthalad a neurális hálózati rétegen. Ez jelentősen javítja a mély hálózatok stabilitását.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Összefoglaló\n",
"## Összegzés\n",
"\n",
"A transzfer tanulás alkalmazásával gyorsan össze tudtunk állítani egy osztályozót az egyedi objektumok osztályozási feladatához, és magas pontosságot értünk el. Azonban ez a példa nem volt teljesen igazságos, mivel az eredeti VGG-16 hálózatot már előzetesen macskák és kutyák felismerésére tanították, így lényegében csak újrahasznosítottuk a hálózatban már meglévő mintázatokat. Kevésbé szokványos, specifikus objektumok esetében, mint például gyártósoron lévő részletek vagy különböző fa levelek, alacsonyabb pontosságra lehet számítani.\n",
"Átviteli tanulás használatával gyorsan össze tudtunk rakni egy osztályozót az egyedi objektumosztályozási feladatunkhoz, és magas pontosságot értünk el. Azonban ez a példa nem volt teljesen igazságos, mert az eredeti VGG-16 hálózatot macskák és kutyák felismerésére trenírozták előre, így a hálózat már meglévő mintázatait használtuk fel újra. Alacsonyabb pontosság várható egzotikusabb, speciálisabb tartományokra jellemző objektumok esetén, például egy gyár termelési sorának részleteinél vagy különböző fa leveleinél.\n",
"\n",
"Látható, hogy az összetettebb feladatok, amelyeket most oldunk meg, nagyobb számítási kapacitást igényelnek, és nem oldhatók meg könnyen CPU-n. A következő egységben megpróbálunk egy könnyebb implementációt használni ugyanazon modell betanításához, alacsonyabb számítási erőforrásokkal, ami csak minimálisan alacsonyabb pontosságot eredményez.\n"
"Látható, hogy a jelenleg megoldott összetettebb feladatok nagyobb számítási kapacitást igényelnek, és nem oldhatók meg könnyen CPU-n. A következő egységben egy könnyebb implementációt próbálunk használni ugyanazon modell betanítására alacsonyabb számítási erőforrásokkal, ami csak kissé alacsonyabb pontossághoz vezet.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n---\n\n**Felelősségkizárás**: \nEzt a dokumentumot az [Co-op Translator](https://github.com/Azure/co-op-translator) AI fordítási szolgáltatás segítségével fordítottuk le. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt a professzionális, emberi fordítás igénybevétele. Nem vállalunk felelősséget a fordítás használatából eredő félreértésekért vagy téves értelmezésekért.\n"
"---\n\n<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**Jogi nyilatkozat**:\nEz a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével készült. Bár az pontosságra törekszünk, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az anyanyelvén tekintendő hiteles forrásnak. Fontos információk esetén professzionális emberi fordítást javasolunk. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely ebből a fordításból ered.\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-29T13:40:53+00:00",
"source_file": "lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb",
"language_code": "hu"
}
},
"nbformat": 4,

View File

@ -1,51 +1,51 @@
# Természetes Nyelvfeldolgozás
# Természetes Nyelv Feldolgozás
![Összefoglaló az NLP feladatokról egy rajzban](../../../../translated_images/hu/ai-nlp.b22dcb8ca4707cea.webp)
![Összefoglaló az NLP feladatokról egy firkán](../../../../translated_images/hu/ai-nlp.b22dcb8ca4707cea.webp)
Ebben a részben a neurális hálózatok használatára összpontosítunk, hogy megoldjuk a **természetes nyelvfeldolgozással (NLP)** kapcsolatos feladatokat. Számos NLP probléma van, amelyeket szeretnénk, ha a számítógépek meg tudnának oldani:
Ebben a szakaszban az ideghálózatok használatára fogunk koncentrálni a **természetes nyelv feldolgozással (NLP)** kapcsolatos feladatok kezelésére. Sok NLP probléma van, amelyet a számítógépek képesek legyenek megoldani:
* **Szöveg osztályozása** egy tipikus osztályozási probléma, amely szövegszekvenciákra vonatkozik. Példák: e-mailek osztályozása spam vagy nem spam kategóriába, vagy cikkek kategorizálása sport, üzlet, politika stb. témák szerint. Chatbotok fejlesztésekor gyakran meg kell értenünk, mit akart mondani a felhasználó ebben az esetben **szándék osztályozásról** van szó. A szándék osztályozás során gyakran sok kategóriával kell dolgoznunk.
* **Érzelemelemzés** egy tipikus regressziós probléma, ahol egy számot (érzelmet) kell hozzárendelnünk, amely kifejezi, mennyire pozitív vagy negatív egy mondat jelentése. Az érzelemelemzés egy fejlettebb változata az **aspektus-alapú érzelemelemzés** (ABSA), ahol nem az egész mondathoz, hanem annak különböző részeihez (aspektusokhoz) rendelünk érzelmet, pl. *Ebben az étteremben tetszett a konyha, de a hangulat borzalmas volt*.
* **Név entitás felismerés** (NER) arra a problémára utal, hogy bizonyos entitásokat kell kinyerni a szövegből. Például meg kell értenünk, hogy a *Holnap Párizsba kell repülnöm* mondatban a *holnap* szó DÁTUM-ra utal, míg *Párizs* egy HELYSÉG.
* **Kulcsszó kinyerés** hasonló a NER-hez, de itt automatikusan kell kinyerni a mondat jelentéséhez fontos szavakat, anélkül, hogy előzetesen specifikus entitástípusokra tanítanánk.
* **Szöveg csoportosítása** hasznos lehet, ha hasonló mondatokat szeretnénk csoportosítani, például technikai támogatási beszélgetésekben hasonló kéréseket.
* **Kérdés megválaszolása** arra utal, hogy egy modell képes legyen egy adott kérdésre válaszolni. A modell egy szöveges részletet és egy kérdést kap bemenetként, és meg kell adnia a szöveg azon részét, ahol a válasz található (vagy néha generálnia kell a válasz szövegét).
* **Szöveg generálása** egy modell képessége új szöveg létrehozására. Ez tekinthető egy osztályozási feladatnak, amely előrejelzi a következő betűt/szót egy *szöveges indítás* alapján. Fejlett szöveg generáló modellek, mint például a GPT-3, képesek más NLP feladatokat is megoldani olyan technikák segítségével, mint a [prompt programozás](https://towardsdatascience.com/software-3-0-how-prompting-will-change-the-rules-of-the-game-a982fbfe1e0) vagy a [prompt mérnökség](https://medium.com/swlh/openai-gpt-3-and-prompt-engineering-dcdc2c5fcd29).
* **Szöveg összefoglalása** egy olyan technika, amikor azt szeretnénk, hogy a számítógép "elolvassa" a hosszú szöveget, és néhány mondatban összefoglalja.
* **Gépi fordítás** tekinthető egy nyelven történő szöveg megértésének és egy másik nyelven történő szöveg generálásának kombinációjaként.
* **Szöveg osztályozás** tipikus osztályozási probléma szöveges sorozatokkal kapcsolatban. Például az e-mail üzenetek spamból vagy nem spam kategóriába sorolása, vagy cikkek kategorizálása sport, üzlet, politika stb. szerint. Chatbot fejlesztésekor gyakran meg kell érteni, mit akart mondani a felhasználó — ebben az esetben **szándék osztályozással** foglalkozunk. Gyakran az szándék osztályozás során sok kategóriával kell dolgoznunk.
* **Hangulatelemzés** tipikus regressziós probléma, ahol egy számot (hangulatot) kell hozzárendelni egy mondat jelentésének pozitív vagy negatív értékeléséhez. Egy fejlettebb változata a hangulatelemzésnek az **aspektus-alapú hangulatelemzés** (ABSA), ahol nem az egész mondathoz, hanem annak különböző részeihez (aspektusokhoz) rendelünk hangulatot, pl. *Ebben az étteremben szerettem a konyhát, de a hangulat szörnyű volt*.
* **Nevesített entitásfelismerés** (NER) a szövegből bizonyos entitások kinyerésének problémája. Például meg kell értenünk, hogy a *Holnap Párizsba kell repülnöm* kifejezésben a *holnap* dátum, a *Párizs* pedig helyszín.
* **Kulcsszó-kivonás** hasonló a NER-hez, de ebben az esetben automatikusan kell kinyerni a mondat jelentéséhez fontos szavakat, anélkül, hogy specifikus entitástípusokra előre tréningeznénk.
* **Szöveg klaszterezés** hasznos lehet, amikor hasonló mondatokat kívánunk csoportosítani, például hasonló igényeket a műszaki támogatási beszélgetésekben.
* **Kérdés-válasz** az a képesség, hogy egy modell válaszoljon egy adott kérdésre. A modell bemenete egy szövegrészlet és egy kérdés, és meg kell határoznia a szöveg azon helyét, ahol a kérdésre a válasz található (vagy néha magát a válasz szöveget generálja).
* **Szöveggenerálás** az a képesség, hogy egy modell új szöveget generáljon. Ez tekinthető egy osztályozási feladatnak, amely a következő betűt/szót jósolja meg valamilyen *szöveges prompt* alapján. Fejlett szöveggeneráló modellek, például a GPT-3 képesek más NLP feladatokat is megoldani, mint például az osztályozás [prompt programozás](https://towardsdatascience.com/software-3-0-how-prompting-will-change-the-rules-of-the-game-a982fbfe1e0) vagy [prompt mérnökség](https://medium.com/swlh/openai-gpt-3-and-prompt-engineering-dcdc2c5fcd29) segítségével.
* **Szövegösszefoglalás** olyan technika, amikor a számítógépnek "el kell olvasnia" egy hosszú szöveget, és néhány mondatban összegeznie azt.
* **Gépi fordítás** tekinthető a szöveg értelmezésének egy nyelven és szöveggenerálásnak egy másik nyelven kombinációjaként.
Kezdetben a legtöbb NLP feladatot hagyományos módszerekkel oldották meg, például nyelvtanokkal. Például gépi fordítás esetén elemzőket használtak, hogy az eredeti mondatot szintaxisfává alakítsák, majd magasabb szintű szemantikai struktúrákat nyertek ki, hogy reprezentálják a mondat jelentését, és ezen jelentés és a célnyelv nyelvtana alapján generálták az eredményt. Manapság sok NLP feladatot hatékonyabban oldanak meg neurális hálózatokkal.
Kezdetben az NLP feladatok nagy részét hagyományos módszerekkel, például nyelvtanokkal oldották meg. Például a gépi fordításban elemzőket használtak az kiinduló mondat szintaxis-fa-á alakítására, majd magasabb szintű szemantikai struktúrákat nyertek ki a mondat jelentésének reprezentálására, és az eredményt ezen jelentés és a célnyelv nyelvtana alapján generálták. Manapság sok NLP feladatot hatékonyabban oldanak meg ideghálózatokkal.
> Számos klasszikus NLP módszer megtalálható a [Natural Language Processing Toolkit (NLTK)](https://www.nltk.org) Python könyvtárban. Egy remek [NLTK könyv](https://www.nltk.org/book/) is elérhető online, amely bemutatja, hogyan lehet különböző NLP feladatokat megoldani az NLTK segítségével.
> Sok klasszikus NLP módszer elérhető a [Natural Language Processing Toolkit (NLTK)](https://www.nltk.org) Python könyvtárban. Van egy remek [NLTK könyv](https://www.nltk.org/book/) online, amely bemutatja, hogyan lehet különböző NLP feladatokat megoldani az NLTK-val.
A kurzusunkban főként a neurális hálózatok használatára fogunk összpontosítani az NLP területén, és szükség esetén használni fogjuk az NLTK-t.
Tanfolyamunk során főként az ideghálózatok NLP-ben való alkalmazására fogunk koncentrálni, és ahol szükséges, használjuk az NLTK-t.
Már megtanultuk, hogyan használjunk neurális hálózatokat táblázatos adatok és képek feldolgozására. A fő különbség ezek között az adatok és a szöveg között az, hogy a szöveg változó hosszúságú szekvencia, míg a képek esetében a bemenet mérete előre ismert. Míg a konvolúciós hálózatok képesek mintákat kinyerni a bemeneti adatokból, a szövegben lévő minták összetettebbek. Például a tagadás elválasztható a tárgytól sok szóval (pl. *Nem szeretem a narancsot* vs. *Nem szeretem azokat a nagy színes ízletes narancsokat*), és ezt még mindig egy mintaként kell értelmezni. Ezért a nyelv kezeléséhez új neurális hálózattípusokat kell bevezetnünk, mint például *rekurzív hálózatok* és *transformerek*.
Már tanultunk arról, hogyan lehet ideghálózatokat használni táblázatos adatok és képek kezelésére. Az ilyen adatok és a szöveg fő különbsége, hogy a szöveg változó hosszúságú sorozat, míg képek esetén a bemenet mérete előre ismert. Míg a konvolúciós hálózatok mintákat tudnak kinyerni a bemeneti adatokból, a minták a szövegben sokkal összetettebbek. Például lehet, hogy egy tagadás és a tárgy között számos szó lehet (pl. *Nem szeretem a narancsot*, illetve *Nem szeretem azokat a nagy színes finom narancsokat*), és ez mégis egy mintának számít. Ezért a nyelv kezeléséhez új típusú ideghálókat kell bevezetnünk, mint például *rekurzív hálózatok* és *transzformerek*.
## Könyvtárak telepítése
## Könyvtárak Telepítése
Ha helyi Python telepítést használ a kurzus futtatásához, szükség lehet az NLP-hez szükséges összes könyvtár telepítésére az alábbi parancsokkal:
Ha helyi Python telepítést használsz a tanfolyam futtatásához, szükség lehet az összes NLP-hez szükséges könyvtár telepítésére a következő parancsokkal:
**PyTorch esetén**
```bash
pip install -r requirements-torch.txt
pip install -r requirements-pytorch.txt
```
**TensorFlow esetén**
```bash
pip install -r requirements-tf.txt
```
> A TensorFlow-val való NLP-t kipróbálhatod a [Microsoft Learn](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-tensorflow/?WT.mc_id=academic-77998-cacaste) oldalon.
> Próbálhatod az NLP-t TensorFlow-val a [Microsoft Learn](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-tensorflow/?WT.mc_id=academic-77998-cacaste) oldalán.
## GPU Figyelmeztetés
Ebben a részben néhány példában meglehetősen nagy modelleket fogunk tanítani.
* **Használj GPU-val ellátott számítógépet**: Javasolt GPU-val ellátott számítógépen futtatni a jegyzetfüzeteket, hogy csökkentsük a várakozási időt nagy modellek esetén.
* **GPU memória korlátok**: GPU használata esetén előfordulhat, hogy kifogy a GPU memória, különösen nagy modellek tanítása során.
* **GPU memória fogyasztás**: A GPU memória fogyasztása a tanítás során számos tényezőtől függ, beleértve a minibatch méretét.
* **Minimális minibatch méret**: Ha GPU memória problémákba ütközöl, próbáld meg csökkenteni a minibatch méretét a kódban.
* **TensorFlow GPU memória felszabadítás**: A TensorFlow régebbi verziói nem mindig szabadítják fel megfelelően a GPU memóriát, ha több modellt tanítasz egy Python kernelben. A GPU memória hatékony kezeléséhez beállíthatod, hogy a TensorFlow csak szükség esetén foglaljon GPU memóriát.
* **Kód beillesztése**: A TensorFlow beállításához, hogy csak szükség esetén növelje a GPU memória foglalását, illeszd be az alábbi kódot a jegyzetfüzetedbe:
Ebben a szakaszban néhány példában elég nagy modelleket fogunk tanítani.
* **Használj GPU-támogatott számítógépet**: Ajánlott, hogy a jegyzeteket GPU-t támogató számítógépen futtasd a várakozási idők csökkentése érdekében nagy modellek esetén.
* **GPU memória korlátok**: GPU-n való futtatás esetén előfordulhat, hogy elfogy a GPU memória, különösen nagy modellek tanítása közben.
* **GPU memória fogyasztás**: A tanulás során fogyasztott GPU memória mennyisége több tényezőtől függ, beleértve a minibatch méretét is.
* **Minibatch méret csökkentése**: Ha problémát tapasztalsz a GPU memória miatt, próbáld csökkenteni a minibatch méretet a kódodban.
* **TensorFlow GPU memória felszabadítás**: Régebbi TensorFlow verziók nem mindig szabadítják fel megfelelően a GPU memóriát, ha több modellt tanítanak egy Python kernelben. A GPU memória hatékony kezeléséhez konfigurálhatod a TensorFlow-t úgy, hogy csak szükséges esetben foglaljon memóriát.
* **Kód beillesztése**: Ahhoz, hogy a TensorFlow csak szükség szerint bővítse a GPU memória lefoglalást, illeszd be a következő kódot a jegyzeteidbe:
```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)
```
Ha érdekel az NLP klasszikus gépi tanulási perspektívából, látogasd meg [ezt a leckesorozatot](https://github.com/microsoft/ML-For-Beginners/tree/main/6-NLP).
Ha érdekel az NLP klasszikus gépi tanulási nézőpontból, látogasd meg [ezt a tananyagot](https://github.com/microsoft/ML-For-Beginners/tree/main/6-NLP)
## Ebben a részben
Ebben a részben megtanuljuk:
## Ebben a szakaszban
Ebben a szakaszban az alábbiakat tanuljuk meg:
* [Szöveg reprezentálása tensorokként](13-TextRep/README.md)
* [Szöveg reprezentálása tenzorokként](13-TextRep/README.md)
* [Szóbeágyazások](14-Emdeddings/README.md)
* [Nyelvi modellezés](15-LanguageModeling/README.md)
* [Nyelvmodellezés](15-LanguageModeling/README.md)
* [Rekurzív neurális hálózatok](16-RNN/README.md)
* [Generatív hálózatok](17-GenerativeNetworks/README.md)
* [Transformerek](18-Transformers/README.md)
* [Transzformerek](18-Transformers/README.md)
**Felelősség kizárása**:
Ez a dokumentum az AI fordítási szolgáltatás [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Jogi nyilatkozat**:
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével készült. Bár az pontosságra törekszünk, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az anyanyelvén tekintendő hiteles forrásnak. Fontos információk esetén professzionális emberi fordítást javasolunk. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely ebből a fordításból ered.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

View File

@ -1,38 +1,38 @@
# Többügynökös rendszerek
# Több-ügynökös rendszerek
Az intelligencia elérésének egyik lehetséges módja az úgynevezett **emergens** (vagy **szinergikus**) megközelítés, amely azon az elven alapul, hogy sok viszonylag egyszerű ügynök együttes viselkedése a rendszer egészének összetettebb (vagy intelligensebb) viselkedését eredményezheti. Elméletileg ez a [Kollektív intelligencia](https://en.wikipedia.org/wiki/Collective_intelligence), az [Emergentizmus](https://en.wikipedia.org/wiki/Global_brain) és az [Evolúciós kibernetika](https://en.wikipedia.org/wiki/Global_brain) elvein alapul, amelyek szerint a magasabb szintű rendszerek valamilyen hozzáadott értéket nyernek, ha megfelelően kombinálják őket alacsonyabb szintű rendszerekből (az úgynevezett *metarendszer-átmenet elve*).
Az intelligencia elérésének egyik lehetséges módja az úgynevezett **emergens** (vagy **szinergikus**) megközelítés, amely azon az elven alapul, hogy sok viszonylag egyszerű ügynök együttes viselkedése az egész rendszer összetettebb (vagy intelligensebb) viselkedését eredményezheti. Elméletileg ez a [Kollektív intelligencia](https://en.wikipedia.org/wiki/Collective_intelligence), az [Emergentizmus](https://en.wikipedia.org/wiki/Global_brain) és az [Evolúciós kibernetika](https://en.wikipedia.org/wiki/Global_brain) elveire épül, amelyek azt állítják, hogy a magasabb szintű rendszerek hozzáadott értéket nyernek, ha jól kombináljuk őket az alacsonyabb szintű rendszerekből (az úgynevezett *metarendszer-átmenet elve*).
## [Előadás előtti kvíz](https://ff-quizzes.netlify.app/en/ai/quiz/45)
A **többügynökös rendszerek** irányzata az 1990-es években jelent meg a mesterséges intelligenciában, válaszul az internet és az elosztott rendszerek növekedésére. Az egyik klasszikus mesterséges intelligencia tankönyv, az [Artificial Intelligence: A Modern Approach](https://en.wikipedia.org/wiki/Artificial_Intelligence:_A_Modern_Approach), a klasszikus mesterséges intelligenciát a többügynökös rendszerek szemszögéből vizsgálja.
A **Több-ügynökös rendszerek** irányvonala az 1990-es években jelent meg a mesterséges intelligenciában az internet és az elosztott rendszerek növekedésére válaszul. Egy klasszikus MI tankönyv, az [Artificial Intelligence: A Modern Approach](https://en.wikipedia.org/wiki/Artificial_Intelligence:_A_Modern_Approach), a klasszikus MI nézőpontját a több-ügynökös rendszerek szemszögéből tárgyalja.
A többügynökös megközelítés központi eleme az **ügynök** fogalma egy entitás, amely egy bizonyos **környezetben** él, amelyet érzékelhet és amelyre hatással lehet. Ez egy nagyon tág definíció, és számos különböző típusú és osztályozású ügynök létezhet:
A több-ügynökös megközelítés központi fogalma az **ügynök** egy olyan entitás, amely egy **környezetben** él, amelyet érzékelni és befolyásolni képes. Ez egy nagyon tág meghatározás, és sokféle típusú és osztályozású ügynök létezhet:
* Az érvelési képességük alapján:
- **Reaktív** ügynökök általában egyszerű kérés-válasz típusú viselkedést mutatnak
- **Deliberatív** ügynökök valamilyen logikai érvelést és/vagy tervezési képességeket alkalmaznak
* Az alapján, hogy hol futtatják a kódjukat:
- **Statikus** ügynökök egy dedikált hálózati csomóponton működnek
- **Mobil** ügynökök képesek a kódjukat hálózati csomópontok között mozgatni
* A viselkedésük alapján:
- **Passzív ügynökök** nem rendelkeznek konkrét célokkal. Ezek az ügynökök reagálhatnak külső ingerekre, de maguktól nem kezdeményeznek cselekvéseket.
- **Aktív ügynökök** rendelkeznek célokkal, amelyeket követnek
- **Kognitív ügynökök** összetett tervezést és érvelést alkalmaznak
* Észlelőképességük alapján:
- A **reaktív** ügynökök általában egyszerű kérés-válasz típusú viselkedést mutatnak
- A **megfontolt** ügynökök valamilyen logikai érvelést és/vagy tervezési képességet alkalmaznak
* Az alapján, hogy hol fut az ügynök kódja:
- A **statikus** ügynökök dedikált hálózati csomóponton dolgoznak
- A **mobil** ügynökök képesek mozgatni a kódjukat a hálózati csomópontok között
* Viselkedésük alapján:
- A **passzív ügynököknek** nincsenek speciális céljaik. Ilyen ügynökök reagálhatnak külső ingerekre, de nem kezdeményeznek önállóan semmilyen akciót.
- Az **aktív ügynököknek** vannak céljaik, amelyeket követnek
- A **kognitív ügynökök** bonyolult tervezést és érvelést foglalnak magukban
A többügynökös rendszereket manapság számos alkalmazásban használják:
Manapság a több-ügynökös rendszerek számos alkalmazásban használatosak:
* Játékokban sok nem játékos karakter (NPC) valamilyen mesterséges intelligenciát alkalmaz, és intelligens ügynöknek tekinthető
* Videógyártásban, összetett 3D jelenetek renderelése, amelyek tömegeket tartalmaznak, tipikusan többügynökös szimulációval történik
* Rendszermodellezésben a többügynökös megközelítést használják egy összetett modell viselkedésének szimulálására. Például a többügynökös megközelítést sikeresen alkalmazták a COVID-19 betegség globális terjedésének előrejelzésére. Hasonló megközelítést lehet használni egy város forgalmának modellezésére, és annak vizsgálatára, hogyan reagál a közlekedési szabályok változásaira.
* Összetett automatizálási rendszerekben minden eszköz független ügynökként működhet, ami a teljes rendszert kevésbé monolitikussá és robusztusabbá teszi.
* Játékokban sok nem játékos karakter valamilyen mesterséges intelligenciát alkalmaz, és intelligens ügynöknek tekinthetők
* Videógyártásban összetett 3D jelenetek renderelésénél, amelyek tömegeket ábrázolnak, általában több-ügynökös szimulációt használnak
* Rendszermodellezésben a több-ügynökös megközelítés egy összetett modell viselkedésének szimulálására szolgál. Például a több-ügynökös megközelítést sikeresen alkalmazták a COVID-19 világméretű terjedésének előrejelzésére. Hasonló megközelítés használható a városi forgalom modellezésére és annak vizsgálatára, hogyan reagál a közlekedési szabályok változásaira.
* Összetett automatizálási rendszerekben minden eszköz önálló ügynökként működhet, ami robosztusabbá és kevésbé monolitikussá teszi az egész rendszert.
Nem fogunk mélyen belemenni a többügynökös rendszerek részleteibe, de megvizsgálunk egy példát a **többügynökös modellezésre**.
Nem fogunk mélyen belemenni a több-ügynökös rendszerekbe, de megnézünk egy példát a **Több-ügynökös modellezésre**.
## NetLogo
A [NetLogo](https://ccl.northwestern.edu/netlogo/) egy többügynökös modellezési környezet, amely a [Logo](https://en.wikipedia.org/wiki/Logo_(programming_language)) programozási nyelv módosított változatán alapul. Ezt a nyelvet a programozási fogalmak tanítására fejlesztették ki gyerekek számára, és lehetővé teszi egy **teknős** nevű ügynök irányítását, amely mozoghat, nyomot hagyva maga után. Ez lehetővé teszi összetett geometriai alakzatok létrehozását, ami nagyon vizuális módja az ügynök viselkedésének megértésének.
A [NetLogo](https://ccl.northwestern.edu/netlogo/) egy több-ügynökös modellező környezet, amely a [Logo](https://en.wikipedia.org/wiki/Logo_(programming_language)) programozási nyelv módosított változatán alapul. Ezt a nyelvet programozási koncepciók tanítására fejlesztették ki gyerekek számára, és lehetővé teszi egy **turtle** nevű ügynök irányítását, amely mozog, és nyomot hagy maga után. Ez lehetővé teszi összetett geometriai alakzatok létrehozását, ami nagyon szemléletes módja az ügynök viselkedésének megértésére.
A NetLogo-ban sok teknőst hozhatunk létre a `create-turtles` parancs segítségével. Ezután utasíthatjuk az összes teknőst, hogy végezzen el bizonyos műveleteket (az alábbi példában - mozogjon előre 10 pontot):
A NetLogo-ban sok teknőst hozhatunk létre a `create-turtles` parancs használatával. Ezután parancsot adhatunk az összes teknősnek valamilyen cselekvésre (az alábbi példában - 10 ponttal előre):
```
create-turtles 10
@ -41,39 +41,39 @@ ask turtles [
]
```
Természetesen nem érdekes, ha minden teknős ugyanazt csinálja, ezért `ask` parancs segítségével csoportokat is utasíthatunk, például azokat, amelyek egy bizonyos pont közelében vannak. Különböző *fajtájú* teknősöket is létrehozhatunk a `breed [cats cat]` paranccsal. Itt a `cat` a fajta neve, és meg kell adnunk az egyes és többes számú alakot is, mert a különböző parancsok az érthetőség érdekében különböző formákat használnak.
Természetesen nem érdekes, ha az összes teknős ugyanazt csinálja, ezért kérhetjük teknőscsoportok (például egy bizonyos pont közelében lévők) parancsait. A `breed [cats cat]` paranccsal különböző *fajt* is létrehozhatunk teknősökből. Itt a `cat` a fajta neve, és meg kell adni mind az egyes, mind a többes számot, mert a különböző parancsok érthetőség miatt eltérő formákat használnak.
> ✅ Nem fogunk belemenni a NetLogo nyelv tanulásába ha érdekel, látogasd meg a kiváló [Beginner's Interactive NetLogo Dictionary](https://ccl.northwestern.edu/netlogo/bind/) oldalt.
> ✅ Nem fogunk mélyebben belemenni a NetLogo nyelv megtanulásába ha érdekel, látogass el a remek [Kezdő interaktív NetLogo szótárba](https://ccl.northwestern.edu/netlogo/bind/).
Letöltheted és telepítheted a NetLogo-t [innen](https://ccl.northwestern.edu/netlogo/download.shtml), hogy kipróbáld.
Letöltheted és telepítheted a NetLogo-t, hogy kipróbáld: [download](https://ccl.northwestern.edu/netlogo/download.shtml).
### Modellek könyvtára
A NetLogo egyik nagyszerű tulajdonsága, hogy tartalmaz egy működő modellekből álló könyvtárat, amelyeket kipróbálhatsz. Lépj a **File &rightarrow; Models Library** menüpontra, és számos modellkategóriából választhatsz.
A NetLogo nagyszerűsége, hogy tartalmaz egy könyvtár működő modellekkel, amelyeket kipróbálhatsz. Nyisd meg a **File &rightarrow; Models Library** menüpontot, ahol sokféle modellt találsz.
<img alt="NetLogo Models Library" src="../../../../../translated_images/hu/NetLogo-ModelLib.efe023afb4763c05.webp" width="60%"/>
> Dmitry Soshnikov által készített képernyőkép a modellek könyvtáráról
> Dmitry Soshnikov képernyőképe a modellek könyvtáráról
Megnyithatsz egy modellt, például **Biology &rightarrow; Flocking**.
Megnyithatsz egy modellt, például a **Biology &rightarrow; Flocking** modellt.
### Főbb elvek
### Fő elvek
A modell megnyitása után a NetLogo fő képernyőjére kerülsz. Itt egy minta modell látható, amely a farkasok és juhok populációját írja le véges erőforrások (fű) mellett.
A modell megnyitása után a fő NetLogo képernyőre jutsz. Itt egy minta modell, amely a farkasok és juhok populációját írja le véges erőforrások (fű) mellett.
![NetLogo Main Screen](../../../../../translated_images/hu/NetLogo-Main.32653711ec1a01b3.webp)
![NetLogo Főképernyő](../../../../../translated_images/hu/NetLogo-Main.32653711ec1a01b3.webp)
> Dmitry Soshnikov által készített képernyőkép
> Dmitry Soshnikov képernyőképe
Ezen a képernyőn láthatod:
Ezen a képernyőn a következőket láthatod:
* Az **Interfész** szekciót, amely tartalmazza:
* Az **Interfész** sz, amely tartalmazza:
- A fő mezőt, ahol az összes ügynök él
- Különböző vezérlőelemeket: gombokat, csúszkákat stb.
- Grafikonokat, amelyeken a szimuláció paramétereit jelenítheted meg
* A **Kód** fület, amely tartalmazza a szerkesztőt, ahol NetLogo programot írhatsz
- Grafikonokat, amelyekkel megjelenítheted a szimuláció paramétereit
* A **Kód** fület, amely szerkesztőt tartalmaz, ahol NetLogo programot írhatsz
A legtöbb esetben az interfész tartalmaz egy **Setup** gombot, amely inicializálja a szimuláció állapotát, és egy **Go** gombot, amely elindítja a végrehajtást. Ezeket a megfelelő kezelők kezelik a kódban, amelyek így néznek ki:
A legtöbb esetben az interfészen található egy **Setup** gomb, amely inicializálja a szimuláció állapotát, és egy **Go** gomb, amely elindítja a végrehajtást. Ezeket a kód megfelelő kezelői irányítják, amelyek így néznek ki:
```
to go [
@ -83,54 +83,77 @@ to go [
A NetLogo világa a következő objektumokból áll:
* **Ügynökök** (teknősök), amelyek mozoghatnak a mezőn és végezhetnek valamit. Az ügynököket a `ask turtles [...]` szintaxissal utasíthatod, és a zárójelek közötti kódot minden ügynök *teknős módban* hajtja végre.
* **Foltok** (patches), amelyek a mező négyzet alakú területei, ahol az ügynökök élnek. Hivatkozhatsz az ugyanazon a folton lévő összes ügynökre, vagy megváltoztathatod a foltok színeit és egyéb tulajdonságait. A foltokat is utasíthatod a `ask patches` paranccsal.
* **Megfigyelő** (observer), amely egy egyedi ügynök, és a világot irányítja. Az összes gombkezelő *megfigyelő módban* fut.
* **Ügynökök** (teknősök), amelyek mozoghatnak a mezőn és cselekedhetnek. Az ügynököket a `ask turtles [...]` szintaxissal irányítod, és a zárójelben lévő kódot az összes ügynök végrehajtja *teknős módban*.
* A **patch-ek** a mező négyzet alakú részei, ahol az ügynökök élnek. Hivatkozhatsz az összes ugyanazon patch-en lévő ügynökre, vagy megváltoztathatod a patch színeit és egyéb tulajdonságait. A `ask patches` parancsal is kérhetsz cselekvést.
* Az **Observer** egy egyedi ügynök, amely irányítja a világot. Minden gombkezelő *observer módban* fut.
> ✅ A többügynökös környezet szépsége, hogy a teknős módban vagy folt módban futó kódot az összes ügynök párhuzamosan hajtja végre. Így kevés kód írásával és az egyes ügynökök viselkedésének programozásával összetett viselkedést hozhatsz létre a szimulációs rendszer egészében.
> ✅ Egy több-ügynökös környezet szépsége, hogy a teknős mód vagy patch mód kódot párhuzamosan, egyszerre hajtja végre az összes ügynök, így kis kóddal, egyéni viselkedés programozásával összetett viselkedést alakíthatsz ki az egész szimulációban.
### Flocking
### Fajcsapódás
A többügynökös viselkedés példájaként vizsgáljuk meg a **[Flocking](https://en.wikipedia.org/wiki/Flocking_(behavior))** jelenséget. A flocking egy összetett minta, amely nagyon hasonlít arra, ahogyan a madárrajok repülnek. Amikor figyeled őket, azt gondolhatod, hogy valamilyen kollektív algoritmust követnek, vagy hogy rendelkeznek valamilyen *kollektív intelligenciával*. Azonban ez az összetett viselkedés akkor jön létre, amikor minden egyes ügynök (ebben az esetben egy *madár*) csak a közvetlen közelében lévő más ügynököket figyeli, és három egyszerű szabályt követ:
A több-ügynökös viselkedés példájaként nézzük meg a **[Flocking](https://en.wikipedia.org/wiki/Flocking_(behavior))**-et. A flocking egy összetett minta, amely nagyon hasonlít a madárcsoportok repülési mintázatához. Repülésüket figyelve azt gondolhatod, hogy valamilyen kollektív algoritmust követnek, vagy hogy valamilyen *kollektív intelligenciával* rendelkeznek. Ez az összetett viselkedés akkor keletkezik, amikor az egyes ügynök (itt *madár*) csak a rövid távolságra lévő más ügynököket figyeli, és három egyszerű szabályt követ:
* **Igazodás** - az ügynök a szomszédos ügynökök átlagos irányába fordul
* **Kohézió** - az ügynök a szomszédok átlagos pozíciója felé próbál fordulni (*hosszú távú vonzás*)
* **Elkülönülés** - ha túl közel kerül más madarakhoz, távolodni próbál (*rövid távú taszítás*)
* **Igazodás** - a szomszédos ügynökök átlagos irányába tart
* **Összetartás** - a szomszédok átlagos pozíciója felé tart (*hosszútávú vonzás*)
* **Elválasztás** - ha túl közel kerül más madarakhoz, elmozog (*rövid távú taszítás*)
Futtathatod a flocking példát, és megfigyelheted a viselkedést. Állíthatod a paramétereket, például az *elkülönülés mértékét* vagy a *látótávolságot*, amely meghatározza, hogy a madarak milyen messzire látnak. Figyeld meg, hogy ha a látótávolságot 0-ra csökkented, minden madár megvakul, és a flocking leáll. Ha az elkülönülést 0-ra csökkented, minden madár egy egyenes vonalba gyűlik össze.
Lefuttathatod a flocking példát és megfigyelheted a viselkedést. Beállíthatsz paramétereket is, például az *elválasztás mértékét* vagy a *látótávolságot*, amely meghatározza, milyen messzire lát a madár. Ha a látótávolságot 0-ra csökkented, a madarak megvakulnak, és a flocking megszűnik. Ha az elválasztást 0-ra állítod, a madarak egy egyenes vonalba gyűlnek össze.
> ✅ Válts a **Kód** fülre, és nézd meg, hol vannak a flocking három szabálya (igazodás, kohézió és elkülönülés) megvalósítva a kódban. Figyeld meg, hogy csak azokra az ügynökökre hivatkozunk, amelyek a látótávolságon belül vannak.
> ✅ Váltasz a **Kód** fülre és nézd meg, hol vannak megvalósítva a flocking három szabálya (igazodás, összetartás és elválasztás). Figyeld meg, hogy csak azokat az ügynököket veszi figyelembe, amelyek látótávolságon belül vannak.
### Egyéb modellek, amelyeket érdemes megnézni
### Egyéb modellek megtekintése
Van néhány további érdekes modell, amelyeket kipróbálhatsz:
Van néhány érdekes modell, amellyel kísérletezhetsz:
* **Art &rightarrow; Fireworks** bemutatja, hogyan tekinthető egy tűzijáték az egyes tűzfolyamok kollektív viselkedésének
* **Social Science &rightarrow; Traffic Basic** és **Social Science &rightarrow; Traffic Grid** bemutatja a városi forgalom modelljét 1D-ben és 2D rácsban, közlekedési lámpákkal vagy anélkül. Minden autó a következő szabályokat követi:
- Ha az előtte lévő hely üres gyorsít (egy bizonyos maximális sebességig)
- Ha akadályt lát maga előtt fékez (és állíthatod, hogy a sofőr milyen messzire lát)
* **Social Science &rightarrow; Party** bemutatja, hogyan csoportosulnak az emberek egy koktélpartin. Megtalálhatod azokat a paraméterkombinációkat, amelyek a csoport boldogságának leggyorsabb növekedéséhez vezetnek.
* **Art &rightarrow; Fireworks** bemutatja, hogyan tekinthetjük a tűzijátékot egyéni tűzáramok kollektív viselkedésének
* **Social Science &rightarrow; Traffic Basic** és **Social Science &rightarrow; Traffic Grid** modellezik a városi forgalmat 1D és 2D hálózaton, közlekedési lámpákkal vagy anélkül. A szimulációban minden autó a következő szabályokat követi:
- Ha előtte üres hely van - gyorsít (egy megadott maximális sebességig)
- Ha akadályt lát előtte - fékez (szabályozhatod, milyen messzire lát a sofőr)
* **Social Science &rightarrow; Party** bemutatja, hogyan csoportosulnak az emberek egy koktélpartin. Megtalálhatod azokat a paraméterkombinációkat, amelyek a leggyorsabb boldogság-növekedést eredményezik a csoportban.
Ahogy ezekből a példákból láthatod, a többügynökös szimulációk hasznos eszközök lehetnek egy olyan összetett rendszer viselkedésének megértéséhez, amely egyénekből áll, akik ugyanazt vagy hasonló logikát követnek. Használhatók virtuális ügynökök, például [NPC-k](https://en.wikipedia.org/wiki/NPC) irányítására számítógépes játékokban, vagy ügynökök irányítására 3D animált világokban.
Ahogy ezekből a példákból láthatod, a több-ügynökös szimulációk igen hasznosak lehetnek összetett rendszerek viselkedésének megértésében, ahol az egyéni részek ugyanazt vagy hasonló logikát követnek. Használhatók virtuális ügynökök irányítására is, például [NPC-k](https://en.wikipedia.org/wiki/NPC) számítógépes játékokban vagy ügynökök 3D animált világokban.
## Deliberatív ügynökök
## Megfontolt ügynökök
A fent leírt ügynökök nagyon egyszerűek, és valamilyen algoritmus segítségével reagálnak a környezet változásaira. Ezek **reaktív ügynökök**. Azonban néha az ügynökök képesek érvelni és megtervezni a cselekvéseiket, ebben az esetben **deliberatív ügynököknek** nevezzük őket.
A fent ismertetett ügynökök nagyon egyszerűek, környezetváltozásokra reagálnak valamilyen algoritmussal. Ezek az úgynevezett **reaktív ügynökök**. Ugyanakkor néha az ügynökök képesek érvelni és tervezni, amely esetben **megfontolt** ügynököknek hívjuk őket.
Egy tipikus példa lehet egy személyes ügynök, amely egy embertől kapott utasítást, hogy foglaljon le egy nyaralási utat. Tegyük fel, hogy az interneten sok ügynök él, akik segíthetnek neki. Kapcsolatba kell lépnie más ügynökökkel, hogy megnézze, milyen repülőjáratok érhetők el, milyen árakon kínálnak szállodákat különböző időpontokra, és meg kell próbálnia a legjobb árat kialkudni. Amikor a nyaralási terv elkészül és a tulajdonos megerősíti, folytathatja a foglalást.
Egy tipikus példa lehet egy személyes ügynök, amely emberi utasítást kap egy nyaralási túra lefoglalására. Tegyük fel, hogy az interneten sok más ügynök él, akik segíthetnek. Kapcsolatba kell lépnie más ügynökökkel, hogy megtudja, milyen járatok elérhetők, mennyibe kerülnek a hotelek különböző időpontokban, és megpróbálja a legjobb árat kialkudni. Amikor a nyaralási terv elkészül és a tulajdonos megerősíti, tovább léphet a foglalásra.
Ehhez az ügynököknek **kommunikálniuk** kell. A sikeres kommunikációhoz szükségük van:
* Valamilyen **szabványos nyelvre a tudás cseréjéhez**, például [Knowledge Interchange Format](https://en.wikipedia.org/wiki/Knowledge_Interchange_Format) (KIF) és [Knowledge Query and Manipulation Language](https://en.wikipedia.org/wiki/Knowledge_Query_and_Manipulation_Language) (KQML). Ezeket a nyelveket a [beszédaktus-elmélet](https://en.wikipedia.org/wiki/Speech_act) alapján tervezték.
* Ezeknek a nyelveknek tartalmazniuk kell valamilyen **tárgyalási protokollokat**, amelyek különböző **aukciótípusokon** alapulnak.
* Egy **közös ontológiára**, hogy ugyanazokra a fogalmakra hivatkozzanak, ismerve azok szemantikáját
* Egy módra, hogy **felfedezzék**, mit tudnak tenni a különböző ügynökök, szintén valamilyen ontológia alapján
* Néhány **szabványos nyelvre a tudáscseréhez**, mint például a [Knowledge Interchange Format](https://en.wikipedia.org/wiki/Knowledge_Interchange_Format) (KIF) és a [Knowledge Query and Manipulation Language](https://en.wikipedia.org/wiki/Knowledge_Query_and_Manipulation_Language) (KQML). Ezeket a nyelveket a [Beszédaktus-elmélet](https://en.wikipedia.org/wiki/Speech_act) alapján tervezték.
* Ezeknek a nyelveknek tartalmazniuk kell **tárgyalási protokollokat**, különböző **aukciótípusok** alapján.
* Egy **közös ontológiára** van szükség, hogy ugyanazokat a fogalmakat használják, ismerve azok jelentését
* Olyan módra, amellyel **feltérképezhetik**, hogy mit tudnak a különböző ügynökök, szintén ontológia alapján
A deliberatív ügynökök sokkal összetettebbek, mint a reaktívak, mert nemcsak a környezet változásaira reagálnak, hanem képesek *kezdeményezni* is cselekvéseket. Az egyik javasolt architektúra a deliberatív ügynökökhöz az úgynevezett Hiedelem-Vágy-Szándék (Belief-Desire-Intention, BDI) ügynök:
A megfontolt ügynökök sokkal összetettebbek a reaktívaknál, mert nem csak a környezetváltozásokra reagálnak, hanem képesnek kell lenniük az *akciók kezdeményezésére* is. Az egyik javasolt architektúra egy megfontolt ügynökre a Belief-Desire-Intention (BDI) modell:
* **Hiedelmek** alkotják az ügynök környezetéről szóló tudás halmazát. Ez lehet egy tudásbázis vagy szabályok halmaza, amelyeket az ügynök alkalmazhat egy adott helyzetre a környezetben.
* **Vágyak** határozzák meg, mit akar az ügynök elérni, azaz a céljait. Például a fent említett személyi asszisztens ügynök célja egy utazás lefoglalása, míg egy szállodai ügynök célja a profit maximalizálása.
* **Szándékok** azok a konkrét cselekvések, amelyeket az ügynök a céljai elérése érdekében tervez. A cselekvések általában megváltoztat
* A **Hiedelmek** alkotnak egy tudásbázist az ügynök környezetéről. Ez lehet egy tudásbázis vagy szabálygyűjtemény, amelyet az ügynök alkalmazhat a környezet adott helyzetére.
* A **Vágyak** meghatározzák, mit akar az ügynök, azaz a céljait. Például a személyes asszisztens ügynök célja egy túra lefoglalása, a hotel ügynök célja a profit maximalizálása.
* A **Szándékok** azok a konkrét cselekvések, amelyeket az ügynök tervez, hogy elérje céljait. Ezek a cselekvések általában megváltoztatják a környezetet, és kommunikációt indítanak más ügynökökkel.
Több-ügynökös rendszerek építéséhez elérhetők platformok, mint például a [JADE](https://jade.tilab.com/). [Ez a tanulmány](https://arxiv.org/ftp/arxiv/papers/2007/2007.08961.pdf) áttekintést ad a több-ügynökös platformokról, továbbá rövid történelemről és különböző felhasználási esetekről.
## Összefoglalás
A több-ügynökös rendszerek sokféle formát ölthetnek, és sokféle alkalmazásban használhatók.
Mindegyik az egyéni ügynök egyszerűbb viselkedésére összpontosít, és a rendszer egészének összetettebb viselkedése a **szinergikus hatás** eredménye.
## 🚀 Kihívás
Vidd ki ezt a leckét a valós világba, és próbálj meg elképzelni egy olyan több-ügynökös rendszert, amely megold egy problémát. Mit kellene például egy több-ügynökös rendszernek tennie egy iskolabusz útvonalának optimalizálásához? Hogyan működhetne egy pékségben?
## [Előadás utáni kvíz](https://ff-quizzes.netlify.app/en/ai/quiz/46)
## Áttekintés és önálló tanulás
Nézd át az ilyen rendszerek ipari alkalmazását. Válassz egy területet, mint például a gyártás vagy a videojáték-ipar, és fedezd fel, hogyan használhatók a több-ügynökös rendszerek egyedi problémák megoldására.
## [NetLogo feladat](assignment.md)
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Jogi nyilatkozat**:
Ez a dokumentum az AI fordítási szolgáltatás, a [Co-op Translator](https://github.com/Azure/co-op-translator) segítségével készült. Bár az pontosságra törekszünk, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az anyanyelvén tekintendő hiteles forrásnak. Fontos információk esetén professzionális emberi fordítást javasolunk. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely ebből a fordításból ered.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

View File

@ -5,6 +5,12 @@
"source_file": "AGENTS.md",
"language_code": "sk"
},
"CONTRIBUTING.md": {
"original_hash": "c6fd7e781b67111a90abd166d0ce4aa0",
"translation_date": "2026-07-08T17:14:12+00:00",
"source_file": "CONTRIBUTING.md",
"language_code": "sk"
},
"README.md": {
"original_hash": "12c8eb6bf0867d2f1c32daf613ac5b8b",
"translation_date": "2026-04-06T16:49:42+00:00",
@ -17,6 +23,19 @@
"source_file": "SECURITY.md",
"language_code": "sk"
},
"__translation_failures__": {
"lessons/sketchnotes/LICENSE.md": {
"original_hash": "45ab63a2cd8f5faef6c9b150618837a4",
"source_file": "lessons/sketchnotes/LICENSE.md",
"language_code": "sk",
"failure_date": "2026-07-08T17:13:36+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-26T00:44:33+00:00",
@ -54,8 +73,8 @@
"language_code": "sk"
},
"examples/README.md": {
"original_hash": "0d1babfdcbeb46525f2db3fbaaa54cd7",
"translation_date": "2025-10-03T11:33:56+00:00",
"original_hash": "7883d52c2e2a221e0b07a7b112a149b9",
"translation_date": "2026-07-08T17:07:26+00:00",
"source_file": "examples/README.md",
"language_code": "sk"
},
@ -66,8 +85,8 @@
"language_code": "sk"
},
"lessons/0-course-setup/how-to-run.md": {
"original_hash": "a4717bd9103b9f6cd84d534b83534689",
"translation_date": "2026-01-16T04:57:59+00:00",
"original_hash": "7ad8c7d8604c53649b3d4d1e2f3a6fa1",
"translation_date": "2026-07-08T17:07:54+00:00",
"source_file": "lessons/0-course-setup/how-to-run.md",
"language_code": "sk"
},
@ -191,6 +210,12 @@
"source_file": "lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md",
"language_code": "sk"
},
"lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb": {
"original_hash": "99b816b6a4957ef4100cee4c4221dff9",
"translation_date": "2026-07-08T16:53:09+00:00",
"source_file": "lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb",
"language_code": "sk"
},
"lessons/4-ComputerVision/08-TransferLearning/lab/README.md": {
"original_hash": "7765935c35fcee69b9fe2d0cfd6963e2",
"translation_date": "2025-08-25T23:16:36+00:00",
@ -330,8 +355,8 @@
"language_code": "sk"
},
"lessons/5-NLP/README.md": {
"original_hash": "8ef02a9318257ea140ed3ed74442096d",
"translation_date": "2025-08-25T21:28:05+00:00",
"original_hash": "038df6f1a73e49f6430740da083bfd6d",
"translation_date": "2026-07-08T17:08:28+00:00",
"source_file": "lessons/5-NLP/README.md",
"language_code": "sk"
},

View File

@ -0,0 +1,29 @@
# Prispievanie do AI-For-Beginners
Ďakujeme za váš záujem prispieť do AI-For-Beginners! Vítame preklady, opravy lekcií a úpravy formátovania.
## Licenčná dohoda prispievateľa spoločnosti Microsoft (CLA)
Tento projekt vítá príspevky a návrhy. Väčšina príspevkov vyžaduje, aby ste súhlasili s Licenčnou dohodou prispievateľa (CLA), ktorá deklaruje, že máte právo a skutočne nám udeľujete práva na používanie vášho príspevku. Podrobnosti nájdete na [https://cla.microsoft.com](https://cla.microsoft.com).
Keď odošlete pull request, CLA-bot automaticky určí, či musíte poskytnúť CLA, a príslušne označí PR (napríklad štítkom alebo komentárom). Stačí postupovať podľa pokynov bota. Toto budete musieť urobiť iba raz vo všetkých repozitároch používajúcich našu CLA.
## Ako prispieť
### 1. Oprava preklepov / chýb v kóde
Ak nájdete preklep alebo chybu v ľubovoľnom Jupyter notebooku alebo markdown súbore lekcie:
1. Vytvorte fork repozitára.
2. Opravte preklep alebo nefunkčný odkaz.
3. Pošlite Pull Request s jasným popisom opravy.
### 2. Odosielanie prekladov
Vitáme preklady lekcií do iných jazykov! Preklady umiestnite do priečinka `translations/` podľa existujúcich názvov priečinkov (napríklad `translations/es/`, `translations/pt-BR/`, `translations/zh-CN/`).
Podrobnosti nájdete v súbore [etc/CONTRIBUTING.md](etc/CONTRIBUTING.md).
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Vyhlásenie o zodpovednosti**:
Tento dokument bol preložený pomocou AI prekladateľskej služby [Co-op Translator](https://github.com/Azure/co-op-translator). Hoci sa snažíme o presnosť, vezmite prosím na vedomie, že automatické preklady môžu obsahovať chyby alebo nepresnosti. Pôvodný dokument v jeho natívnom jazyku by mal byť považovaný za autoritatívny zdroj. Pre kritické informácie sa odporúča profesionálny ľudský preklad. Nie sme zodpovední za žiadne nedorozumenia alebo nesprávne interpretácie vyplývajúce z použitia tohto prekladu.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

View File

@ -1,27 +1,27 @@
# Príklady AI pre začiatočníkov
# Príklady AI vhodné pre začiatočníkov
Vitajte! Tento adresár obsahuje jednoduché, samostatné príklady, ktoré vám pomôžu začať s AI a strojovým učením. Každý príklad je navrhnutý tak, aby bol priateľský pre začiatočníkov, s podrobnými komentármi a krok za krokom vysvetleniami.
Vitajte! Tento adresár obsahuje jednoduché, samostatné príklady, ktoré vám pomôžu začať s AI a strojovým učením. Každý príklad je navrhnutý tak, aby bol priateľský k začiatočníkom s podrobnými komentármi a krok za krokom vysvetleniami.
## 📚 Prehľad príkladov
| Príklad | Popis | Obtiažnosť | Predpoklady |
|---------|-------------|------------|---------------|
| [Hello AI World](../../../examples/01-hello-ai-world.py) | Váš prvý AI program - jednoduché rozpoznávanie vzorov | ⭐ Začiatočník | Základy Pythonu |
| [Jednoduchá neurónová sieť](../../../examples/02-simple-neural-network.py) | Vytvorte neurónovú sieť od základov | ⭐⭐ Začiatočník+ | Python, základná matematika |
| [Klasifikátor obrázkov](./03-image-classifier.ipynb) | Klasifikujte obrázky pomocou predtrénovaného modelu | ⭐⭐ Začiatočník+ | Python, numpy |
| [Analýza sentimentu textu](../../../examples/04-text-sentiment.py) | Analyzujte sentiment textu (pozitívny/negatívny) | ⭐⭐ Začiatočník+ | Python |
| [Hello AI World](https://github.com/microsoft/AI-For-Beginners/blob/main/examples/01-hello-ai-world.py) | Váš prvý AI program jednoduché rozpoznávanie vzorov | ⭐ Začiatočník | Základy Pythonu |
| [Simple Neural Network](https://github.com/microsoft/AI-For-Beginners/blob/main/examples/02-simple-neural-network.py) | Vytvorte neurónovú sieť od základov | ⭐⭐ Začiatočník+ | Python, základná matematika |
| [Image Classifier](https://github.com/microsoft/AI-For-Beginners/blob/main/examples/03-image-classifier.ipynb) | Klasifikujte obrázky s predtrénovaným modelom | ⭐⭐ Začiatočník+ | Python, numpy |
| [Text Sentiment](https://github.com/microsoft/AI-For-Beginners/blob/main/examples/04-text-sentiment.py) | Analyzujte sentiment textu (pozitívny/negatívny) | ⭐⭐ Začiatočník+ | Python |
## 🚀 Začíname
### Predpoklady
Uistite sa, že máte nainštalovaný Python (odporúča sa verzia 3.8 alebo vyššia). Nainštalujte potrebné balíčky:
Uistite sa, že máte nainštalovaný Python (odporúčaná verzia 3.8 alebo novšia). Nainštalujte potrebné balíčky:
```bash
# For Python scripts
# Pre Python skripty
pip install numpy
# For Jupyter notebooks (image classifier)
# Pre Jupyter notebooky (klasifikátor obrázkov)
pip install jupyter numpy pillow tensorflow
```
@ -32,7 +32,7 @@ conda env create --name ai4beg --file ../environment.yml
conda activate ai4beg
```
### Spustenie príkladov
### Spúšťanie príkladov
**Pre Python skripty (.py súbory):**
```bash
@ -46,19 +46,19 @@ jupyter notebook 03-image-classifier.ipynb
## 📖 Učebná cesta
Odporúčame postupovať podľa príkladov v tomto poradí:
Odporúčame nasledovať príklady v tomto poradí:
1. **Začnite s "Hello AI World"** - Naučte sa základy rozpoznávania vzorov
2. **Vytvorte jednoduchú neurónovú sieť** - Pochopte, ako fungujú neurónové siete
3. **Vyskúšajte klasifikátor obrázkov** - Pozrite sa na AI v akcii s reálnymi obrázkami
4. **Analyzujte sentiment textu** - Preskúmajte spracovanie prirodzeného jazyka
1. **Začnite s „Hello AI World“** Naučte sa základy rozpoznávania vzorov
2. **Postavte jednoduchú neurónovú sieť** Pochopte, ako fungujú neurónové siete
3. **Vyskúšajte klasifikátor obrázkov** Pozrite si AI v akcii s reálnymi obrázkami
4. **Analyzujte sentiment textu** Preskúmajte spracovanie prirodzeného jazyka
## 💡 Tipy pre začiatočníkov
- **Pozorne čítajte komentáre v kóde** - Vysvetľujú, čo robí každý riadok
- **Experimentujte!** - Skúste meniť hodnoty a sledujte, čo sa stane
- **Netrápte sa, ak všetkému nerozumiete** - Učenie si vyžaduje čas
- **Pýtajte sa otázky** - Použite [diskusné fórum](https://github.com/microsoft/AI-For-Beginners/discussions)
- **Starostlivo čítajte komentáre v kóde** Vysvetľujú, čo každý riadok robí
- **Experimentujte!** Skúšajte meniť hodnoty a sledujte, čo sa stane
- **Nestrašte sa, ak všetko hneď nepochopíte** Učenie si vyžaduje čas
- **Pýtajte sa otázky** Použite [diskusnú platformu](https://github.com/microsoft/AI-For-Beginners/discussions)
## 🔗 Ďalšie kroky
@ -68,18 +68,20 @@ Po dokončení týchto príkladov preskúmajte celý kurz:
- [Počítačové videnie](../lessons/4-ComputerVision/README.md)
- [Spracovanie prirodzeného jazyka](../lessons/5-NLP/README.md)
## 🤝 Prispievanie
## 🤝 Príspevky
Považujete tieto príklady za užitočné? Pomôžte nám ich zlepšiť:
- Nahláste problémy alebo navrhnite vylepšenia
- Pridajte ďalšie príklady pre začiatočníkov
Páčia sa vám tieto príklady? Pomôžte nám ich zlepšiť:
- Nahláste chyby alebo navrhnite vylepšenia
- Pridajte viac príkladov pre začiatočníkov
- Zlepšite dokumentáciu a komentáre
---
*Pamätajte: Každý odborník bol kedysi začiatočníkom. Šťastné učenie! 🎓*
*Pamätajte: Každý expert bol raz začiatočník. Šťastné učenie! 🎓*
---
**Upozornenie**:
Tento dokument bol preložený pomocou služby AI prekladu [Co-op Translator](https://github.com/Azure/co-op-translator). Hoci sa snažíme o presnosť, prosím, berte na vedomie, že automatizované preklady môžu obsahovať chyby alebo nepresnosti. Pôvodný dokument v jeho rodnom jazyku by mal byť považovaný za autoritatívny zdroj. Pre kritické informácie sa odporúča profesionálny ľudský preklad. Nie sme zodpovední za žiadne nedorozumenia alebo nesprávne interpretácie vyplývajúce z použitia tohto prekladu.
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Vyhlásenie o zodpovednosti**:
Tento dokument bol preložený pomocou AI prekladateľskej služby [Co-op Translator](https://github.com/Azure/co-op-translator). Hoci sa snažíme o presnosť, vezmite prosím na vedomie, že automatické preklady môžu obsahovať chyby alebo nepresnosti. Pôvodný dokument v jeho natívnom jazyku by mal byť považovaný za autoritatívny zdroj. Pre kritické informácie sa odporúča profesionálny ľudský preklad. Nie sme zodpovední za žiadne nedorozumenia alebo nesprávne interpretácie vyplývajúce z použitia tohto prekladu.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

View File

@ -1,12 +1,12 @@
# Ako spustiť kód
Tento učebný plán obsahuje veľa vykonateľných príkladov a laboratórií, ktoré by ste chceli spustiť. Aby ste to mohli urobiť, potrebujete možnosť vykonávať Python kód v Jupyter Notebookoch poskytovaných ako súčasť tohto učebného plánu. Máte niekoľko možností, ako spustiť kód:
Tento učebný plán obsahuje veľa spustiteľných príkladov a laboratórií, ktoré budete chcieť spustiť. Aby ste to mohli urobiť, potrebujete možnosť vykonávať Python kód v Jupyter Notebookoch, ktoré sú súčasťou tohto učebného plánu. Máte niekoľko možností, ako spustiť kód:
## Spust lokálne na vašom počítači
## Spustenie lokálne na vašom počítači
Na spustenie kódu lokálne na vašom počítači je potrebná inštalácia Pythonu. Jedným z odporúčaní je inštalovať **[miniconda](https://conda.io/en/latest/miniconda.html)** - ide o pomerne ľahkú inštaláciu, ktorá podporuje správcu balíčkov `conda` pre rôzne Python **virtuálne prostredia**.
Na spustenie kódu lokálne na vašom počítači je potrebná inštalácia Pythonu. Jedným z odporúčaní je nainštalovať **[miniconda](https://conda.io/en/latest/miniconda.html)** je to pomerne ľahká inštalácia, ktorá podporuje správcu balíkov `conda` pre rôzne Python **virtuálne prostredia**.
Po nainštalovaní minicondy si naklonujte repozitár a vytvorte virtuálne prostredie, ktoré bude použité pre tento kurz:
Po nainštalovaní minicondy si naklonujte repozitár a vytvorte virtuálne prostredie, ktoré budete používať pre tento kurz:
```bash
git clone http://github.com/microsoft/ai-for-beginners
@ -15,57 +15,57 @@ conda env create --name ai4beg --file .devcontainer/environment.yml
conda activate ai4beg
```
### Použitie Visual Studio Code s rozšírením Python
### Používanie Visual Studio Code s Python rozšírením
Tento učebný plán je najlepšie používať pri jeho otvorení v [Visual Studio Code](http://code.visualstudio.com/?WT.mc_id=academic-77998-cacaste) s rozšírením [Python Extension](https://marketplace.visualstudio.com/items?itemName=ms-python.python&WT.mc_id=academic-77998-cacaste).
Tento učebný plán je najlepšie používať pri otvorení v [Visual Studio Code](http://code.visualstudio.com/?WT.mc_id=academic-77998-cacaste) s [Python rozšírením](https://marketplace.visualstudio.com/items?itemName=ms-python.python&WT.mc_id=academic-77998-cacaste).
> **Poznámka**: Po naklonovaní a otvorení adresára vo VS Code vám automaticky navrhne inštaláciu rozšírení Python. Tiež budete musieť nainštalovať miniconda, ako je to popísané vyššie.
> **Poznámka**: Po naklonovaní a otvorení priečinka vo VS Code vám automaticky odporučí nainštalovať Python rozšírenia. Tiež si musíte nainštalovať minicondu, ako bolo popísané vyššie.
> **Poznámka**: Ak vám VS Code navrhne znovu otvoriť repozitár v kontajneri, mali by ste to odmietnuť, aby ste použili lokálnu inštaláciu Pythonu.
> **Poznámka**: Ak vám VS Code navrhne znovu otvoriť repozitár v kontajneri, mali by ste tento návrh odmietnuť, aby ste použili lokálnu inštaláciu Pythonu.
### Použitie Jupyter v prehliadači
### Používanie Jupyteru v prehliadači
Môžete tiež použiť Jupyter prostredie z prehliadača na vašom vlastnom počítači. Klasický Jupyter aj JupyterHub poskytujú pohodlné vývojové prostredie s automatickým dopĺňaním, zvýrazňovaním kódu atď.
Môžete tiež použiť Jupyter prostredie z prehliadača na vašom počítači. Klasický Jupyter aj JupyterHub poskytujú pohodlné vývojové prostredie s automatickým dopĺňaním, zvýraznením kódu a pod.
Na spustenie Jupyter lokálne choďte do adresára kurzu a spustite:
Na spustenie Jupyteru lokálne prejdite do priečinka kurzu a vykonajte:
```bash
jupyter notebook
```
alebo
alebo
```bash
jupyterhub
```
Potom môžete prechádzať k ľubovoľnému súboru `.ipynb`, otvoriť ho a začať pracovať.
Potom môžete prechádzať k ľubovoľným `.ipynb` súborom, otvárať ich a začať pracovať.
### Spustenie v kontajneri
Jednou z alternatív k inštalácii Pythonu je spustiť kód v kontajneri. Keďže náš repozitár obsahuje špeciálny priečinok `.devcontainer`, ktorý ukazuje, ako zostaviť kontajner pre tento repozitár, VS Code ponúka možnosť znova otvoriť kód v kontajneri. Toto vyžaduje inštaláciu Dockeru a tiež je to zložitejšie, preto to odporúčame skúsenejším používateľom.
Jednou z alternatív inštalácie Pythonu je spustiť kód v kontajneri. Keďže náš repozitár obsahuje špeciálny priečinok `.devcontainer`, ktorý určuje, ako sa má kontajner pre tento repozitár zostaviť, VS Code ponúka možnosť znovu otvoriť kód v kontajneri. To bude vyžadovať inštaláciu Dockeru a je to zložitejšie, preto to odporúčame skúsenejším používateľom.
## Spustenie v cloude
Ak nechcete inštalovať Python lokálne a máte prístup ku cloudovým zdrojom - dobrá alternatíva je spustiť kód v cloude. Existuje niekoľko spôsobov, ako to urobiť:
Ak nechcete inštalovať Python lokálne a máte prístup k nejakým cloudovým zdrojom, dobrou alternatívou je spúšťať kód v cloude. Existuje niekoľko spôsobov, ako to môžete urobiť:
* Použitie **[GitHub Codespaces](https://github.com/features/codespaces)**, čo je virtuálne prostredie vytvorené pre vás na GitHube, prístupné cez rozhranie VS Code v prehliadači. Ak máte prístup ku Codespaces, môžete jednoducho kliknúť na tlačidlo **Code** v repozitári, spustiť codespace a začať bez zbytočného čakania.
* Použitie **[Binder](https://mybinder.org/v2/gh/microsoft/ai-for-beginners/HEAD)**. [Binder](https://mybinder.org) ponúka bezplatné výpočtové zdroje poskytované v cloude pre ľudí ako vy, ktorí chcú otestovať nejaký kód na GitHube. Na úvodnej stránke je tlačidlo na otvorenie repozitára v Bindri - to vás rýchlo zavedie na stránku Bindra, ktorá zostaví podkladový kontajner a spustí pre vás webové rozhranie Jupyter bez prerušenia.
* Použitie **[GitHub Codespaces](https://github.com/features/codespaces)**, čo je virtuálne prostredie vytvorené pre vás na GitHube, prístupné prostredníctvom rozhrania VS Code v prehliadači. Ak máte prístup ku Codespaces, stačí kliknúť na tlačidlo **Code** v repozitári, spustiť codespace a môžete okamžite začať.
* Použitie **[Binder](https://mybinder.org/v2/gh/microsoft/ai-for-beginners/HEAD)**. [Binder](https://mybinder.org) ponúka voľné výpočtové zdroje v cloude pre ľudí ako ste vy, aby mohli testovať kód na GitHube. Na hlavnej stránke nájdete tlačidlo na otvorenie repozitára v Bindri to vás rýchlo zavedie na stránku bindra, ktorá zostaví podkladový kontajner a bezproblémovo spustí webové rozhranie Jupyter.
> **Poznámka**: Aby sa predišlo zneužitiu, Binder má prístup k niektorým webovým zdrojom zablokovaný. To môže zabrániť správnej funkcii niektorého kódu, ktorý sťahuje modely a/alebo dátové sady z verejného internetu. Môžete potrebovať nájsť nejaké obchádzky. Tiež výpočtové zdroje poskytované Binderom sú pomerne základné, takže tréning bude pomalý, zvlášť v neskorších, komplexnejších lekciách.
> **Poznámka**: Na prevenciu zneužitia má Binder zablokovaný prístup k niektorým webovým zdrojom. To môže spôsobiť, že niektoré časti kódu, ktoré sťahujú modely a/alebo dataset zo siete, nemusia fungovať. Možno budete musieť nájsť nejaké alternatívne riešenie. Tiež výpočtové zdroje, ktoré Binder poskytuje, sú pomerne základné, takže tréning bude pomalý, najmä v neskorších, zložitejších lekciách.
## Spustenie v cloude s GPU
Niektoré z neskorších lekcií v tomto učebnom pláne by výrazne profitovali z podpory GPU. Tréning modelov môže byť inak bolestivo pomalý. Existuje niekoľko možností, ktoré môžete sledovať, najmä ak máte prístup ku cloudu buď cez [Azure pre študentov](https://azure.microsoft.com/free/students/?WT.mc_id=academic-77998-cacaste), alebo cez vašu inštitúciu:
Niektoré z neskorších lekcií v tomto učebnom pláne by veľmi profitovali zo podpory GPU. Napríklad tréning modelu môže byť inak bolestivo pomalý. Môžete postupovať niektorým z nasledujúcich spôsobov, najmä ak máte prístup ku cloudu buď cez [Azure pre študentov](https://azure.microsoft.com/free/students/?WT.mc_id=academic-77998-cacaste), alebo cez vašu inštitúciu:
* Vytvorte [Data Science Virtual Machine](https://docs.microsoft.com/learn/modules/intro-to-azure-data-science-virtual-machine/?WT.mc_id=academic-77998-cacaste) a pripojte sa k nej cez Jupyter. Môžete si potom naklonovať repozitár priamo na stroj a začať sa učiť. VM série NC majú podporu GPU.
* Vytvorte [Data Science Virtual Machine](https://docs.microsoft.com/learn/modules/intro-to-azure-data-science-virtual-machine/?WT.mc_id=academic-77998-cacaste) a pripojte sa k nej cez Jupyter. Môžete si potom klonovať repozitár priamo na túto mašinu a začať s učením. NC-series VM podporujú GPU.
> **Poznámka**: Niektoré predplatné, vrátane Azure pre študentov, neposkytujú podporu GPU automaticky. Môžete potrebovať požiadať o ďalšie GPU jadrá cez technickú podporu.
> **Poznámka**: Niektoré predplatné, vrátane Azure pre študentov, neposkytujú GPU podporu automaticky. Možno budete musieť požiadať o ďalšie GPU jadrá cez technickú podporu.
* Vytvorte [Azure Machine Learning Workspace](https://azure.microsoft.com/services/machine-learning/?WT.mc_id=academic-77998-cacaste) a potom použite funkciu Notebook tam. [Toto video](https://azure-for-academics.github.io/quickstart/azureml-papers/) ukazuje, ako naklonovať repozitár do Azure ML notebooku a začať ho používať.
* Vytvorte [Azure Machine Learning Workspace](https://azure.microsoft.com/services/machine-learning/?WT.mc_id=academic-77998-cacaste) a potom využite funkciu Notebook tam. [Toto video](https://azure-for-academics.github.io/quickstart/azureml-papers/) ukazuje, ako naklonovať repozitár do Azure ML notebooku a začať ho používať.
Môžete tiež použiť Google Colab, ktorý má nejakú bezplatnú podporu GPU, a nahrať tam Jupyter Notebooky na ich postupné spustenie.
Môžete tiež použiť Google Colab, ktorý má zadarmo určitú podporu GPU, a nahrať tam Jupyter Notebooky na spustenie jeden po druhom.
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Zrieknutie sa zodpovednosti**:
Tento dokument bol preložený pomocou AI prekladateľskej služby [Co-op Translator](https://github.com/Azure/co-op-translator). Aj keď sa snažíme o presnosť, prosím berte na vedomie, že automatické preklady môžu obsahovať chyby alebo nepresnosti. Originálny dokument v jeho pôvodnom jazyku by mal byť považovaný za autoritatívny zdroj. Pri kritických informáciách sa odporúča profesionálny ľudský preklad. Nepreberáme zodpovednosť za akékoľvek nedorozumenia alebo mylné výklady vyplývajúce z použitia tohto prekladu.
**Vyhlásenie o zodpovednosti**:
Tento dokument bol preložený pomocou AI prekladateľskej služby [Co-op Translator](https://github.com/Azure/co-op-translator). Hoci sa snažíme o presnosť, vezmite prosím na vedomie, že automatické preklady môžu obsahovať chyby alebo nepresnosti. Pôvodný dokument v jeho natívnom jazyku by mal byť považovaný za autoritatívny zdroj. Pre kritické informácie sa odporúča profesionálny ľudský preklad. Nie sme zodpovední za žiadne nedorozumenia alebo nesprávne interpretácie vyplývajúce z použitia tohto prekladu.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

View File

@ -4,11 +4,11 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"# Predtrénované modely a transferové učenie\n",
"# Predtrénované modely a transfer learning\n",
"\n",
"Trénovanie CNN môže byť časovo náročné a vyžaduje veľké množstvo dát. Veľká časť času sa však venuje učeniu najlepších nízkoúrovňových filtrov, ktoré sieť používa na extrahovanie vzorov z obrázkov. Prirodzene sa vynára otázka - môžeme použiť neurónovú sieť vytrénovanú na jednom datasete a prispôsobiť ju na klasifikáciu iných obrázkov bez kompletného procesu trénovania?\n",
"Tréning CNN môže zabrať veľa času a na túto úlohu je potrebné veľa dát. Väčšina času sa však strávi učením najlepších nízkoúrovňových filtrov, ktoré sieť používa na extrahovanie vzorov z obrázkov. Vyvstáva teda prirodzená otázka - môžeme použiť neurónovú sieť natrénovanú na jednej sade dát a prispôsobiť ju klasifikácii iných obrázkov bez kompletného tréningového procesu?\n",
"\n",
"Tento prístup sa nazýva **transferové učenie**, pretože prenášame určité znalosti z jedného modelu neurónovej siete na druhý. Pri transferovom učení zvyčajne začíname s predtrénovaným modelom, ktorý bol vytrénovaný na veľkom datasete obrázkov, ako je napríklad **ImageNet**. Tieto modely už dokážu efektívne extrahovať rôzne črty z bežných obrázkov, a v mnohých prípadoch stačí postaviť klasifikátor na vrchole týchto extrahovaných čŕt, aby sme dosiahli dobrý výsledok.\n"
"Tento prístup sa nazýva **transfer learning**, pretože prenášame časť znalostí z jedného modelu neurónovej siete na druhý. Pri transfer learningu zvyčajne začíname s predtrénovaným modelom, ktorý bol natrénovaný na nejakej veľkej sade obrázkov, napríklad na **ImageNet**. Tieto modely už dokážu dobre extrahovať rôzne vlastnosti z generických obrázkov a v mnohých prípadoch stačí postaviť klasifikátor na týchto extrahovaných vlastnostiach, čo môže priniesť dobrý výsledok.\n"
]
},
{
@ -31,9 +31,9 @@
"source": [
"## Dataset Mačky vs. Psy\n",
"\n",
"V tejto jednotke vyriešime reálny problém klasifikácie obrázkov mačiek a psov. Na tento účel použijeme [Kaggle Cats vs. Dogs Dataset](https://www.kaggle.com/c/dogs-vs-cats), ktorý je možné stiahnuť aj [z Microsoftu](https://www.microsoft.com/en-us/download/details.aspx?id=54765&WT.mc_id=academic-77998-cacaste).\n",
"V tejto jednotke vyriešime reálny problém klasifikácie obrázkov mačiek a psov. Na tento účel použijeme [Kaggle dataset Mačky vs. Psy](https://www.kaggle.com/c/dogs-vs-cats), ktorý je možné stiahnuť aj [z Microsoftu](https://www.microsoft.com/en-us/download/details.aspx?id=54765&WT.mc_id=academic-77998-cacaste).\n",
"\n",
"Stiahnime si tento dataset a rozbaľme ho do adresára `data` (tento proces môže chvíľu trvať!):\n"
"Stiahnime si tento dataset a rozbaľme ho do priečinka `data` (tento proces môže chvíľu trvať!):\n"
]
},
{
@ -64,7 +64,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Bohužiaľ, v dátovom súbore sa nachádzajú niektoré poškodené obrazové súbory. Musíme vykonať rýchle čistenie na kontrolu poškodených súborov. Aby sme nezahltili tento návod, presunuli sme kód na overenie dátového súboru do modulu.\n"
"Bohužiaľ, v dátovej sade sa nachádzajú niektoré poškodené obrazové súbory. Potrebujeme rýchle očistenie na kontrolu poškodených súborov. Aby sme tento tutoriál neunavili, presunuli sme kód na overenie dátovej sady do modulu.\n"
]
},
{
@ -333,13 +333,13 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"## Načítanie datasetu\n",
"## Načítavanie datasetu\n",
"\n",
"V predchádzajúcich príkladoch sme načítavali datasety, ktoré sú zabudované v Keras. Teraz sa chystáme pracovať s vlastným datasetom, ktorý musíme načítať z adresára obrázkov.\n",
"V predchádzajúcich príkladoch sme načítavali datasety, ktoré sú súčasťou Kerasu. Teraz sa chystáme pracovať s naším vlastným datasetom, ktorý potrebujeme načítať zo zložky s obrázkami.\n",
"\n",
"V reálnom živote môže byť veľkosť datasetov obrázkov pomerne veľká, a preto sa nedá spoliehať na to, že všetky dáta sa zmestia do pamäte. Z tohto dôvodu sú datasety často reprezentované ako **generátory**, ktoré dokážu vracať dáta v minibatchoch vhodných na tréning.\n",
"V reálnom živote môžu byť veľkosti obrazových datasetov pomerne veľké a nemožno počítať s tým, že všetky údaje sa zmestia do pamäte. Preto sú datasety často reprezentované ako **generátory**, ktoré môžu vracať dáta v minibatchoch vhodných na trénovanie.\n",
"\n",
"Na prácu s klasifikáciou obrázkov obsahuje Keras špeciálnu funkciu `image_dataset_from_directory`, ktorá dokáže načítať obrázky z podadresárov zodpovedajúcich rôznym triedam. Táto funkcia sa tiež stará o škálovanie obrázkov a dokáže dataset rozdeliť na tréningovú a testovaciu podmnožinu:\n"
"Na spracovanie klasifikácie obrazov Keras obsahuje špeciálnu funkciu `image_dataset_from_directory`, ktorá dokáže načítať obrázky zo podadresárov zodpovedajúcich rôznym triedam. Táto funkcia sa tiež stará o škálovanie obrázkov a dokáže rozdeliť dataset na trénovaciu a testovaciu množinu:\n"
]
},
{
@ -383,9 +383,9 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Je dôležité nastaviť rovnakú hodnotu `seed` pre oba volania, pretože ovplyvňuje rozdelenie obrázkov medzi tréningovú a testovaciu množinu.\n",
"Je dôležité nastaviť rovnakú hodnotu `seed` pre oba volania, pretože ovplyvňuje rozdelenie obrázkov medzi trénovaciu a testovaciu množinu dát.\n",
"\n",
"Dataset automaticky preberá názvy tried z adresárov a môžete k nim pristúpiť, ak je to potrebné, zavolaním:\n"
"Dataset automaticky načíta názvy tried z adresárov a k nim môžete získať prístup, ak je to potrebné, zavolaním:\n"
]
},
{
@ -412,7 +412,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Datasety, ktoré sme získali, môžu byť priamo odovzdané funkcii `fit` na natrénovanie modelu. Obsahujú zodpovedajúce obrázky aj štítky, ktoré je možné prechádzať pomocou nasledujúcej konštrukcie:\n"
"Dataset, ktoré sme získali, možno priamo odovzdať funkcii `fit` na trénovanie modelu. Obsahujú príslušné obrázky aj štítky, s ktorými je možné prechádzať pomocou nasledujúcej konštrukcie:\n"
]
},
{
@ -453,7 +453,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"> **Poznámka**: Všetky obrázky v datasete sú reprezentované ako desatinné bodové tenzory v rozsahu 0-255. Pred ich odoslaním do neurónovej siete musíme tieto hodnoty škálovať do rozsahu 0-1. Pri zobrazovaní obrázkov musíme urobiť to isté, alebo konvertovať hodnoty na typ `int` (čo robíme v kóde vyššie), aby sme ukázali `matplotlib`, že chceme zobraziť pôvodný neškálovaný obrázok.\n"
"> **Poznámka**: Všetky obrázky v dátovej sade sú reprezentované ako tenzory s pohyblivou desatinou čiarkou v rozsahu 0-255. Pred ich odovzdaním neuronovej sieti musíme tieto hodnoty škálovať do rozsahu 0-1. Pri zobrazovaní obrázkov musíme urobiť to isté, alebo prekonvertovať hodnoty na typ `int` (čo robíme v kóde vyššie), aby sme `matplotlib` ukázali, že chceme zobraziť pôvodný neskalovaný obrázok.\n"
]
},
{
@ -462,7 +462,7 @@
"source": [
"## Predtrénované modely\n",
"\n",
"Pre mnohé úlohy klasifikácie obrázkov je možné nájsť predtrénované modely neurónových sietí. Mnohé z týchto modelov sú dostupné v rámci názvového priestoru `keras.applications`, a ešte viac modelov je možné nájsť na internete. Pozrime sa, ako možno načítať a použiť najjednoduchší model VGG-16:\n"
"Pre mnohé úlohy klasifikácie obrázkov je možné nájsť predtrénované modely neurónových sietí. Mnoho týchto modelov je dostupných v rámci priestoru názvov `keras.applications` a ešte viac modelov možno nájsť na internete. Pozrime sa, ako možno načítať a použiť najjednoduchší model VGG-16:\n"
]
},
{
@ -497,7 +497,17 @@
}
],
"source": [
"vgg = keras.applications.VGG16()\n",
"# SHA-256 of VGG16 weights (with top)\n",
"VGG16_WEIGHTS_SHA256 = '64373286793e3c8b2b4e3219cbf3544bce2f55ab4682710a29f5e7af8f5e4f61'\n",
"\n",
"_weights_path = keras.utils.get_file(\n",
" 'vgg16_weights_tf_dim_ordering_tf_kernels.h5',\n",
" 'https://storage.googleapis.com/tensorflow/keras-applications/vgg16/vgg16_weights_tf_dim_ordering_tf_kernels.h5',\n",
" file_hash=VGG16_WEIGHTS_SHA256,\n",
" hash_algorithm='sha256',\n",
")\n",
"\n",
"vgg = keras.applications.VGG16(weights=_weights_path)\n",
"inp = keras.applications.vgg16.preprocess_input(x_sample[:1])\n",
"\n",
"res = vgg(inp)\n",
@ -510,11 +520,10 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Existuje niekoľko dôležitých vecí:\n",
"\n",
"* Pred odoslaním vstupu do akejkoľvek predtrénovanej siete je potrebné ho určitým spôsobom predspracovať. Toto sa vykonáva volaním príslušnej funkcie `preprocess_input`, ktorá prijíma dávku obrázkov a vracia ich spracovanú formu. V prípade VGG-16 sú obrázky normalizované a od každého kanála sa odpočíta preddefinovaná priemerná hodnota. Je to preto, že VGG-16 bola pôvodne trénovaná s týmto predspracovaním.\n",
"* Neurónová sieť sa aplikuje na vstupnú dávku a výsledkom je dávka 1000-prvkových tenzorov, ktoré ukazujú pravdepodobnosť každej triedy. Najpravdepodobnejšie číslo triedy môžeme nájsť volaním `argmax` na tomto tenzore.\n",
"* Získaný výsledok je [číslo triedy `ImageNet`](https://gist.github.com/yrevar/942d3a0ac09ec9e5eb3a). Aby sme tomuto výsledku porozumeli, môžeme použiť aj funkciu `decode_predictions`, ktorá vráti n najlepších tried spolu s ich názvami.\n"
"Tu je niekoľko dôležitých vecí:\n",
"* Pred odovzdaním vstupu do akejkoľvek predtrénovanej siete musí byť vstup predspracovaný určitým spôsobom. To sa robí volaním príslušnej funkcie `preprocess_input`, ktorá prijíma dávku obrázkov a vracia ich spracovanú formu. V prípade VGG-16 sú obrázky normalizované a od jednotlivých kanálov sa odčíta preddefinovaná priemerná hodnota. Je to preto, že VGG-16 bol pôvodne trénovaný s týmto predspracovaním.\n",
"* Na vstupnú dávku sa aplikuje neurónová sieť a ako výsledok dostaneme dávku 1000-prvkových tenzorov, ktoré ukazujú pravdepodobnosť každej triedy. Najpravdepodobnejšie číslo triedy môžeme nájsť volaním `argmax` na tomto tenzore.\n",
"* Získaný výsledok je [číslo triedy `ImageNet`](https://gist.github.com/yrevar/942d3a0ac09ec9e5eb3a). Aby výsledok dával zmysel, môžeme tiež použiť funkciu `decode_predictions`, ktorá vráti najlepších n tried spolu s ich názvami.\n"
]
},
{
@ -600,7 +609,7 @@
"source": [
"## Výpočty na GPU\n",
"\n",
"Hlboké neurónové siete, ako napríklad VGG-16 a ďalšie modernejšie architektúry, vyžadujú pomerne veľa výpočtového výkonu na spustenie. Má zmysel využiť akceleráciu GPU, ak je k dispozícii. Našťastie, Keras automaticky zrýchľuje výpočty na GPU, ak je dostupná. Môžeme skontrolovať, či Tensorflow dokáže používať GPU pomocou nasledujúceho kódu:\n"
"Hlboké neurónové siete, ako VGG-16 a iné modernejšie architektúry, vyžadujú na spustenie pomerne veľký výpočtový výkon. Má zmysel použiť akceleráciu na GPU, ak je dostupná. Našťastie, Keras automaticky zrýchľuje výpočty na GPU, ak je k dispozícii. Môžeme skontrolovať, či Tensorflow dokáže použiť GPU pomocou nasledujúceho kódu:\n"
]
},
{
@ -627,9 +636,10 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"## Extrahovanie vlastností VGG\n",
"\n",
"Ak chceme použiť VGG-16 na extrahovanie vlastností z našich obrázkov, potrebujeme model bez posledných klasifikačných vrstiev. Model VGG-16 bez vrchných vrstiev môžeme inicializovať pomocou tohto kódu:\n"
"Ak chceme použiť VGG-16 na extrahovanie vlastností z našich obrázkov, potrebujeme model bez posledných klasifikačných vrstiev. Model VGG-16 bez horných vrstiev môžeme vytvoriť pomocou tohto kódu:\n"
]
},
{
@ -681,9 +691,9 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Rozmer tenzora vlastností je 7x7x512, ale aby sme ho mohli vizualizovať, museli sme ho preformátovať do 2D podoby.\n",
"Rozmery tenzora príznakov sú 7x7x512, ale na jeho vizualizáciu sme ho museli preusporiadať do 2D formy.\n",
"\n",
"Teraz sa pokúsme zistiť, či je možné tieto vlastnosti použiť na klasifikáciu obrázkov. Manuálne vezmeme určitú časť obrázkov (v našom prípade 50 minibatchov) a predpočítame ich vektor vlastností. Na to môžeme použiť API **dataset** od Tensorflow. Funkcia `map` vezme dataset a aplikuje zadanú lambda-funkciu na jeho transformáciu. Tento mechanizmus využívame na vytvorenie nových datasetov, `ds_features_train` a `ds_features_test`, ktoré obsahujú vlastnosti extrahované pomocou VGG namiesto pôvodných obrázkov.\n"
"Teraz skúsme zistiť, či je možné tieto príznaky použiť na klasifikáciu obrazov. Manuálne vezmeme nejakú časť obrázkov (v našom prípade 50 minibatchov) a predpočítame ich vektorové príznaky. Na to môžeme použiť Tensorflow **dataset** API. Funkcia `map` vezme dataset a aplikuje naň danú lambda-funkciu na transformáciu. Tento mechanizmus používame na vytvorenie nových datasetov, `ds_features_train` a `ds_features_test`, ktoré obsahujú príznaky extrahované z VGG namiesto pôvodných obrázkov.\n"
]
},
{
@ -713,9 +723,9 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Použili sme konštrukciu `.take(50)` na obmedzenie veľkosti datasetu, aby sme urýchlili našu ukážku. Samozrejme, tento experiment môžete vykonať na celom datasete.\n",
"Použili sme konštrukciu `.take(50)` na obmedzenie veľkosti dátovej množiny, aby sme zrýchlili našu ukážku. Samozrejme môžete tento experiment vykonať na celej dátovej množine.\n",
"\n",
"Teraz, keď máme dataset s extrahovanými črtami, môžeme natrénovať jednoduchý hustý klasifikátor na rozlíšenie medzi mačkami a psami. Táto sieť bude prijímať vektor čŕt s tvarom (7,7,512) a produkovať jeden výstup, ktorý zodpovedá buď psovi, alebo mačke. Keďže ide o binárnu klasifikáciu, používame aktivačnú funkciu `sigmoid` a stratu `binary_crossentropy`.\n"
"Teraz, keď máme dátovú množinu s vyextrahovanými črtami, môžeme trénovať jednoduchý hustý klasifikátor na rozlíšenie medzi mačkami a psami. Táto sieť prijme vektor čŕt v tvare (7,7,512) a vytvorí jeden výstup, ktorý zodpovedá buď psovi, alebo mačke. Keďže ide o binárnu klasifikáciu, používame aktivačnú funkciu `sigmoid` a stratu `binary_crossentropy`.\n"
]
},
{
@ -744,13 +754,13 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Výsledok je skvelý, dokážeme rozlíšiť medzi mačkou a psom s takmer 95% pravdepodobnosťou! Avšak, tento prístup sme testovali iba na podmnožine všetkých obrázkov, pretože manuálna extrakcia čŕt sa zdá byť veľmi časovo náročná.\n",
"Výsledok je skvelý, dokážeme rozlíšiť medzi mačkou a psom s takmer 95 % pravdepodobnosťou! Avšak tento prístup sme otestovali iba na podmnožine všetkých obrázkov, pretože manuálne extrahovanie čŕt sa zdá byť časovo náročné.\n",
"\n",
"## Transfer learning pomocou jednej siete VGG\n",
"## Transferové učenie s použitím jednej siete VGG\n",
"\n",
"Manuálnemu predpočítavaniu čŕt sa môžeme vyhnúť aj tak, že počas tréningu použijeme pôvodnú sieť VGG-16 ako celok, pričom do našej siete pridáme extraktor čŕt ako prvú vrstvu.\n",
"Môžeme sa tiež vyhnúť manuálnemu predpočítaču čŕt tým, že počas tréningu použijeme pôvodnú sieť VGG-16 ako celok, pridaním extraktora čŕt do našej siete ako prvej vrstvy.\n",
"\n",
"Krása architektúry Keras spočíva v tom, že model VGG-16, ktorý sme definovali vyššie, môže byť použitý aj ako vrstva v inej neurónovej sieti! Stačí nám zostaviť sieť s hustým klasifikátorom na vrchu a potom trénovať celú sieť pomocou spätného šírenia.\n"
"Krása architektúry Keras je v tom, že model VGG-16, ktorý sme definovali vyššie, môže byť tiež použitý ako vrstva v inej neurónovej sieti! Stačí, ak zkonštruujeme sieť s hustým klasifikátorom na jej vrchu a potom naučíme celú sieť pomocou spätného šírenia.\n"
]
},
{
@ -794,13 +804,13 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Tento model vyzerá ako end-to-end klasifikačná sieť, ktorá prijíma obrázok a vracia triedu. Zádrhel však spočíva v tom, že chceme, aby VGG16 fungoval ako extraktor čŕt, a nie aby bol znovu trénovaný. Preto musíme **zmraziť váhy konvolučného extraktora čŕt**. K prvej vrstve siete sa dostaneme volaním `model.layers[0]` a stačí nastaviť vlastnosť `trainable` na hodnotu `False`.\n",
"Tento model vyzerá ako sieť na klasifikáciu end-to-end, ktorá vezme obrázok a vráti triedu. Avšak, zložitosť spočíva v tom, že chceme, aby VGG16 fungoval ako extraktor charakteristík, a nie aby bol znovu trénovaný. Preto potrebujeme **zmraziť váhy konvolučného extraktora charakteristík**. K prvej vrstve siete môžeme pristúpiť zavolaním `model.layers[0]` a stačí nastaviť vlastnosť `trainable` na `False`.\n",
"\n",
"> **Note**: Zmrazenie váh extraktora čŕt je potrebné, pretože inak by netrénovaná klasifikačná vrstva mohla zničiť pôvodné predtrénované váhy konvolučného extraktora.\n",
"> **Poznámka**: Zmrazenie váh extraktora charakteristík je potrebné, pretože inak by netrénovaná klasifikačná vrstva mohla zničiť pôvodné predtrénované váhy konvolučného extraktora.\n",
"\n",
"Môžete si všimnúť, že hoci celkový počet parametrov v našej sieti je okolo 15 miliónov, trénujeme iba 25 tisíc parametrov. Všetky ostatné parametre vrchných konvolučných filtrov sú predtrénované. To je dobré, pretože môžeme doladiť menší počet parametrov s menším počtom príkladov.\n",
"Môžete si všimnúť, že hoci je celkový počet parametrov v našej sieti okolo 15 miliónov, trénujeme len 25 tisíc parametrov. Všetky ostatné parametre vrcholových konvolučných filtrov sú predtrénované. To je dobré, pretože môžeme doladiť menší počet parametrov s menším počtom príkladov.\n",
"\n",
"Teraz budeme trénovať našu sieť a uvidíme, aké dobré výsledky môžeme dosiahnuť. Očakávajte pomerne dlhý čas vykonávania a nebojte sa, ak sa zdá, že vykonávanie na chvíľu zamrzlo.\n"
"Teraz našu sieť natrénujeme a uvidíme, ako dobré výsledky môžeme dosiahnuť. Očakávajte skôr dlhší čas behu a nebojte sa, ak sa vykonávanie na chvíľu zdá zamrznuté.\n"
]
},
{
@ -825,11 +835,11 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Vyzerá to, že sme získali pomerne presný klasifikátor mačiek a psov!\n",
"Vyzerá to, že sme získali pomerne presný klasifikátor mačiek a psov! \n",
"\n",
"## Ukladanie a načítanie modelu\n",
"\n",
"Keď máme model natrénovaný, môžeme uložiť architektúru modelu a natrénované váhy do súboru na budúce použitie:\n"
"Keď máme model vytrénovaný, môžeme uložiť architektúru modelu a naučené váhy do súboru pre budúce použitie:\n"
]
},
{
@ -853,7 +863,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Model môžeme kedykoľvek načítať zo súboru. Môže to byť užitočné v prípade, že nasledujúci experiment zničí model - nemuseli by ste začínať od začiatku.\n"
"Model si potom môžeme kedykoľvek načítať zo súboru. Môže sa vám to hodiť v prípade, že nasledujúci experiment model zničí nebudete musieť začínať od začiatku.\n"
]
},
{
@ -869,15 +879,15 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"## Jemné doladenie prenosového učenia\n",
"## Doladenie transferového učenia\n",
"\n",
"V predchádzajúcej časti sme natrénovali poslednú vrstvu klasifikátora na klasifikáciu obrázkov v našej vlastnej dátovej sade. Avšak, nepretrénovali sme extraktor čŕt a náš model sa spoliehal na črty, ktoré sa naučil na dátach ImageNet. Ak sa vaše objekty vizuálne líšia od bežných obrázkov z ImageNet, táto kombinácia čŕt nemusí fungovať najlepšie. Preto má zmysel začať trénovať aj konvolučné vrstvy.\n",
"V predchádzajúcej časti sme vytrénovali poslednú klasifikačnú vrstvu, aby sme klasifikovali obrázky v našej vlastnej sade dát. Avšak extraktor príznakov sme nepreučovali a náš model sa spoliehal na príznaky, ktoré sa model naučil na údajoch ImageNet. Ak sa vaše objekty vizuálne líšia od bežných obrázkov ImageNet, táto kombinácia príznakov nemusí fungovať najlepšie. Preto má zmysel začať trénovať aj konvolučné vrstvy.\n",
"\n",
"Aby sme to dosiahli, môžeme odomknúť parametre konvolučných filtrov, ktoré sme predtým zamkli.\n",
"Na to môžeme \"odmraziť\" parametre konvolučných filtrov, ktoré sme predtým zamrazili.\n",
"\n",
"> **Note:** Je dôležité, aby ste najprv zamkli parametre a vykonali niekoľko epoch trénovania, aby sa stabilizovali váhy vo vrstve klasifikátora. Ak okamžite začnete trénovať sieť end-to-end s odomknutými parametrami, veľké chyby môžu zničiť predtrénované váhy v konvolučných vrstvách.\n",
"> **Poznámka:** Je dôležité, aby ste najskôr zamrazili parametre a vykonali niekoľko epoch trénovania, aby sa stabilizovali váhy v klasifikačnej vrstve. Ak hneď začnete trénovať end-to-end sieť s odmrazenými parametrami, veľké chyby pravdepodobne zničia predtrénované váhy v konvolučných vrstvách.\n",
"\n",
"Náš konvolučný model VGG-16 sa nachádza v prvej vrstve a sám o sebe pozostáva z mnohých vrstiev. Môžeme sa pozrieť na jeho štruktúru:\n"
"Náš konvolučný VGG-16 model sa nachádza v prvej vrstve a sám pozostáva z mnohých vrstiev. Môžeme sa pozrieť na jeho štruktúru:\n"
]
},
{
@ -945,7 +955,9 @@
{
"cell_type": "markdown",
"metadata": {},
"source": []
"source": [
"Môžeme odblokovať všetky vrstvy konvolučnej bázy:\n"
]
},
{
"cell_type": "code",
@ -960,7 +972,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Avšak, rozmraziť všetky naraz nie je najlepší nápad. Najskôr môžeme rozmraziť len niekoľko posledných vrstiev konvolúcií, pretože obsahujú vyššie úrovne vzorov, ktoré sú relevantné pre naše obrázky. Napríklad, na začiatok môžeme zmraziť všetky vrstvy okrem posledných 4:\n"
"Avšak všetky naraz rozmraziť nie je najlepší nápad. Najskôr môžeme rozmraziť len niekoľko posledných vrstiev konvolúcií, pretože obsahujú vzory vyššej úrovne, ktoré sú relevantné pre naše obrázky. Napríklad, na začiatok môžeme zmraziť všetky vrstvy okrem posledných 4: \n"
]
},
{
@ -999,11 +1011,11 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Počet trénovateľných parametrov sa výrazne zvýšil, ale stále je to približne 50 % zo všetkých parametrov.\n",
"Všimnite si, že počet trénovateľných parametrov sa výrazne zvýšil, ale stále je to približne 50 % zo všetkých parametrov.\n",
"\n",
"Po odomknutí môžeme vykonať ešte niekoľko epoch trénovania (v našom príklade vykonáme iba jednu). Môžete si tiež zvoliť nižšiu rýchlosť učenia, aby ste minimalizovali vplyv na predtrénované váhy. Avšak, aj pri nízkej rýchlosti učenia môžete očakávať, že presnosť na začiatku trénovania klesne, až kým nakoniec nedosiahne mierne vyššiu úroveň ako v prípade fixných váh.\n",
"Po odomknutí môžeme vykonať niekoľko ďalších epoch trénovania (v našom príklade urobíme len jednu). Môžete tiež zvoliť nižšiu mieru učenia, aby ste minimalizovali vplyv na predtrénované váhy. Avšak aj pri nízkej miere učenia môžete očakávať pokles presnosti na začiatku tréningu, až kým nakoniec nedosiahne mierne vyššiu úroveň než v prípade pevných váh.\n",
"\n",
"> **Note:** Toto trénovanie prebieha oveľa pomalšie, pretože musíme šíriť gradienty späť cez mnoho vrstiev siete!\n"
"> **Poznámka:** Toto trénovanie prebieha omnoho pomalšie, pretože musíme spätne šíriť gradienty cez mnoho vrstiev siete!\n"
]
},
{
@ -1027,9 +1039,9 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Je pravdepodobné, že dosiahneme vyššiu presnosť na tréningovej množine, pretože používame výkonnejšiu sieť s väčším počtom parametrov, ale presnosť na validačnej množine sa nezvýši až tak výrazne.\n",
"Je pravdepodobné, že dosiahneme vyššiu presnosť na tréningu, pretože používame výkonejšiu sieť s viacerými parametrami, ale presnosť na validácii by sa nezvýšila tak veľmi.\n",
"\n",
"Neváhajte odomknúť niekoľko ďalších vrstiev siete a trénovať ďalej, aby ste zistili, či dokážete dosiahnuť vyššiu presnosť!\n"
"Kľudne odomknite niekoľko ďalších vrstiev siete a trénujte viac, aby ste zistili, či dokážete dosiahnuť vyššiu presnosť!\n"
]
},
{
@ -1038,7 +1050,7 @@
"source": [
"## Iné modely počítačového videnia\n",
"\n",
"VGG-16 je jednou z najjednoduchších architektúr počítačového videnia. Keras poskytuje mnoho ďalších predtrénovaných sietí. Medzi najčastejšie používané patria architektúry **ResNet**, vyvinuté spoločnosťou Microsoft, a **Inception** od Googlu. Napríklad, poďme preskúmať architektúru najjednoduchšieho modelu ResNet-50 (ResNet je rodina modelov s rôznou hĺbkou, môžete skúsiť experimentovať s ResNet-152, ak chcete vidieť, ako vyzerá skutočne hlboký model):\n"
"VGG-16 je jedna z najjednoduchších architektúr počítačového videnia. Keras poskytuje mnoho ďalších predtrénovaných sietí. Medzi najčastejšie používané patria **ResNet** architektúry vyvinuté spoločnosťou Microsoft a **Inception** od Google. Napríklad preskúmajme architektúru najjednoduchšieho modelu ResNet-50 (ResNet je rodina modelov s rôznou hĺbkou, môžete skúsiť experimentovať s ResNet-152, ak chcete vidieť, ako vyzerá naozaj hlboký model):\n"
]
},
{
@ -1440,11 +1452,11 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Ako môžete vidieť, model obsahuje rovnaké známe stavebné bloky: konvolučné vrstvy, pooling vrstvy a finálny hustý klasifikátor. Tento model môžeme použiť presne rovnakým spôsobom, ako sme používali VGG-16 na transferové učenie. Môžete skúsiť experimentovať s vyššie uvedeným kódom, použiť rôzne ResNet modely ako základný model a sledovať, ako sa mení presnosť.\n",
"Ako vidíte, model obsahuje rovnaké známe stavebné bloky: konvolučné vrstvy, poolingové vrstvy a záverečný hustý klasifikátor. Tento model môžeme použiť presne rovnakým spôsobom, ako sme používali VGG-16 na prenosové učenie. Môžete si skúsiť experimentovať s kódom vyššie, použiť rôzne modely ResNet ako základný model a sledovať, ako sa mení presnosť.\n",
"\n",
"## Batch Normalizácia\n",
"## Normalizácia batchov\n",
"\n",
"Táto sieť obsahuje ešte jeden typ vrstvy: **Batch Normalizácia**. Myšlienka batch normalizácie spočíva v tom, že hodnoty, ktoré prechádzajú neurónovou sieťou, sa privedú do správneho intervalu. Zvyčajne neurónové siete fungujú najlepšie, keď sú všetky hodnoty v rozsahu [-1,1] alebo [0,1], a preto naše vstupné dáta primerane škálujeme/normalizujeme. Počas trénovania hlbokej siete sa však môže stať, že hodnoty sa výrazne dostanú mimo tento rozsah, čo spôsobuje problémy pri trénovaní. Vrstva batch normalizácie vypočíta priemer a štandardnú odchýlku pre všetky hodnoty aktuálneho minibatchu a použije ich na normalizáciu signálu predtým, ako ho pošle cez vrstvu neurónovej siete. Toto výrazne zlepšuje stabilitu hlbokých sietí.\n"
"Táto sieť obsahuje ešte jeden typ vrstvy: **Batch Normalization** (normalizácia batchov). Myšlienkou normalizácie batchov je dostať hodnoty, ktoré prechádzajú neurónovou sieťou, do správneho intervalu. Zvyčajne neurónové siete fungujú najlepšie, keď sú všetky hodnoty v rozsahu [-1,1] alebo [0,1], a preto vstupné údaje podľa toho škálujeme/normalizujeme. Avšak počas trénovania hlbokej siete sa môže stať, že hodnoty výrazne prekročia tento rozsah, čo robí trénovanie problematickým. Vrstva batch normalization vypočíta priemer a štandardnú odchýlku pre všetky hodnoty aktuálneho minibatchu a použije ich na normalizáciu signálu predtým, než ho posunie cez neurónovú vrstvu. Toto výrazne zlepšuje stabilitu hlbokých sietí.\n"
]
},
{
@ -1453,16 +1465,16 @@
"source": [
"## Zhrnutie\n",
"\n",
"Použitím transferového učenia sme dokázali rýchlo zostaviť klasifikátor pre našu úlohu klasifikácie vlastných objektov a dosiahnuť vysokú presnosť. Tento príklad však nebol úplne spravodlivý, pretože pôvodná sieť VGG-16 bola predtrénovaná na rozpoznávanie mačiek a psov, takže sme len znovu využívali väčšinu vzorov, ktoré už boli v sieti prítomné. Môžete očakávať nižšiu presnosť pri exotickejších objektoch špecifických pre danú oblasť, ako sú detaily na výrobnej linke v továrni alebo rôzne listy stromov.\n",
"Použitím transferového učenia sme dokázali rýchlo zostaviť klasifikátor pre našu vlastnú úlohu klasifikácie objektov a dosiahnuť vysokú presnosť. Tento príklad však nebol úplne spravodlivý, pretože pôvodná sieť VGG-16 bola predtrénovaná na rozpoznávanie mačiek a psov, a tak sme len znovu použili väčšinu vzorov, ktoré už v sieti boli. Nižšiu presnosť možno očakávať pri exotickejších predmetoch špecifických pre danú doménu, ako sú detaily na výrobnej linke v závode alebo rôzne listy stromov.\n",
"\n",
"Vidíte, že zložitejšie úlohy, ktoré teraz riešime, vyžadujú vyšší výpočtový výkon a nemôžu byť ľahko vyriešené na CPU. V ďalšej jednotke sa pokúsime použiť ľahšiu implementáciu na trénovanie toho istého modelu s nižšími výpočtovými zdrojmi, čo povedie len k mierne nižšej presnosti.\n"
"Je vidieť, že zložitejšie úlohy, ktoré teraz riešime, vyžadujú vyšší výpočtový výkon a nedajú sa jednoducho riešiť na CPU. V nasledujúcej jednotke sa pokúsime použiť ľahšiu implementáciu na trénovanie toho istého modelu s využitím nižších výpočtových zdrojov, čo má za následok len o niečo nižšiu presnosť.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n---\n\n**Upozornenie**: \nTento dokument bol preložený pomocou služby AI prekladu [Co-op Translator](https://github.com/Azure/co-op-translator). Hoci sa snažíme o presnosť, prosím, berte na vedomie, že automatizované preklady môžu obsahovať chyby alebo nepresnosti. Pôvodný dokument v jeho rodnom jazyku by mal byť považovaný za autoritatívny zdroj. Pre kritické informácie sa odporúča profesionálny ľudský preklad. Nie sme zodpovední za žiadne nedorozumenia alebo nesprávne interpretácie vyplývajúce z použitia tohto prekladu.\n"
"---\n\n<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**Vyhlásenie o zodpovednosti**:\nTento dokument bol preložený pomocou AI prekladateľskej služby [Co-op Translator](https://github.com/Azure/co-op-translator). Hoci sa snažíme o presnosť, vezmite prosím na vedomie, že automatické preklady môžu obsahovať chyby alebo nepresnosti. Pôvodný dokument v jeho natívnom jazyku by mal byť považovaný za autoritatívny zdroj. Pre kritické informácie sa odporúča profesionálny ľudský preklad. Nie sme zodpovední za žiadne nedorozumenia alebo nesprávne interpretácie vyplývajúce z použitia tohto prekladu.\n<!-- CO-OP TRANSLATOR DISCLAIMER END -->\n"
]
}
],
@ -1483,12 +1495,6 @@
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.10"
},
"coopTranslator": {
"original_hash": "c189abc107848f96051085cc30945129",
"translation_date": "2025-08-29T23:18:28+00:00",
"source_file": "lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb",
"language_code": "sk"
}
},
"nbformat": 4,

View File

@ -1,26 +1,26 @@
# Spracovanie prirodzeného jazyka
![Zhrnutie úloh NLP v kresbe](../../../../translated_images/sk/ai-nlp.b22dcb8ca4707cea.webp)
![Zhrnutie úloh NLP v náčrte](../../../../translated_images/sk/ai-nlp.b22dcb8ca4707cea.webp)
V tejto sekcii sa zameriame na používanie neurónových sietí na riešenie úloh súvisiacich so **spracovaním prirodzeného jazyka (NLP)**. Existuje mnoho problémov v oblasti NLP, ktoré by sme chceli, aby počítače dokázali vyriešiť:
V tejto sekcii sa zameriame na využitie neurónových sietí na riešenie úloh súvisiacich so **spracovaním prirodzeného jazyka (NLP)**. Existuje veľa problémov v oblasti NLP, ktoré chceme, aby počítače vedeli riešiť:
* **Klasifikácia textu** je typický klasifikačný problém týkajúci sa textových sekvencií. Príklady zahŕňajú klasifikáciu e-mailových správ ako spam vs. ne-spam alebo kategorizáciu článkov ako šport, biznis, politika atď. Pri vývoji chatbotov často potrebujeme pochopiť, čo chcel používateľ povedať v tomto prípade ide o **klasifikáciu zámeru**. Často sa pri klasifikácii zámeru musíme vysporiadať s mnohými kategóriami.
* **Analýza sentimentu** je typický regresný problém, kde musíme priradiť číslo (sentiment), ktoré zodpovedá tomu, ako pozitívny/negatívny je význam vety. Pokročilejšou verziou analýzy sentimentu je **analýza sentimentu na základe aspektov** (ABSA), kde priraďujeme sentiment nie celej vete, ale jej rôznym častiam (aspektom), napr. *V tejto reštaurácii sa mi páčila kuchyňa, ale atmosféra bola hrozná*.
* **Rozpoznávanie pomenovaných entít** (NER) sa týka problému extrakcie určitých entít z textu. Napríklad, môžeme potrebovať pochopiť, že vo fráze *Potrebujem letieť do Paríža zajtra* slovo *zajtra* odkazuje na DÁTUM a *Paríž* je LOKÁCIA.
* **Extrakcia kľúčových slov** je podobná NER, ale musíme automaticky extrahovať slová dôležité pre význam vety bez predchádzajúceho trénovania na konkrétne typy entít.
* **Zoskupovanie textu** môže byť užitočné, keď chceme zoskupiť podobné vety, napríklad podobné požiadavky v konverzáciách technickej podpory.
* **Odpovedanie na otázky** sa týka schopnosti modelu odpovedať na konkrétnu otázku. Model dostane textový úryvok a otázku ako vstupy a musí poskytnúť miesto v texte, kde sa nachádza odpoveď na otázku (alebo niekedy vygenerovať text odpovede).
* **Generovanie textu** je schopnosť modelu generovať nový text. Môže byť považované za klasifikačnú úlohu, ktorá predpovedá ďalšie písmeno/slovo na základe určitého *textového podnetu*. Pokročilé modely generovania textu, ako GPT-3, dokážu riešiť aj iné úlohy NLP, ako je klasifikácia, pomocou techniky nazývanej [programovanie podnetov](https://towardsdatascience.com/software-3-0-how-prompting-will-change-the-rules-of-the-game-a982fbfe1e0) alebo [inžinierstvo podnetov](https://medium.com/swlh/openai-gpt-3-and-prompt-engineering-dcdc2c5fcd29).
* **Sumarizácia textu** je technika, keď chceme, aby počítač "prečítal" dlhý text a zhrnul ho do niekoľkých viet.
* **Strojový preklad** môže byť vnímaný ako kombinácia porozumenia textu v jednom jazyku a generovania textu v inom.
* **Klasifikácia textu** je typický klasifikačný problém týkajúci sa sekvencií textu. Príklady zahŕňajú triedenie e-mailových správ na spam a ne-spam, alebo kategorizáciu článkov ako šport, biznis, politika a pod. Tiež pri vývoji chat botov často potrebujeme rozumieť, čo používateľ chcel povedať v tomto prípade ide o **klasifikáciu zámerov** (intent classification). Často musíme v klasifikácii zámerov pracovať s mnohými kategóriami.
* **Sentimentálna analýza** je typický regresný problém, kde potrebujeme priradiť číselnú hodnotu (sentiment) zodpovedajúcu tomu, ako pozitívny alebo negatívny je význam vety. Pokročilejšou verziou sentimentálnej analýzy je **analýza založená na aspektoch** (ABSA), kde sentiment nepriraďujeme celej vete, ale rôznym jej častiam (aspektom), napr. *V tejto reštaurácii som mal rád kuchyňu, ale atmosféra bola hrozná*.
* **Rozpoznávanie pomenovaných entít** (NER) sa týka problému extrahovania určitých entít z textu. Napríklad potrebujeme pochopiť, že vo vete *Musím zajtra letieť do Paríža* slovo *zajtra* označuje DÁTUM a *Paríž* je MIESTO.
* **Extrahovanie kľúčových slov** je podobné NER, ale automaticky musíme vybrať slová dôležité pre význam vety bez predtrénovania na špecifické typy entít.
* **Zhlukovanie textu** je užitočné, keď chceme zoskupiť podobné vety, napríklad podobné požiadavky v rozhovoroch technickej podpory.
* **Odpovedanie na otázky** znamená schopnosť modelu odpovedať na konkrétnu otázku. Model dostáva ako vstup textový úsek a otázku a musí poskytnúť miesto v texte, kde je odpoveď obsiahnutá (alebo niekedy vygenerovať odpoveď).
* **Generovanie textu** je schopnosť modelu vytvárať nový text. Dá sa to považovať za klasifikačnú úlohu, ktorá predpovedá ďalší znak/slovo na základe nejakej *textovej výzvy*. Pokročilé modely generovania textu, ako GPT-3, dokážu riešiť aj iné úlohy NLP, napríklad klasifikáciu pomocou techniky nazývanej [prompt programming](https://towardsdatascience.com/software-3-0-how-prompting-will-change-the-rules-of-the-game-a982fbfe1e0) alebo [prompt engineering](https://medium.com/swlh/openai-gpt-3-and-prompt-engineering-dcdc2c5fcd29)
* **Zhrnutie textu** je technika, keď chceme, aby počítač „prečítal“ dlhý text a zhrnul ho do niekoľkých viet.
* **Strojový preklad** možno považovať za kombináciu pochopenia textu v jednom jazyku a generovania textu v inom jazyku.
Spočiatku sa väčšina úloh NLP riešila pomocou tradičných metód, ako sú gramatiky. Napríklad pri strojovom preklade sa používali analyzátory na transformáciu pôvodnej vety na syntaktický strom, potom sa extrahovali vyššie úrovne sémantických štruktúr na reprezentáciu významu vety a na základe tohto významu a gramatiky cieľového jazyka sa generoval výsledok. Dnes sa mnohé úlohy NLP efektívnejšie riešia pomocou neurónových sietí.
Spočiatku sa väčšina úloh NLP riešila použitím tradičných metód, ako sú gramatiky. Napríklad pri strojovom preklade sa používali parsery na transformáciu vety na syntaktický strom, potom sa extrahovali vyššie úrovne sémantických štruktúr na reprezentáciu významu vety a na základe tohto významu a gramatiky cieľového jazyka sa generoval výsledok. Dnes sa veľa úloh NLP efektívnejšie rieši pomocou neurónových sietí.
> Mnohé klasické metódy NLP sú implementované v Python knižnici [Natural Language Processing Toolkit (NLTK)](https://www.nltk.org). Online je dostupná skvelá [NLTK kniha](https://www.nltk.org/book/), ktorá pokrýva, ako môžu byť rôzne úlohy NLP riešené pomocou NLTK.
> Mnohé klasické metódy NLP sú implementované v Python knižnici [Natural Language Processing Toolkit (NLTK)](https://www.nltk.org). K dispozícii je výborná [NLTK kniha](https://www.nltk.org/book/), ktorá pokrýva, ako rôzne úlohy NLP riešiť s využitím NLTK.
V našom kurze sa budeme prevažne zameriavať na používanie neurónových sietí pre NLP a NLTK použijeme tam, kde to bude potrebné.
V našom kurze sa budeme predovšetkým venovať využitiu neurónových sietí pre NLP a NLTK využijeme tam, kde bude potrebné.
Už sme sa naučili používať neurónové siete na prácu s tabuľkovými dátami a obrázkami. Hlavný rozdiel medzi týmito typmi dát a textom je, že text je sekvencia s variabilnou dĺžkou, zatiaľ čo veľkosť vstupu v prípade obrázkov je známa vopred. Zatiaľ čo konvolučné siete dokážu extrahovať vzory z vstupných dát, vzory v texte sú zložitejšie. Napríklad, negácia môže byť oddelená od subjektu ľubovoľným počtom slov (napr. *Nemám rád pomaranče* vs. *Nemám rád tie veľké farebné chutné pomaranče*), a to by stále malo byť interpretované ako jeden vzor. Preto na spracovanie jazyka potrebujeme zaviesť nové typy neurónových sietí, ako sú *rekurentné siete* a *transformery*.
Už sme sa učili používať neurónové siete na spracovanie tabuľkových údajov a obrázkov. Hlavný rozdiel medzi týmito typmi dát a textom je, že text je sekvencia premennej dĺžky, zatiaľ čo veľkosť vstupu v prípade obrázkov je vopred známa. Kým konvolučné siete dokážu extrahovať vzory zo vstupných dát, vzory v texte sú zložitejšie. Napríklad záporka môže byť vzdialená od podmetu o ľubovoľný počet slov (napr. *Nemám rád pomaranče* vs. *Nemám rád tie veľké farebné chutné pomaranče*) a stále by to malo byť interpretované ako jeden vzor. Preto na spracovanie jazyka potrebujeme zaviesť nové typy neurónových sietí, ako sú *rekurentné siete* a *transformery*.
## Inštalácia knižníc
@ -28,7 +28,7 @@ Ak používate lokálnu inštaláciu Pythonu na spustenie tohto kurzu, možno bu
**Pre PyTorch**
```bash
pip install -r requirements-torch.txt
pip install -r requirements-pytorch.txt
```
**Pre TensorFlow**
```bash
@ -40,12 +40,12 @@ pip install -r requirements-tf.txt
## Upozornenie na GPU
V tejto sekcii budeme v niektorých príkladoch trénovať pomerne veľké modely.
* **Používajte počítač s podporou GPU**: Odporúča sa spúšťať vaše notebooky na počítači s podporou GPU, aby sa skrátili čakacie doby pri práci s veľkými modelmi.
* **Obmedzenia pamäte GPU**: Používanie GPU môže viesť k situáciám, keď vám dôjde pamäť GPU, najmä pri trénovaní veľkých modelov.
* **Spotreba pamäte GPU**: Množstvo pamäte GPU spotrebovanej počas trénovania závisí od rôznych faktorov, vrátane veľkosti minibatchu.
* **Minimalizujte veľkosť minibatchu**: Ak narazíte na problémy s pamäťou GPU, zvážte zníženie veľkosti minibatchu vo vašom kóde ako možné riešenie.
* **Uvoľnenie pamäte GPU v TensorFlow**: Staršie verzie TensorFlow nemusia správne uvoľniť pamäť GPU pri trénovaní viacerých modelov v jednom Python kerneli. Na efektívne riadenie využitia pamäte GPU môžete nakonfigurovať TensorFlow tak, aby alokoval pamäť GPU iba podľa potreby.
* **Zahrnutie kódu**: Ak chcete nastaviť TensorFlow na dynamické alokovanie pamäte GPU, zahrňte nasledujúci kód do vašich notebookov:
* **Používajte počítač s GPU**: Odporúča sa spúšťať notebooky na počítači s GPU, aby sa skrátili čakacie doby pri práci s veľkými modelmi.
* **Obmedzenia pamäte GPU**: Pri práci na GPU môže nastať situácia vyčerpania pamäte GPU, najmä pri trénovaní veľkých modelov.
* **Spotreba pamäte GPU**: Množstvo spotrebovanej pamäte GPU pri tréningu závisí od rôznych faktorov, vrátane veľkosti minibatchu.
* **Minimalizujte veľkosť minibatchu**: Ak narazíte na problém s pamäťou GPU, zvážte zníženie veľkosti minibatchu vo vašom kóde ako možné riešenie.
* **Uvoľňovanie pamäte GPU v TensorFlow**: Staršie verzie TensorFlow nemusia správne uvoľňovať pamäť GPU pri tréningu viacerých modelov v jednom Python kerneli. Na efektívne riadenie spotreby pamäte GPU môžete nakonfigurovať TensorFlow tak, aby alokoval pamäť GPU len podľa potreby.
* **Zahrnutie kódu**: Na nastavenie TensorFlow tak, aby zväčšoval alokáciu pamäte GPU len podľa potreby, vložte do svojich notebookov nasledujúci kód:
```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)
```
Ak máte záujem o učenie sa NLP z pohľadu klasického ML, navštívte [tento súbor lekcií](https://github.com/microsoft/ML-For-Beginners/tree/main/6-NLP)
Ak vás zaujíma učenie NLP z klasickej perspektívy strojového učenia, navštívte [túto sadu lekcií](https://github.com/microsoft/ML-For-Beginners/tree/main/6-NLP)
## V tejto sekcii
V tejto sekcii sa naučíme:
* [Reprezentácia textu ako tenzorov](13-TextRep/README.md)
* [Vstupné vektory slov](14-Emdeddings/README.md)
* [Vkladanie slov](14-Emdeddings/README.md)
* [Modelovanie jazyka](15-LanguageModeling/README.md)
* [Rekurentné neurónové siete](16-RNN/README.md)
* [Generatívne siete](17-GenerativeNetworks/README.md)
* [Transformery](18-Transformers/README.md)
**Upozornenie**:
Tento dokument bol preložený pomocou služby AI prekladu [Co-op Translator](https://github.com/Azure/co-op-translator). Aj keď sa snažíme o presnosť, prosím, berte na vedomie, že automatizované preklady môžu obsahovať chyby alebo nepresnosti. Pôvodný dokument v jeho rodnom jazyku by mal byť považovaný za autoritatívny zdroj. Pre kritické informácie sa odporúča profesionálny ľudský preklad. Nie sme zodpovední za akékoľvek nedorozumenia alebo nesprávne interpretácie vyplývajúce z použitia tohto prekladu.
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Vyhlásenie o zodpovednosti**:
Tento dokument bol preložený pomocou AI prekladateľskej služby [Co-op Translator](https://github.com/Azure/co-op-translator). Hoci sa snažíme o presnosť, vezmite prosím na vedomie, že automatické preklady môžu obsahovať chyby alebo nepresnosti. Pôvodný dokument v jeho natívnom jazyku by mal byť považovaný za autoritatívny zdroj. Pre kritické informácie sa odporúča profesionálny ľudský preklad. Nie sme zodpovední za žiadne nedorozumenia alebo nesprávne interpretácie vyplývajúce z použitia tohto prekladu.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->