From 69cc3da18cbdcda7248c69ea04a4868c83befdc7 Mon Sep 17 00:00:00 2001 From: "localizeflow[bot]" Date: Wed, 8 Jul 2026 18:24:47 +0000 Subject: [PATCH] chore(i18n): sync translations with latest source changes (chunk 1/1, 18 changes) --- translations/et/.co-op-translator.json | 37 +- translations/et/CONTRIBUTING.md | 29 + translations/et/examples/README.md | 68 +- .../et/lessons/0-course-setup/how-to-run.md | 57 +- .../TransferLearningTF.ipynb | 137 +- translations/et/lessons/5-NLP/README.md | 80 +- translations/pcm/.co-op-translator.json | 37 +- translations/pcm/CONTRIBUTING.md | 29 + translations/pcm/examples/README.md | 40 +- .../pcm/lessons/0-course-setup/how-to-run.md | 56 +- .../TransferLearningTF.ipynb | 136 +- translations/pcm/lessons/5-NLP/README.md | 56 +- translations/te/.co-op-translator.json | 37 +- translations/te/CONTRIBUTING.md | 29 + translations/te/examples/README.md | 68 +- .../te/lessons/0-course-setup/how-to-run.md | 56 +- .../TransferLearningTF.ipynb | 2997 +++++++++-------- translations/te/lessons/5-NLP/README.md | 70 +- 18 files changed, 2098 insertions(+), 1921 deletions(-) create mode 100644 translations/et/CONTRIBUTING.md create mode 100644 translations/pcm/CONTRIBUTING.md create mode 100644 translations/te/CONTRIBUTING.md diff --git a/translations/et/.co-op-translator.json b/translations/et/.co-op-translator.json index 0a792269..12f3d41d 100644 --- a/translations/et/.co-op-translator.json +++ b/translations/et/.co-op-translator.json @@ -5,6 +5,12 @@ "source_file": "AGENTS.md", "language_code": "et" }, + "CONTRIBUTING.md": { + "original_hash": "c6fd7e781b67111a90abd166d0ce4aa0", + "translation_date": "2026-07-08T18:24:27+00:00", + "source_file": "CONTRIBUTING.md", + "language_code": "et" + }, "README.md": { "original_hash": "12c8eb6bf0867d2f1c32daf613ac5b8b", "translation_date": "2026-04-06T16:03:39+00:00", @@ -17,6 +23,19 @@ "source_file": "SECURITY.md", "language_code": "et" }, + "__translation_failures__": { + "lessons/sketchnotes/LICENSE.md": { + "original_hash": "45ab63a2cd8f5faef6c9b150618837a4", + "source_file": "lessons/sketchnotes/LICENSE.md", + "language_code": "et", + "failure_date": "2026-07-08T18:16:00+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-10-11T11:52:06+00:00", @@ -54,8 +73,8 @@ "language_code": "et" }, "examples/README.md": { - "original_hash": "0d1babfdcbeb46525f2db3fbaaa54cd7", - "translation_date": "2025-10-11T11:17:05+00:00", + "original_hash": "7883d52c2e2a221e0b07a7b112a149b9", + "translation_date": "2026-07-08T18:10:56+00:00", "source_file": "examples/README.md", "language_code": "et" }, @@ -66,8 +85,8 @@ "language_code": "et" }, "lessons/0-course-setup/how-to-run.md": { - "original_hash": "a4717bd9103b9f6cd84d534b83534689", - "translation_date": "2026-01-16T07:25:31+00:00", + "original_hash": "7ad8c7d8604c53649b3d4d1e2f3a6fa1", + "translation_date": "2026-07-08T18:11:19+00:00", "source_file": "lessons/0-course-setup/how-to-run.md", "language_code": "et" }, @@ -191,6 +210,12 @@ "source_file": "lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md", "language_code": "et" }, + "lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb": { + "original_hash": "99b816b6a4957ef4100cee4c4221dff9", + "translation_date": "2026-07-08T18:07:36+00:00", + "source_file": "lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb", + "language_code": "et" + }, "lessons/4-ComputerVision/08-TransferLearning/lab/README.md": { "original_hash": "7765935c35fcee69b9fe2d0cfd6963e2", "translation_date": "2025-10-11T11:21:56+00:00", @@ -330,8 +355,8 @@ "language_code": "et" }, "lessons/5-NLP/README.md": { - "original_hash": "8ef02a9318257ea140ed3ed74442096d", - "translation_date": "2025-10-11T11:38:36+00:00", + "original_hash": "038df6f1a73e49f6430740da083bfd6d", + "translation_date": "2026-07-08T18:11:50+00:00", "source_file": "lessons/5-NLP/README.md", "language_code": "et" }, diff --git a/translations/et/CONTRIBUTING.md b/translations/et/CONTRIBUTING.md new file mode 100644 index 00000000..3dfe77dc --- /dev/null +++ b/translations/et/CONTRIBUTING.md @@ -0,0 +1,29 @@ +# Panustamine AI-Algajatele + +Täname teid huvi eest panustada AI-Algajatele! Ootame tõlkeid, õppetükkide parandusi ja vorminduse korrektsioone. + +## Microsofti Kaastööleping (CLA) + +See projekt ootab panuseid ja ettepanekuid. Enamik panustest eeldab, et nõustute Kaastöölepinguga (CLA), mis kinnitab, et teil on õigus ja te tegelikult annate meile õiguse kasutada teie panust. Täpsemate üksikasjade jaoks külastage [https://cla.microsoft.com](https://cla.microsoft.com). + +Kui esitate pull-päringu, siis CLA-bot määrab automaatselt, kas peate esitama CLA ja märgistab pull-päringu vastavalt (näiteks sildi või kommentaariga). Lihtsalt järgige botti antud juhiseid. Seda tuleb teha vaid korra kõigis meie CLA-d kasutavates hoidlates. + +## Kuidas panustada + +### 1. Trükkimisvigade / koodiveade parandamine +Kui leiaksite trükkvea või vea mõnes Jupyteri märkmikus või õppetüki markdown-failis: +1. Tlooge hoidla koopia (fork). +2. Parandage trükk- või katkine link. +3. Esitage Pull Request, millel on selge paranduse kirjeldus. + +### 2. Tõlgete esitamine +Ootame õppetükkide tõlkeid teistesse keeltesse! Palun pange tõlked `translations/` kausta, kasutades seal olemasolevaid kaustade nimesid (näiteks `translations/es/`, `translations/pt-BR/`, `translations/zh-CN/`). + +Täpsemate üksikasjade jaoks vaadake [etc/CONTRIBUTING.md](etc/CONTRIBUTING.md). + +--- + + +**Lahtiütlus**: +See dokument on tõlgitud kasutades AI tõlketeenust [Co-op Translator](https://github.com/Azure/co-op-translator). Kuigi me püüdleme täpsuse poole, palun pange tähele, et automatiseeritud tõlgetes võib esineda vigu või ebatäpsusi. Originaaldokument selle emakeeles tuleks pidada autoriteetseks allikaks. Olulise teabe puhul soovitatakse kasutada professionaalset inimtõlget. Me ei vastuta selle tõlkega seotud eksimustest või valesti mõistmistest. + \ No newline at end of file diff --git a/translations/et/examples/README.md b/translations/et/examples/README.md index 96d774f7..0355ab5d 100644 --- a/translations/et/examples/README.md +++ b/translations/et/examples/README.md @@ -1,85 +1,87 @@ -# Algajatele sobivad tehisintellekti näited +# Algajatele Sobivad Tehisintellekti Näited -Tere tulemast! See kataloog sisaldab lihtsaid ja iseseisvaid näiteid, mis aitavad sul alustada tehisintellekti ja masinõppega. Iga näide on loodud algajasõbralikuks, sisaldades üksikasjalikke kommentaare ja samm-sammulisi selgitusi. +Tere tulemast! See kataloog sisaldab lihtsaid üksikuid näiteid, mis aitavad sul alustada tehisintellekti ja masinõppega. Iga näide on loodud algajasõbralikuna koos põhjalike kommentaaride ja samm-sammuliste selgitustega. -## 📚 Näidete ülevaade +## 📚 Näidete Ülevaade -| Näide | Kirjeldus | Raskusaste | Eelteadmised | -|-------|-----------|------------|--------------| -| [Tere, AI maailm](../../../examples/01-hello-ai-world.py) | Sinu esimene tehisintellekti programm - lihtne mustrituvastus | ⭐ Algaja | Pythoni algteadmised | -| [Lihtne närvivõrk](../../../examples/02-simple-neural-network.py) | Loo närvivõrk nullist | ⭐⭐ Algaja+ | Python, põhiteadmised matemaatikast | -| [Pildiklassifitseerija](./03-image-classifier.ipynb) | Klassifitseeri pilte eelnevalt treenitud mudeliga | ⭐⭐ Algaja+ | Python, numpy | -| [Teksti sentiment](../../../examples/04-text-sentiment.py) | Analüüsi teksti sentimenti (positiivne/negatiivne) | ⭐⭐ Algaja+ | Python | +| Näide | Kirjeldus | Raskusaste | Nõuded | +|---------|-------------|------------|---------------| +| [Tere, AI maailm](https://github.com/microsoft/AI-For-Beginners/blob/main/examples/01-hello-ai-world.py) | Sinu esimene tehisintellekti programm - lihtne mustrituvastus | ⭐ Algaja | Pythoni põhiteadmised | +| [Lihtne närvivõrk](https://github.com/microsoft/AI-For-Beginners/blob/main/examples/02-simple-neural-network.py) | Ehita närvivõrk nullist | ⭐⭐ Algaja+ | Python, põhiline matemaatika | +| [Pildiklassifitseerija](https://github.com/microsoft/AI-For-Beginners/blob/main/examples/03-image-classifier.ipynb) | Klassifitseeri pilte eelõpetatud mudeliga | ⭐⭐ Algaja+ | Python, numpy | +| [Teksti meeleolu](https://github.com/microsoft/AI-For-Beginners/blob/main/examples/04-text-sentiment.py) | Analüüsi teksti meelolu (positiivne/negatiivne) | ⭐⭐ Algaja+ | Python | ## 🚀 Alustamine -### Eeltingimused +### Nõudmised -Veendu, et sul on Python installitud (soovitatav versioon 3.8 või uuem). Paigalda vajalikud paketid: +Veendu, et sinul on Python installitud (soovitatav 3.8 või uuem). Paigalda vajalikud paketid: ```bash -# For Python scripts +# Pythoni skriptide jaoks pip install numpy -# For Jupyter notebooks (image classifier) +# Jupyteri märkmike jaoks (pildiklassifikaator) pip install jupyter numpy pillow tensorflow ``` -Või kasuta põhikursuse conda keskkonda: +Või kasuta conda keskkonda põhikursusest: ```bash conda env create --name ai4beg --file ../environment.yml conda activate ai4beg ``` -### Näidete käivitamine +### Näidete Käivitamine **Python skriptide (.py failid) jaoks:** ```bash python 01-hello-ai-world.py ``` -**Jupyteri märkmike (.ipynb failid) jaoks:** +**Jupyter märkmeraamatute (.ipynb failid) jaoks:** ```bash jupyter notebook 03-image-classifier.ipynb ``` -## 📖 Õppimise teekond +## 📖 Õppimise Tee Soovitame järgida näiteid järjekorras: -1. **Alusta "Tere, AI maailm" näitest** - Õpi mustrituvastuse põhitõdesid +1. **Alusta "Tere, AI maailm"-ga** - Õpi mustrituvastuse põhialuseid 2. **Ehita lihtne närvivõrk** - Mõista, kuidas närvivõrgud töötavad -3. **Proovi pildiklassifitseerijat** - Näe tehisintellekti töös päris piltidega -4. **Analüüsi teksti sentimenti** - Uuri loomuliku keele töötlemist +3. **Proovi pildiklassifitseerijat** - Vaata tehisintellekti toimimas pärispiltidega +4. **Analüüsi teksti meeleolu** - Uuri loomuliku keele töötlust -## 💡 Näpunäiteid algajatele +## 💡 Nõuanded Algajatele -- **Loe hoolikalt koodikommentaare** - Need selgitavad, mida iga rida teeb +- **Loe koodi kommentaare hoolikalt** - Need selgitavad, mida iga rida teeb - **Katseta!** - Proovi muuta väärtusi ja vaata, mis juhtub - **Ära muretse, kui kõike kohe ei mõista** - Õppimine võtab aega -- **Küsi küsimusi** - Kasuta [arutelufoorumit](https://github.com/microsoft/AI-For-Beginners/discussions) +- **Esita küsimusi** - Kasuta [Arutelufoorumit](https://github.com/microsoft/AI-For-Beginners/discussions) -## 🔗 Järgmised sammud +## 🔗 Järgmised Sammud -Pärast nende näidete läbimist avasta kogu õppekava: +Kui oled need näited lõpetanud, uurige kogu õppekava: - [Sissejuhatus tehisintellekti](../lessons/1-Intro/README.md) - [Närvivõrgud](../lessons/3-NeuralNetworks/README.md) - [Arvutinägemine](../lessons/4-ComputerVision/README.md) -- [Loomuliku keele töötlemine](../lessons/5-NLP/README.md) +- [Loodusliku Keele Töötlus](../lessons/5-NLP/README.md) -## 🤝 Kaasaaitamine +## 🤝 Panustamine -Leidsid need näited kasulikud? Aita meil neid paremaks muuta: -- Teata probleemidest või tee parandusettepanekuid -- Lisa rohkem algajatele mõeldud näiteid +Kas leidsid need näited kasulikuks? Aita meil neid parandada: +- Teata probleemidest või tee ettepanekuid +- Lisa rohkem näiteid algajatele - Paranda dokumentatsiooni ja kommentaare --- -*Pea meeles: Iga ekspert on kunagi olnud algaja. Head õppimist! 🎓* +*Pea meeles: iga ekspert oli kord algaja. Edukat õppimist! 🎓* --- -**Lahtiütlus**: -See dokument on tõlgitud, kasutades AI tõlketeenust [Co-op Translator](https://github.com/Azure/co-op-translator). Kuigi püüame tagada täpsust, palun arvestage, et automaatsed tõlked võivad sisaldada vigu või ebatäpsusi. Algne dokument selle algses keeles tuleks lugeda autoriteetseks allikaks. Olulise teabe puhul on soovitatav kasutada professionaalset inimtõlget. Me ei vastuta selle tõlke kasutamisest tulenevate arusaamatuste või valede tõlgenduste eest. \ No newline at end of file + +**Lahtiütlus**: +See dokument on tõlgitud kasutades AI tõlketeenust [Co-op Translator](https://github.com/Azure/co-op-translator). Kuigi me püüdleme täpsuse poole, palun pange tähele, et automatiseeritud tõlgetes võib esineda vigu või ebatäpsusi. Originaaldokument selle emakeeles tuleks pidada autoriteetseks allikaks. Olulise teabe puhul soovitatakse kasutada professionaalset inimtõlget. Me ei vastuta selle tõlkega seotud eksimustest või valesti mõistmistest. + \ No newline at end of file diff --git a/translations/et/lessons/0-course-setup/how-to-run.md b/translations/et/lessons/0-course-setup/how-to-run.md index 412bf8d9..4669e3dd 100644 --- a/translations/et/lessons/0-course-setup/how-to-run.md +++ b/translations/et/lessons/0-course-setup/how-to-run.md @@ -1,12 +1,12 @@ -# Kuidas Koodi Käivitada +# Kuidas koodi käivitada -See õppekava sisaldab palju täidetavaid näiteid ja töötoad, mida soovite jooksutada. Selleks peate saama käivitada Python koodi Jupyter märkmikes, mis on selle õppekava osana esitatud. Koodi käivitamiseks on teil mitu võimalust: +See õppekava sisaldab palju käivitatavaid näiteid ja laboreid, mida soovite käivitada. Selleks peate suutma käivitada Python-koodi Jupyter Notebook'ides, mis on selle õppekava osana saadaval. Koodi käivitamiseks on teil mitu võimalust: -## Käivita lokaalselt oma arvutis +## Käivitage lokaalselt oma arvutis -Koodi käivitamiseks lokaalselt oma arvutis on vajalik Python'i paigaldus. Üks soovitus on installida **[miniconda](https://conda.io/en/latest/miniconda.html)** – see on üsna kerge paigaldus, mis toetab `conda` pakihaldurit erinevate Python'i **virtuaalsete keskkondade** jaoks. +Koodi käivitamiseks lokaalselt oma arvutis on vaja Python'i installatsiooni. Soovitame installida **[miniconda](https://conda.io/en/latest/miniconda.html)** – see on suhteliselt kerge installatsioon, mis toetab `conda` pakihaldurit erinevate Python'i **virtuaalsete keskkondade** jaoks. -Pärast miniconda paigaldamist kloonige hoidla ja looge selle kursuse jaoks virtuaalne keskkond: +Pärast miniconda installimist kloonige hoidla ja looge selle kursuse jaoks kasutatav virtuaalne keskkond: ```bash git clone http://github.com/microsoft/ai-for-beginners @@ -15,58 +15,57 @@ conda env create --name ai4beg --file .devcontainer/environment.yml conda activate ai4beg ``` -### Kasutades Visual Studio Code koos Python laiendiga +### Visual Studio Code kasutamine Python'i laiendusega -Seda õppekava on kõige parem kasutada, kui avate selle [Visual Studio Code’is](http://code.visualstudio.com/?WT.mc_id=academic-77998-cacaste) koos [Python laiendiga](https://marketplace.visualstudio.com/items?itemName=ms-python.python&WT.mc_id=academic-77998-cacaste). +Seda õppekava on kõige parem kasutada avades seda [Visual Studio Code'is](http://code.visualstudio.com/?WT.mc_id=academic-77998-cacaste) koos [Python'i laiendusega](https://marketplace.visualstudio.com/items?itemName=ms-python.python&WT.mc_id=academic-77998-cacaste). -> **Märkus**: Kui kloonite ja avate kausta VS Code’is, soovitab see automaatselt paigaldada Python laiendused. Samuti peate paigaldama miniconda nagu eespool kirjeldatud. +> **Märkus**: Kui olete hoidla klooninud ja avanud kataloogi VS Code'is, soovitatakse teil automaatselt Python'i laiendusi installida. Samuti peate installima miniconda vastavalt ülaltoodule. -> **Märkus**: Kui VS Code soovitab teil hoidlale konteineris uuesti ligi pääseda, peaksite selle keelduma, et kasutada lokaalset Python'i paigaldust. +> **Märkus**: Kui VS Code soovitab teil hoidla konteineris uuesti avada, peaksite selle pakkumise tagasi lükkama, et kasutada kohalikku Python'i installatsiooni. -### Kasutades Jupyterit brauseris +### Jupyter'i kasutamine brauseris -Võite kasutada ka Jupyter keskkonda brauserist oma arvutis. Nii klassikaline Jupyter kui ka JupyterHub pakuvad mugavat arenduskeskkonda automaatse täienduse, koodi esiletõstmise jms funktsioonidega. +Samuti saate kasutada Jupyter'i keskkonda oma arvuti brauseris. Nii klassikaline Jupyter kui ka JupyterHub pakuvad mugavat arendusvõimalust koos automaattäienduse, koodivärvimise jm-ga. -Jupyterit käivitamiseks lokaalselt minge kursuse kataloogi ning käivitage: +Jupyter'i kohalikuks käivitamiseks minge kursuse kataloogi ja käivitage: ```bash jupyter notebook ``` - või +või ```bash jupyterhub ``` - -Seejärel saate minna mis tahes `.ipynb` faili juurde, avada selle ja alustada tööd. +Seejärel saate navigeerida ükskõik millise `.ipynb` faili juurde, avada selle ja alustada tööd. ### Käivitamine konteineris -Üks alternatiiv Python'i paigaldamisele on koodi käivitamine konteineris. Kuna meie hoidla sisaldab spetsiaalset `.devcontainer` kausta, mis juhendab konteineri ehitamist selle hoidlaga, pakub VS Code võimalust hoidlale konteineris uuesti ligi pääseda. Selleks on vajalik Docker’i installatsioon ja see on ka keerulisem, seega soovitame seda rohkem kogenud kasutajatele. +Üks alternatiiv Python'i installatsioonile on koodi käivitamine konteineris. Kuna meie hoidla sisaldab spetsiaalset `.devcontainer` kausta, mis juhendab konteineri ehitamist selle hoidla jaoks, pakub VS Code võimalust koodi konteineris uuesti avada. Selleks on vaja Docker'i installatsiooni ja see on keerukam, seega soovitame seda rohkem kogenud kasutajatele. -## Käivitamine pilves +## Pilves käivitamine -Kui te ei soovi Pythonit lokaalselt paigaldada, kuid teil on ligipääs mõnele pilveteenusele, on hea alternatiiv koodi käivitamine pilvest. Seda saab teha mitmel viisil: +Kui te ei soovi Python'i kohapeal installida ja teil on ligipääs mõnele pilveressursile, siis hea alternatiiv on koodi käivitamine pilves. Selleks on mitmeid võimalusi: -* Kasutades **[GitHub Codespaces](https://github.com/features/codespaces)**, mis on teile GitHubis loodav virtuaalne keskkond, mida pääseb ligi VS Code’i brauseri kaudu. Kui teil on Codespaces’i ligipääs, saate lihtsalt hoidla lehel vajutada nuppu **Code**, alustada codespace’i ning hakata kohe koodi jooksutama. -* Kasutades **[Binderit](https://mybinder.org/v2/gh/microsoft/ai-for-beginners/HEAD)**. [Binder](https://mybinder.org) pakub tasuta arvutusressursse pilves, mis võimaldab teil GitHubi koodi mugavalt testida. Esilehel on nupp, mis avab hoidla Binderis – see viib teid rapidamente Binderi lehele, mis ehitab taustal konteineri ja käivitab teie jaoks sujuvalt Jupyter veebiliidese. +* Kasutades **[GitHub Codespaces](https://github.com/features/codespaces)**, mis on teie jaoks GitHubis loodud virtuaalne keskkond, mida pääseb ligi VS Code'i brauseriliidese kaudu. Kui teil on Codespaces'i ligipääs, saate lihtsalt vajutada hoidla **Code** nuppu, käivitada codespace'i ja hakata kohe kasutama. +* Kasutades **[Binderit](https://mybinder.org/v2/gh/microsoft/ai-for-beginners/HEAD)**. [Binder](https://mybinder.org) pakub pilves tasuta arvutusressursse, et saaksite GitHubis olevat koodi testida. Esilehel on nupp, mille abil saate hoidla Binderisse avada – see viib teid kiiresti Binder'i saidile, mis ehitab aluseks oleva konteineri ja käivitab probleemideta Jupyter'i veebiliidese. -> **Märkus**: Kuritarvituste vältimiseks on Binderi ligipääs mõnele veebiallikale piiratud. See võib takistada mõnel koodil toimimast, mis alla laadib mudeleid ja/või andmestasid avalikust internetist. Võite vajada mõnda lahendust nende piirangute vältimiseks. Samuti on Binderi pakutavad arvutusressursid üsna piiratud, mistõttu treeningud võivad olla aeglased, eriti hilisemates keerulisemates õppetundides. +> **Märkus**: Kuritarvituste vältimiseks on Bindril juurdepääs mõnedele veebivahenditele piiratud. See võib takistada mõnda koodi töötamist, mis laadib mudeleid ja/või andmekogumeid avalikust internetist. Võib tekkida vajadus otsida lahendusi. Samuti on Binderi pakutavad arvutusressursid üsna piiratud, seega võib treenimine olla aeglane, eriti hilisemates, keerukamates tundides. -## Käivitamine pilves koos GPU-toega +## Pilves käivitamine GPU-ga -Mõned õppetunnid selles õppekavas kasutaksid oluliselt GPU-d, mis muudab mudelite treenimise palju kiiremaks. GPU toe olemasolu on eriti kasulik. Mõned võimalused: +Mõned hilisemad selle õppekava tunnid võtaksid GPU toe suurepäraselt vastu. Mudelite treenimine võib muidu olla valusalt aeglane. On mitu võimalust, mida võite kasutada, eriti kui teil on juurdepääs pilvele kas [Azure for Students](https://azure.microsoft.com/free/students/?WT.mc_id=academic-77998-cacaste) kaudu või oma asutuse kaudu: -* Loo [Data Science Virtual Machine](https://docs.microsoft.com/learn/modules/intro-to-azure-data-science-virtual-machine/?WT.mc_id=academic-77998-cacaste) ja ühenda sellega Jupyteri kaudu. Saate kloonida hoidla otse masinale ning alustada õppimist. NC-seeria VM-id toetavad GPU-d. +* Looge [Data Science virtuaalmasin](https://docs.microsoft.com/learn/modules/intro-to-azure-data-science-virtual-machine/?WT.mc_id=academic-77998-cacaste) ja ühenduge sellega Jupyteri kaudu. Siis saate kloonida hoidla otse masinale ja alustada õppimist. NC-seeria VM-id toetavad GPU-d. -> **Märkus**: Mõned tellimused, sh Azure for Students, ei paku vaikimisi GPU tuge. Võib-olla peate esitama tehnilise toe taotluse täiendavate GPU tuumade saamiseks. +> **Märkus**: Mõned tellimused, sh Azure for Students, ei paku GPU-tuge automaatselt. Võib vaja minna tehnilise toe taotlust täiendavate GPU südamike saamiseks. -* Loo [Azure Machine Learning Workspace](https://azure.microsoft.com/services/machine-learning/?WT.mc_id=academic-77998-cacaste) ja kasuta seal Jupyter märkmiku funktsiooni. [See video](https://azure-for-academics.github.io/quickstart/azureml-papers/) näitab, kuidas kloonida hoidla Azure ML märkmikku ja seda kasutada. +* Looge [Azure Machine Learning Workspace](https://azure.microsoft.com/services/machine-learning/?WT.mc_id=academic-77998-cacaste) ja seejärel kasutage seal Notebook'i funktsiooni. [See video](https://azure-for-academics.github.io/quickstart/azureml-papers/) näitab, kuidas kloonida hoidla Azure ML noteboodi ja hakata seda kasutama. -Võite kasutada ka Google Colabit, mis pakub mõningast tasuta GPU tuge, ning üles laadida sinna Jupyteri märkmikud, mida sealt ükshaaval käivitada. +Võite kasutada ka Google Colabit, mis pakub teatud tasuta GPU tuge, ja laadida sinna üles Jupyter Notebook'e, et neid ükshaaval käivitada. --- -**Vastutusest loobumine**: -See dokument on tõlgitud kasutades AI tõlke teenust [Co-op Translator](https://github.com/Azure/co-op-translator). Kuigi püüame tagada täpsust, palun arvestage, et automaatsed tõlked võivad sisaldada vigu või ebatäpsusi. Algne dokument selle emakeeles tuleks pidada autoriteetseks allikaks. Olulise info puhul soovitatakse kasutada professionaalset inimtõlget. Me ei vastuta selle tõlke kasutamisest tulenevate arusaamatuste ega valesti mõistmiste eest. +**Lahtiütlus**: +See dokument on tõlgitud kasutades AI tõlketeenust [Co-op Translator](https://github.com/Azure/co-op-translator). Kuigi me püüdleme täpsuse poole, palun pange tähele, et automatiseeritud tõlgetes võib esineda vigu või ebatäpsusi. Originaaldokument selle emakeeles tuleks pidada autoriteetseks allikaks. Olulise teabe puhul soovitatakse kasutada professionaalset inimtõlget. Me ei vastuta selle tõlkega seotud eksimustest või valesti mõistmistest. \ No newline at end of file diff --git a/translations/et/lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb b/translations/et/lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb index 5d971797..84b271b2 100644 --- a/translations/et/lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb +++ b/translations/et/lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb @@ -4,11 +4,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Eeltreenitud mudelid ja ülekandeõpe\n", + "# Eelkoolitatud mudelid ja teadmiste ülekandmine\n", "\n", - "CNN-ide treenimine võib võtta palju aega ning selleks on vaja suurt hulka andmeid. Kuid suurem osa ajast kulub sellele, et õppida parimaid madala taseme filtreid, mida võrk kasutab mustrite eraldamiseks piltidelt. Tekib loomulik küsimus – kas me saame kasutada ühel andmestikul treenitud närvivõrku ja kohandada seda erinevate piltide klassifitseerimiseks ilma täieliku treeningprotsessita?\n", + "Konvolutsioonvõrke (CNN) koolitada võib võtta palju aega ning selle ülesande jaoks on vaja palju andmeid. Kuid suure osa sellest ajast kulutatakse sellele, et õppida parimaid madala taseme filtreid, mida võrk kasutab piltidelt mustrite väljatõmbamiseks. Tõuseb loomulik küsimus – kas me saame kasutada ühel andmestikul koolitatud närvivõrku ja kohandada seda erinevate piltide klassifitseerimiseks ilma täieliku koolitusprotsessita?\n", "\n", - "Seda lähenemist nimetatakse **ülekandeõppeks**, kuna me kanname osa teadmistest ühest närvivõrgu mudelist teise. Ülekandeõppes alustame tavaliselt eeltreenitud mudeliga, mis on treenitud mõnel suurel pildianmestikul, näiteks **ImageNet**. Need mudelid suudavad juba hästi eraldada erinevaid omadusi üldistest piltidest ning paljudel juhtudel võib lihtsalt nende eraldatud omaduste peale klassifikaatori ehitamine anda häid tulemusi.\n" + "Seda lähenemist nimetatakse **teadmiste ülekandmiseks** (transfer learning), sest me kanname üle mõningaid teadmisi ühest närvivõrgu mudelist teise. Tavaliselt alustame selleks eelkoolitatud mudelist, mida on juba koolitatud mingi suure pildistandme hulga peal, näiteks **ImageNet**il. Need mudelid suudavad juba hästi väljatõmmata erinevaid omadusi üldistest piltidest, ja paljudel juhtudel piisab heast tulemusest, kui üles ehitada klassifikaator nende väljatõmmatud omaduste põhjal.\n" ] }, { @@ -29,11 +29,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Kasside ja koerte andmekogu\n", + "## Kasside ja koerte andmestik\n", "\n", - "Selles osas lahendame päriselulise probleemi kasside ja koerte piltide klassifitseerimisel. Selleks kasutame [Kaggle kasside ja koerte andmekogu](https://www.kaggle.com/c/dogs-vs-cats), mida saab alla laadida ka [Microsofti lehelt](https://www.microsoft.com/en-us/download/details.aspx?id=54765&WT.mc_id=academic-77998-cacaste).\n", + "Selles üksuses lahendame reaalse elu probleemi, mis käsitleb kasside ja koerte piltide klassifitseerimist. Selleks kasutame [Kaggle kasside ja koerte andmestikku](https://www.kaggle.com/c/dogs-vs-cats), mida saab ka alla laadida [Microsoftist](https://www.microsoft.com/en-us/download/details.aspx?id=54765&WT.mc_id=academic-77998-cacaste).\n", "\n", - "Laadime selle andmekogu alla ja ekstraktime selle `data` kataloogi (see protsess võib võtta veidi aega!):\n" + "Laadime selle andmestiku alla ja pakime selle välja kausta `data` (see protsess võib võtta natuke aega!):\n" ] }, { @@ -64,7 +64,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Kahjuks on andmekogus mõned rikutud pildifailid. Peame kiiresti puhastama, et kontrollida rikutud faile. Selleks, et mitte seda õpetust segada, liikusime andmekogu kontrollimise koodi moodulisse.\n" + "Kahjuks on andmestikus mõned rikutud pildifailid. Peame kiire puhastuse tegemiseks kontrollima rikutud faile. Selleks, et see juhend ei kannataks, viisime andmestiku kontrollikoodi moodulisse.\n" ] }, { @@ -333,13 +333,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Andmete laadimine\n", + "## Andmestiku laadimine\n", "\n", - "Eelnevates näidetes laadisime andmekogumeid, mis on Kerasisse sisse ehitatud. Nüüd hakkame töötama oma andmekogumiga, mille peame laadima pildikataloogist.\n", + "Varasemates näidetes laadisime andmekogusid, mis on Keras sisse ehitatud. Nüüd hakkame tegelema oma andmekoguga, mida tuleb laadida pildikaustast.\n", "\n", - "Tegelikkuses võivad pildikogumite suurused olla üsna suured, mistõttu ei saa eeldada, et kogu andmestik mahuks mällu. Seetõttu esitatakse andmekogumeid tihti **generaatoritena**, mis suudavad tagastada andmeid väikeste partiidena, mis sobivad treenimiseks.\n", + "Reaalses elus võivad pildikogude mahud olla üsna suured ning ei saa eeldada, et kogu andmestik mahub korraga mällu. Seetõttu kujutatakse andmekogusid sageli **generaatoritena**, mis suudavad tagastada andmeid minibatch’idena, mis sobivad treenimiseks.\n", "\n", - "Pildiklassifikatsiooniga tegelemiseks sisaldab Keras spetsiaalset funktsiooni `image_dataset_from_directory`, mis suudab laadida pilte alamkataloogidest, mis vastavad erinevatele klassidele. See funktsioon hoolitseb ka piltide skaleerimise eest ning suudab andmekogumi jagada treening- ja testimisalamhulkadeks:\n" + "Pildiklassifitseerimisega tegelemiseks sisaldab Keras erifunktsiooni `image_dataset_from_directory`, mis suudab laadida pilte alamkaustadest, mis vastavad erinevatele klassidele. See funktsioon hoolitseb ka piltide skaaleerimise eest ning saab jagada andmestiku treening- ja testandmeks:\n" ] }, { @@ -383,9 +383,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Oluline on määrata mõlema kutse jaoks sama `seed` väärtus, kuna see mõjutab piltide jaotust treening- ja testandmestiku vahel.\n", + "On oluline määrata mõlema kutse jaoks sama `seed` väärtus, sest see mõjutab piltide jaotust treening- ja testkomplektide vahel.\n", "\n", - "Andmestik tuvastab automaatselt klasside nimed kataloogidest ja vajadusel saate neile ligi pääseda, kutsudes:\n" + "Andmekogum võtab klassinimed automaatselt kataloogidest ning vajadusel saate neile ligi pääseda, kutsudes:\n" ] }, { @@ -412,7 +412,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Andmekogumid, mille oleme hankinud, saab otse `fit` funktsioonile edastada, et mudelit treenida. Need sisaldavad nii vastavaid pilte kui ka silte, mida saab läbi käia järgmise konstruktsiooni abil:\n" + "Andmekogusid, mida oleme saanud, saab otse edastada funktsioonile `fit`, et mudelit treenida. Need sisaldavad nii vastavaid pilte kui ka silte, mida saab tsüklis töödelda järgmise konstruktsiooni abil:\n" ] }, { @@ -453,7 +453,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "> **Märkus**: Kõik andmekogus olevad pildid on esitatud ujukomapunkti tensoritena vahemikus 0-255. Enne nende edastamist närvivõrgule peame need väärtused skaleerima vahemikku 0-1. Piltide kuvamisel peame tegema sama või teisendama väärtused `int` tüüpi (nagu teeme ülaltoodud koodis), et näidata `matplotlib`-ile, et soovime kuvada algset skaleerimata pilti.\n" + "> **Märkus**: Kõik andmekogumi pildid on esitatud ujukomaarvuliste tensoritena vahemikus 0-255. Enne nende närvivõrku edastamist peame need väärtused skaleerima vahemikku 0-1. Piltide joonistamisel peame kas tegema sama või teisendama väärtused `int` tüübiks (nagu me ülalolevas koodis teeme), et näidata `matplotlibile`, et soovime joonistada algse skaaleerimata pildi.\n" ] }, { @@ -462,7 +462,7 @@ "source": [ "## Eeltreenitud mudelid\n", "\n", - "Paljude pildiklassifitseerimise ülesannete jaoks on võimalik leida eeltreenitud tehisnärvivõrgu mudeleid. Paljud neist mudelitest on saadaval `keras.applications` nimelises ruumis, ja veel rohkem mudeleid võib leida Internetist. Vaatame, kuidas kõige lihtsam VGG-16 mudel saab laaditud ja kasutatud:\n" + "Paljude pildiklassifitseerimise ülesannete jaoks on olemas eeltreenitud närvivõrgu mudelid. Paljud neist mudelitest on saadaval `keras.applications` nimeruumis ning veelgi rohkem mudeleid leidub internetis. Vaatame, kuidas saab laadida ja kasutada lihtsaimat VGG-16 mudelit:\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": [ - "Siin on mõned olulised punktid:\n", - "* Enne kui sisend edastatakse eelnevalt treenitud võrgule, tuleb see teatud viisil eeltöödelda. Seda tehakse, kutsudes vastavat `preprocess_input` funktsiooni, mis võtab vastu pildi partii ja tagastab nende töödeldud vormi. VGG-16 puhul normaliseeritakse pildid ja iga kanali jaoks lahutatakse ette määratud keskmine väärtus. See on vajalik, kuna VGG-16 treeniti algselt sellise eeltöötlusega.\n", - "* Neuraalvõrk rakendatakse sisendi partiile ja tulemuseks saadakse 1000-elemendilised tensorite partiid, mis näitavad iga klassi tõenäosust. Kõige tõenäolisema klassi numbri leidmiseks saab kasutada `argmax` funktsiooni sellel tensoril.\n", - "* Saadud tulemus on [`ImageNet` klassi number](https://gist.github.com/yrevar/942d3a0ac09ec9e5eb3a). Selle tulemuse mõistmiseks saab kasutada ka `decode_predictions` funktsiooni, mis tagastab n kõige tõenäolisemat klassi koos nende nimedega.\n" + "Siin on mõned olulised asjad:\n", + "* Enne sisendi andmist mis tahes eeltreenitud võrku tuleb see teatud viisil eeltöödelda. Seda tehakse sobiva `preprocess_input` funktsiooni kutsumisega, mis võtab vastu pildi partiid ja tagastab nende töödeldud vormi. VGG-16 puhul normaliseeritakse pildid ja igast kanalist lahutatakse mõni eelmääratud keskmine väärtus. See on nii, sest VGG-16 koolitati algselt selle eeltöötlusega.\n", + "* Neuraalvõrku rakendatakse sisendi partii suhtes ja tulemuseks saame 1000-elementsete tensorite partiid, mis näitab iga klassi tõenäosust. Kõige tõenäolisema klassi numbri leiame, kutsudes sellel tensori `argmax` funktsiooni.\n", + "* Saadud tulemus on [„ImageNet“ klassi number](https://gist.github.com/yrevar/942d3a0ac09ec9e5eb3a). Selle tulemuse mõistmiseks võime kasutada ka `decode_predictions` funktsiooni, mis tagastab peamised n klassi koos nende nimedega.\n" ] }, { @@ -599,7 +609,7 @@ "source": [ "## GPU arvutused\n", "\n", - "Sügavad närvivõrgud, nagu VGG-16 ja teised kaasaegsemad arhitektuurid, vajavad töötamiseks üsna palju arvutusvõimsust. Seetõttu on mõistlik kasutada GPU kiirendust, kui see on saadaval. Õnneks kiirendab Keras automaatselt arvutusi GPU-l, kui see on saadaval. Saame kontrollida, kas Tensorflow suudab GPU-d kasutada, kasutades järgmist koodi:\n" + "Sügavad närvivõrgud, nagu VGG-16 ja teised moodsamad arhitektuurid, vajavad töötamiseks üsna palju arvutusvõimsust. Mõistlik on kasutada GPU kiirendust, kui see on saadaval. Õnneks kiirendab Keras automaatselt arvutusi GPU-l, kui see on saadaval. Saame kontrollida, kas Tensorflow suudab GPU-d kasutada, järgmise koodiga:\n" ] }, { @@ -626,9 +636,10 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## VGG funktsioonide ekstraheerimine\n", "\n", - "Kui soovime kasutada VGG-16 mudelit, et oma piltidest funktsioone välja võtta, vajame mudelit ilma lõplike klassifitseerimiskihtideta. VGG-16 mudeli saab ilma ülemiste kihtideta installeerida, kasutades järgmist koodi:\n" + "## VGG omaduste eraldamine\n", + "\n", + "Kui soovime kasutada VGG-16, et eraldada omadusi oma piltidelt, vajame mudelit ilma lõplike klassifikatsioonikihtideta. Saame VGG-16 mudeli ilma ülemiste kihtideta luua järgmise koodiga:\n" ] }, { @@ -680,9 +691,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Funktsiooni tensori mõõtmed on 7x7x512, kuid selle visualiseerimiseks pidime selle ümber kujundama 2D-vormingusse.\n", + "Funktsioonistensori dimensioon on 7x7x512, kuid selle visualiseerimiseks pidime selle ümber vormindama 2D kujule.\n", "\n", - "Nüüd proovime vaadata, kas neid funktsioone saab kasutada piltide klassifitseerimiseks. Võtame käsitsi osa pilte (meie puhul 50 minibatchi) ja arvutame nende funktsioonivektorid ette. Selleks saame kasutada Tensorflow **dataset** API-d. `map` funktsioon võtab andmekogu ja rakendab sellele antud lambda-funktsiooni, et seda muuta. Kasutame seda mehhanismi uute andmekogude, `ds_features_train` ja `ds_features_test`, loomiseks, mis sisaldavad VGG-ga eraldatud funktsioone originaalpiltide asemel.\n" + "Proovime nüüd näha, kas neid omadusi saab kasutada piltide klassifitseerimiseks. Võtame käsitsi mõned pildi osad (50 minibaiti meie puhul) ja arvutame nende omadusvektorid eelnevalt välja. Selleks saame kasutada Tensorflow **dataset** API-d. `map` funktsioon võtab andmekogu ja rakendab sellele antud lambda-funktsiooni, et seda muuta. Kasutame seda mehhanismi uute andmekogude konstrueerimiseks, `ds_features_train` ja `ds_features_test`, mis sisaldavad VGG-st välja võetud omadusi originaalpiltide asemel.\n" ] }, { @@ -712,9 +723,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Kasutame konstruktsiooni `.take(50)`, et piirata andmestiku suurust ja kiirendada meie demonstratsiooni. Loomulikult võite seda katset teha kogu andmestikuga.\n", + "Kasutasime andmekogumi suuruse piiramiseks konstruktsiooni `.take(50)`, et kiirendada meie demonstratsiooni. Loomulikult saate seda eksperimenti teha ka kogu andmekogumiga.\n", "\n", - "Nüüd, kui meil on andmestik koos välja tõmmatud tunnustega, saame treenida lihtsa tiheda klassifikaatori, et eristada kasse ja koeri. See võrk võtab tunnusvektori kujuga (7,7,512) ja annab ühe väljundi, mis vastab kas koerale või kassile. Kuna tegemist on binaarse klassifikatsiooniga, kasutame `sigmoid` aktivatsioonifunktsiooni ja `binary_crossentropy` kaotust.\n" + "Nüüd, kui meil on omaduste ekstraheerimisega andmekogum, saame treenida lihtsa tiheda klassifikaatori, mis eristab kasse ja koeri. See võrk võtab omadusvektori kujuga (7,7,512) ja toodab ühe väljundi, mis vastab kas koerale või kodule. Kuna tegemist on kaheklassilise klassifikatsiooniga, kasutame `sigmoid` aktiveerimisfunktsiooni ja `binary_crossentropy` kaotust.\n" ] }, { @@ -743,13 +754,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Tulemus on suurepärane, suudame eristada kassi ja koera peaaegu 95% tõenäosusega! Kuid oleme seda lähenemist testinud ainult väikese osa piltide peal, kuna käsitsi tunnuste eraldamine võtab palju aega.\n", + "Tulemus on suurepärane, me suudame kasside ja koerte vahel vahet teha ligi 95% tõenäosusega! Kuid me oleme seda lähenemist testinud ainult väikese osa kõigist piltidest, sest manuaalne omaduste eraldamine tundub võtvat palju aega.\n", "\n", - "## Ülekandeõpe ühe VGG-võrgu abil\n", + "## Ülekanneõpe, kasutades üht VGG võrku\n", "\n", - "Samuti saame vältida tunnuste käsitsi eelnevat arvutamist, kasutades treeningu ajal tervet algset VGG-16 võrku, lisades tunnuste eraldaja meie võrgu esimeseks kihiks.\n", + "Me võime ka vältida omaduste käsitsi eel-arvutamist, kasutades kogu algset VGG-16 võrku treeningu ajal, lisades omaduste ekstraheerija meie võrku esimese kihina.\n", "\n", - "Keras arhitektuuri ilu seisneb selles, et ülalpool defineeritud VGG-16 mudelit saab kasutada ka kihina teises närvivõrgus! Meil tuleb lihtsalt ehitada võrk, millel on tihe klassifikaator selle peal, ja seejärel treenida kogu võrku tagasileviku meetodil.\n" + "Keras arhitektuuri võlu seisneb selles, et ülalmääratletud VGG-16 mudelit saab samuti kasutada kihina teises närvivõrgus! Peame lihtsalt ehitama võrgu selle peale dense-klassifikaatoriga ja seejärel treenima kogu võrku tagasipropagatsiooniga.\n" ] }, { @@ -793,13 +804,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "See mudel näeb välja nagu otsast lõpuni klassifitseerimisvõrk, mis võtab sisendiks pildi ja tagastab klassi. Kuid keeruline osa on see, et me tahame, et VGG16 toimiks funktsioonide ekstraktorina, mitte ei treenitaks seda uuesti. Seetõttu peame **konvolutsioonilise funktsioonide ekstraktori kaalud külmutama**. Võrgu esimesele kihile pääseb ligi, kutsudes `model.layers[0]`, ja me peame lihtsalt seadistama `trainable` omaduse väärtuseks `False`.\n", + "See mudel näeb välja nagu lõpust-lõpuni klassifitseerimisvõrk, mis võtab pildi ja tagastab klassi. Kuid keeruline on see, et me tahame, et VGG16 toimiks omaduste ekstraktorina, mitte uuesti treenitaks. Seetõttu peame **külmutama konvolutsioonilise omaduste ekstraktori kaalud**. Võime pääseda võrgu esimesele kihile, kutsudes `model.layers[0]`, ja peame lihtsalt seadma `trainable` omaduse väärtuseks `False`.\n", "\n", - "> **Note**: Funktsioonide ekstraktori kaalude külmutamine on vajalik, sest muidu võib treenimata klassifitseerimiskihi kasutamine hävitada konvolutsioonilise ekstraktori algsed eeltreenitud kaalud.\n", + "> **Märkus**: Omaduste ekstraktori kaalude külmutamine on vajalik, sest vastasel juhul võib treenimata klassifikaatori kiht hävitada originaalse eelõppinud konvolutsiooniekstraktori kaalud.\n", "\n", - "Võite märgata, et kuigi meie võrgu parameetrite koguarv on umbes 15 miljonit, treenime me ainult 25 000 parameetrit. Kõik ülejäänud ülemise taseme konvolutsioonifiltrite parameetrid on eelnevalt treenitud. See on hea, sest saame väiksema arvu näidete abil peenhäälestada väiksema arvu parameetreid.\n", + "Võite märgata, et kuigi meie võrgus on kokku umbes 15 miljonit parameetrit, treenime me vaid 25 tuhande parameetri kallal. Kõik ülejäänud ülemise taseme konvolutsioonifiltrite parameetrid on eelõpitud. See on hea, sest suudame väiksema hulga parameetritega ja väiksema hulga näidistega peenhäälestada.\n", "\n", - "Nüüd treenime oma võrku ja vaatame, kui hea tulemuse suudame saavutada. Oodake üsna pikka töötamisaega ja ärge muretsege, kui täitmine tundub mõneks ajaks külmunud.\n" + "Nüüd treenime oma võrku ja vaatame, kui hea tulemuseni me jõuame. Oodake üsna pikka jooksuaega ja ärge muretsege, kui täitmine mingil ajal näib külmunud olevat.\n" ] }, { @@ -824,11 +835,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Tundub, et oleme saavutanud üsna täpse kasside ja koerte klassifikaatori!\n", + "Tundub, et meil on saadud üsna täpne kasside ja koerte klassifikaator! \n", "\n", "## Mudeli salvestamine ja laadimine\n", "\n", - "Kui oleme mudeli treeninud, saame mudeli arhitektuuri ja treenitud kaalud salvestada faili, et neid tulevikus kasutada:\n" + "Kui mudel on treenitud, saame mudeli arhitektuuri ja treenitud kaalud faili salvestada hilisemaks kasutamiseks:\n" ] }, { @@ -852,7 +863,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Seejärel saame mudeli igal ajal failist laadida. See võib olla kasulik juhul, kui järgmine katse mudeli hävitab - siis ei pea alustama täiesti algusest.\n" + "Saame mudeli seejärel igal ajal failist laadida. See võib olla kasulik juhuks, kui järgmine katse mudeli ära rikub – siis ei pea alustama nullist.\n" ] }, { @@ -868,15 +879,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Peenhäälestamine ülekandeõppe abil\n", + "## Üleõppe täpsustamine ülekandõppe abil\n", "\n", - "Eelmises osas treenisime lõpliku klassifikaatori kihi, et klassifitseerida pilte meie enda andmestikus. Kuid me ei treeninud uuesti tunnuste ekstraktorit ja meie mudel tugines tunnustele, mille mudel oli õppinud ImageNet andmete põhjal. Kui teie objektid visuaalselt erinevad tavalistest ImageNet piltidest, ei pruugi see tunnuste kombinatsioon kõige paremini toimida. Seetõttu on mõistlik alustada ka konvolutsioonikihtide treenimist.\n", + "Eelmises jaotises koolitasime lõpliku klassifitseerimiskihi oma andmekogus olevate kujutiste klassifitseerimiseks. Kuid me ei treeninud uuesti tunnuste eraldajat ja meie mudel tugines tunnustele, mida mudel oli õppinud ImageNeti andmetel. Kui sinu objektid erinevad visuaalselt tavapärastest ImageNeti piltidest, ei pruugi see tunnuste kombinatsioon kõige paremini töötada. Seega on mõistlik hakata koolitama ka konvolutsioonikihte.\n", "\n", - "Selleks saame lahti lukustada konvolutsioonifiltri parameetrid, mille me varem lukustasime.\n", + "Selleks saame vabastada konvolutsioonifiltri parameetrid, mille olime varem külmutanud. \n", "\n", - "> **Märkus:** Oluline on, et esmalt lukustaksite parameetrid ja viiksite läbi mitu treeningtsüklit, et stabiliseerida kaalu klassifikatsioonikihis. Kui alustate kohe kogu võrgu treenimist lahti lukustatud parameetritega, võivad suured vead hävitada konvolutsioonikihtide eelnevalt treenitud kaalu.\n", + "> **Märkus:** Oluline on esmalt külmutada parameetrid ja läbi viia mitu epohhi koolitust, et klassifitseerimiskihis olevad kaalukomponendid stabiliseeruksid. Kui kohe alustada kogu võrgu lõplikku koolitust lahtiste parameetritega, võivad suured vead rikkuda eelnevalt treenitud kaalud konvolutsioonikihtides.\n", "\n", - "Meie konvolutsiooniline VGG-16 mudel asub esimeses kihis ja koosneb paljudest kihtidest. Saame selle struktuuri üle vaadata:\n" + "Meie konvolutsiooniline VGG-16 mudel asub esimeses kihis ning koosneb paljudest alamkihtidest. Võime vaadata selle struktuuri: \n" ] }, { @@ -945,7 +956,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Me saame lahti lukustada kõik konvolutsioonibaasi kihid:\n" + "Saame lahti külmutada kõik konvolutsioonilise aluse kihid:\n" ] }, { @@ -961,7 +972,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Kuid kõigi nende korraga lahtisulatamine ei ole parim idee. Me saame esmalt lahti sulatada vaid mõned viimased konvolutsioonikihid, kuna need sisaldavad kõrgema taseme mustreid, mis on meie piltide jaoks asjakohased. Näiteks alustuseks võime külmutada kõik kihid, välja arvatud viimased neli:\n" + "Siiski ei ole kõige parem mõte neid kõiki korraga sulatada. Võime esmalt sulatada vaid mõned viimasest konvolutsioonikihist, sest need sisaldavad kõrgema taseme mustreid, mis on meie piltide jaoks olulised. Näiteks võime alustada kõigi kihtide külmutamist peale viimaste nelja: \n" ] }, { @@ -1000,11 +1011,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Tähelepanuväärne on see, et treenitavate parameetrite arv suurenes märkimisväärselt, kuid see on siiski umbes 50% kõigist parameetritest.\n", + "Märka, et treenitavate parameetrite arv kasvas oluliselt, kuid see on endiselt umbes 50% kõigist parameetritest.\n", "\n", - "Pärast külmutamise tühistamist saame teha veel mõned treeningtsüklid (meie näites teeme ainult ühe). Samuti võite valida madalama õppemäära, et vähendada mõju eelnevalt treenitud kaaludele. Siiski, isegi madala õppemääraga, võib oodata, et täpsus treeningu alguses langeb, kuni lõpuks saavutatakse veidi kõrgem tase võrreldes fikseeritud kaalude juhtumiga.\n", + "Pärast lahtilukustamist saame teha veel paar epohhi treeningut (meie näites teeme ainult ühe). Saad valida ka madalama õppemäära, et minimeerida mõju eelnevalt treenitud kaaludele. Kuid isegi madala õppemääraga võid oodata täpsuse langust treeningu alguses, kuni lõpuks jõuad veidi kõrgemale tasemele kui fikseeritud kaalude korral.\n", "\n", - "> **Märkus:** See treening toimub palju aeglasemalt, kuna peame gradientide levitamiseks tagasi võrgu paljude kihtide kaudu!\n" + "> **Märkus:** See treening toimub palju aeglasemalt, sest peame gradientide tagasi kandmise võrgu paljude kihtide kaudu!\n" ] }, { @@ -1028,18 +1039,18 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Meil on tõenäoliselt võimalik saavutada kõrgem treeningtäpsus, kuna kasutame võimsamat võrku, millel on rohkem parameetreid, kuid valideerimise täpsus ei pruugi nii palju suureneda.\n", + "On tõenäoline, et saavutame kõrgema treeningu täpsuse, sest kasutame võimsamat võrku rohkemate parameetritega, kuid valideerimise täpsus ei pruugi nii palju suureneda.\n", "\n", - "Võid vabalt võrgu mõned lisakihid lahti lukustada ja rohkem treenida, et näha, kas suudad saavutada kõrgemat täpsust!\n" + "Julgesti sulge mõned kihid võrku ning treeni rohkem, et näha, kas suudad saavutada kõrgemat täpsust!\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Teised arvutinägemise mudelid\n", + "## Muud arvutinägemise mudelid\n", "\n", - "VGG-16 on üks lihtsamaid arvutinägemise arhitektuure. Keras pakub palju rohkem eelnevalt treenitud võrke. Kõige sagedamini kasutatavad neist on **ResNet** arhitektuurid, mille on välja töötanud Microsoft, ja **Inception**, mille autoriks on Google. Näiteks uurime kõige lihtsama ResNet-50 mudeli arhitektuuri (ResNet on mudelite perekond erineva sügavusega, võite katsetada ResNet-152-ga, kui soovite näha, milline näeb välja tõeliselt sügav mudel):\n" + "VGG-16 on üks lihtsamaid arvutinägemise arhitektuure. Keras pakub palju rohkem eelõppinud võrgustikke. Nende seas on enim kasutatud **ResNet** arhitektuurid, mille on välja töötanud Microsoft, ja **Inception** Google'ilt. Näiteks uurime lihtsaimat ResNet-50 mudeli arhitektuuri (ResNet on mudelite perekond eri sügavusega, võid proovida ka ResNet-152, kui soovid näha, milline välja näeb tõeliselt sügav mudel):\n" ] }, { @@ -1441,29 +1452,29 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Nagu näha, sisaldab mudel samu tuttavaid ehitusplokke: konvolutsioonikihid, ühenduskihid ja lõplik tihe klassifikaator. Seda mudelit saab kasutada täpselt samamoodi nagu VGG-16 mudelit ülekandeõppe jaoks. Võid proovida katsetada ülaltoodud koodiga, kasutades erinevaid ResNet mudeleid baasina ja vaadata, kuidas täpsus muutub.\n", + "Nagu näete, sisaldab mudel samu tuttavaid ehitusplokke: konvolutsioonikiht, virnastuskiht ja lõplik tihe klassifikaator. Seda mudelit saab kasutada täpselt samamoodi nagu oleme kasutanud VGG-16 ülekandeõppes. Võite proovida ülaltoodud koodiga eksperimenteerida, kasutades erinevaid ResNet-mudeleid baas- või algmudelina, ja vaadata, kuidas täpsus muutub.\n", "\n", - "## Partii normaliseerimine\n", + "## Partiisisene normaliseerimine\n", "\n", - "See võrk sisaldab veel üht tüüpi kihti: **Partii normaliseerimine**. Partii normaliseerimise idee seisneb selles, et väärtused, mis liiguvad läbi närvivõrgu, tuuakse õigesse vahemikku. Tavaliselt töötavad närvivõrgud kõige paremini, kui kõik väärtused on vahemikus [-1,1] või [0,1], mistõttu me skaleerime/normaliseerime oma sisendandmed vastavalt. Kuid sügava võrgu treenimise ajal võib juhtuda, et väärtused lähevad sellest vahemikust oluliselt välja, mis muudab treenimise problemaatiliseks. Partii normaliseerimise kiht arvutab praeguse minibatch'i kõigi väärtuste keskmise ja standardhälbe ning kasutab neid signaali normaliseerimiseks enne selle edastamist närvivõrgu kihile. See parandab oluliselt sügavate võrkude stabiilsust.\n" + "Selles võrgus on veel üks kihtide tüüp: **partiisisene normaliseerimine**. Partiisisese normaliseerimise idee on tuua väärtused, mis voolavad läbi närvivõrgu, õigesse vahemikku. Tavaliselt toimivad närvivõrgud kõige paremini, kui kõik väärtused jäävad vahemikku [-1,1] või [0,1], ja sellepärast skaleerime/normalizeerime oma sisendi andmed vastavalt. Siiski võib sügava võrgu treenimisel juhtuda, et väärtused satuvad sellest vahemikust oluliselt välja, mis muudab treenimise probleemseks. Partiisisene normaliseerimise kiht arvutab kõigi jooksva minipartiisi väärtuste keskmise ja standardhälbe ning kasutab neid signaali normaliseerimiseks enne närvivõrgu kihi läbimist. See parandab oluliselt sügavate võrkude stabiilsust.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Peamine mõte\n", + "## Kokkuvõte\n", "\n", - "Kasutades ülekandeõpet, suutsime kiiresti kokku panna klassifikaatori meie kohandatud objektide klassifitseerimise ülesande jaoks ja saavutada kõrge täpsuse. Kuid see näide polnud täiesti õiglane, sest algne VGG-16 võrk oli eelnevalt treenitud kasside ja koerte tuvastamiseks, mistõttu kasutasime lihtsalt enamikku mustritest, mis võrgus juba olemas olid. Võite oodata madalamat täpsust eksootilisemate ja spetsiifilisemate objektide puhul, nagu tootmisliini detailid tehases või erinevad puulehed.\n", + "Kasutades siirdõpetust, suutsime kiiresti kokku panna klassifikaatori meie kohandatud objektide klassifitseerimise ülesande jaoks ja saavutada kõrge täpsus. Kuid see näide ei olnud täiesti õiglane, kuna originaalset VGG-16 võrku oli eelnevalt koolitatud kasside ja koerte tundmaõppimiseks ning seetõttu kasutasime lihtsalt uuesti enamust mustritest, mis olid võrgus juba olemas. Võite oodata madalamat täpsust eksootilisemate domeenipõhiste objektide puhul, näiteks tehase tootmisliini detailide või erinevate puulehtede tuvastamisel.\n", "\n", - "Nagu näha, vajavad keerukamad ülesanded, mida me praegu lahendame, suuremat arvutusvõimsust ja neid ei saa lihtsalt lahendada protsessoril. Järgmises osas proovime kasutada kergemat rakendust, et treenida sama mudelit madalamate arvutusressurssidega, mis toob kaasa vaid veidi madalama täpsuse.\n" + "Näete, et keerukamad ülesanded, mida me nüüd lahendame, vajavad suuremat arvutusvõimsust ning neid ei saa lihtsalt CPU-l lahendada. Järgmises osas proovime kasutada kergemat teostust sama mudeli koolitamiseks väiksemate arvutusressurssidega, mis toob kaasa vaid veidi madalama täpsuse.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n---\n\n**Lahtiütlus**: \nSee dokument on tõlgitud, kasutades AI tõlketeenust [Co-op Translator](https://github.com/Azure/co-op-translator). Kuigi püüame tagada täpsust, palun arvestage, et automaatsed tõlked võivad sisaldada vigu või ebatäpsusi. Algne dokument selle algkeeles tuleks lugeda autoriteetseks allikaks. Olulise teabe puhul on soovitatav kasutada professionaalset inimtõlget. Me ei vastuta selle tõlke kasutamisest tulenevate arusaamatuste või valede tõlgenduste eest.\n" + "---\n\n\n**Lahtiütlus**:\nSee dokument on tõlgitud kasutades AI tõlketeenust [Co-op Translator](https://github.com/Azure/co-op-translator). Kuigi me püüdleme täpsuse poole, palun pange tähele, et automatiseeritud tõlgetes võib esineda vigu või ebatäpsusi. Originaaldokument selle emakeeles tuleks pidada autoriteetseks allikaks. Olulise teabe puhul soovitatakse kasutada professionaalset inimtõlget. Me ei vastuta selle tõlkega seotud eksimustest või valesti mõistmistest.\n\n" ] } ], @@ -1484,12 +1495,6 @@ "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.10" - }, - "coopTranslator": { - "original_hash": "c189abc107848f96051085cc30945129", - "translation_date": "2025-10-11T12:02:09+00:00", - "source_file": "lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb", - "language_code": "et" } }, "nbformat": 4, diff --git a/translations/et/lessons/5-NLP/README.md b/translations/et/lessons/5-NLP/README.md index fdebe901..ae1bab6e 100644 --- a/translations/et/lessons/5-NLP/README.md +++ b/translations/et/lessons/5-NLP/README.md @@ -1,51 +1,51 @@ -# Loodusliku keele töötlemine +# Loomuliku Keele Töötlemine -![NLP ülesannete kokkuvõte visandis](../../../../translated_images/et/ai-nlp.b22dcb8ca4707cea.webp) +![NLP ülesannete kokkuvõte kriipsutamisel](../../../../translated_images/et/ai-nlp.b22dcb8ca4707cea.webp) -Selles osas keskendume **loodusliku keele töötlemise (NLP)** ülesannete lahendamisele, kasutades tehisnärvivõrke. On palju NLP probleeme, mida soovime, et arvutid suudaksid lahendada: +Selles peatükis keskendume närvivõrkude kasutamisele loomuliku keele töötlemisega seotud ülesannete lahendamisel. On palju NLP probleeme, mida tahame, et arvutid oskaksid lahendada: -* **Teksti klassifitseerimine** on tüüpiline klassifitseerimisülesanne, mis puudutab tekstijadasid. Näideteks on e-kirjade klassifitseerimine rämpspostiks või mitte-rämpspostiks, või artiklite kategoriseerimine spordi, äri, poliitika jne valdkondadesse. Samuti, kui arendame vestlusroboteid, peame sageli mõistma, mida kasutaja tahtis öelda – sel juhul tegeleme **intentsioonide klassifitseerimisega**. Intentsioonide klassifitseerimisel tuleb sageli toime tulla paljude kategooriatega. -* **Sentimendi analüüs** on tüüpiline regressiooniülesanne, kus peame omistama lausele numbri (sentimendi), mis vastab sellele, kui positiivne/negatiivne lause tähendus on. Sentimendi analüüsi arenenum versioon on **aspektipõhine sentimendi analüüs** (ABSA), kus me ei omista sentimenti kogu lausele, vaid selle erinevatele osadele (aspektidele), nt. *Selles restoranis meeldis mulle köök, kuid atmosfäär oli kohutav*. -* **Nimega entiteetide tuvastamine** (NER) viitab probleemile, kus tekstist tuleb välja võtta teatud entiteedid. Näiteks peame mõistma, et fraasis *Ma pean homme Pariisi lendama* viitab sõna *homme* KUUPÄEVALE ja *Pariis* ASUKOHALE. -* **Märksõnade tuvastamine** on sarnane NER-ile, kuid siin tuleb automaatselt välja võtta lause tähenduse seisukohalt olulised sõnad, ilma et oleks eelnevalt treenitud konkreetsete entiteeditüüpide jaoks. -* **Teksti klasterdamine** võib olla kasulik, kui soovime grupeerida sarnaseid lauseid, näiteks tehnilise toe vestlustes sarnaseid päringuid. -* **Küsimustele vastamine** viitab mudeli võimele vastata konkreetsele küsimusele. Mudel saab sisendiks tekstilõigu ja küsimuse ning peab leidma tekstist koha, kus küsimuse vastus asub (või mõnikord genereerima vastuse teksti). -* **Teksti genereerimine** on mudeli võime luua uut teksti. Seda võib pidada klassifitseerimisülesandeks, mis ennustab järgmist tähte/sõna, lähtudes mingist *teksti vihjest*. Arenenud teksti genereerimise mudelid, nagu GPT-3, suudavad lahendada ka teisi NLP ülesandeid, kasutades tehnikat, mida nimetatakse [vihje programmeerimiseks](https://towardsdatascience.com/software-3-0-how-prompting-will-change-the-rules-of-the-game-a982fbfe1e0) või [vihje inseneriks](https://medium.com/swlh/openai-gpt-3-and-prompt-engineering-dcdc2c5fcd29). -* **Teksti kokkuvõtete tegemine** on tehnika, kus soovime, et arvuti "loeks" pikka teksti ja võtaks selle kokku mõne lausega. -* **Masintõlge** võib olla vaadeldav kui teksti mõistmise kombinatsioon ühes keeles ja teksti genereerimine teises keeles. +* **Teksti klassifitseerimine** on tüüpiline tekstijadade klassifitseerimise probleem. Näiteks e-kirjade klassifitseerimine rämpspostiks või mitte-rämpspostiks, või artiklite kategooriateks jaotamine nagu sport, äri, poliitika jne. Samuti, chatbotide arendamisel tuleb sageli mõista, mida kasutaja tahtis öelda — sel juhul tegeleme **intentsiooni klassifitseerimisega**. Sageli tuleb intentsiooni klassifitseerimisel tegeleda paljude kategooriatega. +* **Sentimendi analüüs** on tüüpiline regressioonülesanne, kus tuleb määrata arvuline väärtus (sentiment), mis vastab lause positiivsusele või negatiivsusele. Täiustatud sentimentide analüüsi versioon on **aspektipõhine sentimentide analüüs** (ABSA), kus sentiment määratakse mitte kogu lausele, vaid selle erinevatele osadele (aspektidele), nt *Selles restoranis meeldis mulle köök, aga õhkkond oli kohutav*. +* **Nimetatud üksuste tuvastamine** (NER) tähendab teatud üksuste eraldamist tekstist. Näiteks tuleb mõista, et fraasis *Ma pean homme Pariisi lendama* viitab sõna *homme* KUUPÄEVALE ja *Pariis* on ASUKOHT. +* **Märksõnade eraldamine** on sarnane NER-ile, kuid tuleb automaatselt eraldada lause tähenduse jaoks olulisi sõnu, ilma konkreetsete üksuste tüüpide eelneva treenimiseta. +* **Tekstiklusterdamine** võib olla kasulik, kui soovime grupeerida sarnaseid lauseid, näiteks sarnaseid päringuid tehnilise toe vestlustes. +* **Küsimustele vastamine** tähendab mudeli võimet vastata konkreetsele küsimusele. Mudel saab sisendiks tekstilõigu ja küsimuse ning peab leidma tekstist koha, kus on vastus (või mõnikord genereerima vastusteksti). +* **Teksti genereerimine** tähendab mudeli võimet luua uut teksti. Seda võib pidada klassifitseerimisülesandeks, mis ennustab järgmise tähe/sõna mingi *teksti vihje* põhjal. Täiustatud teksti genereerimise mudelid, nagu GPT-3, suudavad lahendada ka muid NLP ülesandeid, näiteks klassifitseerimist kasutades tehnikaid, mida nimetatakse [vihjete programmeerimiseks](https://towardsdatascience.com/software-3-0-how-prompting-will-change-the-rules-of-the-game-a982fbfe1e0) või [vihjete inseneriks](https://medium.com/swlh/openai-gpt-3-and-prompt-engineering-dcdc2c5fcd29). +* **Teksti kokkuvõtlemine** on tehnika, kus tahame, et arvuti "loeks" pika teksti ja täidaks selle mõne lausega. +* **Masintõlge** võib käsitleda kui ühe keele teksti mõistmist ja teise keele teksti genereerimist. -Alguses lahendati enamik NLP ülesandeid traditsiooniliste meetoditega, nagu grammatikad. Näiteks masintõlkes kasutati parsereid, et muuta algne lause süntaksipuuks, seejärel eraldati kõrgema taseme semantilised struktuurid, et esitada lause tähendust, ja selle tähenduse ning sihtkeele grammatika põhjal genereeriti tulemus. Tänapäeval lahendatakse paljusid NLP ülesandeid tõhusamalt tehisnärvivõrkude abil. +Esialgu lahendati enamik NLP ülesandeid traditsiooniliste meetoditega, nagu grammatikaanalüüs. Näiteks masintõlkes kasutati parserit, mis teisendas alglaused süntaksipuu kujule, seejärel ekstraheeriti kõrgema taseme semantilisi struktuure, mis esindasid lause tähendust ning selle tähenduse ja sihtkeele grammatikapõhjal genereeriti tulemus. Tänapäeval lahendatakse paljusid NLP ülesandeid efektiivsemalt närvivõrkude abil. -> Paljud klassikalised NLP meetodid on rakendatud [Natural Language Processing Toolkit (NLTK)](https://www.nltk.org) Python'i raamatukogus. Veebis on saadaval suurepärane [NLTK raamat](https://www.nltk.org/book/), mis käsitleb, kuidas erinevaid NLP ülesandeid saab lahendada NLTK abil. +> Paljude klassikaliste NLP meetodite teostuseks on saadaval Python teek [Natural Language Processing Toolkit (NLTK)](https://www.nltk.org). Veebis on saadaval suurepärane [NLTK raamat](https://www.nltk.org/book/), mis katab seda, kuidas erinevaid NLP ülesandeid NLTK abil lahendada. -Meie kursusel keskendume peamiselt tehisnärvivõrkude kasutamisele NLP jaoks ning kasutame NLTK-d vajadusel. +Meie kursusel keskendume peamiselt närvivõrkudele NLP jaoks ning kasutame vajadusel NLTK-d. -Oleme juba õppinud tehisnärvivõrkude kasutamist tabelandmete ja piltidega töötamiseks. Peamine erinevus nende andmetüüpide ja teksti vahel on see, et tekst on muutuva pikkusega jada, samas kui piltide puhul on sisendi suurus ette teada. Kuigi konvolutsioonivõrgud suudavad sisendandmetest mustreid välja tuua, on mustrid tekstis keerukamad. Näiteks võib eitus olla subjektist eraldatud suvalise arvu sõnadega (nt. *Mulle ei meeldi apelsinid* vs. *Mulle ei meeldi need suured värvilised maitsvad apelsinid*), ja seda tuleks siiski tõlgendada ühe mustrina. Seega, keele töötlemiseks peame kasutusele võtma uued tehisnärvivõrkude tüübid, nagu *rekurentvõrgud* ja *transformerid*. +Oleme juba õppinud närvivõrkude kasutamist tabelandmete ja piltidega töötamiseks. Peamine erinevus nende andmetüüpide ja teksti vahel on selles, et tekst on muutuva pikkusega järjestus, samas kui piltide sisendi suurus on eelnevalt teada. Kuigi konvolutsioonivõrgud suudavad tuvastada mustreid sisendandmetes, on teksti mustrid palju keerulisemad. Näiteks võib eitav sõna olla subjekti suhtes eraldatud suvalise arvu sõnadega (nt *Ma ei meeldi apelsinid* vs. *Ma ei meeldi neile suurtele värvikatele maitsvatele apelsinidele*), kuid see tuleks tõlgendada kui üks muster. Seetõttu vajame keelt käsitledes uusi närvivõrkude tüüpe, nagu *rekurrentvõrgud* ja *transformerid*. -## Raamatukogude paigaldamine +## Teekide installimine -Kui kasutate selle kursuse läbimiseks kohalikku Python'i installatsiooni, peate võib-olla paigaldama kõik vajalikud NLP raamatukogud, kasutades järgmisi käske: +Kui kasutate kohaliku Pythoni installatsiooni selle kursuse käivitamiseks, võib vajalik olla kõigi NLP-ga seotud teekide paigaldamine järgmiste käskude abil: -**PyTorch'i jaoks** +**PyTorch jaoks** ```bash -pip install -r requirements-torch.txt +pip install -r requirements-pytorch.txt ``` **TensorFlow jaoks** ```bash pip install -r requirements-tf.txt ``` -> NLP-d TensorFlow'ga saate proovida [Microsoft Learnis](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-tensorflow/?WT.mc_id=academic-77998-cacaste) +> Võite proovida NLP TensorFlowga aadressil [Microsoft Learn](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-tensorflow/?WT.mc_id=academic-77998-cacaste) ## GPU hoiatus -Selles osas treenime mõnes näites üsna suuri mudeleid. -* **Kasuta GPU-toega arvutit**: Soovitatav on käivitada oma märkmikud GPU-toega arvutis, et vähendada ooteaega suurte mudelitega töötamisel. -* **GPU mälu piirangud**: GPU kasutamine võib viia olukordadeni, kus GPU mälu saab otsa, eriti suurte mudelite treenimisel. -* **GPU mälu tarbimine**: GPU mälu tarbimine treenimise ajal sõltub mitmest tegurist, sealhulgas minibatch'i suurusest. -* **Vähenda minibatch'i suurust**: Kui teil tekib GPU mälu probleeme, kaaluge minibatch'i suuruse vähendamist oma koodis võimaliku lahendusena. -* **TensorFlow GPU mälu vabastamine**: TensorFlow vanemad versioonid ei pruugi GPU mälu õigesti vabastada, kui treenitakse mitut mudelit ühe Python'i kerneli sees. GPU mälu kasutamise tõhusaks haldamiseks saate seadistada TensorFlow'i nii, et see eraldaks GPU mälu ainult vajaduse korral. -* **Koodi lisamine**: Et seadistada TensorFlow GPU mälu eraldama ainult vajaduse korral, lisage oma märkmikesse järgmine kood: +Selles peatükis treenime mõnes näites päris suuri mudeleid. +* **Kasuta GPU-ga arvutit**: Soovitatav on kasutada GPU-ga arvutit, et vähendada ootamisaegu suurte mudelitega töötades. +* **GPU mälu piirangud**: GPU-ga töötamine võib kaasa tuua olukorra, kus GPU mälu ei jätku, eriti suurte mudelite treenimisel. +* **GPU mälu tarbimine**: Treeningu ajal kasutatava GPU mälu maht sõltub mitmetest teguritest, sealhulgas minibatchi suurusest. +* **Minibatchi suurust vähendada**: Kui tekivad GPU mäluprobleemid, kaaluge minibatchi suuruse vähendamist koodis. +* **TensorFlow GPU mälu vabastamine**: Vanemad TensorFlow versioonid ei pruugi GPU mälu õigesti vabastada, kui treenitakse mitut mudelit ühe Pythoni tuumas. GPU mälu efektiivseks kasutamiseks saate seadistada TensorFlow nii, et GPU mälu eraldatakse ainult vajadusel. +* **Koodi lisamine**: Selleks, et TensorFlow eraldaks GPU mälu kasvavalt ainult siis, kui on vaja, lisage oma märkmetesse järgmine kood: ```python physical_devices = tf.config.list_physical_devices('GPU') @@ -53,19 +53,21 @@ if len(physical_devices)>0: tf.config.experimental.set_memory_growth(physical_devices[0], True) ``` -Kui olete huvitatud klassikalise masinõppe perspektiivist NLP õppimisest, külastage [seda õppetundide komplekti](https://github.com/microsoft/ML-For-Beginners/tree/main/6-NLP) +Kui soovite õppida NLP-d klassikalisest masinõppe vaatenurgast, vaadake [seda õppetükkide komplekti](https://github.com/microsoft/ML-For-Beginners/tree/main/6-NLP) -## Selles osas -Selles osas õpime: +## Selles peatükis +Selles peatükis õpime: -* [Teksti esitamist tensoritena](13-TextRep/README.md) -* [Sõnaembeddingsid](14-Emdeddings/README.md) -* [Keelemudelit](15-LanguageModeling/README.md) -* [Rekurentseid närvivõrke](16-RNN/README.md) -* [Generatiivseid võrke](17-GenerativeNetworks/README.md) -* [Transformereid](18-Transformers/README.md) +* [Teksti esitamine tensoritena](13-TextRep/README.md) +* [Sõnade embedid](14-Emdeddings/README.md) +* [Keelemudelid](15-LanguageModeling/README.md) +* [Rekursiivsed närvivõrgud](16-RNN/README.md) +* [Generatiivvõrgud](17-GenerativeNetworks/README.md) +* [Transformerid](18-Transformers/README.md) --- -**Lahtiütlus**: -See dokument on tõlgitud AI tõlketeenuse [Co-op Translator](https://github.com/Azure/co-op-translator) abil. Kuigi püüame tagada täpsust, palume arvestada, et automaatsed tõlked võivad sisaldada vigu või ebatäpsusi. Algne dokument selle algses keeles tuleks pidada autoriteetseks allikaks. Olulise teabe puhul soovitame kasutada professionaalset inimtõlget. Me ei vastuta selle tõlke kasutamisest tulenevate arusaamatuste või valesti tõlgenduste eest. \ No newline at end of file + +**Lahtiütlus**: +See dokument on tõlgitud kasutades AI tõlketeenust [Co-op Translator](https://github.com/Azure/co-op-translator). Kuigi me püüdleme täpsuse poole, palun pange tähele, et automatiseeritud tõlgetes võib esineda vigu või ebatäpsusi. Originaaldokument selle emakeeles tuleks pidada autoriteetseks allikaks. Olulise teabe puhul soovitatakse kasutada professionaalset inimtõlget. Me ei vastuta selle tõlkega seotud eksimustest või valesti mõistmistest. + \ No newline at end of file diff --git a/translations/pcm/.co-op-translator.json b/translations/pcm/.co-op-translator.json index 2555dda1..da812d52 100644 --- a/translations/pcm/.co-op-translator.json +++ b/translations/pcm/.co-op-translator.json @@ -5,6 +5,12 @@ "source_file": "AGENTS.md", "language_code": "pcm" }, + "CONTRIBUTING.md": { + "original_hash": "c6fd7e781b67111a90abd166d0ce4aa0", + "translation_date": "2026-07-08T18:24:34+00:00", + "source_file": "CONTRIBUTING.md", + "language_code": "pcm" + }, "README.md": { "original_hash": "12c8eb6bf0867d2f1c32daf613ac5b8b", "translation_date": "2026-04-06T16:05:28+00:00", @@ -17,6 +23,19 @@ "source_file": "SECURITY.md", "language_code": "pcm" }, + "__translation_failures__": { + "lessons/sketchnotes/LICENSE.md": { + "original_hash": "45ab63a2cd8f5faef6c9b150618837a4", + "source_file": "lessons/sketchnotes/LICENSE.md", + "language_code": "pcm", + "failure_date": "2026-07-08T18:20:25+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-11-18T18:53:53+00:00", @@ -54,8 +73,8 @@ "language_code": "pcm" }, "examples/README.md": { - "original_hash": "0d1babfdcbeb46525f2db3fbaaa54cd7", - "translation_date": "2025-11-18T18:12:59+00:00", + "original_hash": "7883d52c2e2a221e0b07a7b112a149b9", + "translation_date": "2026-07-08T18:16:15+00:00", "source_file": "examples/README.md", "language_code": "pcm" }, @@ -66,8 +85,8 @@ "language_code": "pcm" }, "lessons/0-course-setup/how-to-run.md": { - "original_hash": "a4717bd9103b9f6cd84d534b83534689", - "translation_date": "2026-01-16T07:31:13+00:00", + "original_hash": "7ad8c7d8604c53649b3d4d1e2f3a6fa1", + "translation_date": "2026-07-08T18:16:33+00:00", "source_file": "lessons/0-course-setup/how-to-run.md", "language_code": "pcm" }, @@ -191,6 +210,12 @@ "source_file": "lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md", "language_code": "pcm" }, + "lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb": { + "original_hash": "99b816b6a4957ef4100cee4c4221dff9", + "translation_date": "2026-07-08T18:08:54+00:00", + "source_file": "lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb", + "language_code": "pcm" + }, "lessons/4-ComputerVision/08-TransferLearning/lab/README.md": { "original_hash": "7765935c35fcee69b9fe2d0cfd6963e2", "translation_date": "2025-11-18T18:18:24+00:00", @@ -330,8 +355,8 @@ "language_code": "pcm" }, "lessons/5-NLP/README.md": { - "original_hash": "8ef02a9318257ea140ed3ed74442096d", - "translation_date": "2025-11-18T18:35:10+00:00", + "original_hash": "038df6f1a73e49f6430740da083bfd6d", + "translation_date": "2026-07-08T18:17:01+00:00", "source_file": "lessons/5-NLP/README.md", "language_code": "pcm" }, diff --git a/translations/pcm/CONTRIBUTING.md b/translations/pcm/CONTRIBUTING.md new file mode 100644 index 00000000..dbb229a8 --- /dev/null +++ b/translations/pcm/CONTRIBUTING.md @@ -0,0 +1,29 @@ +# How to Put Hand for AI-For-Beginners + +Thank you as you show interest to put hand for AI-For-Beginners! We dey welcome translations, lesson corrections, and correct how e dey form. + +## Microsoft Contributor License Agreement (CLA) + +Dis project dey open for contributions and suggestions. Most contributions go need make you agree for Contributor License Agreement (CLA) wey talk say you get right and you really fit gimme us rights to use your contribution. For more info, visit [https://cla.microsoft.com](https://cla.microsoft.com). + +When you submit pull request, CLA-bot go check automatically if you need give CLA and go put correct label or comment for the PR. Just follow the instructions wey the bot go give you. You go need do this only one time for all repos wey dey use our CLA. + +## How to Put Hand + +### 1. Correct Typos / Code Wahala +If you see typo or bug for any Jupyter notebook or lesson markdown file: +1. Fork the repo. +2. Correct the typo or broken link. +3. Submit Pull Request wey clear explain the correction. + +### 2. Submit Translations +We dey welcome translations of lessons for other languages! Abeg put translations for `translations/` folder using the correct folder names wey dey there (like `translations/es/`, `translations/pt-BR/`, `translations/zh-CN/`). + +For more info, see [etc/CONTRIBUTING.md](etc/CONTRIBUTING.md). + +--- + + +**Disclaimer**: +Dis document don translate wit AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). Even tho we dey try make am correct, abeg make you know say automated translation fit get errors or mistakes. Di original document for dia own language na im be di correct source. For important info, make person wey sabi human translation do am. We no go responsible for any misunderstanding or wrong understanding wey fit happen because of dis translation. + \ No newline at end of file diff --git a/translations/pcm/examples/README.md b/translations/pcm/examples/README.md index e0916aba..0910dbeb 100644 --- a/translations/pcm/examples/README.md +++ b/translations/pcm/examples/README.md @@ -1,38 +1,38 @@ # Beginner-Friendly AI Examples -Welcome! Dis directory get simple, standalone examples wey go help you start wit AI and machine learning. Each example dey designed make e easy for beginners wit detailed comments and step-by-step explanation. +Welcome! Dis directory get simple, standalone examples to help you start wit AI and machine learning. Each example na beginner-friendly wit detailed comments and step-by-step explanations. ## 📚 Examples Overview | Example | Description | Difficulty | Prerequisites | |---------|-------------|------------|---------------| -| [Hello AI World](../../../examples/01-hello-ai-world.py) | Your first AI program - simple pattern recognition | ⭐ Beginner | Python basics | -| [Simple Neural Network](../../../examples/02-simple-neural-network.py) | Build a neural network from scratch | ⭐⭐ Beginner+ | Python, basic math | -| [Image Classifier](./03-image-classifier.ipynb) | Classify images wit pre-trained model | ⭐⭐ Beginner+ | Python, numpy | -| [Text Sentiment](../../../examples/04-text-sentiment.py) | Analyze text sentiment (positive/negative) | ⭐⭐ Beginner+ | Python | +| [Hello AI World](https://github.com/microsoft/AI-For-Beginners/blob/main/examples/01-hello-ai-world.py) | Your first AI program - simple pattern recognition | ⭐ Beginner | Python basics | +| [Simple Neural Network](https://github.com/microsoft/AI-For-Beginners/blob/main/examples/02-simple-neural-network.py) | Build a neural network from scratch | ⭐⭐ Beginner+ | Python, basic math | +| [Image Classifier](https://github.com/microsoft/AI-For-Beginners/blob/main/examples/03-image-classifier.ipynb) | Classify images with a pre-trained model | ⭐⭐ Beginner+ | Python, numpy | +| [Text Sentiment](https://github.com/microsoft/AI-For-Beginners/blob/main/examples/04-text-sentiment.py) | Analyze text sentiment (positive/negative) | ⭐⭐ Beginner+ | Python | ## 🚀 Getting Started ### Prerequisites -Make sure say you don install Python (3.8 or higher dey recommended). Install di required packages: +Make sure say you get Python installed (3.8 or higher dey recommended). Install di necessary packages: ```bash -# For Python scripts +# For Python skrip dem pip install numpy # For Jupyter notebooks (image classifier) pip install jupyter numpy pillow tensorflow ``` -Or use di conda environment wey dey di main curriculum: +Or use di conda environment from di main curriculum: ```bash conda env create --name ai4beg --file ../environment.yml conda activate ai4beg ``` -### Running di Examples +### Running the Examples **For Python scripts (.py files):** ```bash @@ -46,23 +46,23 @@ jupyter notebook 03-image-classifier.ipynb ## 📖 Learning Path -We recommend say you follow di examples one by one: +We recommend sey make you follow di examples in order: 1. **Start wit "Hello AI World"** - Learn di basics of pattern recognition 2. **Build a Simple Neural Network** - Understand how neural networks dey work -3. **Try di Image Classifier** - See AI in action wit real images +3. **Try di Image Classifier** - See AI for action wit real images 4. **Analyze Text Sentiment** - Explore natural language processing ## 💡 Tips for Beginners -- **Read di code comments well well** - Dem dey explain wetin each line dey do +- **Read di code comments well-well** - Dem dey explain wetin each line dey do - **Experiment!** - Try change values and see wetin go happen -- **No worry if you no understand everything** - Learning dey take time +- **No worry if you no understand everything** - Learning go take time - **Ask questions** - Use di [Discussion board](https://github.com/microsoft/AI-For-Beginners/discussions) ## 🔗 Next Steps -After you don complete dis examples, explore di full curriculum: +After you finish dem examples, explore di full curriculum: - [Introduction to AI](../lessons/1-Intro/README.md) - [Neural Networks](../lessons/3-NeuralNetworks/README.md) - [Computer Vision](../lessons/4-ComputerVision/README.md) @@ -70,18 +70,18 @@ After you don complete dis examples, explore di full curriculum: ## 🤝 Contributing -You find dis examples helpful? Help us make dem better: -- Report issues or suggest improvements +You find dem examples helpful? Help us make dem beta: +- Report any wahala or suggest how to improve am - Add more examples for beginners -- Improve documentation and comments +- Improve di documentation and comments --- -*Remember: Every expert na once beginner. Enjoy your learning! 🎓* +*Remember: Every expert bin once na beginner. Happy learning! 🎓* --- -**Disclaimer**: -Dis dokyument don use AI transle-shon service [Co-op Translator](https://github.com/Azure/co-op-translator) do di transle-shon. Even as we dey try make am correct, abeg sabi say transle-shon wey machine do fit get mistake or no dey accurate well. Di original dokyument for im native language na di one wey correct pass. For important mata, e good make una use professional human transle-shon. We no go fit take blame for any misunderstanding or wrong interpretation wey fit happen because una use dis transle-shon. +**Disclaimer**: +Dis document don translate wit AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). Even tho we dey try make am correct, abeg make you know say automated translation fit get errors or mistakes. Di original document for dia own language na im be di correct source. For important info, make person wey sabi human translation do am. We no go responsible for any misunderstanding or wrong understanding wey fit happen because of dis translation. \ No newline at end of file diff --git a/translations/pcm/lessons/0-course-setup/how-to-run.md b/translations/pcm/lessons/0-course-setup/how-to-run.md index f2e602e8..d3610456 100644 --- a/translations/pcm/lessons/0-course-setup/how-to-run.md +++ b/translations/pcm/lessons/0-course-setup/how-to-run.md @@ -1,12 +1,12 @@ -# How to Run the Code +# How to Run di Code -Dis curriculum get plenti executable examples and labs wey you go like run. To fit do dis, you need beta skill to execute Python code for Jupyter Notebooks wey dem provide as part of dis curriculum. You get plenty ways to run the code: +Dis curriculum get plenti executable example dem and lab dem wey you go like run. To fit do dis, you need di ability to run Python code for Jupyter Notebooks wey dem provide as part of dis curriculum. You get plenty options to run di code: -## Run locally on your computer +## Run am for your computer -To run the code for your computer, you need to get Python installation. One wey we fit recommend na to install **[miniconda](https://conda.io/en/latest/miniconda.html)** - e light well well and e support `conda` package manager for different Python **virtual environments**. +To run di code for your own computer, you need to install Python first. One wey we recommend na to install **[miniconda](https://conda.io/en/latest/miniconda.html)** - e light well well and e get support for `conda` package manager for different Python **virtual environments**. -After you don install miniconda, clone the repository and create one virtual environment to use for dis course: +After you don install miniconda, clone di repository and create virtual environment wey you go use for dis course: ```bash git clone http://github.com/microsoft/ai-for-beginners @@ -15,19 +15,19 @@ conda env create --name ai4beg --file .devcontainer/environment.yml conda activate ai4beg ``` -### Using Visual Studio Code with Python Extension +### How to Take Use Visual Studio Code with Python Extension -Dis curriculum better pass if you use am inside [Visual Studio Code](http://code.visualstudio.com/?WT.mc_id=academic-77998-cacaste) with [Python Extension](https://marketplace.visualstudio.com/items?itemName=ms-python.python&WT.mc_id=academic-77998-cacaste). +Dis curriculum beta pass if you open am for [Visual Studio Code](http://code.visualstudio.com/?WT.mc_id=academic-77998-cacaste) with [Python Extension](https://marketplace.visualstudio.com/items?itemName=ms-python.python&WT.mc_id=academic-77998-cacaste). -> **Note**: Once you clone and open the directory for VS Code, e go automatically remind you to install Python extensions. You go still need to install miniconda as we describe for top. +> **Note**: Once you clone am and open di folder for VS Code, e go automatically want make you install Python extensions. You still go need install miniconda as we talk for up. -> **Note**: If VS Code tell you make you re-open the repository for inside container, you suppose no do am, make you fit use local Python installation. +> **Note**: If VS Code tell you make you open repository again for container, no accept am if you wan use local Python installation. -### Using Jupyter in the Browser +### How to Use Jupyter for Browser -You fit still use Jupyter environment from your browser for your own computer. Both classical Jupyter and JupyterHub dey provide correct development environment with auto-completion, code highlighting, etc. +You fit also run Jupyter environment from your browser for your computer. Both classical Jupyter and JupyterHub dey give you beta development environment with auto-completion, code highlighting, and others. -To start Jupyter locally, waka go the directory wey hold the course, then run: +To start Jupyter for your computer, waka go the course directory, and run: ```bash jupyter notebook @@ -36,36 +36,36 @@ or ```bash jupyterhub ``` -You fit then waka go anybody `.ipynb` files, open dem and start to work. +After dat you fit open any `.ipynb` files, open dem and start to work. -### Running in container +### How to Run Inside Container -One other way to still run the code no be to install Python, na to run the code inside container. Because our repository get special `.devcontainer` folder wey talk how to build container for dis repo, VS Code go fit help you re-open the code inside container. Dis one require say you get Docker installed, and e still dey complex pass, so we recommend am only to people wey sabi well well. +One other way to run Python na to run am inside container. Because our repo get special `.devcontainer` folder wey dey show how to build container for this repo, VS Code dey give chance to open code for container. You go need Docker install, and e go get some yawa, so we recommend am for people wey sabi small. -## Running in the Cloud +## How to Run am for Cloud -If you no want install Python for your own computer, and you get access to cloud resources - one better way na to run the code for cloud. You get plenty ways to do am: +If you no wan install Python for your machine, and you get access to cloud resources - one beta option na to run code for cloud. You get different ways to do am: -* Use **[GitHub Codespaces](https://github.com/features/codespaces)**, wey be virtual environment wey dem create for you on top GitHub, and you fit use VS Code browser interface take access am. If you fit use Codespaces, you fit just click **Code** button for the repo, start codespace, and run am sharp sharp. -* Use **[Binder](https://mybinder.org/v2/gh/microsoft/ai-for-beginners/HEAD)**. [Binder](https://mybinder.org) dey offer free computer resources for cloud so people like you fit try run code from GitHub. For the front page, dem get button wey make you fit open the repo for Binder - dis one go take you go the binder site quick, wey go build container and start Jupyter web interface for you without wahala. +* Use **[GitHub Codespaces](https://github.com/features/codespaces)**, na virtual environment wey dem create for you for GitHub, wey fit enter through VS Code browser interface. If you get Codespaces access, you fit just click **Code** button for repo, start codespace and run quick quick. +* Use **[Binder](https://mybinder.org/v2/gh/microsoft/ai-for-beginners/HEAD)**. [Binder](https://mybinder.org) dey give free computing resources for cloud make people like you fit test some code wey dey GitHub. For front page, you go see button to open repo for Binder - e go carry you go binder site quick, wey go build container under and start Jupyter web interface for you without palava. -> **Note**: To stop misuse, Binder block some web resources. Dis one fit make some code no work, especially if the code dey fetch models and/or datasets from public Internet. You fit need find way workaround. Also, the compute resources wey Binder get, simple, so training go slow, especially for the later, more complex lessons. +> **Note**: To make sure say people no misuse am, Binder block some web resources. This fit make some code no work if dem dey fetch models or datasets from public Internet. You fit need find workaround. Compute resources wey Binder provide na basic level, so training go slow, especially for later, more complex lessons dem. -## Running in the Cloud with GPU +## How to Run am for Cloud with GPU -Some of the later lessons for dis curriculum go beta if dem get GPU support. Model training fit slow no GPU. You fit follow some options if you get cloud access through [Azure for Students](https://azure.microsoft.com/free/students/?WT.mc_id=academic-77998-cacaste), or from your school: +Some of di later lessons for dis curriculum go beta well if dem get GPU support. Model training fit be very slow if no get am. You fit follow some options, especially if you get cloud access from [Azure for Students](https://azure.microsoft.com/free/students/?WT.mc_id=academic-77998-cacaste), or from your school: -* Create [Data Science Virtual Machine](https://docs.microsoft.com/learn/modules/intro-to-azure-data-science-virtual-machine/?WT.mc_id=academic-77998-cacaste) and connect to am through Jupyter. You fit then clone the repo enter inside the machine, and start to learn. NC-series VMs get GPU support. +* Create [Data Science Virtual Machine](https://docs.microsoft.com/learn/modules/intro-to-azure-data-science-virtual-machine/?WT.mc_id=academic-77998-cacaste) and connect am through Jupyter. You fit clone di repo directly for the machine, and start to learn. NC-series VMs get GPU support. -> **Note**: Some subscriptions, including Azure for Students, no dey come with GPU support straight. You go need check to add GPU cores with technical support request. +> **Note**: Some subscriptions, including Azure for Students, no dey provide GPU support straight. You fit need request extra GPU cores with technical support. -* Create [Azure Machine Learning Workspace](https://azure.microsoft.com/services/machine-learning/?WT.mc_id=academic-77998-cacaste), then use Notebook feature for there. [Dis video](https://azure-for-academics.github.io/quickstart/azureml-papers/) show how to clone repository enter Azure ML notebook and start to use am. +* Create [Azure Machine Learning Workspace](https://azure.microsoft.com/services/machine-learning/?WT.mc_id=academic-77998-cacaste) and use Notebook feature for there. [Dis video](https://azure-for-academics.github.io/quickstart/azureml-papers/) show how to clone repo into Azure ML notebook and start to use am. -You fit still use Google Colab, wey get some free GPU support, and upload Jupyter Notebooks there take run dem one by one. +You fit also use Google Colab wey get some free GPU support, and upload Jupyter Notebooks make you run dem one by one. --- -**Warning**: -Dis document na translation wey AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator) do. Even though we try make am correct, make you sabi say automated translation fit get some mistakes or wahala. Di original document wey dey dia own language na di correct one. For important matter, e better make professional human person translate am. We no go responsible for any wrong understand or mix-up wey fit happen because of dis translation. +**Disclaimer**: +Dis document don translate wit AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). Even tho we dey try make am correct, abeg make you know say automated translation fit get errors or mistakes. Di original document for dia own language na im be di correct source. For important info, make person wey sabi human translation do am. We no go responsible for any misunderstanding or wrong understanding wey fit happen because of dis translation. \ No newline at end of file diff --git a/translations/pcm/lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb b/translations/pcm/lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb index 8d10589e..028203ef 100644 --- a/translations/pcm/lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb +++ b/translations/pcm/lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb @@ -6,9 +6,9 @@ "source": [ "# Pre-trained models and transfer learning\n", "\n", - "To train CNN fit take plenty time, and e go need plenty data for di work. But, most of di time na to learn di best low-level filters wey di network dey use to find patterns for images. One question wey fit come be - we fit use one neural network wey dem don train for one dataset and change am to dey classify different images without to train am from scratch?\n", + "Training CNNs fit kɔt plenti taim, an e need plenti data for dat work. Bot plenti taim, di taim na for learn di best low-level filters wey network dey use for find patterns for pictures. One natural question be dis - we fit use one neural network wey dem train on one dataset, then change am to classify different pictures without train am full time?\n", "\n", - "Dis method na **transfer learning**, because we dey carry some knowledge from one neural network model go another one. For transfer learning, we dey usually start with one pre-trained model, wey dem don train for one big image dataset, like **ImageNet**. Dis kind models fit already sabi well well how to find different features from normal images, and many times, just to build one classifier on top di features wey dem don find fit give better result.\n" + "Dis approach na **transfer learning**, because we go transfer some knowledge from one neural network model go another. For transfer learning, we normally start with pre-trained model, wey dem don train on one big picture dataset, like **ImageNet**. Dis kind models fit already do beta job to find different features from generic pictures, and for plenty cases, e be only to build classifier on top of di features wey dem find fit give good result.\n" ] }, { @@ -31,9 +31,9 @@ "source": [ "## Cats vs. Dogs Dataset\n", "\n", - "For dis unit, we go solve one real-life problem wey involve how to classify pictures of cats and dogs. Na why we go use [Kaggle Cats vs. Dogs Dataset](https://www.kaggle.com/c/dogs-vs-cats), wey you fit also download [from Microsoft](https://www.microsoft.com/en-us/download/details.aspx?id=54765&WT.mc_id=academic-77998-cacaste).\n", + "For dis unit, we go solve real-life wahala of classifying pictures of cats and dogs. Because of dis, we go use [Kaggle Cats vs. Dogs Dataset](https://www.kaggle.com/c/dogs-vs-cats), we fit also download am [from Microsoft](https://www.microsoft.com/en-us/download/details.aspx?id=54765&WT.mc_id=academic-77998-cacaste).\n", "\n", - "Make we download dis dataset and put am inside `data` folder (e fit take small time!):\n" + "Make we download dis dataset and commot am for `data` directory (dis one fit take some time!):\n" ] }, { @@ -64,7 +64,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Sadly, some image file for the dataset don spoil. We need quick cleaning to check for the spoil file dem. To make sure say this tutorial no scatter, we don move the code to check dataset go one module.\n" + "Shakara, some corrupted image files dey for inside the dataset. We gats do quick cleaning to check for corrupted files. So e no go spoil dis tutorial, we move di code wey dey verify dataset go inside one module.\n" ] }, { @@ -333,13 +333,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## How to Load Dataset\n", + "## Di Load Di Dataset\n", "\n", - "For di examples wey we don do before, we dey load datasets wey dey inside Keras already. But now, we go work with our own dataset, wey we go load from one folder wey get images.\n", + "For before example dem, we dey load datasets wey dey inside Keras. Now, we wan handle our own dataset, wey we need to load from one folder wey get image dem.\n", "\n", - "For real life, image datasets fit big well well, and e no go make sense to expect say all di data go fit enter memory. Na why datasets dey usually dey as **generators** wey fit return data small small for training.\n", + "For real life, size of image datasets fit big well-well, and e no possible say all di data go fit for memory. So, datasets dey often represent as **generators** wey fit give data small-small minibatches wey go good for training.\n", "\n", - "To handle image classification, Keras get one special function `image_dataset_from_directory`, wey fit load images from subfolders wey represent different classes. Dis function go also help scale di images, and e fit even divide di dataset into train and test parts:\n" + "For handle image classification, Keras get special function `image_dataset_from_directory`, wey fit load images from subdirectory dem wey represent different class. This function dey also help scale images, plus e fit split dataset into train and test parts:\n" ] }, { @@ -383,9 +383,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "E dey important make you set di same `seed` value for both calls, because e go affect how di images go divide between train and test dataset.\n", + "E important make you set di same `seed` value for both calls, becos e dey affect how e go split images between train and test dataset.\n", "\n", - "Dataset dey automatically pick class names from di directories, and you fit access dem if you need am by calling:\n" + "Dataset dey automatically carry class names from directories, and you fit access dem if you need am by calling:\n" ] }, { @@ -412,7 +412,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Datasets wey we don get fit pass go `fit` function to train di model. Dem get both di images and labels wey match, wey fit loop over using di construction wey dey below:\n" + "Datasets we don get fit well to pass direct to `fit` function to train di model. Dem get both di correct images and labels, we fit loop through dem using dis kain construction:\n" ] }, { @@ -453,7 +453,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "> **Note**: All di images wey dey di dataset na floatint point tensors wey get range 0-255. Before we go fit pass dem give di neural network, we need to scale di values go di 0-1 range. When we dey plot images, we go need do di same thing, or convert di values to di `int` type (wey we dey do for di code wey dey up), so dat `matplotlib` go sabi say we wan plot di original unscaled image.\n" + "> **Note**: Olodi pixta dem for di dataset na floatint point tensors wey get range 0-255. Before we fit pass dem go di neural network, we need scale di values dem enter 0-1 range. Wen we dey plot pixta dem, we go either do di same tins, or convert di values go `int` kain (wey we do for di code weh pass), so dat we fit show `matplotlib` say we wan plot di original unscaled pixta.\n" ] }, { @@ -462,7 +462,7 @@ "source": [ "## Pre-trained models\n", "\n", - "For plenty image classification work, person fit find pre-trained neural network models. Plenty of dis models dey inside `keras.applications` namespace, and even more models dey Internet. Make we see how we fit load and use di simplest VGG-16 model:\n" + "For plenty image classification work, person fit find pre-trained neural network models. Plenti of dem models dey for inside `keras.applications` namespace, plus more models fit still dey for Internet. Make we see how simplest VGG-16 model fit dey loaded and used:\n" ] }, { @@ -497,7 +497,17 @@ } ], "source": [ - "vgg = keras.applications.VGG16()\n", + "# SHA-256 of VGG16 weights (with top)\n", + "VGG16_WEIGHTS_SHA256 = '64373286793e3c8b2b4e3219cbf3544bce2f55ab4682710a29f5e7af8f5e4f61'\n", + "\n", + "_weights_path = keras.utils.get_file(\n", + " 'vgg16_weights_tf_dim_ordering_tf_kernels.h5',\n", + " 'https://storage.googleapis.com/tensorflow/keras-applications/vgg16/vgg16_weights_tf_dim_ordering_tf_kernels.h5',\n", + " file_hash=VGG16_WEIGHTS_SHA256,\n", + " hash_algorithm='sha256',\n", + ")\n", + "\n", + "vgg = keras.applications.VGG16(weights=_weights_path)\n", "inp = keras.applications.vgg16.preprocess_input(x_sample[:1])\n", "\n", "res = vgg(inp)\n", @@ -510,20 +520,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "E get some important things wey dey here:\n", - "\n", - "* Before you go fit pass input give any pre-trained network, you go need pre-process am in one kain way. You fit do dis one by calling the `preprocess_input` function wey dey, wey go collect batch of images, and return their processed form. For VGG-16 case, dem dey normalize images, and dem dey minus some pre-defined average value for each channel. Na because VGG-16 originally train with dis kain pre-processing.\n", - "\n", - "* Neural network go dey apply to the input batch, and the result wey we go get na batch of 1000-element tensors wey dey show probability of each class. To find the class wey get the highest probability, you fit call `argmax` for this tensor.\n", - "\n", - "* The result wey we get na [number of an `ImageNet` class](https://gist.github.com/yrevar/942d3a0ac09ec9e5eb3a). To understand wetin dis result mean, you fit use `decode_predictions` function, wey go return the top n classes plus their names.\n" + "E get some important tins wey dey here:\n", + "* Before you give any pre-trained network input, e need to get pre-processed for one kain way. Dis one dey do by calling di right `preprocess_input` function, wey dey carry batch of pictures come, then e return di way dem process am. For VGG-16 case, dem dey normalize pictures, den dem dey subtract some pre-set avarage value for each channel. Na because VGG-16 na im dem use dis kain pre-processing train am for beginning.\n", + "* Neural network go apply for di input batch, we go come get result as batch of 1000-element tensors wey dey show probability for each class. We fit find di class wey get highest chance by calling `argmax` for dis tensor.\n", + "* Di result we get na [number of `ImageNet` class](https://gist.github.com/yrevar/942d3a0ac09ec9e5eb3a). To understand dis result, we fit also use `decode_predictions` function, wey dey return di top n classes along with dia names.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Make we see di architecture of di VGG-16 network too:\n" + "Make we also check di architecture of di VGG-16 network:\n" ] }, { @@ -602,7 +609,7 @@ "source": [ "## GPU computations\n", "\n", - "Deep neural networks, like VGG-16 and other modern architectures need plenty power to run. E good make we use GPU acceleration if e dey available. Luckily, Keras go automatically make the computation fast for GPU if e dey available. We fit check if Tensorflow fit use GPU with this code:\n" + "Deep neural networks, like VGG-16 and oda more modern architectures need plenti computational power to run. E make sense to use GPU acceleration, if e dey available. Luckily, Keras go automatically speed up di computations on top di GPU if e dey available. We fit check if Tensorflow fit use GPU by using dis code weh dey below:\n" ] }, { @@ -629,9 +636,10 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## How to comot VGG features\n", "\n", - "If we wan use VGG-16 take comot features from our images, we go need the model wey no get the final classification layers. We fit create VGG-16 model wey no get top layers wit dis code:\n" + "## Extracting VGG features\n", + "\n", + "If we want to use VGG-16 to extract features from our images, we need the model without final classification layers. We fit for use VGG-16 model without di top layers by dis code:\n" ] }, { @@ -683,9 +691,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Di size of di feature tensor na 7x7x512, but to fit see am well, we gatz change am to 2D form.\n", + "Di size of feature tensor na 7x7x512, but to fit see am we gats change am go 2D shape.\n", "\n", - "Make we try see if di features fit help us classify images. We go manually carry some part of di images (50 minibatches for dis case), and pre-compute dia feature vectors. We fit use Tensorflow **dataset** API do am. Di `map` function dey carry dataset and apply di lambda-function wey dem give am to change am. We go use dis method take build new datasets, `ds_features_train` and `ds_features_test`, wey go get VGG-extracted features instead of di original images.\n" + "Now make we try see if dem features fit help classify images. Make we manually take some part of images (50 minibatches, for our case), and pre-calculate dia feature vectors. We fit use Tensorflow **dataset** API do dat. `map` function dey carry dataset come apply one lambda-function transform am. We dey use dis way take build new datasets, `ds_features_train` and `ds_features_test`, wey carry VGG-extracted features no be original images.\n" ] }, { @@ -715,9 +723,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We use `.take(50)` to make the dataset small, so say the demo go quick. But you fit still run this experiment for the full dataset if you wan.\n", + "We use construction `.take(50)` to limit di dataset size, to make our demonstration fast. You fit do dis experiment for di full dataset if you want.\n", "\n", - "Now we don get dataset wey get the features wey we extract, we fit train one simple dense classifier wey go sabi tell the difference between cat and dog. This network go use feature vector wey get shape (7,7,512), and e go give one output wey go show whether na dog or cat. Since na binary classification, we go use `sigmoid` activation function and `binary_crossentropy` loss.\n" + "Now we don get dataset wey get extracted features, we fit train simple dense classifier to sabi diference between cat dem and dog dem. Dis network go take feature vector wey get shape (7,7,512), and e go produce one output wey fit be dog or cat. Because na binary classification na so, we dey use `sigmoid` activation function and `binary_crossentropy` loss.\n" ] }, { @@ -746,13 +754,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Di result dey very good, we fit sabi di difference between cat and dog wit almost 95% chance! But, we don test dis method only for small part of di images, because di manual way wey we dey use take find di features dey take plenty time.\n", + "Di result beta well well, we fit sabi difference between cat and dog with like 95% chance! But, we just use dis method on small part of all di images, becos to do manual feature extraction dey take plenty time.\n", "\n", - "## Transfer learning wit one VGG network\n", + "## Transfer learning wey use one VGG network\n", "\n", - "We fit also dodge di wahala of manually dey calculate di features by using di original VGG-16 network complete during training, by adding feature extractor as di first layer for our network.\n", + "We fit still avoid to dey manually pre-compute di features by to use di original VGG-16 network as one whole during di training, by to add feature extractor to our network as di first layer. \n", "\n", - "Di sweet part of Keras architecture be say di VGG-16 model wey we don define before fit still work as one layer inside another neural network! Wetin we go do na to build one network wey get dense classifier on top am, then train di whole network using back propagation.\n" + "Di sweet point for Keras architecture na say VGG-16 model wey we don define before fit still dey use as layer inside another neural network! We just need build one network wey get dense classifier for top, then train di whole network by back propagation.\n" ] }, { @@ -796,13 +804,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Dis model be like end-to-end classification network wey go take one image and return di class. But di wahala be say we wan make VGG16 work as feature extractor, and we no wan re-train am. So, we gatz **freeze di weights of di convolutional feature extractor**. We fit access di first layer of di network by calling `model.layers[0]`, and we just need to set di `trainable` property to `False`.\n", + "Dis model look like one end-to-end classification network, wey dey take image come return di class. But di tricky tin na say we want make VGG16 act as feature extractor, and no make e dey re-trained. So, we need make we **freeze weights of convolutional feature extractor**. We fit access di first layer of di network by calling `model.layers[0]`, and we just need set `trainable` property to `False`.\n", "\n", - "> **Note**: To freeze di weights of di feature extractor dey important, because if we no do am, di untrained classifier layer fit scatter di original pre-trained weights of di convolutional extractor.\n", + "> **Note**: Freezing of feature extractor weights dey important, because if no be so, di untrained classifier layer fit spoil di original pre-trained weights of di convolutional extractor.\n", "\n", - "You go notice say even though di total number of parameters for our network na about 15 million, na only 25k parameters we dey train. All di other parameters for di top-level convolutional filters don already dey pre-trained. Dis one good, because e mean say we fit fine-tune smaller number of parameters with smaller number of examples.\n", + "You fit notice say even though di total number of parameters for our network na about 15 million, we dey train only 25k parameters. All di other parameters for top-level convolutional filters na pre-trained. Dat one good, because e mean say we fit fine-tune smaller number of parameters with smaller number of examples.\n", "\n", - "We go now train our network and see how good e go be. Expect say e go take long time to run, and no worry if e be like say e don hang for some time.\n" + "Now, we go train our network and see how better e fit be. Expect say e go take time, and no worry if e look like say e stuck for small time.\n" ] }, { @@ -827,11 +835,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "E be like say we don get classifier wey dey sabi well well for cats vs. dogs!\n", + "E dey look like sey we don get beta cats vs. dogs classifier wey correct well! \n", "\n", - "## How to Save and Load Di Model\n", + "## How to Save and Load Model\n", "\n", - "Once we don train di model finish, we fit save di model architecture and di trained weights for one file so we fit use am later:\n" + "Once we don train di model, we fit save di model design and di trained weights for one file to use later:\n" ] }, { @@ -855,7 +863,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We fit load di model from file anytime. E go fit help if di next experiment spoil di model - you no go need start from di beginning again.\n" + "Afeter dat, we fit load di model from inside file any time. E fit help you if di next experiment spoil di model - you no go need start di whole thing from beginning again.\n" ] }, { @@ -873,13 +881,13 @@ "source": [ "## Fine-tuning transfer learning\n", "\n", - "For di previous section, we don train di final classifier layer to fit classify images for our own dataset. But, we no re-train di feature extractor, and our model dey depend on di features wey di model don learn from ImageNet data. If di objects for your dataset no resemble di normal ImageNet images, dis kind features fit no work well. So, e make sense to start to train di convolutional layers too.\n", + "For di last section, we don train di final classifier layer to sabi classify pictures inside our own dataset. But, we no bin re-train di feature extractor, and our model dey depend on di features wey di model don learn from ImageNet data. If your somtin dem look different from di normal ImageNet pictures, dis kain feature combination fit no work well. So e go make sense to start train di convolutional layers too.\n", "\n", - "To do dis one, we fit unfreeze di convolutional filter parameters wey we don freeze before.\n", + "To do that one, we fit unfreeze di convolutional filter parameters wey we bin freeze before.\n", "\n", - "> **Note:** E dey important say you freeze di parameters first and do some epochs of training to make di weights for di classification layer stable. If you just start to train di whole network with unfrozen parameters, big errors fit scatter di pre-trained weights for di convolutional layers.\n", + "> **Note:** E important say you first freeze di parameters and do several epochs of training to make sure say di weights for di classification layer dey stable. If you start train di whole network with unfrozen parameters immediately, big errors fit spoil di pre-trained weights for di convolutional layers dem.\n", "\n", - "Our convolutional VGG-16 model dey inside di first layer, and e get plenty layers inside am. We fit check how e structure be:\n" + "Our convolutional VGG-16 model dey inside di first layer, and e get many layers on top of itself. We fit first look how e be: \n" ] }, { @@ -948,7 +956,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We fit unfreeze all di layers for convolutional base:\n" + "We fit unfreeze all layers wey dey for convolutional base:\n" ] }, { @@ -964,7 +972,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "But to unfreeze all of dem at once no be di best idea. We fit first unfreeze just small final layers of di convolutions, because dem get higher level patterns wey dey relevant for our images. For example, to start, we fit freeze all di layers except di last 4:\n" + "But, unfreeze all of dem at once no be da best plan. We fit first unfreeze small final layers of convolution, because dem get better level patterns wey dey important for our images. For example, to start, we fit freeze all layers except the last 4: \n" ] }, { @@ -1003,11 +1011,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Make you notice say di number of trainable parameters don increase well well, but e still dey around 50% of all di parameters.\n", + "Observe seh di number of trainable parameters don increase well well, but e still dey around 50% of all parameters.\n", "\n", - "After we don unfreeze am, we fit run small more epochs for training (for our example, we go just do one). You fit also choose lower learning rate, so dat e go reduce di wahala wey e go cause for di pre-trained weights. But even if you use low learning rate, you fit still see say accuracy go first drop for di beginning of di training, before e go finally reach small higher level pass di one wey fixed weights get.\n", + "After we unfreeze am, we fit do few more epochs of training (for our example, we go do just one). You fit still choose lower learning rate, so dat e go reduce di effect for di pre-trained weights. But, even wit low learning rate, you fit expect say di accuracy go drop for di beginning of di training, until e finally reach small higher level pass wetin dey for fixed weights.\n", "\n", - "> **Note:** Dis training dey slow well well, because we need to send gradients go back through plenty layers for di network!\n" + "> **Note:** Dis training dey happen slow well well, because we need to carry gradients back through many layers of di network!\n" ] }, { @@ -1031,18 +1039,18 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We fit get beta training accuracy, because we dey use stronger network wey get more parameters, but validation accuracy no go increase reach like dat.\n", + "We fit get beta training accuracy, becos we dey use more powerful network wey get more parameters, but validation accuracy no go increase reach dat level.\n", "\n", - "No wahala to unfreeze some more layers for the network and train am more, make you see if you fit get higher accuracy!\n" + "No shy to unfreeze few more layers for di network come train more, make you see if you fit get higher accuracy!\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Other computer vision models\n", + "## Ada oda komputer vision models\n", "\n", - "VGG-16 na one of di simplest computer vision architectures. Keras get plenty more pre-trained networks. Di ones wey people dey use pass na **ResNet** architectures, wey Microsoft develop, and **Inception** wey Google make. For example, make we check di architecture of di simplest ResNet-50 model (ResNet na family of models wey get different depth, you fit try experiment with ResNet-152 if you wan see how really deep model go be):\n" + "VGG-16 na one of di simplest computer vision architectures. Keras get plenti pre-trained networks dem. Di ones wey dem dey use pass among dem na **ResNet** architectures, wey Microsoft develop, and **Inception** by Google. For example, make we check di architecture of di simplest ResNet-50 model (ResNet na family of models wey get different depth, you fit try play with ResNet-152 if you want see how deep model be):\n" ] }, { @@ -1444,29 +1452,29 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "As you fit see, di model get di same kind building blocks wey we sabi: convolutional layers, pooling layers, and di final dense classifier. We fit use dis model di same way we dey use VGG-16 for transfer learning. You fit try play around wit di code wey dey up, use different ResNet models as di base model, and check how di accuracy go change.\n", + "As you fit see am, di model get di same normal building blocks: convolutional layers, pooling layers and final dense classifier. We fit use dis model di same way we dey use VGG-16 for transfer learning. You fit try play wit di code wey dey up, use different ResNet models as base model, come see as e go change accuracy.\n", "\n", "## Batch Normalization\n", "\n", - "Dis network get one kain new layer wey dem dey call: **Batch Normalization**. Di idea of batch normalization na to make sure say di values wey dey pass through di neural network dey for di correct range. Normally, neural networks dey work well when all di values dey for di range of [-1,1] or [0,1], and na why we dey scale/normalize our input data well well. But, as we dey train deep network, e fit happen say di values go waka comot from dis range, and e go make training hard. Batch normalization layer dey calculate di average and standard deviation for all di values wey dey di current minibatch, and e go use dem take normalize di signal before e pass am through di neural network layer. Dis thing dey help make deep networks stable well well.\n" + "Dis network get another kain layer: **Batch Normalization**. Di idea of batch normalization be say e dey bring di values wey dey flow inside di neural network enter correct level. Usually, neural networks dey work best wen all di values dey inside range of [-1,1] or [0,1], and na im be di reason why we dey scale/normalize our input data like dat. But, wen you dey train deep network, e fit happen say di values go comot well well for dis range, and dat one fit make training hard. Batch normalization layer dey calculate average and standard deviation for all di values for di current minibatch, and e go use dem normalize di signal before e carry am pass into neural network layer. Dis one dey help improve how deep networks dey steady well well.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Wetin we learn\n", + "## Takeaway\n", "\n", - "Wit transfer learning, we fit quick quick put classifier together for our custom object classification work, and we get beta accuracy. But dis example no too fair, because di original VGG-16 network wey we use don already train to sabi cats and dogs, so we just dey reuse most of di patterns wey dey di network already. If na objects wey dey more rare or special, like details for production line for factory, or different tree leaves, di accuracy fit no high like dis one.\n", + "Wit transfer learning, we fit quickly put together classifier for our custom object classification work, and get high accuracy. But, dis example no too fair because original VGG-16 network don pre-train to sabi cats and dogs, so na so we just dey reuse most of di patterns wey already dey inside the network. You fit expect say accuracy go low if na more exotic domain-specific objects, like details for production line for plant, or different tree leaves.\n", "\n", - "You fit see say di harder tasks wey we dey solve now need more beta computer power, and e no go easy to solve am for CPU. For di next unit, we go try use lighter implementation to train di same model wit less computer resources, wey go still give almost di same accuracy.\n" + "You go see say di more complex tasks we dey try solve now need better computational power, and e no fit easy to solve for CPU. For di next unit, we go try use lightweight implementation train di same model wit less compute resources, wey go just make accuracy small small lower. \n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "---\n\n\n**Disclaimer**: \nDis dokyument don translate wit AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). Even though we dey try make am accurate, abeg make you sabi say machine translation fit get mistake or no dey correct well. Di original dokyument for di language wey dem write am first na di main source wey you go trust. For important information, e better make professional human translator check am. We no go fit take blame for any misunderstanding or wrong interpretation wey fit happen because you use dis translation.\n\n" + "---\n\n\n**Disclaimer**:\nDis document don translate wit AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). Even tho we dey try make am correct, abeg make you know say automated translation fit get errors or mistakes. Di original document for dia own language na im be di correct source. For important info, make person wey sabi human translation do am. We no go responsible for any misunderstanding or wrong understanding wey fit happen because of dis translation.\n\n" ] } ], @@ -1487,12 +1495,6 @@ "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.10" - }, - "coopTranslator": { - "original_hash": "c189abc107848f96051085cc30945129", - "translation_date": "2025-11-18T19:01:33+00:00", - "source_file": "lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb", - "language_code": "pcm" } }, "nbformat": 4, diff --git a/translations/pcm/lessons/5-NLP/README.md b/translations/pcm/lessons/5-NLP/README.md index 73096095..cf24b889 100644 --- a/translations/pcm/lessons/5-NLP/README.md +++ b/translations/pcm/lessons/5-NLP/README.md @@ -2,33 +2,33 @@ ![Summary of NLP tasks in a doodle](../../../../translated_images/pcm/ai-nlp.b22dcb8ca4707cea.webp) -For dis section, we go focus on how Neural Networks fit handle tasks wey relate to **Natural Language Processing (NLP)**. Plenty NLP problems dey wey we wan make computer sabi solve: +For dis section, we go focus on how to take use Neural Networks do tasks wey get to do with **Natural Language Processing (NLP)**. Plenty NLP problems dey we want make computer fit solve dem: -* **Text classification** na one kind classification problem wey concern text sequences. Example na to classify e-mail messages as spam or no-spam, or to categorize articles as sport, business, politics, etc. Plus, when we dey develop chat bots, we go need understand wetin user wan talk -- for dis case, we dey deal with **intent classification**. Many times, for intent classification, we go need handle plenty categories. -* **Sentiment analysis** na one kind regression problem, wey we go need give number (sentiment) wey show how positive/negative the meaning of one sentence be. One advanced version of sentiment analysis na **aspect-based sentiment analysis** (ABSA), wey sentiment no dey for the whole sentence, but for different parts of am (aspects), e.g. *For dis restaurant, I like the food, but the atmosphere bad well well*. -* **Named Entity Recognition** (NER) na the problem of extracting certain entities from text. For example, we fit need understand say for the phrase *I need to fly to Paris tomorrow* the word *tomorrow* mean DATE, and *Paris* na LOCATION. -* **Keyword extraction** dey similar to NER, but we go need extract words wey dey important to the meaning of the sentence automatically, without pre-training for specific entity types. -* **Text clustering** fit help when we wan group similar sentences together, e.g., similar requests for technical support conversations. -* **Question answering** na the ability of one model to answer specific question. The model go receive one text passage and one question as inputs, and e go need provide the place for the text wey the answer to the question dey (or, sometimes, generate the answer text). -* **Text Generation** na the ability of one model to generate new text. E fit be classification task wey dey predict next letter/word based on some *text prompt*. Advanced text generation models, like GPT-3, fit solve other NLP tasks like classification using one technique wey dem dey call [prompt programming](https://towardsdatascience.com/software-3-0-how-prompting-will-change-the-rules-of-the-game-a982fbfe1e0) or [prompt engineering](https://medium.com/swlh/openai-gpt-3-and-prompt-engineering-dcdc2c5fcd29) -* **Text summarization** na technique wey we wan make computer "read" long text and summarize am for few sentences. -* **Machine translation** fit be like combination of text understanding for one language, and text generation for another one. +* **Text classification** na typical classification wahala wey concern text sequence. Examples na to classify e-mail messages as spam or no-spam, or to categorize articles as sport, business, politics, etc. Also, for making chat bots, we dey need to understand wetin person dey try talk -- for this case, na **intent classification** we dey do. Plenty times, for intent classification, we get plenty categories wey we need handle. +* **Sentiment analysis** na typical regression wahala, where we need put number (sentiment) wey match how positive/negative meaning of sentence be. One advanced kind sentiment analysis na **aspect-based sentiment analysis** (ABSA), where we no dey put sentiment for whole sentence but for different parts (aspects), e.g. *For this restaurant, I like the cuisine, but the atmosphere no too good*. +* **Named Entity Recognition** (NER) mean say you go find some entities for text. For example, we go need understand say for the phrase *I need to fly to Paris tomorrow* the word *tomorrow* na DATE, and *Paris* be LOCATION. +* **Keyword extraction** similar to NER, but na words wey important to sentence meaning we dey find automatically, without pre-training for particular entity types. +* **Text clustering** fit help when we want group similar sentences together, like similar requests for technical support talk. +* **Question answering** mean say model fit answer specific question. The model go receive text passage plus question, and e need show place for text wey answer dey (or sometimes, generate answer text). +* **Text Generation** mean say model fit generate new text. E fit be classification task wey dey predict next letter/word based on some *text prompt*. Advanced text generation models, like GPT-3, fit solve other NLP tasks like classification using technique wey dem dey call [prompt programming](https://towardsdatascience.com/software-3-0-how-prompting-will-change-the-rules-of-the-game-a982fbfe1e0) or [prompt engineering](https://medium.com/swlh/openai-gpt-3-and-prompt-engineering-dcdc2c5fcd29) +* **Text summarization** na technique wey we want make computer "read" long text and summarize am inside few sentences. +* **Machine translation** fit be combination of understanding text for one language and generating text for another language. -Before before, most NLP tasks dey solved using traditional methods like grammars. For example, for machine translation, parsers dey transform initial sentence into syntax tree, then higher level semantic structures go dey extracted to represent the meaning of the sentence, and based on dis meaning and grammar of the target language, dem go generate the result. Nowadays, many NLP tasks dey solved better with neural networks. +Before before, most NLP tasks dem dey solve am with traditional methods like grammar. For example, for machine translation, dem dey use parsers to turn sentence into syntax tree, then dem dey find better semantic structures to represent meaning of sentence, and based on this meaning and grammar of language, the result dey generated. Nowadays, plenty NLP tasks better to solve with neural networks. -> Many classical NLP methods dey implemented for [Natural Language Processing Toolkit (NLTK)](https://www.nltk.org) Python library. One better [NLTK Book](https://www.nltk.org/book/) dey online wey dey cover how different NLP tasks fit dey solved using NLTK. +> Plenty classical NLP methods dey inside [Natural Language Processing Toolkit (NLTK)](https://www.nltk.org) Python library. Good [NLTK Book](https://www.nltk.org/book/) dey online wey talk how to solve different NLP tasks with NLTK. -For dis course, we go mostly focus on how to use Neural Networks for NLP, and we go use NLTK where e dey necessary. +For our course, we go mainly use Neural Networks for NLP, and we go use NLTK where e need. -We don already learn how to use neural networks to handle tabular data and images. The main difference between those types of data and text be say text na sequence wey get variable length, while the input size for images dey known before. While convolutional networks fit extract patterns from input data, patterns for text dey more complex. E.g., we fit get negation wey dey separate from the subject by plenty words (e.g. *I no like oranges*, vs. *I no like those big colorful tasty oranges*), and we still suppose interpret am as one pattern. So, to handle language, we need introduce new neural network types, like *recurrent networks* and *transformers*. +We don already learn about how to use neural networks to handle tabular data and images. Main difference between those data and text na say text na variable length sequence, but input size for images dey known before. Convolutional networks fit find patterns for input data, but patterns for text more complex. Eg., negation fit dey far from subject for many words (eg. *I do not like oranges*, vs. *I do not like those big colorful tasty oranges*), but we still suppose consider am as one pattern. So, to handle language, we need new neural network types like *recurrent networks* and *transformers*. ## Install Libraries -If you dey use local Python installation to run dis course, you fit need install all the libraries wey you need for NLP using dis commands: +If you dey use local Python install to run dis course, you fit need install all NLP libraries with these commands: **For PyTorch** ```bash -pip install -r requirements-torch.txt +pip install -r requirements-pytorch.txt ``` **For TensorFlow** ```bash @@ -39,13 +39,13 @@ pip install -r requirements-tf.txt ## GPU Warning -For dis section, for some of the examples, we go dey train big models. -* **Use GPU-Enabled Computer**: E good make you run your notebooks for GPU-enabled computer to reduce waiting time when you dey work with big models. -* **GPU Memory Constraints**: If you dey use GPU, e fit lead to situations wey GPU memory go finish, especially when you dey train big models. -* **GPU Memory Consumption**: The amount of GPU memory wey training dey use depend on different factors, including the minibatch size. -* **Minimize Minibatch Size**: If GPU memory dey give wahala, try reduce the minibatch size for your code as one possible solution. -* **TensorFlow GPU Memory Release**: Old versions of TensorFlow fit no dey release GPU memory well when you dey train multiple models for one Python kernel. To manage GPU memory usage well, you fit configure TensorFlow to allocate GPU memory only when e dey needed. -* **Code Inclusion**: To make TensorFlow grow GPU memory allocation only when e dey needed, add dis code for your notebooks: +For this section, for some examples we go train big models. +* **Use GPU Enabled Computer**: E good make you run notebook for GPU enabled computer to reduce waiting time when you dey work with big models. +* **GPU Memory Constraints**: If you run am for GPU, e fit happen say GPU memory go finish, especially if model big. +* **GPU Memory Consumption**: How much GPU memory you go use during training depend on many factors, including minibatch size. +* **Minimize Minibatch Size**: If GPU memory wahala show, try reduce minibatch size for your code. +* **TensorFlow GPU Memory Release**: Some old TensorFlow versions no dey release GPU memory well when you dey train many models inside one Python kernel. To manage GPU memory well, you fit set TensorFlow make e allocate GPU memory only as e need am. +* **Code Inclusion**: If you want TensorFlow to grow GPU memory allocation only as e need am, put this code inside your notebooks: ```python physical_devices = tf.config.list_physical_devices('GPU') @@ -53,10 +53,10 @@ if len(physical_devices)>0: tf.config.experimental.set_memory_growth(physical_devices[0], True) ``` -If you wan learn about NLP from classic ML perspective, visit [dis suite of lessons](https://github.com/microsoft/ML-For-Beginners/tree/main/6-NLP) +If you want learn NLP from classic ML side, check [this suite of lessons](https://github.com/microsoft/ML-For-Beginners/tree/main/6-NLP) -## For dis Section -For dis section, we go learn about: +## For this Section +For this section, we go learn about: * [How to represent text as tensors](13-TextRep/README.md) * [Word Embeddings](14-Emdeddings/README.md) @@ -68,6 +68,6 @@ For dis section, we go learn about: --- -**Disclaimer**: -Dis dokyument don translate wit AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). Even as we dey try make am accurate, abeg sabi say machine translation fit get mistake or no dey correct well. Di original dokyument for im native language na di main source wey you go fit trust. For important information, e better make professional human translator check am. We no go fit take blame for any misunderstanding or wrong interpretation wey fit happen because you use dis translation. +**Disclaimer**: +Dis document don translate wit AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). Even tho we dey try make am correct, abeg make you know say automated translation fit get errors or mistakes. Di original document for dia own language na im be di correct source. For important info, make person wey sabi human translation do am. We no go responsible for any misunderstanding or wrong understanding wey fit happen because of dis translation. \ No newline at end of file diff --git a/translations/te/.co-op-translator.json b/translations/te/.co-op-translator.json index a0f4bad9..787fd14e 100644 --- a/translations/te/.co-op-translator.json +++ b/translations/te/.co-op-translator.json @@ -5,6 +5,12 @@ "source_file": "AGENTS.md", "language_code": "te" }, + "CONTRIBUTING.md": { + "original_hash": "c6fd7e781b67111a90abd166d0ce4aa0", + "translation_date": "2026-07-08T18:24:41+00:00", + "source_file": "CONTRIBUTING.md", + "language_code": "te" + }, "README.md": { "original_hash": "12c8eb6bf0867d2f1c32daf613ac5b8b", "translation_date": "2026-04-06T16:08:14+00:00", @@ -17,6 +23,19 @@ "source_file": "SECURITY.md", "language_code": "te" }, + "__translation_failures__": { + "lessons/sketchnotes/LICENSE.md": { + "original_hash": "45ab63a2cd8f5faef6c9b150618837a4", + "source_file": "lessons/sketchnotes/LICENSE.md", + "language_code": "te", + "failure_date": "2026-07-08T18:24:16+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-11-25T20:21:56+00:00", @@ -54,8 +73,8 @@ "language_code": "te" }, "examples/README.md": { - "original_hash": "0d1babfdcbeb46525f2db3fbaaa54cd7", - "translation_date": "2025-11-25T20:32:59+00:00", + "original_hash": "7883d52c2e2a221e0b07a7b112a149b9", + "translation_date": "2026-07-08T18:20:41+00:00", "source_file": "examples/README.md", "language_code": "te" }, @@ -66,8 +85,8 @@ "language_code": "te" }, "lessons/0-course-setup/how-to-run.md": { - "original_hash": "a4717bd9103b9f6cd84d534b83534689", - "translation_date": "2026-01-16T07:36:36+00:00", + "original_hash": "7ad8c7d8604c53649b3d4d1e2f3a6fa1", + "translation_date": "2026-07-08T18:20:58+00:00", "source_file": "lessons/0-course-setup/how-to-run.md", "language_code": "te" }, @@ -191,6 +210,12 @@ "source_file": "lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md", "language_code": "te" }, + "lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb": { + "original_hash": "99b816b6a4957ef4100cee4c4221dff9", + "translation_date": "2026-07-08T18:10:33+00:00", + "source_file": "lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb", + "language_code": "te" + }, "lessons/4-ComputerVision/08-TransferLearning/lab/README.md": { "original_hash": "7765935c35fcee69b9fe2d0cfd6963e2", "translation_date": "2025-11-25T22:43:23+00:00", @@ -330,8 +355,8 @@ "language_code": "te" }, "lessons/5-NLP/README.md": { - "original_hash": "8ef02a9318257ea140ed3ed74442096d", - "translation_date": "2025-11-25T21:12:36+00:00", + "original_hash": "038df6f1a73e49f6430740da083bfd6d", + "translation_date": "2026-07-08T18:21:20+00:00", "source_file": "lessons/5-NLP/README.md", "language_code": "te" }, diff --git a/translations/te/CONTRIBUTING.md b/translations/te/CONTRIBUTING.md new file mode 100644 index 00000000..e27ec933 --- /dev/null +++ b/translations/te/CONTRIBUTING.md @@ -0,0 +1,29 @@ +# AI-For-Beginners కి సహకరించడం + +AI-For-Beginners లో సహకరించడానికి మీ ఆసక్తికి ధన్యవాదాలు! మేము అనువాదాలు, పాఠం సవరణలు మరియు ఫార్మాటింగ్ సరిదిద్దుటలను స్వాగతిస్తాము. + +## Microsoft సహకారదారు లైసెన్స్ ఒప్పందం (CLA) + +ఈ ప్రాజెక్ట్ సహకారాలు మరియు సూచనలను స్వాగతిస్తుంది. ఎక్కువ భాగమైన సహకారాలకు మీరు ఒక సహకారదారు లైసెన్స్ ఒప్పందాన్ని (CLA) అంగీకరించాల్సి ఉంటుంది, ఇది మీరు మీ సహకారాన్ని ఉపయోగించే హక్కుల కలిగి ఉన్నారని మరియు వాటిని మాకు ఇవ్వడం జరిగింది అని ప్రకటిస్తుంది. వివరాలకు, [https://cla.microsoft.com](https://cla.microsoft.com) ను చూడండి. + +మీరు ఒక పుల్ రిక్వెస్ట్ సబ్మిట్ చేసినప్పుడు, CLA-బాట్ స్వయంచాలకంగా మీరు CLA అందించాల్సి ఉందో లేదో నిర్ణయించి PR ను తగినట్లు అలంకరిస్తుంది (ఉదాహరణకు, లేబుల్, వ్యాఖ్య). బాట్ ఇచ్చే సూచనలను పాటించండి. మా CLA ఉపయోగించే అన్ని రెపోల్లో మీరు ఒక్కసారి దీన్ని చేయవలసి ఉంటుంది. + +## ఎలా సహకరించాలి + +### 1. టైపోస్ / కోడ్ పొరపాట్లు సరిచేయడం +మీరు ఏ Jupyter నోట్‌బుక్ లేదా పాఠం మార్క్‌డౌన్ ఫైలులో టైపో లేదా బగ్ కనుగొన్నట్లయితే: +1. రెపోను ఫోర్క్ చేయండి. +2. టైపో లేదా బ్రోకెన్ లింక్ ని సరిచేయండి. +3. సరిదిద్దిన విషయమును స్పష్టంగా వివరించునట్లు పుల్ రిక్వెస్ట్ సబ్మిట్ చేయండి. + +### 2. అనువాదాలను సమర్పించడం +మేము పాఠాలను మరొక భాషలకు అనువాదాలను స్వాగతిస్తాము! దయచేసి అనువాదాలను ప్రస్తుతం ఉన్న ఫొల్డర్ పేర్లను ఉపయోగించుకుని `translations/` డైరెక్టరీ కింద ఉంచండి (ఉదాహరణకు `translations/es/`, `translations/pt-BR/`, `translations/zh-CN/`). + +మరిన్ని వివరాలకు, [etc/CONTRIBUTING.md](etc/CONTRIBUTING.md) ను చూడండి. + +--- + + +**అస్వీకరణ**: +ఈ పత్రం AI అనువాద సేవ [Co-op Translator](https://github.com/Azure/co-op-translator) ఉపయోగించి అనువదించబడింది. మేము ఖచ్చితత్వానికి ప్రయత్నిస్తున్నప్పటికీ, ఆటోమేటెడ్ అనువాదాలు తప్పులు లేదా అసమగ్రతలను కలిగి ఉండవచ్చు. దాని స్వదేశ భాషలో ఉన్న అసలు పత్రాన్ని అధికారం కలిగిన మూలంగా పరిగణించాలి. కీలకమైన సమాచారం కోసం, ప్రొఫెషనల్ మానవ అనువాదాన్ని సిఫారసు చేస్తాము. ఈ అనువాదం ఉపయోగం వల్ల కలిగే ఏవైనా అపార్థాలు లేదా తప్పుదారులు కోసం మేము బాధ్యత వహించము. + \ No newline at end of file diff --git a/translations/te/examples/README.md b/translations/te/examples/README.md index dc570f20..3aec9841 100644 --- a/translations/te/examples/README.md +++ b/translations/te/examples/README.md @@ -1,87 +1,87 @@ -# ప్రారంభికులకు అనుకూలమైన AI ఉదాహరణలు +# ప్రారంభికులకు ఉపయుక్తమైన AI ఉదాహరణలు -స్వాగతం! ఈ డైరెక్టరీలో AI మరియు మెషీన్ లెర్నింగ్ ప్రారంభించడానికి సహాయపడే సులభమైన, స్వతంత్ర ఉదాహరణలు ఉన్నాయి. ప్రతి ఉదాహరణ ప్రారంభికులకు అనుకూలంగా, వివరమైన వ్యాఖ్యలతో మరియు దశల వారీ వివరణలతో రూపొందించబడింది. +స్వాగతం! ఈ డైరెక్టరీలో AI మరియు మెషిన్ లెర్నింగ్‌తో ప్రారంభం కావడానికి మీకు సహాయపడే సరళమైన, స్వతంత్ర ఉదాహరణలు ఉన్నాయి. ప్రతి ఉదాహరణ ప్రారంభికులకు అనువైనదిగా, విపుల వ్యాఖ్యలతో మరియు దశల వారీ వివరణలతో రూపొందించబడింది. ## 📚 ఉదాహరణల అవలోకనం -| ఉదాహరణ | వివరణ | కష్టం | ముందస్తు పరిజ్ఞానం | +| ఉదాహరణ | వివరణ | కఠినత | సాధనాలు | |---------|-------------|------------|---------------| -| [Hello AI World](../../../examples/01-hello-ai-world.py) | మీ మొదటి AI ప్రోగ్రామ్ - సులభమైన నమూనా గుర్తింపు | ⭐ ప్రారంభికుడు | Python ప్రాథమికాలు | -| [Simple Neural Network](../../../examples/02-simple-neural-network.py) | న్యూట్రల్ నెట్‌వర్క్‌ను మొదలుండి నిర్మించండి | ⭐⭐ ప్రారంభికుడు+ | Python, ప్రాథమిక గణితం | -| [Image Classifier](./03-image-classifier.ipynb) | ముందుగా శిక్షణ పొందిన మోడల్‌తో చిత్రాలను వర్గీకరించండి | ⭐⭐ ప్రారంభికుడు+ | Python, numpy | -| [Text Sentiment](../../../examples/04-text-sentiment.py) | టెక్స్ట్ భావాన్ని విశ్లేషించండి (ధనాత్మక/నెగటివ్) | ⭐⭐ ప్రారంభికుడు+ | Python | +| [Hello AI World](https://github.com/microsoft/AI-For-Beginners/blob/main/examples/01-hello-ai-world.py) | మీ మొదటి AI ప్రోగ్రామ్ - సరళమైన నమూనా గుర్తింపు | ⭐ ప్రారంభికుడు | Python ప్రాథమికాలు | +| [Simple Neural Network](https://github.com/microsoft/AI-For-Beginners/blob/main/examples/02-simple-neural-network.py) | నర్వ జాలాన్ని మొదలైన స్థాయిలో నిర్మించండి | ⭐⭐ ప్రారంభికుడు+ | Python, ప్రాథమిక గణితం | +| [Image Classifier](https://github.com/microsoft/AI-For-Beginners/blob/main/examples/03-image-classifier.ipynb) | ముందస్తుగా శిక్షణ పొందిన మోడల్ తో చిత్రాలను వర్గీకరించండి | ⭐⭐ ప్రారంభికుడు+ | Python, numpy | +| [Text Sentiment](https://github.com/microsoft/AI-For-Beginners/blob/main/examples/04-text-sentiment.py) | టెక్స్ట్ భావాన్ని (పాజిటివ్/నెగటివ్) విశ్లేషించండి | ⭐⭐ ప్రారంభికుడు+ | Python | -## 🚀 ప్రారంభించండి +## 🚀 ప్రారంభించడం -### ముందస్తు అవసరాలు +### సాధనాలు -Python ఇన్‌స్టాల్ చేసుకున్నారా (3.8 లేదా అంతకంటే పై వర్షన్ సిఫార్సు). అవసరమైన ప్యాకేజీలను ఇన్‌స్టాల్ చేయండి: +Python సంస్థాపించినదని నిర్ధారించుకోండి (3.8 లేదా అంతకప్పుడు సిఫార్సు). అవసరమైన ప్యాకేజీలను ఇన్‌స్టాల్ చేయండి: ```bash -# పైథాన్ స్క్రిప్టుల కోసం +# పైన స్క్రిప్టుల కోసం pip install numpy -# జూపైటర్ నోట్‌బుక్స్ (చిత్ర వర్గీకర్త) కోసం +# జూయపిటర్ నోట్బుక్స్ (చిత్ర వర్గీకరించే యంత్రం) కోసం pip install jupyter numpy pillow tensorflow ``` -లేదా ప్రధాన పాఠ్యాంశం నుండి conda వాతావరణాన్ని ఉపయోగించండి: +లేదా ప్రధాన పాఠ్యాంశం నుండి కిందా వాతావరణాన్ని ఉపయోగించండి: ```bash conda env create --name ai4beg --file ../environment.yml conda activate ai4beg ``` -### ఉదాహరణలను నడపడం +### ఉదాహరణలను నడిపించడం -**Python స్క్రిప్ట్‌ల కోసం (.py ఫైళ్లు):** +**Python స్క్రిప్ట్ల కోసం (.py ఫైల్స్):** ```bash python 01-hello-ai-world.py ``` -**Jupyter నోట్‌బుక్స్ కోసం (.ipynb ఫైళ్లు):** +**Jupyter నోట్‌బుక్స్ కోసం (.ipynb ఫైల్స్):** ```bash jupyter notebook 03-image-classifier.ipynb ``` -## 📖 నేర్చుకునే మార్గం +## 📖 అభ్యాస పథం -ఉదాహరణలను ఈ క్రమంలో అనుసరించమని మేము సిఫార్సు చేస్తాము: +ఉదాహరణలను క్రమం వారీగా అనుసరించమని మేము సిఫారసు చేస్తున్నాము: -1. **"Hello AI World" తో ప్రారంభించండి** - నమూనా గుర్తింపు ప్రాథమికాలు నేర్చుకోండి -2. **సింపుల్ న్యూట్రల్ నెట్‌వర్క్ నిర్మించండి** - న్యూట్రల్ నెట్‌వర్క్‌లు ఎలా పనిచేస్తాయో అర్థం చేసుకోండి -3. **చిత్ర వర్గీకర్తను ప్రయత్నించండి** - నిజమైన చిత్రాలతో AI ఎలా పనిచేస్తుందో చూడండి -4. **టెక్స్ట్ భావాన్ని విశ్లేషించండి** - సహజ భాషా ప్రాసెసింగ్‌ను అన్వేషించండి +1. **"Hello AI World" తో ప్రారంభించండి** - నమూనా గుర్తింపులో ప్రాథమికాలు తెలుసుకోండి +2. **సరళమైన నర్వ జాలాన్ని నిర్మించండి** - నర్వ జాలాలు ఎలా పనిచేస్తాయో అర్థం చేసుకోండి +3. **Image Classifier ప్రయత్నించండి** - వాస్తవ చిత్రాలతో AI కార్యకలాపాలను చూడు +4. **టెక్స్ట్ భావాన్ని విశ్లేషించండి** - సహజ భాషా ప్రాసెసింగ్ పరిశీలించండి ## 💡 ప్రారంభికులకు సూచనలు -- **కోడ్ వ్యాఖ్యలను జాగ్రత్తగా చదవండి** - ప్రతి లైన్ ఏమి చేస్తుందో అవి వివరించాయి -- **ప్రయోగాలు చేయండి!** - విలువలను మార్చి ఫలితాలను చూడండి -- **అన్నీ అర్థం చేసుకోవాలని ఆందోళన చెందకండి** - నేర్చుకోవడానికి సమయం పడుతుంది -- **ప్రశ్నలు అడగండి** - [చర్చా బోర్డు](https://github.com/microsoft/AI-For-Beginners/discussions) ఉపయోగించండి +- **కోడ్ వ్యాఖ్యలను జాగ్రత్తగా చదవండి** - ప్రతి లైన్ ఏమి చేస్తుందో వివరిస్తాయి +- **ప్రయోగించండి!** - విలువలను మార్చి ఫలితాల్ని చూసుకోండి +- **అన్నీ అర్థం చేసుకోవాలని బతకవద్దు** - నేర్చుకోవడానికి సమయం పడుతుంది +- **ప్రశ్నలు అడగండి** - [విచారణ విభాగం](https://github.com/microsoft/AI-For-Beginners/discussions) ఉపయోగించండి ## 🔗 తదుపరి దశలు -ఈ ఉదాహరణలు పూర్తి చేసిన తర్వాత, పూర్తి పాఠ్యాంశాన్ని అన్వేషించండి: +ఈ ఉదాహరణలను పూర్తి చేసిన తర్వాత, పూర్తి పాఠ్యాంశాన్ని అన్వేషించండి: - [AI పరిచయం](../lessons/1-Intro/README.md) -- [న్యూట్రల్ నెట్‌వర్క్‌లు](../lessons/3-NeuralNetworks/README.md) +- [నర్వ జాలాలు](../lessons/3-NeuralNetworks/README.md) - [కంప్యూటర్ విజన్](../lessons/4-ComputerVision/README.md) - [సహజ భాషా ప్రాసెసింగ్](../lessons/5-NLP/README.md) ## 🤝 సహకారం -ఈ ఉదాహరణలు మీకు ఉపయోగకరంగా అనిపిస్తే, వాటిని మెరుగుపరచడంలో సహాయం చేయండి: -- సమస్యలను నివేదించండి లేదా మెరుగుదలలు సూచించండి -- ప్రారంభికులకు మరిన్ని ఉదాహరణలు జోడించండి +ఈ ఉదాహరణలు మీకు ఉపయోగకరంగా అనిపిస్తాయా? వాటిని మెరుగుపరచడంలో సహాయం చేయండి: +- సమస్యలను తెలియజేయండి లేదా మెరుగుదలలు సూచించండి +- ప్రారంభիկుల కోసం మరిన్ని ఉదాహరణలు జోడించండి - డాక్యుమెంటేషన్ మరియు వ్యాఖ్యలను మెరుగుపరచండి --- -*గమనిక: ప్రతి నిపుణుడు ఒకప్పుడు ప్రారంభికుడే. సంతోషంగా నేర్చుకోండి! 🎓* +*గమనిక: ప్రతి నిపుణుడు ఒకప్పుడు ప్రారంభికుడే అయినాడు. సంతోషంగా నేర్చుకోండి! 🎓* --- -**అస్పష్టత**: -ఈ పత్రాన్ని AI అనువాద సేవ [Co-op Translator](https://github.com/Azure/co-op-translator) ఉపయోగించి అనువదించబడింది. మేము ఖచ్చితత్వానికి ప్రయత్నించినప్పటికీ, ఆటోమేటెడ్ అనువాదాల్లో పొరపాట్లు లేదా తప్పిదాలు ఉండవచ్చు. మూల పత్రం దాని స్వదేశీ భాషలో అధికారిక మూలంగా పరిగణించాలి. ముఖ్యమైన సమాచారానికి, ప్రొఫెషనల్ మానవ అనువాదం సిఫార్సు చేయబడుతుంది. ఈ అనువాదం వాడకం వల్ల కలిగే ఏవైనా అపార్థాలు లేదా తప్పుదారుల బాధ్యత మేము తీసుకోము. +**అస్వీకరణ**: +ఈ పత్రం AI అనువాద సేవ [Co-op Translator](https://github.com/Azure/co-op-translator) ఉపయోగించి అనువదించబడింది. మేము ఖచ్చితత్వానికి ప్రయత్నిస్తున్నప్పటికీ, ఆటోమేటెడ్ అనువాదాలు తప్పులు లేదా అసమగ్రతలను కలిగి ఉండవచ్చు. దాని స్వదేశ భాషలో ఉన్న అసలు పత్రాన్ని అధికారం కలిగిన మూలంగా పరిగణించాలి. కీలకమైన సమాచారం కోసం, ప్రొఫెషనల్ మానవ అనువాదాన్ని సిఫారసు చేస్తాము. ఈ అనువాదం ఉపయోగం వల్ల కలిగే ఏవైనా అపార్థాలు లేదా తప్పుదారులు కోసం మేము బాధ్యత వహించము. \ No newline at end of file diff --git a/translations/te/lessons/0-course-setup/how-to-run.md b/translations/te/lessons/0-course-setup/how-to-run.md index 61a93060..583166c8 100644 --- a/translations/te/lessons/0-course-setup/how-to-run.md +++ b/translations/te/lessons/0-course-setup/how-to-run.md @@ -1,12 +1,12 @@ -# కోడ్ ఎలా నడిపించాలి +# కోడ్‌ను ఎలా నడపాలి -ఈ పాఠ్యక్రమం అనేక అమలుచేయగల ఉదాహరణలు మరియు ప్రయోగశాలలను కలిగి ఉంది, మీరు వాటిని నడపాలి అనుకుంటారు. దీని కోసం, ఈ పాఠ్యక్రమం భాగంగా అందించబడిన Jupyter నోట్బుక్స్ లో Python కోడ్ అమలు చేసే సామర్థ్యం అవసరం. కోడ్ నడపడానికి మీకు అనేక ఎంపికలు ఉన్నాయి: +ఈ పాఠ్యాంశంలో నడపదగిన అనేక ఉదాహరణలు మరియు ప్రయోగశాలలు ఉన్నాయి, వీటిని మీరు నడపాలనుకుంటారు. దీన్ని చేయడానికి, మీరు ఈ పాఠ్యాంశంలో భాగంగా అందించబడిన Jupyter నోట్బుక్లలో Python కోడ్‌ను నడపగల సామర్ధ్యం అవసరం. కోడ్ నడపడానికి మీకు కొన్ని ఎంపికలు ఉన్నాయి: -## మీ కంప్యూటర్లో స్థానికంగా నడపండి +## మీ కంప్యూటర్‌లో స్థానికంగా నడపండి -మీ కంప్యూటర్లో స్థానికంగా కోడ్ నడపడానికి, Python ఇన్‌స్టాలేషన్ అవసరం. ఒక సిఫార్సు **[miniconda](https://conda.io/en/latest/miniconda.html)** ను ఇన్‌స్టాల్ చేయడం - ఇది తేలికపాటి ఇన్‌స్టాలేషన్, మరియు వివిధ Python **వర్చువల్ ఎన్విరాన్‌మెంట్ల** కోసం `conda` ప్యాకేజ్ మేనేజర్ ని మద్దతు ఇస్తుంది. +మీ కంప్యూటర్‌లో కోడ్ నడపడానికి, Python ఇన్‌స్టాలేషన్ అవసరం. ఒక సిఫార్సు అంటే **[miniconda](https://conda.io/en/latest/miniconda.html)** ను ఇన్‌స్టాల్ చేయడం - ఇది తక్కువ బరువైన ఇన్‌స్టలేషన్ మరియు వివిధ Python **వర్చువల్ ఎన్విరన్ల కోసం** `conda` ప్యాకేజ్ మేనేజర్‌ను మద్దతిస్తుంది. -miniconda ఇన్‌స్టాల్ చేసిన తర్వాత, రిపాజిటరీని క్లోన్ చేసి ఈ కోर्स్ కోసం ఉపయోగించాల్సిన వర్చువల్ ఎన్విరాన్‌మెంట్ సృష్టించండి: +miniconda ఇన్‌స్టాల్ చేసిన తర్వాత, రిపోజిటరీని క్లోన్ చేసి ఈ కోర్సు కోసం వర్చువల్ ఎన్విరాన్‌మెంట్‌ను సృష్టించండి: ```bash git clone http://github.com/microsoft/ai-for-beginners @@ -15,57 +15,57 @@ conda env create --name ai4beg --file .devcontainer/environment.yml conda activate ai4beg ``` -### Python ఎక్స్‌టెన్షన్ తో Visual Studio Code ఉపయోగించడం +### Python ఎక్స్‌టెన్షన్‌తో Visual Studio Code ఉపయోగించడం -ఈ పాఠ్యక్రమాన్ని అత్యుత్తమంగా ఉపయోగించుటకు [Visual Studio Code](http://code.visualstudio.com/?WT.mc_id=academic-77998-cacaste) లో [Python Extension](https://marketplace.visualstudio.com/items?itemName=ms-python.python&WT.mc_id=academic-77998-cacaste) తో తెరవడం ఉత్తమం. +ఈ పాఠ్యాంశాన్ని ఉత్తమంగా ఉపయోగించడానికి, దీన్ని [Visual Studio Code](http://code.visualstudio.com/?WT.mc_id=academic-77998-cacaste) లో [Python Extension](https://marketplace.visualstudio.com/items?itemName=ms-python.python&WT.mc_id=academic-77998-cacaste) తో తెరవండి. -> **గమనిక**: మీరు రిపాజిటరీని క్లోన్ చేసి VS Code లో డైరెక్టరీని ఓపెన్ చేసిన వెంటనే, ఇది ఆటోమాటిక్ గా Python ఎక్స్టెన్షన్స్ ను ఇన్‌స్టాల్ చేయాలని సూచిస్తుంది. పై విధంగా miniconda ని కూడా ఇన్‌స్టాల్ చేయాలి. +> **గమనిక**: మీరు రిపోజిటరీని క్లోన్ చేసి VS Codeలో డైరెక్టరీని తెరిచిన వెంటనే, ఇది ఆటోమేటిగ్గా Python ఎక్స్‌టెన్షన్‌లను ఇన్స్టాల్ చేయాలని సూచిస్తుంది. మీరు పైగా miniconda ను కూడా ఇన్స్టాల్ చేయాలి. -> **గమనిక**: VS Code మీకు రిపాజిటరీని కంటైనర్‌లో మళ్లీ ఓపెన్ చేయమని సూచిస్తే, స్థానిక Python ఇన్‌స్టాలేషన్ ఉపయోగించాలంటే దాన్ని నిరాకరించాలి. +> **గమనిక**: VS Code మీకు రిపోజిటరీని కంటైనర్‌లో మళ్ళీ తెరవాలని సూచిస్తే, స్థానిక Python ఇన్‌స్టాలేషన్ ఉపయోగించడానికి దీన్ని నిరాకరించండి. -### బ్రౌజర్‌లో Jupyter ఉపయోగించడం +### బ్రౌజర్ లో Jupyter ఉపయోగించడం -మీ స్వంత కంప్యూటర్లో బ్రౌజర్ నుండి కూడా Jupyter ఎన్విరాన్‌మెంట్ ఉపయోగించవచ్చు. సంప్రదాయ Jupyter, జూపిటర్‌హబ్ రెండూ ఆటో-కంప్లీషన్, కోడ్ హైలైటింగ్ మొదలైన సౌకర్యాలతో ఒక సౌకర్యవంతమైన అభివృద్ధి వాతావరణం అందిస్తాయి. +మీరు మీ స్వంత కంప్యూటర్ లో బ్రౌజర్ ద్వారా కూడా Jupyter ఎన్విరాన్‌మెంట్ ఉపయోగించుకోవచ్చు. క్లాసికల్ Jupyter మరియు JupyterHub రెండూ ఆటో-కంప్లీషన్, కోడ్ హైలైటింగ్ వంటి సౌకర్యాలను కలిగి ఉండే అభివృద్ధి వాతావరణాన్ని అందిస్తాయి. -స్థానికంగా Jupyter ప్రారంభించటానికి, కోర్సు డైరెక్టరీకి వెళ్ళి ఈ ఆదేశాలను అమలుచేయండి: +స్థానికంగా Jupyter ప్రారంభించడానికి, కోర్సు డైరెక్టరీకి వెళ్లి, క్రింది విధంగా అమలు చేయండి: ```bash jupyter notebook ``` -or + లేదా ```bash jupyterhub ``` -ఆ తర్వాత మీరు `.ipynb` ఫైల్స్ ఎక్కడైనా వెళ్లి తెరిచి పని ప్రారంభించవచ్చు. + తదుపరి మీరు ఎవరైనా `.ipynb` ఫైళ్లకు నావిగేట్ చేసుకొని వాటిని తెరచి పని ప్రారంభించవచ్చు. ### కంటైనర్‌లో నడపడం -Python ఇన్‌స్టాలేషన్ కి మరొక ప్రత్యామ్నాయం కోడ్‌ను కంటైనర్‌లో నడపటం. మా రిపాజిటరీ ప్రత్యేకమైన `.devcontainer` ఫోల్డర్ ని అందిస్తుంది, ఇది ఈ రిపో కాన్‌స్ట్రక్చర్ కోసం కంటైనర్ రూపొందించడానికి సూచనిస్తుందని, VS Code రిపోను కంటైనర్‌లో మళ్లీ ఓపెన్ చేయగల అవకాశం ఇస్తుంది. దీనికి Docker ఇన్‌స్టాలేషన్ అవసరం మరియు ఇది కొంచెం సంక్లిష్టం, కాబట్టి దీన్ని అనుభవజ్ఞులైన వాడుకరులకు ఆహ్వానిస్తున్నాం. +Python ఇన్‌స్టాలేషన్‌కు ప్రత్యామ్నాయం కంటైనర్‌లో కోడ్ నడపడం. మా రిపోజిటరీ ఒక ప్రత్యేక `.devcontainer` ఫోల్డర్‌ను అందిస్తుంది, ఇది ఈ రిపో కోసం కంటైనర్‌ని ఎలా నిర్మించాలో సూచిస్తుంది, VS Code కోడ్‌ను కంటైనర్‌లో మళ్లీ తెరవడానికి అవకాశాన్ని ఇస్తుంది. ఇది Docker ఇన్‌స్టాలేషన్ అవసరం, మరియు కాస్త క్లిష్టమైనది, కాబట్టి ఇది అనుభవజ్ఞులైన వినియోగదారులకు సిఫార్సు చేస్తాము. -## క్లౌడ్‌లో నడపడం +## క్లౌడ్ లో నడపడం -మీరు స్థానికంగా Python ఇన్‌స్టాల్ చేయకూడదని అనుకుంటే, మరియు కొంత క్లౌడ్ వనరులకు ప్రాప్యత ఉంటే - కోడ్‌ను క్లౌడ్‌లో నడపడం ఒక మంచి ప్రత్యామ్నాయం. మీరు ఇది చేయడానికి అనేక మార్గాలు ఉన్నాయి: +మీరు Python ను స్థానికంగా ఇన్స్టాల్ చేయదలచకపోయినా, మరియు కొంత క్లౌడ్ వనరులకు ప్రాప్తి ఉన్నా - మంచి ప్రత్యామ్నాయం క్లౌడ్‌లో కోడ్ నడపడం. మీరు దీన్ని చేయడానికి పలు మార్గాలు ఉన్నాయి: -* **[GitHub Codespaces](https://github.com/features/codespaces)** ఉపయోగించడం, ఇది GitHub లో మీ కోసం సృష్టించిన వర్చువల్ ఎన్విరాన్‌మెంట్, VS Code బ్రౌజర్ ఇంటర్‌ఫేస్ ద్వారా యాక్సెసబుల్. మీరు Codespaces కి యాక్సెస్ ఉంటే, రిపోలోని **Code** బటన్ క్లిక్ చేసి, Codespace ప్రారంభించి తక్షణమే నడపవచ్చు. -* **[Binder](https://mybinder.org/v2/gh/microsoft/ai-for-beginners/HEAD)** ఉపయోగించడం. [Binder](https://mybinder.org) GitHub లోని కొడ్‌ను పరీక్షించడానికి క్లౌడ్‌లో ఉచిత కంప్యూటింగ్ వనరులను అందిస్తుంది. ముందుభాగపు పేజీలో ఒక బటన్ ఉంటుంది, దానితో రిపాజిటరీని Binder లో ఓపెన్ చేయొచ్చు - ఇది వేగంగా బైండర్ సైటుకు తీసుకెళ్లి, మీకు బ్యాక్‌గ్రౌండ్‌లో కంటైనర్ నిర్మించి Jupyter వెబ్ ఇంటర్‌ఫేస్‌ను ప్రారంభిస్తుంది. +* **[GitHub Codespaces](https://github.com/features/codespaces)** ఉపయోగించడం, ఇది GitHub పై మీకు సృష్టించిన వర్చువల్ ఎన్విరాన్‌మెంట్, ఒక VS Code బ్రౌజర్ ఇంటర్‌ఫేస్ ద్వారా ప్రాప్తించదగినది. మీరు Codespaces కి ప్రాప్తి ఉంటే, రిపోలో **Code** బటన్ క్లిక్ చేసి, కోడ్స్‌పేస్ ప్రారంభించి వెంటనే నడపవచ్చు. +* **[Binder](https://mybinder.org/v2/gh/microsoft/ai-for-beginners/HEAD)** ఉపయోగించడం. [Binder](https://mybinder.org) cloud లో ఉచిత కంప్యూటింగ్ వనరులను అందిస్తుంది, మీరు GitHub పై కొన్ని కోడ్‌ను పరీక్షించే అవకాశం కలుగుతుంది. ముందుముఖ పేజీలో రిపోను Binder లో తెరవడానికి ఒక బటన్ ఉంటుంది - ఇది త్వరగా బైండర్ సైట్‌కు తీసుకెళ్లుతుంది, అక్కడ వెనుకనుంచి కంటైనర్ తయారు చేసి Jupyter వెబ్ ఇంటర్‌ఫేస్‌ను మీకు ప్రారంభిస్తుంది. -> **గమనిక**: తప్పుగా ఉపయోగించడం నివారించడానికి, Binder కు కొన్ని వెబ్ వనరుల యాక్సెస్ బ్లాక్ చేయబడింది. ఇది కొంత కోడ్ పనిచేయడానికి నిరోధకమవచ్చు, ముఖ్యంగా ఇండిపబ్లిక్ ఇంటర్నెట్ నుండి మోడల్స్ మరియు/లేదా డేటాసెట్లు పొందే సందర్భంలో. మీరు కొంత పరిష్కారాలు కనుగొంటారు కావచ్చు. అదనంగా, Binder అందించే కంప్యూట్ వనరులు బేసిక్ స్థాయి మాత్రమే, కాబట్టి మందగమన శిక్షణ వేళ్లలో నిబంధన మీరిద్దరు తప్పకుండా నేర్చుకోవాలి. +> **గమనిక**: దుర్వినియోగాన్ని నివారించడానికి, Binder కొన్ని వెబ్ వనరులకు ప్రాప్తిని నిరోధిస్తుంది. ఇది కొంత కోడ్ పనిచేయకుండా ఉండవచ్చు, అది మోడల్స్ మరియు/లేదా డేటాసెట్లను పబ్లిక్ ఇంటర్నెట్ నుండి తీసుకొంటుంది. మీరు కొన్ని మార్గాల్ని కనుగొనవలసి వస్తుంది. అలాగే, Binder అందించే కంప్యూటింగ్ వనరులు బేసిక్, అందుచేత శిక్షణ నెమ్మదిగా జరుగుతుంది, ముఖ్యంగా తర్వాతి, మరింత క్లిష్టమైన పాఠాల్లో. -## GPU తో క్లౌడ్‌లో నడపడం +## GPU తో క్లౌడ్ లో నడపడం -ఈ పాఠ్యక్రమం యొక్క కొంతమంది తరువాతి పాఠాలు GPU మద్దతుతో గణనీయంగా ప్రయోజనం పొందుతాయి. మోడల్ శిక్షణ, ఉదాహరణకి, లేకపోతే బాగా మందగమనంగా ఉంటుంది. మీరు అనుసరించగల కొంత ఎంపికలు ఉన్నాయి, ముఖ్యంగా మీరు క్లౌడ్‌కు యాక్సెస్ ఉంటే [Azure for Students](https://azure.microsoft.com/free/students/?WT.mc_id=academic-77998-cacaste) లేదా మీ సంస్థ ద్వారా: +ఈ పాఠ్యాంశంలోని కొన్ని తర్వాతి పాఠాలు GPU మద్దతుతో చాలా ప్రయోజనకరం. ఉదాహరణకు మodel శిక్షణ అనగా ఎక్కువ సమయం పడతుంది. మీరు అనుసరించగల కొన్ని ఎంపికలు ఉన్నాయి, ముఖ్యంగా మీకు క్లౌడ్‌కి ప్రాప్తి ఉంటే, [Azure for Students](https://azure.microsoft.com/free/students/?WT.mc_id=academic-77998-cacaste) ద్వారా లేదా మీ సంస్థ ద్వారా: -* [Data Science Virtual Machine](https://docs.microsoft.com/learn/modules/intro-to-azure-data-science-virtual-machine/?WT.mc_id=academic-77998-cacaste) సృష్టించి Jupyter ద్వారా దానికి కనెక్ట్ అవ్వండి. మీరు ఆ మెషీన్ మీద రిపోను క్లోన్ చేసి, నేర్చుకోవడం ప్రారంభించవచ్చు. NC-సిరీస్ VM లకు GPU మద్దతు ఉంటుంది. +* [Data Science Virtual Machine](https://docs.microsoft.com/learn/modules/intro-to-azure-data-science-virtual-machine/?WT.mc_id=academic-77998-cacaste) ను సృష్టించండి మరియు Jupyter ద్వారా దానికి కనెక్ట్ అవ్వండి. మీరు ఆ మెషీన్లోనే రిపోను క్లోన్ చేసి, నేర్చడాన్ని ప్రారంభించవచ్చు. NC-సిరీస్ VM లు GPU మద్దతు కలిగి ఉంటాయి. -> **గమనిక**: కొన్ని సబ్‌స్క్రిప్షన్లు, Azure for Students సహా, బాక్స్ బయట GPU మద్దతు ఇవ్వరు. మీరు సాంకేతిక సపోర్ట్ అభ్యర్థనతో అదనపు GPU కోర్ల కోసం అభ్యర్థించవచ్చు. +> **గమనిక**: కొన్ని సబ్‌స్క్రిప్షన్‌లు, Azure for Students సహా, బాక్స్ నుంచి GPU మద్దతు అందించవు. అదనపు GPU కోర్లను సాంకేతిక మద్దతు అభ్యర్థన ద్వారా కోరవలసి ఉంటుంది. -* [Azure Machine Learning Workspace](https://azure.microsoft.com/services/machine-learning/?WT.mc_id=academic-77998-cacaste) సృష్టించి అక్కడి నోట్‌బుక్ ఫీచర్ ఉపయోగించండి. [ఈ వీడియో](https://azure-for-academics.github.io/quickstart/azureml-papers/) Azure ML నోట్‌బుక్‌లో రిపాజిటరీని క్లోన్ చేసి ఎలా ఉపయోగించి ప్రారంభించాలో చూపుతుంది. +* [Azure Machine Learning Workspace](https://azure.microsoft.com/services/machine-learning/?WT.mc_id=academic-77998-cacaste) సృష్టించి అక్కడ Notebook ఫీచర్ ఉపయోగించండి. [ఈ వీడియో](https://azure-for-academics.github.io/quickstart/azureml-papers/)లో ఎలా రిపోజిటరీని Azure ML నోట్‌బుక్ లో క్లోన్ చేసి ఉపయోగించాలో చూపిస్తున్నది. -మీరు Google Colab కూడా ఉపయోగించవచ్చు, ఇది కొంత ఉచిత GPU మద్దతుతో వస్తుంది, మరియు అక్కడ Jupyter నోట్బుక్స్‌ను ఒక్కొక్కటి అప్లోడ్ చేసి అమలు చేయవచ్చు. +మీరు Google Colab కూడా ఉపయోగించవచ్చు, ఇది కొంత ఉచిత GPU మద్దతుతో వస్తుంది, మరియు అక్కడ Jupyter నోట్బుక్లను ఒకదాని తర్వాత ఒకటి అప్లోడ్ చేసి అమలు చేయవచ్చు. --- -**డిస్క్లెయిమర్**: -ఈ డాక్యుమెంట్‌ను AI అనువాద సేవ [Co-op Translator](https://github.com/Azure/co-op-translator) ను ఉపయోగించి అనువదించబడింది. మేము సరిగ్గా అనువదించేందుకు గట్టిగా శ్రమిస్తునప్పటికీ, స్వయంచాలక అనువాదాలలో పొరపాట్లు లేదా తప్పులు ఉండవచ్చు అనే విషయాన్ని దయచేసి గమనించండి. అసలు డాక్యుమెంట్ native భాషలో ఉనికివున్న డాక్యుమెంట్‌ను ప్రామాణిక మూలంగా పరిగణించాలి. ముఖ్యమైన సమాచారం కోసం, వృత్తిపరమైన మానవ అనువాదాన్ని సూచిస్తాము. ఈ అనువాదం వలన ఏర్పడే ఏదైనా అవగాహనలు లేదా తప్పు అర్థపరిచయాలకు మేము బాధ్యత వహించము. +**అస్వీకరణ**: +ఈ పత్రం AI అనువాద సేవ [Co-op Translator](https://github.com/Azure/co-op-translator) ఉపయోగించి అనువదించబడింది. మేము ఖచ్చితత్వానికి ప్రయత్నిస్తున్నప్పటికీ, ఆటోమేటెడ్ అనువాదాలు తప్పులు లేదా అసమగ్రతలను కలిగి ఉండవచ్చు. దాని స్వదేశ భాషలో ఉన్న అసలు పత్రాన్ని అధికారం కలిగిన మూలంగా పరిగణించాలి. కీలకమైన సమాచారం కోసం, ప్రొఫెషనల్ మానవ అనువాదాన్ని సిఫారసు చేస్తాము. ఈ అనువాదం ఉపయోగం వల్ల కలిగే ఏవైనా అపార్థాలు లేదా తప్పుదారులు కోసం మేము బాధ్యత వహించము. \ No newline at end of file diff --git a/translations/te/lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb b/translations/te/lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb index 1918b857..e62b3652 100644 --- a/translations/te/lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb +++ b/translations/te/lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb @@ -1,1497 +1,1502 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# ముందుగా శిక్షణ పొందిన మోడల్స్ మరియు ట్రాన్స్‌ఫర్ లెర్నింగ్\n", - "\n", - "CNNలను శిక్షణ ఇవ్వడం చాలా సమయం తీసుకోవచ్చు, మరియు ఆ పనికి చాలా డేటా అవసరం. అయితే, ఎక్కువ సమయం నెట్‌వర్క్ ఇమేజ్‌ల నుండి నమూనాలను తీసుకోవడానికి ఉపయోగించే ఉత్తమ లో-లెవల్ ఫిల్టర్లను నేర్చుకోవడంలో వెళుతుంది. ఒక సహజమైన ప్రశ్న ఉత్పన్నమవుతుంది - ఒక డేటాసెట్‌పై శిక్షణ పొందిన న్యూరల్ నెట్‌వర్క్‌ను ఉపయోగించి, పూర్తి శిక్షణ ప్రక్రియ లేకుండా వేరే ఇమేజ్‌లను వర్గీకరించడానికి దాన్ని అనుకూలపరచగలమా?\n", - "\n", - "ఈ విధానం **ట్రాన్స్‌ఫర్ లెర్నింగ్** అని పిలవబడుతుంది, ఎందుకంటే మనం ఒక న్యూరల్ నెట్‌వర్క్ మోడల్ నుండి మరొకదానికి కొంత జ్ఞానం బదిలీ చేస్తాము. ట్రాన్స్‌ఫర్ లెర్నింగ్‌లో, సాధారణంగా మనం ముందుగా శిక్షణ పొందిన మోడల్‌తో ప్రారంభిస్తాము, ఇది **ImageNet** వంటి పెద్ద ఇమేజ్ డేటాసెట్‌పై శిక్షణ పొందింది. ఆ మోడల్స్ ఇప్పటికే సాధారణ ఇమేజ్‌ల నుండి వివిధ లక్షణాలను బాగా తీసుకోవడంలో నైపుణ్యం కలిగి ఉంటాయి, మరియు చాలా సందర్భాల్లో ఆ లక్షణాలపై కేవలం ఒక వర్గీకర్తను నిర్మించడం మంచి ఫలితాన్ని ఇస్తుంది.\n" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import tensorflow as tf\n", - "from tensorflow import keras\n", - "import matplotlib.pyplot as plt\n", - "import numpy as np\n", - "import os\n", - "from tfcv import *" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## పిల్లులు vs. కుక్కల డేటాసెట్\n", - "\n", - "ఈ యూనిట్‌లో, పిల్లులు మరియు కుక్కల చిత్రాలను వర్గీకరించే ఒక వాస్తవ జీవిత సమస్యను పరిష్కరిద్దాం. ఈ కారణంగా, మనం [Kaggle Cats vs. Dogs Dataset](https://www.kaggle.com/c/dogs-vs-cats) ఉపయోగించబోతున్నాము, ఇది [Microsoft నుండి కూడా డౌన్లోడ్ చేసుకోవచ్చు](https://www.microsoft.com/en-us/download/details.aspx?id=54765&WT.mc_id=academic-77998-cacaste).\n", - "\n", - "ఈ డేటాసెట్‌ను డౌన్లోడ్ చేసి `data` డైరెక్టరీలో ఎక్స్‌ట్రాక్ట్ చేద్దాం (ఈ ప్రక్రియ కొంత సమయం తీసుకోవచ్చు!):\n" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "if not os.path.exists('data/kagglecatsanddogs_5340.zip'):\n", - " !wget -P data https://download.microsoft.com/download/3/E/1/3E1C3F21-ECDB-4869-8368-6DEBA77B919F/kagglecatsanddogs_5340.zip" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "import zipfile\n", - "if not os.path.exists('data/PetImages'):\n", - " with zipfile.ZipFile('data/kagglecatsanddogs_5340.zip', 'r') as zip_ref:\n", - " zip_ref.extractall('data')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "దురదృష్టవశాత్తు, డేటాసెట్‌లో కొన్ని దెబ్బతిన్న చిత్రం ఫైళ్లు ఉన్నాయి. దెబ్బతిన్న ఫైళ్లను తనిఖీ చేయడానికి మేము త్వరిత శుభ్రపరిచే పనిని చేయాలి. ఈ ట్యుటోరియల్‌ను దెబ్బతినకుండా ఉండేందుకు, డేటాసెట్‌ను ధృవీకరించడానికి కోడ్‌ను ఒక మాడ్యూల్‌లోకి మార్చాము.\n" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Corrupt image or wrong format: data/PetImages/Cat/12235.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/2663.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/4929.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/8183.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/11083.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/6435.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/6491.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/7968.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/6768.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/11397.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/8295.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/4874.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/23.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/11864.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/3491.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/11729.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/3197.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/10874.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/6376.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/9361.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/9328.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/910.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/2021.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/666.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/3710.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/9171.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/6906.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/11095.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/660.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/8415.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/3161.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/850.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/7003.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/1267.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/7642.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/8553.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/6900.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/4334.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/10404.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/6980.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/936.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/9619.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/3300.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/7647.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/2742.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/9565.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/1757.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/11874.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/1936.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/5077.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/7845.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/8832.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/11935.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/9208.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/4322.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/7978.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/10820.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/391.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/10073.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/8958.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/8470.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/445.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/4821.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/11565.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/4351.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/4833.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/140.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/3153.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/5370.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/5819.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/3649.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/4293.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/3967.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/1937.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/10125.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/1386.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/4750.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/6029.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/5614.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/2569.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/9778.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/6486.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/11210.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/7502.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/2189.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/1151.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/4629.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/12080.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/10501.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/1914.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/11086.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/4000.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/9100.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/5553.jpg\n", - "Corrupt image or wrong format: data/PetImages/Cat/12269.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/5243.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/3288.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/11912.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/3320.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/11166.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/8194.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/2353.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/9026.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/8557.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/7969.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/8693.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/4367.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/1900.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/5730.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/9961.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/8126.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/8521.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/11560.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/11233.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/11675.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/8889.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/9414.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/3588.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/10353.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/10733.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/6238.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/5618.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/7743.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/10747.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/6503.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/11410.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/5955.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/2915.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/3136.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/4086.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/2905.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/2494.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/3546.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/5547.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/9851.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/9188.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/4203.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/8715.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/4640.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/1866.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/7718.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/7514.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/1017.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/12102.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/296.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/6718.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/11253.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/10173.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/11849.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/10383.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/10678.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/5790.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/6318.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/1884.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/4654.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/9145.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/2479.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/12289.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/2688.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/4134.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/10637.jpg\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/anaconda/envs/py38_tensorflow/lib/python3.8/site-packages/PIL/TiffImagePlugin.py:793: UserWarning: Truncated File Read\n", - " warnings.warn(str(msg))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Corrupt image or wrong format: data/PetImages/Dog/543.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/8730.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/12114.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/522.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/10863.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/10401.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/7739.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/561.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/1308.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/9643.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/3155.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/5736.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/4257.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/11853.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/6855.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/1259.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/7652.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/573.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/11702.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/414.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/4301.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/9500.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/10726.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/9367.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/2877.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/10907.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/10972.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/7311.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/10797.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/2317.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/7128.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/6500.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/11285.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/6430.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/6032.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/10969.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/8364.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/11692.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/3038.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/5604.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/565.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/9640.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/7459.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/6305.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/6555.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/11590.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/6059.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/3927.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/10705.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/2384.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/3885.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/663.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/9043.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/8563.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/9556.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/9967.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/10158.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/5263.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/8641.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/7369.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/4924.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/10351.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/6213.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/5104.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/1356.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/7133.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/7112.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/1168.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/719.jpg\n", - "Corrupt image or wrong format: data/PetImages/Dog/50.jpg\n" - ] - } - ], - "source": [ - "check_image_dir('data/PetImages/Cat/*.jpg')\n", - "check_image_dir('data/PetImages/Dog/*.jpg')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## డేటాసెట్ లోడ్ చేయడం\n", - "\n", - "మునుపటి ఉదాహరణల్లో, మేము Kerasలో నిర్మించిన డేటాసెట్లను లోడ్ చేసుకుంటున్నాము. ఇప్పుడు మనం మన స్వంత డేటాసెట్‌ను నిర్వహించబోతున్నాము, ఇది చిత్రాల డైరెక్టరీ నుండి లోడ్ చేయాలి.\n", - "\n", - "వాస్తవ జీవితంలో, చిత్ర డేటాసెట్ల పరిమాణం చాలా పెద్దగా ఉండవచ్చు, మరియు అన్ని డేటా మెమరీలో సరిపోవడం మీద ఆధారపడలేము. అందువల్ల, డేటాసెట్లు తరచుగా **జెనరేటర్ల** రూపంలో ఉంటాయి, ఇవి శిక్షణకు అనుకూలమైన మినీబ్యాచ్‌లలో డేటాను అందించగలవు.\n", - "\n", - "చిత్ర వర్గీకరణను నిర్వహించడానికి, Keras ప్రత్యేకమైన `image_dataset_from_directory` ఫంక్షన్‌ను కలిగి ఉంది, ఇది వేర్వేరు తరగతులకు సంబంధించిన ఉపడైరెక్టరీల నుండి చిత్రాలను లోడ్ చేయగలదు. ఈ ఫంక్షన్ చిత్రాలను స్కేల్ చేయడాన్ని కూడా చూసుకుంటుంది, అలాగే డేటాసెట్‌ను శిక్షణ మరియు పరీక్ష ఉపసమితులుగా విభజించగలదు:\n" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Found 24769 files belonging to 2 classes.\n", - "Using 19816 files for training.\n", - "Found 24769 files belonging to 2 classes.\n", - "Using 4953 files for validation.\n" - ] - } - ], - "source": [ - "data_dir = 'data/PetImages'\n", - "batch_size = 64\n", - "ds_train = keras.preprocessing.image_dataset_from_directory(\n", - " data_dir,\n", - " validation_split = 0.2,\n", - " subset = 'training',\n", - " seed = 13,\n", - " image_size = (224,224),\n", - " batch_size = batch_size\n", - ")\n", - "ds_test = keras.preprocessing.image_dataset_from_directory(\n", - " data_dir,\n", - " validation_split = 0.2,\n", - " subset = 'validation',\n", - " seed = 13,\n", - " image_size = (224,224),\n", - " batch_size = batch_size\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "రెండు కాల్స్‌కు ఒకే `seed` విలువను సెట్ చేయడం ముఖ్యం, ఎందుకంటే ఇది ట్రైన్ మరియు టెస్ట్ డేటాసెట్‌ల మధ్య చిత్రాల విభజనను ప్రభావితం చేస్తుంది.\n", - "\n", - "డేటాసెట్ ఆటోమేటిక్‌గా డైరెక్టరీల నుండి క్లాస్ పేర్లను తీసుకుంటుంది, అవసరమైతే మీరు వాటిని ఈ విధంగా యాక్సెస్ చేయవచ్చు:\n" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['Cat', 'Dog']" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ds_train.class_names" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "మేము పొందిన డేటాసెట్లను మోడల్‌ను శిక్షణ ఇవ్వడానికి నేరుగా `fit` ఫంక్షన్‌కు పంపవచ్చు. అవి సంబంధిత చిత్రాలు మరియు లేబుళ్లను రెండింటినీ కలిగి ఉంటాయి, వీటిని క్రింది నిర్మాణం ఉపయోగించి లూప్ చేయవచ్చు:\n" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Training batch shape: features=(64, 224, 224, 3), labels=(64,)\n" - ] - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "for x,y in ds_train:\n", - " print(f\"Training batch shape: features={x.shape}, labels={y.shape}\")\n", - " x_sample, y_sample = x,y\n", - " break\n", - " \n", - "display_dataset(x_sample.numpy().astype(np.int),np.expand_dims(y_sample,1),classes=ds_train.class_names)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "> **గమనిక**: డేటాసెట్‌లోని అన్ని చిత్రాలు 0-255 పరిధిలో ఫ్లోటింగ్ పాయింట్ టెన్సార్లుగా ప్రదర్శించబడ్డాయి. వాటిని న్యూరల్ నెట్‌వర్క్‌కు పంపించే ముందు, ఆ విలువలను 0-1 పరిధిలో స్కేల్ చేయాలి. చిత్రాలను ప్లాట్ చేయేటప్పుడు, అదే చేయాలి లేదా విలువలను `int` రకంగా మార్చాలి (మేము పై కోడ్‌లో ఇది చేస్తాము), తద్వారా `matplotlib`కి మేము అసలు స్కేల్ చేయని చిత్రాన్ని ప్లాట్ చేయాలనుకుంటున్నామని చూపించవచ్చు.\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## ముందుగా శిక్షణ పొందిన మోడల్స్\n", - "\n", - "చాలా ఇమేజ్ వర్గీకరణ పనుల కోసం ముందుగా శిక్షణ పొందిన న్యూరల్ నెట్‌వర్క్ మోడల్స్‌ను కనుగొనవచ్చు. ఆ మోడల్స్‌లో చాలా భాగం `keras.applications` నేమ్‌స్పేస్‌లో అందుబాటులో ఉంటాయి, ఇంకా మరిన్ని మోడల్స్ ఇంటర్నెట్‌లో కూడా లభిస్తాయి. సులభమైన VGG-16 మోడల్‌ను ఎలా లోడ్ చేసి ఉపయోగించాలో చూద్దాం:\n" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Downloading data from https://storage.googleapis.com/tensorflow/keras-applications/vgg16/vgg16_weights_tf_dim_ordering_tf_kernels.h5\n", - "553467904/553467096 [==============================] - 6s 0us/step\n", - "Most probable class = [208]\n", - "Downloading data from https://storage.googleapis.com/download.tensorflow.org/data/imagenet_class_index.json\n", - "40960/35363 [==================================] - 0s 0us/step\n" - ] - }, - { - "data": { - "text/plain": [ - "[[('n02099712', 'Labrador_retriever', 0.5340957),\n", - " ('n02100236', 'German_short-haired_pointer', 0.0939442),\n", - " ('n02092339', 'Weimaraner', 0.08160535),\n", - " ('n02099849', 'Chesapeake_Bay_retriever', 0.057179328),\n", - " ('n02109047', 'Great_Dane', 0.03733857)]]" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "vgg = keras.applications.VGG16()\n", - "inp = keras.applications.vgg16.preprocess_input(x_sample[:1])\n", - "\n", - "res = vgg(inp)\n", - "print(f\"Most probable class = {tf.argmax(res,1)}\")\n", - "\n", - "keras.applications.vgg16.decode_predictions(res.numpy())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "ఇక్కడ కొన్ని ముఖ్యమైన విషయాలు ఉన్నాయి:\n", - "* ఏదైనా ప్రీ-ట్రెయిన్డ్ నెట్‌వర్క్‌కు ఇన్‌పుట్ ఇవ్వడానికి ముందు దాన్ని ఒక నిర్దిష్ట విధంగా ప్రీ-ప్రాసెస్ చేయాలి. ఇది సంబంధిత `preprocess_input` ఫంక్షన్‌ను పిలవడం ద్వారా జరుగుతుంది, ఇది ఒక బ్యాచ్ చిత్రాలను స్వీకరించి, వాటి ప్రాసెస్ చేసిన రూపాన్ని తిరిగి ఇస్తుంది. VGG-16 సందర్భంలో, చిత్రాలు నార్మలైజ్ చేయబడతాయి, మరియు ప్రతి ఛానెల్‌కు కొన్ని ముందుగా నిర్వచించిన సగటు విలువ తీసివేయబడుతుంది. ఇది ఎందుకంటే VGG-16 అసలు ఈ ప్రీ-ప్రాసెసింగ్‌తో ట్రెయినింగ్ చేయబడింది.\n", - "* న్యూరల్ నెట్‌వర్క్ ఇన్‌పుట్ బ్యాచ్‌పై వర్తించబడుతుంది, మరియు ఫలితంగా ప్రతి క్లాస్ యొక్క సంభావ్యతను చూపే 1000-ఎలిమెంట్ టెన్సర్ల బ్యాచ్‌ను పొందుతాము. ఈ టెన్సర్‌పై `argmax` పిలవడం ద్వారా అత్యంత సంభావ్యమైన క్లాస్ నంబర్‌ను కనుగొనవచ్చు.\n", - "* పొందిన ఫలితం ఒక [ImageNet క్లాస్ సంఖ్య](https://gist.github.com/yrevar/942d3a0ac09ec9e5eb3a). ఈ ఫలితానికి అర్థం చేసుకోవడానికి, మేము `decode_predictions` ఫంక్షన్‌ను కూడా ఉపయోగించవచ్చు, ఇది టాప్ n క్లాసులను వాటి పేర్లతో పాటు తిరిగి ఇస్తుంది.\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "మనం VGG-16 నెట్‌వర్క్ యొక్క ఆర్కిటెక్చర్‌ను కూడా చూద్దాం:\n" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Model: \"vgg16\"\n", - "_________________________________________________________________\n", - "Layer (type) Output Shape Param # \n", - "=================================================================\n", - "input_1 (InputLayer) [(None, 224, 224, 3)] 0 \n", - "_________________________________________________________________\n", - "block1_conv1 (Conv2D) (None, 224, 224, 64) 1792 \n", - "_________________________________________________________________\n", - "block1_conv2 (Conv2D) (None, 224, 224, 64) 36928 \n", - "_________________________________________________________________\n", - "block1_pool (MaxPooling2D) (None, 112, 112, 64) 0 \n", - "_________________________________________________________________\n", - "block2_conv1 (Conv2D) (None, 112, 112, 128) 73856 \n", - "_________________________________________________________________\n", - "block2_conv2 (Conv2D) (None, 112, 112, 128) 147584 \n", - "_________________________________________________________________\n", - "block2_pool (MaxPooling2D) (None, 56, 56, 128) 0 \n", - "_________________________________________________________________\n", - "block3_conv1 (Conv2D) (None, 56, 56, 256) 295168 \n", - "_________________________________________________________________\n", - "block3_conv2 (Conv2D) (None, 56, 56, 256) 590080 \n", - "_________________________________________________________________\n", - "block3_conv3 (Conv2D) (None, 56, 56, 256) 590080 \n", - "_________________________________________________________________\n", - "block3_pool (MaxPooling2D) (None, 28, 28, 256) 0 \n", - "_________________________________________________________________\n", - "block4_conv1 (Conv2D) (None, 28, 28, 512) 1180160 \n", - "_________________________________________________________________\n", - "block4_conv2 (Conv2D) (None, 28, 28, 512) 2359808 \n", - "_________________________________________________________________\n", - "block4_conv3 (Conv2D) (None, 28, 28, 512) 2359808 \n", - "_________________________________________________________________\n", - "block4_pool (MaxPooling2D) (None, 14, 14, 512) 0 \n", - "_________________________________________________________________\n", - "block5_conv1 (Conv2D) (None, 14, 14, 512) 2359808 \n", - "_________________________________________________________________\n", - "block5_conv2 (Conv2D) (None, 14, 14, 512) 2359808 \n", - "_________________________________________________________________\n", - "block5_conv3 (Conv2D) (None, 14, 14, 512) 2359808 \n", - "_________________________________________________________________\n", - "block5_pool (MaxPooling2D) (None, 7, 7, 512) 0 \n", - "_________________________________________________________________\n", - "flatten (Flatten) (None, 25088) 0 \n", - "_________________________________________________________________\n", - "fc1 (Dense) (None, 4096) 102764544 \n", - "_________________________________________________________________\n", - "fc2 (Dense) (None, 4096) 16781312 \n", - "_________________________________________________________________\n", - "predictions (Dense) (None, 1000) 4097000 \n", - "=================================================================\n", - "Total params: 138,357,544\n", - "Trainable params: 138,357,544\n", - "Non-trainable params: 0\n", - "_________________________________________________________________\n" - ] - } - ], - "source": [ - "vgg.summary()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## GPU గణనలు\n", - "\n", - "VGG-16 మరియు ఇతర ఆధునిక ఆర్కిటెక్చర్ల వంటి డీప్ న్యూరల్ నెట్‌వర్క్స్ నడపడానికి చాలా గణన శక్తి అవసరం. GPU వేగవంతత అందుబాటులో ఉంటే దాన్ని ఉపయోగించడం బాగుంటుంది. అదృష్టవశాత్తూ, Keras GPU లపై గణనలను ఆటోమేటిక్‌గా వేగవంతం చేస్తుంది, అది అందుబాటులో ఉంటే. Tensorflow GPU ఉపయోగించగలదో లేదో క్రింది కోడ్ ద్వారా చెక్ చేసుకోవచ్చు:\n" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "tf.config.list_physical_devices('GPU')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## VGG ఫీచర్లను తీసుకోవడం\n", - "\n", - "మన చిత్రాల నుండి ఫీచర్లను తీసుకోవడానికి VGG-16 ఉపయోగించాలనుకుంటే, చివరి వర్గీకరణ లేయర్లు లేకుండా మోడల్ అవసరం. టాప్ లేయర్లు లేకుండా VGG-16 మోడల్‌ను ఈ కోడ్ ఉపయోగించి సృష్టించవచ్చు:\n" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Shape after applying VGG-16: (7, 7, 512)\n" - ] - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "vgg = keras.applications.VGG16(include_top=False)\n", - "\n", - "inp = keras.applications.vgg16.preprocess_input(x_sample[:1])\n", - "res = vgg(inp)\n", - "print(f\"Shape after applying VGG-16: {res[0].shape}\")\n", - "plt.figure(figsize=(15,3))\n", - "plt.imshow(res[0].numpy().reshape(-1,512))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "ఫీచర్ టెన్సార్ పరిమాణం 7x7x512 ఉంది, కానీ దాన్ని విజువలైజ్ చేయడానికి మేము దాన్ని 2D రూపంలో మార్చాల్సి వచ్చింది.\n", - "\n", - "ఇప్పుడు ఆ ఫీచర్లు చిత్రాలను వర్గీకరించడానికి ఉపయోగించగలమో చూడండి. మనం చేతితో కొన్ని చిత్రాల భాగాన్ని (మా సందర్భంలో 50 మినీబ్యాచ్లు) తీసుకుని, వాటి ఫీచర్ వెక్టర్లను ముందుగా లెక్కించవచ్చు. దీని కోసం Tensorflow **dataset** APIని ఉపయోగించవచ్చు. `map` ఫంక్షన్ ఒక dataset తీసుకుని ఇచ్చిన లాంబ్డా-ఫంక్షన్ ద్వారా దాన్ని మార్చుతుంది. మేము ఈ విధానాన్ని ఉపయోగించి కొత్త datasetలు, `ds_features_train` మరియు `ds_features_test`, తయారు చేస్తాము, ఇవి అసలు చిత్రాల స్థానంలో VGG ద్వారా తీసిన ఫీచర్లను కలిగి ఉంటాయి.\n" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "(64, 7, 7, 512) (64,)\n" - ] - } - ], - "source": [ - "num = batch_size*50\n", - "ds_features_train = ds_train.take(50).map(lambda x,y : (vgg(x),y))\n", - "ds_features_test = ds_test.take(10).map(lambda x,y : (vgg(x),y))\n", - "\n", - "for x,y in ds_features_train:\n", - " print(x.shape,y.shape)\n", - " break" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "మేము మా ప్రదర్శనను వేగవంతం చేయడానికి డేటాసెట్ పరిమాణాన్ని పరిమితం చేయడానికి `.take(50)` నిర్మాణాన్ని ఉపయోగించాము. మీరు ఖచ్చితంగా ఈ ప్రయోగాన్ని పూర్తి డేటాసెట్‌పై నిర్వహించవచ్చు.\n", - "\n", - "ఇప్పుడు మాకు ఎక్స్‌ట్రాక్ట్ చేసిన ఫీచర్లతో కూడిన డేటాసెట్ ఉన్నందున, మేము పిల్లులు మరియు కుక్కలను వేరుచేసే సాదా డెన్స్ క్లాసిఫయర్‌ను శిక్షణ ఇవ్వవచ్చు. ఈ నెట్‌వర్క్ (7,7,512) ఆకారంలోని ఫీచర్ వెక్టర్‌ను తీసుకుని, కుక్క లేదా పిల్లి ఏదో ఒకదానికి సరిపడే ఒక అవుట్పుట్‌ను ఉత్పత్తి చేస్తుంది. ఇది ద్విభాగ క్లాసిఫికేషన్ కావడంతో, మేము `sigmoid` యాక్టివేషన్ ఫంక్షన్ మరియు `binary_crossentropy` లాస్‌ను ఉపయోగిస్తాము.\n" - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "50/50 [==============================] - 1896s 38s/step - loss: 1.4845 - acc: 0.9144 - val_loss: 0.7220 - val_acc: 0.9516\n" - ] - } - ], - "source": [ - "model = keras.models.Sequential([\n", - " keras.layers.Flatten(input_shape=(7,7,512)),\n", - " keras.layers.Dense(1,activation='sigmoid')\n", - "])\n", - "model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['acc'])\n", - "hist = model.fit(ds_features_train, validation_data=ds_features_test)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "ఫలితం అద్భుతంగా ఉంది, మేము సుమారు 95% అవకాశంతో పిల్లి మరియు కుక్క మధ్య తేడా చేయగలుగుతున్నాము! అయితే, మేము ఈ విధానాన్ని అన్ని చిత్రాల ఉపసమూహంలో మాత్రమే పరీక్షించాము, ఎందుకంటే మానవీయంగా ఫీచర్ ఎక్స్‌ట్రాక్షన్ చాలా సమయం తీసుకుంటుంది.\n", - "\n", - "## ఒక VGG నెట్‌వర్క్ ఉపయోగించి ట్రాన్స్‌ఫర్ లెర్నింగ్\n", - "\n", - "మేము ట్రైనింగ్ సమయంలో ఫీచర్ ఎక్స్‌ట్రాక్టర్‌ను మా నెట్‌వర్క్‌లో మొదటి లేయర్‌గా చేర్చడం ద్వారా అసలు VGG-16 నెట్‌వర్క్‌ను మొత్తం ఉపయోగించి మానవీయంగా ఫీచర్లను ముందుగా లెక్కించకుండా ఉండవచ్చు.\n", - "\n", - "Keras ఆర్కిటెక్చర్ అందమైన విషయం ఏమిటంటే, మేము పైగా నిర్వచించిన VGG-16 మోడల్‌ను మరో న్యూరల్ నెట్‌వర్క్‌లో లేయర్‌గా కూడా ఉపయోగించవచ్చు! మేము దాని పై డెన్స్ క్లాసిఫైయర్‌తో ఒక నెట్‌వర్క్ నిర్మించి, ఆ తర్వాత బ్యాక్ ప్రొపగేషన్ ఉపయోగించి మొత్తం నెట్‌వర్క్‌ను ట్రైన్ చేయాలి.\n" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Model: \"sequential\"\n", - "_________________________________________________________________\n", - "Layer (type) Output Shape Param # \n", - "=================================================================\n", - "vgg16 (Functional) (None, 7, 7, 512) 14714688 \n", - "_________________________________________________________________\n", - "flatten (Flatten) (None, 25088) 0 \n", - "_________________________________________________________________\n", - "dense (Dense) (None, 1) 25089 \n", - "=================================================================\n", - "Total params: 14,739,777\n", - "Trainable params: 25,089\n", - "Non-trainable params: 14,714,688\n", - "_________________________________________________________________\n" - ] - } - ], - "source": [ - "model = keras.models.Sequential()\n", - "model.add(keras.applications.VGG16(include_top=False,input_shape=(224,224,3)))\n", - "model.add(keras.layers.Flatten())\n", - "model.add(keras.layers.Dense(1,activation='sigmoid'))\n", - "\n", - "model.layers[0].trainable = False\n", - "\n", - "model.summary()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "ఈ మోడల్ ఒక ఎండ్-టు-ఎండ్ క్లాసిఫికేషన్ నెట్‌వర్క్‌లా కనిపిస్తుంది, ఇది ఒక చిత్రాన్ని తీసుకుని క్లాస్‌ను తిరిగి ఇస్తుంది. అయితే, ఇక్కడ క్లిష్టమైన విషయం ఏమిటంటే, మేము VGG16ని ఫీచర్ ఎక్స్‌ట్రాక్టర్‌గా ఉపయోగించాలనుకుంటున్నాము, మరియు దాన్ని మళ్లీ శిక్షణ ఇవ్వకూడదు. అందుకే, మేము **కన్వల్యూషనల్ ఫీచర్ ఎక్స్‌ట్రాక్టర్ యొక్క వెయిట్స్‌ను ఫ్రీజ్ చేయాలి**. నెట్‌వర్క్ యొక్క మొదటి లేయర్‌ను `model.layers[0]` అని పిలిచి యాక్సెస్ చేయవచ్చు, మరియు `trainable` ప్రాపర్టీని `False` గా సెట్ చేయాలి.\n", - "\n", - "> **Note**: ఫీచర్ ఎక్స్‌ట్రాక్టర్ వెయిట్స్‌ను ఫ్రీజ్ చేయడం అవసరం, ఎందుకంటే లేకపోతే శిక్షణ పొందని క్లాసిఫయర్ లేయర్ ఒరిజినల్ ప్రీ-ట్రెయిన్డ్ కన్వల్యూషనల్ ఎక్స్‌ట్రాక్టర్ వెయిట్స్‌ను ధ్వంసం చేయవచ్చు.\n", - "\n", - "మనం గమనించవచ్చు, మన నెట్‌వర్క్‌లో మొత్తం పారామీటర్లు సుమారు 15 మిలియన్లుగా ఉన్నప్పటికీ, మేము కేవలం 25 వేల పారామీటర్లను మాత్రమే శిక్షణ ఇస్తున్నాము. టాప్-లెవల్ కన్వల్యూషనల్ ఫిల్టర్ల ఇతర అన్ని పారామీటర్లు ప్రీ-ట్రెయిన్డ్ ఉన్నాయి. ఇది మంచిది, ఎందుకంటే మేము తక్కువ సంఖ్యలో ఉదాహరణలతో తక్కువ సంఖ్యలో పారామీటర్లను ఫైన్-ట్యూన్ చేయగలుగుతాము.\n", - "\n", - "ఇప్పుడు మనం నెట్‌వర్క్‌ను శిక్షణ ఇస్తాము మరియు ఎంత మంచి ఫలితాలు వస్తాయో చూద్దాం. శిక్షణ కొంత సమయం పడవచ్చు, మరియు ఎగ్జిక్యూషన్ కొంతసేపు ఫ్రీజ్ అయినట్లు అనిపించినా ఆందోళన చెందకండి.\n" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "310/310 [==============================] - 265s 716ms/step - loss: 0.9917 - acc: 0.9512 - val_loss: 0.8156 - val_acc: 0.9671\n" - ] - } - ], - "source": [ - "model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['acc'])\n", - "hist = model.fit(ds_train, validation_data=ds_test)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "మనం సరిగ్గా కేట్స్ vs. డాగ్స్ వర్గీకరణ మోడల్ పొందినట్లు కనిపిస్తోంది!\n", - "\n", - "## మోడల్ సేవ్ చేయడం మరియు లోడ్ చేయడం\n", - "\n", - "మనం మోడల్‌ను శిక్షణ ఇచ్చిన తర్వాత, భవిష్యత్తులో ఉపయోగించుకోవడానికి మోడల్ నిర్మాణం మరియు శిక్షణ పొందిన వెయిట్లను ఒక ఫైల్‌లో సేవ్ చేయవచ్చు:\n" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "INFO:tensorflow:Assets written to: data/cats_dogs.tf/assets\n" - ] - } - ], - "source": [ - "model.save('data/cats_dogs.tf')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "మనం ఆ తర్వాత ఎప్పుడైనా ఫైల్ నుండి మోడల్‌ను లోడ్ చేసుకోవచ్చు. తదుపరి ప్రయోగం మోడల్‌ను ధ్వంసం చేస్తే ఇది మీకు ఉపయోగకరంగా ఉండవచ్చు - మీరు మొదలైన స్థాయికి తిరిగి ప్రారంభించాల్సిన అవసరం ఉండదు.\n" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [], - "source": [ - "model = keras.models.load_model('data/cats_dogs.tf')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## ఫైన్-ట్యూనింగ్ ట్రాన్స్‌ఫర్ లెర్నింగ్\n", - "\n", - "మునుపటి విభాగంలో, మనం చివరి క్లాసిఫైయర్ లేయర్‌ను మన dataset లోని చిత్రాలను వర్గీకరించడానికి శిక్షణ ఇచ్చాము. అయితే, మనం ఫీచర్ ఎక్స్‌ట్రాక్టర్‌ను మళ్లీ శిక్షణ ఇవ్వలేదు, మరియు మన మోడల్ ImageNet డేటా పై నేర్చుకున్న ఫీచర్లపై ఆధారపడి ఉంది. మీ వస్తువులు సాధారణ ImageNet చిత్రాల నుండి దృశ్యంగా భిన్నంగా ఉంటే, ఈ ఫీచర్ల కలయిక ఉత్తమంగా పనిచేయకపోవచ్చు. అందువల్ల, కన్వల్యూషనల్ లేయర్లను కూడా శిక్షణ ప్రారంభించడం అర్థవంతం.\n", - "\n", - "అందుకోసం, మనం ముందుగా ఫ్రోజెన్ చేసిన కన్వల్యూషనల్ ఫిల్టర్ పరామితులను అన్‌ఫ్రీజ్ చేయవచ్చు.\n", - "\n", - "> **Note:** మీరు ముందుగా పరామితులను ఫ్రీజ్ చేసి, క్లాసిఫికేషన్ లేయర్‌లో వెయిట్లను స్థిరపరచడానికి కొన్ని epochs శిక్షణ నిర్వహించడం ముఖ్యం. మీరు వెంటనే అన్‌ఫ్రీజ్ చేసిన పరామితులతో end-to-end నెట్‌వర్క్ శిక్షణ ప్రారంభిస్తే, పెద్ద తప్పిదాలు కన్వల్యూషనల్ లేయర్లలో ప్రీ-ట్రెయిన్ చేసిన వెయిట్లను నాశనం చేయవచ్చు.\n", - "\n", - "మన కన్వల్యూషనల్ VGG-16 మోడల్ మొదటి లేయర్ లో ఉంది, మరియు అది అనేక లేయర్లతో కూడి ఉంటుంది. దాని నిర్మాణాన్ని మనం పరిశీలించవచ్చు:\n" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Model: \"vgg16\"\n", - "_________________________________________________________________\n", - "Layer (type) Output Shape Param # \n", - "=================================================================\n", - "input_1 (InputLayer) [(None, 224, 224, 3)] 0 \n", - "_________________________________________________________________\n", - "block1_conv1 (Conv2D) (None, 224, 224, 64) 1792 \n", - "_________________________________________________________________\n", - "block1_conv2 (Conv2D) (None, 224, 224, 64) 36928 \n", - "_________________________________________________________________\n", - "block1_pool (MaxPooling2D) (None, 112, 112, 64) 0 \n", - "_________________________________________________________________\n", - "block2_conv1 (Conv2D) (None, 112, 112, 128) 73856 \n", - "_________________________________________________________________\n", - "block2_conv2 (Conv2D) (None, 112, 112, 128) 147584 \n", - "_________________________________________________________________\n", - "block2_pool (MaxPooling2D) (None, 56, 56, 128) 0 \n", - "_________________________________________________________________\n", - "block3_conv1 (Conv2D) (None, 56, 56, 256) 295168 \n", - "_________________________________________________________________\n", - "block3_conv2 (Conv2D) (None, 56, 56, 256) 590080 \n", - "_________________________________________________________________\n", - "block3_conv3 (Conv2D) (None, 56, 56, 256) 590080 \n", - "_________________________________________________________________\n", - "block3_pool (MaxPooling2D) (None, 28, 28, 256) 0 \n", - "_________________________________________________________________\n", - "block4_conv1 (Conv2D) (None, 28, 28, 512) 1180160 \n", - "_________________________________________________________________\n", - "block4_conv2 (Conv2D) (None, 28, 28, 512) 2359808 \n", - "_________________________________________________________________\n", - "block4_conv3 (Conv2D) (None, 28, 28, 512) 2359808 \n", - "_________________________________________________________________\n", - "block4_pool (MaxPooling2D) (None, 14, 14, 512) 0 \n", - "_________________________________________________________________\n", - "block5_conv1 (Conv2D) (None, 14, 14, 512) 2359808 \n", - "_________________________________________________________________\n", - "block5_conv2 (Conv2D) (None, 14, 14, 512) 2359808 \n", - "_________________________________________________________________\n", - "block5_conv3 (Conv2D) (None, 14, 14, 512) 2359808 \n", - "_________________________________________________________________\n", - "block5_pool (MaxPooling2D) (None, 7, 7, 512) 0 \n", - "=================================================================\n", - "Total params: 14,714,688\n", - "Trainable params: 0\n", - "Non-trainable params: 14,714,688\n", - "_________________________________________________________________\n" - ] - } - ], - "source": [ - "model.layers[0].summary()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "మేము కన్వల్యూషనల్ బేస్ యొక్క అన్ని లేయర్లను అన్‌ఫ్రీజ్ చేయవచ్చు:\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "model.layers[0].trainable = True" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "అయితే, వాటన్నింటినీ ఒకేసారి అన్‌ఫ్రీజ్ చేయడం ఉత్తమ ఆలోచన కాదు. మనం మొదట కొన్ని చివరి కాంవల్యూషన్ లేయర్లను మాత్రమే అన్‌ఫ్రీజ్ చేయవచ్చు, ఎందుకంటే అవి మన చిత్రాలకు సంబంధించి ఉన్న ఉన్నత స్థాయి నమూనాలను కలిగి ఉంటాయి. ఉదాహరణకు, మొదటగా, చివరి 4 లేయర్లను తప్ప అన్ని లేయర్లను ఫ్రీజ్ చేయవచ్చు:\n" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Model: \"sequential\"\n", - "_________________________________________________________________\n", - "Layer (type) Output Shape Param # \n", - "=================================================================\n", - "vgg16 (Functional) (None, 7, 7, 512) 14714688 \n", - "_________________________________________________________________\n", - "flatten (Flatten) (None, 25088) 0 \n", - "_________________________________________________________________\n", - "dense (Dense) (None, 1) 25089 \n", - "=================================================================\n", - "Total params: 14,739,777\n", - "Trainable params: 7,104,513\n", - "Non-trainable params: 7,635,264\n", - "_________________________________________________________________\n" - ] - } - ], - "source": [ - "for i in range(len(model.layers[0].layers)-4):\n", - " model.layers[0].layers[i].trainable = False\n", - "model.summary()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "శిక్షణ పొందగల పరామితుల సంఖ్య గణనీయంగా పెరిగిందని గమనించండి, కానీ ఇది ఇంకా మొత్తం పరామితుల సుమారు 50% చుట్టూ ఉంది.\n", - "\n", - "అన్‌ఫ్రీజ్ చేసిన తర్వాత, మేము మరికొన్ని epochs శిక్షణ చేయవచ్చు (మన ఉదాహరణలో, మేము కేవలం ఒకటిని చేస్తాము). మీరు ప్రీ-ట్రెయిన్ చేసిన వెయిట్స్‌పై ప్రభావాన్ని తగ్గించడానికి తక్కువ లెర్నింగ్ రేట్‌ను కూడా ఎంచుకోవచ్చు. అయితే, తక్కువ లెర్నింగ్ రేట్ ఉన్నప్పటికీ, శిక్షణ ప్రారంభంలో ఖచ్చితత్వం తగ్గిపోవడం ఆశించవచ్చు, చివరికి ఫిక్స్ చేసిన వెయిట్స్ కంటే కొంచెం ఎక్కువ స్థాయికి చేరుకుంటుంది.\n", - "\n", - "> **Note:** ఈ శిక్షణ చాలా మందగిస్తుంది, ఎందుకంటే నెట్‌వర్క్ యొక్క అనేక లేయర్ల ద్వారా గ్రాడియెంట్లను వెనక్కి పంపించాల్సి ఉంటుంది!\n" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "310/310 [==============================] - 201s 645ms/step - loss: 0.5270 - acc: 0.9776 - val_loss: 1.4132 - val_acc: 0.9653\n" - ] - } - ], - "source": [ - "hist = model.fit(ds_train, validation_data=ds_test)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "మేము ఎక్కువ పరామితులతో మరింత శక్తివంతమైన నెట్‌వర్క్‌ను ఉపయోగిస్తున్నందున, శిక్షణ ఖచ్చితత్వం ఎక్కువగా సాధించగలమని అనుకుంటున్నాము, కానీ ధృవీకరణ ఖచ్చితత్వం అంతగా పెరగదు.\n", - "\n", - "మీరు నెట్‌వర్క్‌లో మరికొన్ని లేయర్లను అన్‌ఫ్రీజ్ చేసి మరింత శిక్షణ ఇవ్వవచ్చు, తద్వారా మీరు ఎక్కువ ఖచ్చితత్వం సాధించగలరా అని చూడండి!\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## ఇతర కంప్యూటర్ విజన్ మోడల్స్\n", - "\n", - "VGG-16 అనేది అత్యంత సులభమైన కంప్యూటర్ విజన్ ఆర్కిటెక్చర్లలో ఒకటి. Keras అనేక ఇతర ప్రీ-ట్రెయిన్డ్ నెట్‌వర్క్‌లను అందిస్తుంది. వాటిలో అత్యంత తరచుగా ఉపయోగించే వాటిలో **ResNet** ఆర్కిటెక్చర్లు, మైక్రోసాఫ్ట్ అభివృద్ధి చేసినవి, మరియు **Inception** గూగుల్ అభివృద్ధి చేసినది. ఉదాహరణకు, సులభమైన ResNet-50 మోడల్ ఆర్కిటెక్చర్‌ను పరిశీలిద్దాం (ResNet అనేది వివిధ లోతుల మోడల్స్ కుటుంబం, మీరు నిజంగా లోతైన మోడల్ ఎలా ఉంటుందో చూడాలనుకుంటే ResNet-152 తో ప్రయోగించవచ్చు):\n" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Model: \"resnet50\"\n", - "__________________________________________________________________________________________________\n", - "Layer (type) Output Shape Param # Connected to \n", - "==================================================================================================\n", - "input_3 (InputLayer) [(None, 224, 224, 3) 0 \n", - "__________________________________________________________________________________________________\n", - "conv1_pad (ZeroPadding2D) (None, 230, 230, 3) 0 input_3[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv1_conv (Conv2D) (None, 112, 112, 64) 9472 conv1_pad[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv1_bn (BatchNormalization) (None, 112, 112, 64) 256 conv1_conv[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv1_relu (Activation) (None, 112, 112, 64) 0 conv1_bn[0][0] \n", - "__________________________________________________________________________________________________\n", - "pool1_pad (ZeroPadding2D) (None, 114, 114, 64) 0 conv1_relu[0][0] \n", - "__________________________________________________________________________________________________\n", - "pool1_pool (MaxPooling2D) (None, 56, 56, 64) 0 pool1_pad[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv2_block1_1_conv (Conv2D) (None, 56, 56, 64) 4160 pool1_pool[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv2_block1_1_bn (BatchNormali (None, 56, 56, 64) 256 conv2_block1_1_conv[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv2_block1_1_relu (Activation (None, 56, 56, 64) 0 conv2_block1_1_bn[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv2_block1_2_conv (Conv2D) (None, 56, 56, 64) 36928 conv2_block1_1_relu[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv2_block1_2_bn (BatchNormali (None, 56, 56, 64) 256 conv2_block1_2_conv[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv2_block1_2_relu (Activation (None, 56, 56, 64) 0 conv2_block1_2_bn[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv2_block1_0_conv (Conv2D) (None, 56, 56, 256) 16640 pool1_pool[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv2_block1_3_conv (Conv2D) (None, 56, 56, 256) 16640 conv2_block1_2_relu[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv2_block1_0_bn (BatchNormali (None, 56, 56, 256) 1024 conv2_block1_0_conv[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv2_block1_3_bn (BatchNormali (None, 56, 56, 256) 1024 conv2_block1_3_conv[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv2_block1_add (Add) (None, 56, 56, 256) 0 conv2_block1_0_bn[0][0] \n", - " conv2_block1_3_bn[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv2_block1_out (Activation) (None, 56, 56, 256) 0 conv2_block1_add[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv2_block2_1_conv (Conv2D) (None, 56, 56, 64) 16448 conv2_block1_out[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv2_block2_1_bn (BatchNormali (None, 56, 56, 64) 256 conv2_block2_1_conv[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv2_block2_1_relu (Activation (None, 56, 56, 64) 0 conv2_block2_1_bn[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv2_block2_2_conv (Conv2D) (None, 56, 56, 64) 36928 conv2_block2_1_relu[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv2_block2_2_bn (BatchNormali (None, 56, 56, 64) 256 conv2_block2_2_conv[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv2_block2_2_relu (Activation (None, 56, 56, 64) 0 conv2_block2_2_bn[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv2_block2_3_conv (Conv2D) (None, 56, 56, 256) 16640 conv2_block2_2_relu[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv2_block2_3_bn (BatchNormali (None, 56, 56, 256) 1024 conv2_block2_3_conv[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv2_block2_add (Add) (None, 56, 56, 256) 0 conv2_block1_out[0][0] \n", - " conv2_block2_3_bn[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv2_block2_out (Activation) (None, 56, 56, 256) 0 conv2_block2_add[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv2_block3_1_conv (Conv2D) (None, 56, 56, 64) 16448 conv2_block2_out[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv2_block3_1_bn (BatchNormali (None, 56, 56, 64) 256 conv2_block3_1_conv[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv2_block3_1_relu (Activation (None, 56, 56, 64) 0 conv2_block3_1_bn[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv2_block3_2_conv (Conv2D) (None, 56, 56, 64) 36928 conv2_block3_1_relu[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv2_block3_2_bn (BatchNormali (None, 56, 56, 64) 256 conv2_block3_2_conv[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv2_block3_2_relu (Activation (None, 56, 56, 64) 0 conv2_block3_2_bn[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv2_block3_3_conv (Conv2D) (None, 56, 56, 256) 16640 conv2_block3_2_relu[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv2_block3_3_bn (BatchNormali (None, 56, 56, 256) 1024 conv2_block3_3_conv[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv2_block3_add (Add) (None, 56, 56, 256) 0 conv2_block2_out[0][0] \n", - " conv2_block3_3_bn[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv2_block3_out (Activation) (None, 56, 56, 256) 0 conv2_block3_add[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv3_block1_1_conv (Conv2D) (None, 28, 28, 128) 32896 conv2_block3_out[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv3_block1_1_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block1_1_conv[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv3_block1_1_relu (Activation (None, 28, 28, 128) 0 conv3_block1_1_bn[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv3_block1_2_conv (Conv2D) (None, 28, 28, 128) 147584 conv3_block1_1_relu[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv3_block1_2_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block1_2_conv[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv3_block1_2_relu (Activation (None, 28, 28, 128) 0 conv3_block1_2_bn[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv3_block1_0_conv (Conv2D) (None, 28, 28, 512) 131584 conv2_block3_out[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv3_block1_3_conv (Conv2D) (None, 28, 28, 512) 66048 conv3_block1_2_relu[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv3_block1_0_bn (BatchNormali (None, 28, 28, 512) 2048 conv3_block1_0_conv[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv3_block1_3_bn (BatchNormali (None, 28, 28, 512) 2048 conv3_block1_3_conv[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv3_block1_add (Add) (None, 28, 28, 512) 0 conv3_block1_0_bn[0][0] \n", - " conv3_block1_3_bn[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv3_block1_out (Activation) (None, 28, 28, 512) 0 conv3_block1_add[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv3_block2_1_conv (Conv2D) (None, 28, 28, 128) 65664 conv3_block1_out[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv3_block2_1_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block2_1_conv[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv3_block2_1_relu (Activation (None, 28, 28, 128) 0 conv3_block2_1_bn[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv3_block2_2_conv (Conv2D) (None, 28, 28, 128) 147584 conv3_block2_1_relu[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv3_block2_2_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block2_2_conv[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv3_block2_2_relu (Activation (None, 28, 28, 128) 0 conv3_block2_2_bn[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv3_block2_3_conv (Conv2D) (None, 28, 28, 512) 66048 conv3_block2_2_relu[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv3_block2_3_bn (BatchNormali (None, 28, 28, 512) 2048 conv3_block2_3_conv[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv3_block2_add (Add) (None, 28, 28, 512) 0 conv3_block1_out[0][0] \n", - " conv3_block2_3_bn[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv3_block2_out (Activation) (None, 28, 28, 512) 0 conv3_block2_add[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv3_block3_1_conv (Conv2D) (None, 28, 28, 128) 65664 conv3_block2_out[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv3_block3_1_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block3_1_conv[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv3_block3_1_relu (Activation (None, 28, 28, 128) 0 conv3_block3_1_bn[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv3_block3_2_conv (Conv2D) (None, 28, 28, 128) 147584 conv3_block3_1_relu[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv3_block3_2_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block3_2_conv[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv3_block3_2_relu (Activation (None, 28, 28, 128) 0 conv3_block3_2_bn[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv3_block3_3_conv (Conv2D) (None, 28, 28, 512) 66048 conv3_block3_2_relu[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv3_block3_3_bn (BatchNormali (None, 28, 28, 512) 2048 conv3_block3_3_conv[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv3_block3_add (Add) (None, 28, 28, 512) 0 conv3_block2_out[0][0] \n", - " conv3_block3_3_bn[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv3_block3_out (Activation) (None, 28, 28, 512) 0 conv3_block3_add[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv3_block4_1_conv (Conv2D) (None, 28, 28, 128) 65664 conv3_block3_out[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv3_block4_1_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block4_1_conv[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv3_block4_1_relu (Activation (None, 28, 28, 128) 0 conv3_block4_1_bn[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv3_block4_2_conv (Conv2D) (None, 28, 28, 128) 147584 conv3_block4_1_relu[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv3_block4_2_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block4_2_conv[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv3_block4_2_relu (Activation (None, 28, 28, 128) 0 conv3_block4_2_bn[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv3_block4_3_conv (Conv2D) (None, 28, 28, 512) 66048 conv3_block4_2_relu[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv3_block4_3_bn (BatchNormali (None, 28, 28, 512) 2048 conv3_block4_3_conv[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv3_block4_add (Add) (None, 28, 28, 512) 0 conv3_block3_out[0][0] \n", - " conv3_block4_3_bn[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv3_block4_out (Activation) (None, 28, 28, 512) 0 conv3_block4_add[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block1_1_conv (Conv2D) (None, 14, 14, 256) 131328 conv3_block4_out[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block1_1_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block1_1_conv[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block1_1_relu (Activation (None, 14, 14, 256) 0 conv4_block1_1_bn[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block1_2_conv (Conv2D) (None, 14, 14, 256) 590080 conv4_block1_1_relu[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block1_2_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block1_2_conv[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block1_2_relu (Activation (None, 14, 14, 256) 0 conv4_block1_2_bn[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block1_0_conv (Conv2D) (None, 14, 14, 1024) 525312 conv3_block4_out[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block1_3_conv (Conv2D) (None, 14, 14, 1024) 263168 conv4_block1_2_relu[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block1_0_bn (BatchNormali (None, 14, 14, 1024) 4096 conv4_block1_0_conv[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block1_3_bn (BatchNormali (None, 14, 14, 1024) 4096 conv4_block1_3_conv[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block1_add (Add) (None, 14, 14, 1024) 0 conv4_block1_0_bn[0][0] \n", - " conv4_block1_3_bn[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block1_out (Activation) (None, 14, 14, 1024) 0 conv4_block1_add[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block2_1_conv (Conv2D) (None, 14, 14, 256) 262400 conv4_block1_out[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block2_1_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block2_1_conv[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block2_1_relu (Activation (None, 14, 14, 256) 0 conv4_block2_1_bn[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block2_2_conv (Conv2D) (None, 14, 14, 256) 590080 conv4_block2_1_relu[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block2_2_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block2_2_conv[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block2_2_relu (Activation (None, 14, 14, 256) 0 conv4_block2_2_bn[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block2_3_conv (Conv2D) (None, 14, 14, 1024) 263168 conv4_block2_2_relu[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block2_3_bn (BatchNormali (None, 14, 14, 1024) 4096 conv4_block2_3_conv[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block2_add (Add) (None, 14, 14, 1024) 0 conv4_block1_out[0][0] \n", - " conv4_block2_3_bn[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block2_out (Activation) (None, 14, 14, 1024) 0 conv4_block2_add[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block3_1_conv (Conv2D) (None, 14, 14, 256) 262400 conv4_block2_out[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block3_1_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block3_1_conv[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block3_1_relu (Activation (None, 14, 14, 256) 0 conv4_block3_1_bn[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block3_2_conv (Conv2D) (None, 14, 14, 256) 590080 conv4_block3_1_relu[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block3_2_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block3_2_conv[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block3_2_relu (Activation (None, 14, 14, 256) 0 conv4_block3_2_bn[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block3_3_conv (Conv2D) (None, 14, 14, 1024) 263168 conv4_block3_2_relu[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block3_3_bn (BatchNormali (None, 14, 14, 1024) 4096 conv4_block3_3_conv[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block3_add (Add) (None, 14, 14, 1024) 0 conv4_block2_out[0][0] \n", - " conv4_block3_3_bn[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block3_out (Activation) (None, 14, 14, 1024) 0 conv4_block3_add[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block4_1_conv (Conv2D) (None, 14, 14, 256) 262400 conv4_block3_out[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block4_1_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block4_1_conv[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block4_1_relu (Activation (None, 14, 14, 256) 0 conv4_block4_1_bn[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block4_2_conv (Conv2D) (None, 14, 14, 256) 590080 conv4_block4_1_relu[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block4_2_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block4_2_conv[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block4_2_relu (Activation (None, 14, 14, 256) 0 conv4_block4_2_bn[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block4_3_conv (Conv2D) (None, 14, 14, 1024) 263168 conv4_block4_2_relu[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block4_3_bn (BatchNormali (None, 14, 14, 1024) 4096 conv4_block4_3_conv[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block4_add (Add) (None, 14, 14, 1024) 0 conv4_block3_out[0][0] \n", - " conv4_block4_3_bn[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block4_out (Activation) (None, 14, 14, 1024) 0 conv4_block4_add[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block5_1_conv (Conv2D) (None, 14, 14, 256) 262400 conv4_block4_out[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block5_1_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block5_1_conv[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block5_1_relu (Activation (None, 14, 14, 256) 0 conv4_block5_1_bn[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block5_2_conv (Conv2D) (None, 14, 14, 256) 590080 conv4_block5_1_relu[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block5_2_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block5_2_conv[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block5_2_relu (Activation (None, 14, 14, 256) 0 conv4_block5_2_bn[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block5_3_conv (Conv2D) (None, 14, 14, 1024) 263168 conv4_block5_2_relu[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block5_3_bn (BatchNormali (None, 14, 14, 1024) 4096 conv4_block5_3_conv[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block5_add (Add) (None, 14, 14, 1024) 0 conv4_block4_out[0][0] \n", - " conv4_block5_3_bn[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block5_out (Activation) (None, 14, 14, 1024) 0 conv4_block5_add[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block6_1_conv (Conv2D) (None, 14, 14, 256) 262400 conv4_block5_out[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block6_1_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block6_1_conv[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block6_1_relu (Activation (None, 14, 14, 256) 0 conv4_block6_1_bn[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block6_2_conv (Conv2D) (None, 14, 14, 256) 590080 conv4_block6_1_relu[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block6_2_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block6_2_conv[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block6_2_relu (Activation (None, 14, 14, 256) 0 conv4_block6_2_bn[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block6_3_conv (Conv2D) (None, 14, 14, 1024) 263168 conv4_block6_2_relu[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block6_3_bn (BatchNormali (None, 14, 14, 1024) 4096 conv4_block6_3_conv[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block6_add (Add) (None, 14, 14, 1024) 0 conv4_block5_out[0][0] \n", - " conv4_block6_3_bn[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv4_block6_out (Activation) (None, 14, 14, 1024) 0 conv4_block6_add[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv5_block1_1_conv (Conv2D) (None, 7, 7, 512) 524800 conv4_block6_out[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv5_block1_1_bn (BatchNormali (None, 7, 7, 512) 2048 conv5_block1_1_conv[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv5_block1_1_relu (Activation (None, 7, 7, 512) 0 conv5_block1_1_bn[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv5_block1_2_conv (Conv2D) (None, 7, 7, 512) 2359808 conv5_block1_1_relu[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv5_block1_2_bn (BatchNormali (None, 7, 7, 512) 2048 conv5_block1_2_conv[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv5_block1_2_relu (Activation (None, 7, 7, 512) 0 conv5_block1_2_bn[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv5_block1_0_conv (Conv2D) (None, 7, 7, 2048) 2099200 conv4_block6_out[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv5_block1_3_conv (Conv2D) (None, 7, 7, 2048) 1050624 conv5_block1_2_relu[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv5_block1_0_bn (BatchNormali (None, 7, 7, 2048) 8192 conv5_block1_0_conv[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv5_block1_3_bn (BatchNormali (None, 7, 7, 2048) 8192 conv5_block1_3_conv[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv5_block1_add (Add) (None, 7, 7, 2048) 0 conv5_block1_0_bn[0][0] \n", - " conv5_block1_3_bn[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv5_block1_out (Activation) (None, 7, 7, 2048) 0 conv5_block1_add[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv5_block2_1_conv (Conv2D) (None, 7, 7, 512) 1049088 conv5_block1_out[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv5_block2_1_bn (BatchNormali (None, 7, 7, 512) 2048 conv5_block2_1_conv[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv5_block2_1_relu (Activation (None, 7, 7, 512) 0 conv5_block2_1_bn[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv5_block2_2_conv (Conv2D) (None, 7, 7, 512) 2359808 conv5_block2_1_relu[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv5_block2_2_bn (BatchNormali (None, 7, 7, 512) 2048 conv5_block2_2_conv[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv5_block2_2_relu (Activation (None, 7, 7, 512) 0 conv5_block2_2_bn[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv5_block2_3_conv (Conv2D) (None, 7, 7, 2048) 1050624 conv5_block2_2_relu[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv5_block2_3_bn (BatchNormali (None, 7, 7, 2048) 8192 conv5_block2_3_conv[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv5_block2_add (Add) (None, 7, 7, 2048) 0 conv5_block1_out[0][0] \n", - " conv5_block2_3_bn[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv5_block2_out (Activation) (None, 7, 7, 2048) 0 conv5_block2_add[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv5_block3_1_conv (Conv2D) (None, 7, 7, 512) 1049088 conv5_block2_out[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv5_block3_1_bn (BatchNormali (None, 7, 7, 512) 2048 conv5_block3_1_conv[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv5_block3_1_relu (Activation (None, 7, 7, 512) 0 conv5_block3_1_bn[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv5_block3_2_conv (Conv2D) (None, 7, 7, 512) 2359808 conv5_block3_1_relu[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv5_block3_2_bn (BatchNormali (None, 7, 7, 512) 2048 conv5_block3_2_conv[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv5_block3_2_relu (Activation (None, 7, 7, 512) 0 conv5_block3_2_bn[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv5_block3_3_conv (Conv2D) (None, 7, 7, 2048) 1050624 conv5_block3_2_relu[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv5_block3_3_bn (BatchNormali (None, 7, 7, 2048) 8192 conv5_block3_3_conv[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv5_block3_add (Add) (None, 7, 7, 2048) 0 conv5_block2_out[0][0] \n", - " conv5_block3_3_bn[0][0] \n", - "__________________________________________________________________________________________________\n", - "conv5_block3_out (Activation) (None, 7, 7, 2048) 0 conv5_block3_add[0][0] \n", - "__________________________________________________________________________________________________\n", - "avg_pool (GlobalAveragePooling2 (None, 2048) 0 conv5_block3_out[0][0] \n", - "__________________________________________________________________________________________________\n", - "predictions (Dense) (None, 1000) 2049000 avg_pool[0][0] \n", - "==================================================================================================\n", - "Total params: 25,636,712\n", - "Trainable params: 25,583,592\n", - "Non-trainable params: 53,120\n", - "__________________________________________________________________________________________________\n" - ] - } - ], - "source": [ - "resnet = keras.applications.ResNet50()\n", - "resnet.summary()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "మీరు చూడగలిగినట్లుగా, మోడల్‌లో అదే పరిచిత నిర్మాణ భాగాలు ఉన్నాయి: కన్వల్యూషనల్ లేయర్లు, పూలింగ్ లేయర్లు మరియు చివరి డెన్స్ క్లాసిఫయర్. మేము ఈ మోడల్‌ను VGG-16ని ట్రాన్స్‌ఫర్ లెర్నింగ్ కోసం ఉపయోగించినట్లే పూర్తిగా అదే విధంగా ఉపయోగించవచ్చు. మీరు పై కోడ్‌తో ప్రయోగాలు చేయవచ్చు, వేరే ResNet మోడల్స్‌ను బేస్ మోడల్‌గా ఉపయోగించి, ఖచ్చితత్వం ఎలా మారుతుందో చూడవచ్చు.\n", - "\n", - "## బ్యాచ్ నార్మలైజేషన్\n", - "\n", - "ఈ నెట్‌వర్క్‌లో మరో రకమైన లేయర్ ఉంది: **బ్యాచ్ నార్మలైజేషన్**. బ్యాచ్ నార్మలైజేషన్ యొక్క భావన ఏమిటంటే, న్యూరల్ నెట్‌వర్క్ ద్వారా ప్రవహించే విలువలను సరైన పరిధిలోకి తీసుకురావడం. సాధారణంగా న్యూరల్ నెట్‌వర్క్స్ ఉత్తమంగా పనిచేస్తాయి, అన్ని విలువలు [-1,1] లేదా [0,1] పరిధిలో ఉన్నప్పుడు, అందుకే మనం ఇన్‌పుట్ డేటాను తగిన విధంగా స్కేల్/నార్మలైజ్ చేస్తాము. అయితే, లోతైన నెట్‌వర్క్ శిక్షణ సమయంలో, విలువలు ఈ పరిధి నుండి గణనీయంగా బయటకు పోవచ్చు, ఇది శిక్షణను కష్టతరం చేస్తుంది. బ్యాచ్ నార్మలైజేషన్ లేయర్ ప్రస్తుత మినీబ్యాచ్‌లోని అన్ని విలువల సగటు మరియు ప్రమాణ విభిన్నతను లెక్కించి, వాటిని ఉపయోగించి సిగ్నల్‌ను నార్మలైజ్ చేసి, న్యూరల్ నెట్‌వర్క్ లేయర్‌కు పంపుతుంది. ఇది లోతైన నెట్‌వర్క్స్ స్థిరత్వాన్ని గణనీయంగా మెరుగుపరుస్తుంది.\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## ముఖ్యాంశం\n", - "\n", - "ట్రాన్స్‌ఫర్ లెర్నింగ్ ఉపయోగించి, మన కస్టమ్ ఆబ్జెక్ట్ వర్గీకరణ పనికి తక్షణమే ఒక క్లాసిఫయర్ తయారు చేసి, అధిక ఖచ్చితత్వాన్ని సాధించగలిగాము. అయితే, ఈ ఉదాహరణ పూర్తిగా న్యాయమైనది కాదు, ఎందుకంటే అసలు VGG-16 నెట్‌వర్క్ పిల్లులు మరియు కుక్కలను గుర్తించడానికి ముందుగా శిక్షణ పొందింది, కాబట్టి మనం ఇప్పటికే నెట్‌వర్క్‌లో ఉన్న చాలా నమూనాలను మళ్లీ ఉపయోగించుకున్నాము. ప్లాంట్‌లో ఉత్పత్తి లైన్‌లోని వివరాలు లేదా వేర్వేరు చెట్టు ఆకులు వంటి మరింత ప్రత్యేక డొమైన్-స్పెసిఫిక్ వస్తువులపై తక్కువ ఖచ్చితత్వం ఆశించవచ్చు.\n", - "\n", - "ఇప్పుడు మనం పరిష్కరించాల్సిన మరింత క్లిష్టమైన పనులు ఎక్కువ కంప్యూటింగ్ శక్తిని అవసరం చేస్తాయని, CPUపై సులభంగా పరిష్కరించలేమని మీరు చూడవచ్చు. తదుపరి యూనిట్‌లో, తక్కువ కంప్యూట్ వనరులతో అదే మోడల్‌ను శిక్షణ ఇవ్వడానికి మరింత తేలికపాటి అమలును ఉపయోగించడానికి ప్రయత్నిస్తాము, దీని ఫలితంగా కొద్దిగా తక్కువ ఖచ్చితత్వం ఉంటుంది.\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "---\n\n\n**అస్పష్టత**: \nఈ పత్రాన్ని AI అనువాద సేవ [Co-op Translator](https://github.com/Azure/co-op-translator) ఉపయోగించి అనువదించబడింది. మేము ఖచ్చితత్వానికి ప్రయత్నించినప్పటికీ, ఆటోమేటెడ్ అనువాదాల్లో పొరపాట్లు లేదా తప్పిదాలు ఉండవచ్చు. మూల పత్రం దాని స్వదేశీ భాషలో అధికారిక మూలంగా పరిగణించాలి. ముఖ్యమైన సమాచారానికి, ప్రొఫెషనల్ మానవ అనువాదం సిఫార్సు చేయబడుతుంది. ఈ అనువాదం వాడకంలో ఏర్పడిన ఏవైనా అపార్థాలు లేదా తప్పుదారుల కోసం మేము బాధ్యత వహించము.\n\n" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "py38_tensorflow", - "language": "python", - "name": "conda-env-py38_tensorflow-py" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.8.10" - }, - "coopTranslator": { - "original_hash": "c189abc107848f96051085cc30945129", - "translation_date": "2025-11-26T00:57:08+00:00", - "source_file": "lessons/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb", - "language_code": "te" - } - }, - "nbformat": 4, - "nbformat_minor": 4 +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# ముందుగా శిక్షణ పొందిన మోడళ్ళు మరియు ట్రాన్స్ఫర్ లెర్నింగ్\n", + "\n", + "CNNలను శిక్షణ ఇవ్వడం చాలా సమయం తీసుకోగలదు, మరియు ఆ పనికి చాలా డేటా అవసరం ఉంటుంది. అయితే, ఎక్కువ సమయం ఒక నెట్‌వర్క్ ఇమేజెస్ నుండి నమూనాలు తీసివేయడానికి ఉపయోగిస్తున్న ఉత్తమ తక్కువ-స్థాయి ఫిల్టర్లను నేర్చుకోవడంలో ఖర్చవుతుంది. ఒక సహజమైన ప్రశ్న రాకపోవడం లేదు - ఒక డేటాసెట్‌పై శిక్షణ పొందిన న్యూరల్ నెట్‌వర్క్‌ను తీసుకుని, పూర్తి శిక్షణ ప్రాసెస్ లేకుండా భిన్నమైన ఇమేజెస్‌ను వర్గీకరించడంలో దాన్ని అనుకూలపరచగలమా?\n", + "\n", + "ఈ దృష్టికోణాన్ని **ట్రాన్స్ఫర్ లెర్నింగ్** అంటారు, ఎందుకంటే మనం ఒక న్యూరల్ నెట్‌వర్క్ మోడల్ నుండి మరొకదానికి కొంత జ్ఞానం బదిలీ చేసుకుంటాము. ట్రాన్స్ఫర్ లెర్నింగ్‌లో, సాధారణంగా మనం ముందుగా శిక్షణ పొందిన మోడల్‌తో ప్రారంభిస్తాము, అది ఒక పెద్ద ఇమేజ్ డేటాసెట్, ఉదాహరణకు **ImageNet**పై శిక్షణ పొందింది. ఆ మోడళ్లు ఇప్పటికే సాధారణ ఇమేజెస్ నుండి విభిన్న ఫీచర్‌లను బాగా గ్రహించగలవు, మరియు అనేక సందర్భాల్లో ఆ ఫీచర్‌లు ఉపయోగించి ఒక క్లాసిఫయర్ తయారు చేయడం మంచి ఫలితాన్ని ఇస్తుంది.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import tensorflow as tf\n", + "from tensorflow import keras\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import os\n", + "from tfcv import *" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## పిల్లులు vs. కుక్కల డేటాసెట్\n", + "\n", + "ఈయే ఎపిసోడ్‌లో, మేము పిల్లులు మరియు కుక్కల చిత్రాలను వర్గీకరించే ఒక నిజజీవి సమస్యను పరిష్కరిస్తాము. ఈ కారణంగా, మేము [Kaggle Cats vs. Dogs Dataset](https://www.kaggle.com/c/dogs-vs-cats) ఉపయోగిస్తాము, ఇది మైక్రోసాఫ్ట్ నుండి కూడా [డౌన్లోడ్ చేయవచ్చు](https://www.microsoft.com/en-us/download/details.aspx?id=54765&WT.mc_id=academic-77998-cacaste).\n", + "\n", + "ఈ డేటాసెట్‌ను డౌన్లోడ్ చేసుకుని `data` ఫోల్డర్‌లో ఎక్స్‌ట్రాక్ట్ చేద్దాం (ఈ ప్రక్రియకి కొంత సమయం పట్టవచ్చు!):\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "if not os.path.exists('data/kagglecatsanddogs_5340.zip'):\n", + " !wget -P data https://download.microsoft.com/download/3/E/1/3E1C3F21-ECDB-4869-8368-6DEBA77B919F/kagglecatsanddogs_5340.zip" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import zipfile\n", + "if not os.path.exists('data/PetImages'):\n", + " with zipfile.ZipFile('data/kagglecatsanddogs_5340.zip', 'r') as zip_ref:\n", + " zip_ref.extractall('data')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "దురదృష్టవశాత్తూ, డేటాసెట్‌లో కొన్ని దెబ్బతిన్న ఇమేజ్ ఫైళ్లు ఉన్నాయి. దెబ్బతిన్న ఫైల్స్ కోసం వేగంగా పరిశీలించడానికి మేము శుభ్రపరిచే పని చేయాలి. ఈ ట్యుటోరియల్‌ను దెబ్బతీస్తూనే కాకుండా ఉండాలంటే, మేము డేటాసెట్‌ను నిర్ధారించడానికిఆ కో드를 ఒక మాడ్యూల్‌గా మార్చాము.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Corrupt image or wrong format: data/PetImages/Cat/12235.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/2663.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/4929.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/8183.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/11083.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/6435.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/6491.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/7968.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/6768.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/11397.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/8295.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/4874.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/23.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/11864.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/3491.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/11729.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/3197.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/10874.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/6376.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/9361.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/9328.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/910.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/2021.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/666.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/3710.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/9171.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/6906.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/11095.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/660.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/8415.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/3161.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/850.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/7003.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/1267.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/7642.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/8553.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/6900.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/4334.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/10404.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/6980.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/936.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/9619.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/3300.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/7647.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/2742.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/9565.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/1757.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/11874.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/1936.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/5077.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/7845.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/8832.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/11935.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/9208.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/4322.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/7978.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/10820.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/391.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/10073.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/8958.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/8470.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/445.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/4821.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/11565.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/4351.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/4833.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/140.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/3153.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/5370.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/5819.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/3649.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/4293.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/3967.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/1937.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/10125.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/1386.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/4750.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/6029.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/5614.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/2569.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/9778.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/6486.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/11210.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/7502.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/2189.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/1151.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/4629.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/12080.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/10501.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/1914.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/11086.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/4000.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/9100.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/5553.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/12269.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/5243.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/3288.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/11912.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/3320.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/11166.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/8194.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/2353.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/9026.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/8557.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/7969.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/8693.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/4367.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/1900.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/5730.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/9961.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/8126.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/8521.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/11560.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/11233.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/11675.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/8889.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/9414.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/3588.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/10353.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/10733.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/6238.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/5618.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/7743.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/10747.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/6503.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/11410.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/5955.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/2915.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/3136.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/4086.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/2905.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/2494.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/3546.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/5547.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/9851.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/9188.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/4203.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/8715.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/4640.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/1866.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/7718.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/7514.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/1017.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/12102.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/296.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/6718.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/11253.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/10173.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/11849.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/10383.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/10678.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/5790.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/6318.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/1884.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/4654.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/9145.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/2479.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/12289.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/2688.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/4134.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/10637.jpg\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/anaconda/envs/py38_tensorflow/lib/python3.8/site-packages/PIL/TiffImagePlugin.py:793: UserWarning: Truncated File Read\n", + " warnings.warn(str(msg))\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Corrupt image or wrong format: data/PetImages/Dog/543.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/8730.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/12114.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/522.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/10863.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/10401.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/7739.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/561.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/1308.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/9643.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/3155.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/5736.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/4257.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/11853.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/6855.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/1259.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/7652.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/573.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/11702.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/414.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/4301.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/9500.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/10726.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/9367.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/2877.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/10907.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/10972.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/7311.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/10797.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/2317.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/7128.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/6500.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/11285.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/6430.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/6032.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/10969.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/8364.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/11692.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/3038.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/5604.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/565.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/9640.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/7459.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/6305.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/6555.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/11590.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/6059.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/3927.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/10705.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/2384.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/3885.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/663.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/9043.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/8563.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/9556.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/9967.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/10158.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/5263.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/8641.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/7369.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/4924.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/10351.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/6213.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/5104.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/1356.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/7133.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/7112.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/1168.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/719.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/50.jpg\n" + ] + } + ], + "source": [ + "check_image_dir('data/PetImages/Cat/*.jpg')\n", + "check_image_dir('data/PetImages/Dog/*.jpg')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## డేటాసెట్ లోడ్ చేయడం\n", + "\n", + "మునుపటి ఉదాహరణల్లో, మనం Keras లో నడిచే డేటాసెట్టులను లోడ్ చేస్తున్నారు. ఇప్పుడు మన సొంత డేటాసెట్‌ను, అది చిత్రాల డైరెక్టరీ నుండి లోడ్ చేయాల్సిన అవసరం ఉంది.\n", + "\n", + "వాస్తవ జీవితంలో, చిత్ర డేటాసెట్ పరిమాణం చాలా పెద్దగా ఉండవచ్చు, అందువల్ల అన్ని డేటా మెమరీలో సరిపోవడం సాధ్యం కాదు. కాబట్టి, డేటాసెట్లను తరచుగా ట్రైనింగ్‌కు అనువైన మినిబ్యాచుల్లో డేటా ఇవ్వగల **జనరేటర్ల** రూపంలో ప్రాతినిధ్యం చేస్తారు.\n", + "\n", + "చిత్రం వర్గీకరణకు సంబంధించిన సమస్యను పరిష్కరించడానికి, Keras ప్రత్యేకమైన `image_dataset_from_directory` ఫంక్షన్‌ను కలిగి ఉంది, ఇది వర్గాలలో ఉన్న ఉపడైరెక్టరీల నుండి చిత్రాలను లోడ్ చేయగలదు. ఈ ఫంక్షన్ చిత్రాలను స్కేల్ చేయడాన్ని కూడా చూసుకుంటుంది, అలాగే డేటాసెట్‌ను ట్రైన్ మరియు టెస్ట్ సబ్‌సెట్‌లుగా విభజించగలదు:\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Found 24769 files belonging to 2 classes.\n", + "Using 19816 files for training.\n", + "Found 24769 files belonging to 2 classes.\n", + "Using 4953 files for validation.\n" + ] + } + ], + "source": [ + "data_dir = 'data/PetImages'\n", + "batch_size = 64\n", + "ds_train = keras.preprocessing.image_dataset_from_directory(\n", + " data_dir,\n", + " validation_split = 0.2,\n", + " subset = 'training',\n", + " seed = 13,\n", + " image_size = (224,224),\n", + " batch_size = batch_size\n", + ")\n", + "ds_test = keras.preprocessing.image_dataset_from_directory(\n", + " data_dir,\n", + " validation_split = 0.2,\n", + " subset = 'validation',\n", + " seed = 13,\n", + " image_size = (224,224),\n", + " batch_size = batch_size\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ట్రైన్ మరియు టెస్ట్ డేటాసెట్ మధ్య చిత్రాల విభజనపై ప్రభావం చూపే కారణంగా రెండింటి కోసం సమానం అయిన `seed` విలువ సెట్ చేయడం ముఖ్యం.\n", + "\n", + "డేటాసెట్ ఆటోమేటిగ్గా డైరెక్టరీల నుండి తరగతి పేర్లను ఎంచుకుంటుంది, మరియు అవసరం ఉంటే మీరు వాటిని కాల్ చేసి యాక్సెస్ చేయవచ్చు:\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['Cat', 'Dog']" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ds_train.class_names" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "మేము పొందిన డేటాసెట్లు మోడల్‌ను శిక్షణ ఇచ్చేందుకు నేరుగా `fit` ఫంక్షన్‌కు పంపవచ్చు. అవి సంబంధిత చిత్రాలు మరియు లేబుల్స్ రెండింటినీ కలిగి ఉంటాయి, వీటిని క్రింది నిర్మాణం ఉపయోగించి లూప్ చేయవచ్చు:\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Training batch shape: features=(64, 224, 224, 3), labels=(64,)\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "for x,y in ds_train:\n", + " print(f\"Training batch shape: features={x.shape}, labels={y.shape}\")\n", + " x_sample, y_sample = x,y\n", + " break\n", + " \n", + "display_dataset(x_sample.numpy().astype(np.int),np.expand_dims(y_sample,1),classes=ds_train.class_names)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "> **గమనిక**: డేటాసెట్‌లోని అన్ని చిత్రాలు 0-255 పరిధితో ఫ్లోటింగ్ పాయింట్ టెన్సార్లుగా ప్రాతినిధ్యం వహిస్తాయి. వాటిని న్యూరల్ నెట్‌వర్క్‌కు పంపించేముందు, ఆ విలువలను 0-1 పరిధిలోకి స్కేల్ చేయాలి. చిత్రాలను ప్లాట్ చేసే సమయంలో, మనం అదే చేయాలి లేదా విలువలను `int` రకానికి మార్చాలి (ముందుగా ఇచ్చిన కోడ్‌లో మనం ఇది చేస్తాము), తద్వారా `matplotlib`కి మనం అసలు స్కేల్ చేయని చిత్రం ప్లాట్ చేయదలచినట్లు చూపించవచ్చు.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## ముందుగా శిక్షణ పొందిన మోడల్స్\n", + "\n", + "అనేక చిత్రం వర్గీకరణ పనుల కోసం ముందుగా శిక్షణ పొందిన న్యూరల్ నెట్‌వర్క్ మోడల్స్‌ను కనుగొనవచ్చు. ఆ మోడల్స్‌లో అనేకం `keras.applications` నేమ్‌స్పేస్‌లో అందుబాటులో ఉన్నాయి, ఇంకా మరిన్ని మోడల్స్ ఇంటర్నెట్‌లో కనిపిస్తాయి. సులభమైన VGG-16 మోడల్ ఎలా లోడ్ చేసి ఉపయోగించవచ్చో చూద్దాం:\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Downloading data from https://storage.googleapis.com/tensorflow/keras-applications/vgg16/vgg16_weights_tf_dim_ordering_tf_kernels.h5\n", + "553467904/553467096 [==============================] - 6s 0us/step\n", + "Most probable class = [208]\n", + "Downloading data from https://storage.googleapis.com/download.tensorflow.org/data/imagenet_class_index.json\n", + "40960/35363 [==================================] - 0s 0us/step\n" + ] + }, + { + "data": { + "text/plain": [ + "[[('n02099712', 'Labrador_retriever', 0.5340957),\n", + " ('n02100236', 'German_short-haired_pointer', 0.0939442),\n", + " ('n02092339', 'Weimaraner', 0.08160535),\n", + " ('n02099849', 'Chesapeake_Bay_retriever', 0.057179328),\n", + " ('n02109047', 'Great_Dane', 0.03733857)]]" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# 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", + "print(f\"Most probable class = {tf.argmax(res,1)}\")\n", + "\n", + "keras.applications.vgg16.decode_predictions(res.numpy())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ఇక్కడ కొన్ని ముఖ్యమైన విషయాలు ఉన్నాయి:\n", + "* ప్రీ-ట్రెయిన్ చేసిన ఏ నెట్‌వర్క్‌కు ఇన్పుట్‌ను పంపేముందు, అది ఒక నిర్దిష్ట విధంగా ప్రీ-ప్రాసెస్ చేయబడాలి. ఇది సంబంధిత `preprocess_input` ఫంక్షన్‌ను పిలవడం ద్వారా జరుగుతుంది, ఇది ఒక బ్యాచ్ చిత్రాలను అందుకుని, వాటి ప్రాసెస్ చేసిన రూపాన్ని తిరిగి ఇస్తుంది. VGG-16 సందర్భంలో, చిత్రాలను సాధారణీకరించబడతాయి, మరియు ప్రతి ఛానెల్‌కు ముందుగా నిర్వచించిన సగటు విలువ తగ్గించబడుతుంది. ఇది ఎందుకంటే VGG-16 ప్రాథమికంగా ఈ ప్రీ-ప్రాసెసింగ్‌తో శిక్షణ పొందింది.\n", + "* న్యూరల్ నెట్‌వర్క్ ఇన్‌పుట్ బ్యాచ్‌కు వర్తించబడుతుంది, మరియు ఫలితంగా 1000-మెంబర్ టెన్సర్ల బ్యాచ్ వస్తుంది, ఇది ప్రతి వర్గం యొక్క probability చూపిస్తుంది. ఈ టెన్సర్‌పై `argmax` పిలిచి అత్యధిక probability ఉన్న వర్గ సంఖ్యను కనుగొంటాం.\n", + "* పొందిన ఫలితం [ఒక `ImageNet` వర్గం సంఖ్య](https://gist.github.com/yrevar/942d3a0ac09ec9e5eb3a). ఈ ఫలితాన్ని అర్థం చేసుకోవడానికి, మేము కూడా `decode_predictions` ఫంక్షన్‌ను ఉపయోగించవచ్చు, ఇది టాప్ n వర్గాలను వారి పేర్లతో పాటు ఇస్తుంది.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "మనం VGG-16 నెట్‌వర్క్ నిర్మాణం కూడా చూద్దాం:\n" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: \"vgg16\"\n", + "_________________________________________________________________\n", + "Layer (type) Output Shape Param # \n", + "=================================================================\n", + "input_1 (InputLayer) [(None, 224, 224, 3)] 0 \n", + "_________________________________________________________________\n", + "block1_conv1 (Conv2D) (None, 224, 224, 64) 1792 \n", + "_________________________________________________________________\n", + "block1_conv2 (Conv2D) (None, 224, 224, 64) 36928 \n", + "_________________________________________________________________\n", + "block1_pool (MaxPooling2D) (None, 112, 112, 64) 0 \n", + "_________________________________________________________________\n", + "block2_conv1 (Conv2D) (None, 112, 112, 128) 73856 \n", + "_________________________________________________________________\n", + "block2_conv2 (Conv2D) (None, 112, 112, 128) 147584 \n", + "_________________________________________________________________\n", + "block2_pool (MaxPooling2D) (None, 56, 56, 128) 0 \n", + "_________________________________________________________________\n", + "block3_conv1 (Conv2D) (None, 56, 56, 256) 295168 \n", + "_________________________________________________________________\n", + "block3_conv2 (Conv2D) (None, 56, 56, 256) 590080 \n", + "_________________________________________________________________\n", + "block3_conv3 (Conv2D) (None, 56, 56, 256) 590080 \n", + "_________________________________________________________________\n", + "block3_pool (MaxPooling2D) (None, 28, 28, 256) 0 \n", + "_________________________________________________________________\n", + "block4_conv1 (Conv2D) (None, 28, 28, 512) 1180160 \n", + "_________________________________________________________________\n", + "block4_conv2 (Conv2D) (None, 28, 28, 512) 2359808 \n", + "_________________________________________________________________\n", + "block4_conv3 (Conv2D) (None, 28, 28, 512) 2359808 \n", + "_________________________________________________________________\n", + "block4_pool (MaxPooling2D) (None, 14, 14, 512) 0 \n", + "_________________________________________________________________\n", + "block5_conv1 (Conv2D) (None, 14, 14, 512) 2359808 \n", + "_________________________________________________________________\n", + "block5_conv2 (Conv2D) (None, 14, 14, 512) 2359808 \n", + "_________________________________________________________________\n", + "block5_conv3 (Conv2D) (None, 14, 14, 512) 2359808 \n", + "_________________________________________________________________\n", + "block5_pool (MaxPooling2D) (None, 7, 7, 512) 0 \n", + "_________________________________________________________________\n", + "flatten (Flatten) (None, 25088) 0 \n", + "_________________________________________________________________\n", + "fc1 (Dense) (None, 4096) 102764544 \n", + "_________________________________________________________________\n", + "fc2 (Dense) (None, 4096) 16781312 \n", + "_________________________________________________________________\n", + "predictions (Dense) (None, 1000) 4097000 \n", + "=================================================================\n", + "Total params: 138,357,544\n", + "Trainable params: 138,357,544\n", + "Non-trainable params: 0\n", + "_________________________________________________________________\n" + ] + } + ], + "source": [ + "vgg.summary()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## GPU గణనాలు\n", + "\n", + "VGG-16 మరియు ఇతర ఆధునిక معماريات వంటి లోతైన న్యూరల్ నెట్‌వర్క్లు పనిచేయడానికి చాలా గణన శక్తిని అవసరం చేస్తాయి. అందుబాటులో ఉంటే GPU వేగవంతీకరణను ఉపయోగించడం అవగాహననీది. సంతోషకరంగా, Keras అందుబాటులో ఉంటే GPU పై గణనలను స్వయంచాలకంగా వేగవంతం చేస్తుంది. దిగువ కోడ్ ఉపయోగించి Tensorflow GPU ను ఉపయోగించగలదో పరీక్షించవచ్చు:\n" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tf.config.list_physical_devices('GPU')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "## VGG లక్షణాలను తీయడం\n", + "\n", + "మనం మా చిత్రాల నుండి లక్షణాలను తీయేందుకు VGG-16 ఉపయోగించాలనుకుంటే, మనకు తుది వర్గీకరణ పొరలు లేకుండా మోడల్ అవసరం. మేము ఈ కోడ్ ఉపయోగించి టాప్ లేయర్లు లేకుండా VGG-16 మోడల్‌ను సృష్టించవచ్చు:\n" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Shape after applying VGG-16: (7, 7, 512)\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "vgg = keras.applications.VGG16(include_top=False)\n", + "\n", + "inp = keras.applications.vgg16.preprocess_input(x_sample[:1])\n", + "res = vgg(inp)\n", + "print(f\"Shape after applying VGG-16: {res[0].shape}\")\n", + "plt.figure(figsize=(15,3))\n", + "plt.imshow(res[0].numpy().reshape(-1,512))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ఫీచర్ టెన్సర్ యొక్క పరిమాణం 7x7x512, కానీ దానిని వీక్షించడానికి మేము దాన్ని 2డి రూపానికి మార్చవలసిన అవసరం వచ్చింది.\n", + "\n", + "ఇప్పుడు ఆ ఫీచర్స్‌ను చిత్రాలను వర్గీకరించడానికి ఉపయోగించవచ్చో లేదో చూద్దాం. మనం కొంత భాగం చిత్రాలను (మా కేసులో 50 మినీబ్యాచ్‌లు) చేతితో తీసుకుండా, వారి ఫీచర్ వెక్టర్లను ముందస్తుగా గణించుకుందాం. దీని కోసం మేము Tensorflow **dataset** API ని ఉపయోగించవచ్చు. `map` ఫంక్షన్ డేటాసెట్‌ను తీసుకుని ఒక నిర్దిష్ట లాంబ్డా-ఫంక్షన్‌ను వర్తింపజేస్తుంది. మేము ఈ విధానాన్ని ఉపయోగించి, అసలైన చిత్రాల బదులు VGG ద్వారా పొందిన ఫీచర్లను కలిగిన కొత్త డేటాసెట్లను, `ds_features_train` మరియు `ds_features_test` తయారుచేస్తాము.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(64, 7, 7, 512) (64,)\n" + ] + } + ], + "source": [ + "num = batch_size*50\n", + "ds_features_train = ds_train.take(50).map(lambda x,y : (vgg(x),y))\n", + "ds_features_test = ds_test.take(10).map(lambda x,y : (vgg(x),y))\n", + "\n", + "for x,y in ds_features_train:\n", + " print(x.shape,y.shape)\n", + " break" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "మా ప్రదర్శనను వేగవంతం చేయడానికి, మేము డేటాసెట్ పరిమాణాన్ని పరిమితం చేయడానికి`.take(50)` నిర్మాణాన్ని ఉపయోగించాము. మీరు ఖచ్చితంగా పూర్తి డేటాసెట్‌పై ఈ ప్రయోగం చేయవచ్చు.\n", + "\n", + "ఇప్పుడు మాకు ఫీచర్లతో కూడిన డేటాసెట్ ఉంటే, పిల్లులు మరియు కుక్కల మధ్య భేదం చేయడానికి సరళమైన డెన్స్ క్లాసిఫయర్‌ను శిక్షణ ఇస్తాము. ఈ నెట్‌వర్క్ (7,7,512) ఆకారంలో ఫీచర్ వెక్టార్‌ను ఇన్‌పుట్‌గా తీసుకొని, ఒక అవుట్పుట్‌ను ఉత్పత్తి చేస్తుంది, అది కుక్క లేదా పిల్లి అనే దానిని సూచిస్తుంది. ఇది ద్విముఖీ వర్గీకరణ కావడంతో, మేము `sigmoid` యాక్టివేషన్ ఫంక్షన్ మరియు `binary_crossentropy` నష్టం ఉపయోగిస్తాము.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 [==============================] - 1896s 38s/step - loss: 1.4845 - acc: 0.9144 - val_loss: 0.7220 - val_acc: 0.9516\n" + ] + } + ], + "source": [ + "model = keras.models.Sequential([\n", + " keras.layers.Flatten(input_shape=(7,7,512)),\n", + " keras.layers.Dense(1,activation='sigmoid')\n", + "])\n", + "model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['acc'])\n", + "hist = model.fit(ds_features_train, validation_data=ds_features_test)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ఫలితం చాలా మంచిది, మేము ఒక పిల్లి మరియు కుక్క మధ్య సుమారు 95% సంభావ్యతతో తేడా చేయగలము! అయితే, మాన్యువల్ ఫీచర్ ఎక్స్‌ట్రాక్షన్ చాలా సమయం తీసుకుంటుందని అనిపించడంతో, మేము ఈ పద్ధతిని అన్ని చిత్రాల ఉపసమూహంలో పరీక్షించలేదు.\n", + "\n", + "## ఒక VGG నెట్‌వర్క్ ఉపయోగించి ట్రాన్స్‌ఫర్ లెర్నింగ్\n", + "\n", + "ట్రైనింగ్ సమయంలో ఫీచర్ ఎక్స్‌ట్రాక్టర్‌ను మా నెట్‌వర్క్‌లో మొదటి లేయర్‌గా చేర్చడం ద్వారా మేము మాన్యువల్‌గా ఫీచర్లను ముందుగా గణించకుండా ఉండవచ్చు.\n", + "\n", + "కెరాస్స్థాపన యొక్క అందమైన విషయం ఏమిటంటే, మేము పైగా నిర్వచించిన VGG-16 మోడల్‌ను ఇతర న్యూరల్ నెట్‌వర్క్‌లో ఒక లేయర్‌గా కూడా ఉపయోగించవచ్చు! మేము దాని పై డెన్స్ క్లాసిఫైయర్‌తో కూడిన నెట్‌వర్క్‌ను నిర్మించి, ఆ తరువాత బ్యాక్ ప్రొపగేషన్ ఉపయోగించి మొత్తం నెట్‌వర్క్‌ను ట్రైన్ చేయాలి.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: \"sequential\"\n", + "_________________________________________________________________\n", + "Layer (type) Output Shape Param # \n", + "=================================================================\n", + "vgg16 (Functional) (None, 7, 7, 512) 14714688 \n", + "_________________________________________________________________\n", + "flatten (Flatten) (None, 25088) 0 \n", + "_________________________________________________________________\n", + "dense (Dense) (None, 1) 25089 \n", + "=================================================================\n", + "Total params: 14,739,777\n", + "Trainable params: 25,089\n", + "Non-trainable params: 14,714,688\n", + "_________________________________________________________________\n" + ] + } + ], + "source": [ + "model = keras.models.Sequential()\n", + "model.add(keras.applications.VGG16(include_top=False,input_shape=(224,224,3)))\n", + "model.add(keras.layers.Flatten())\n", + "model.add(keras.layers.Dense(1,activation='sigmoid'))\n", + "\n", + "model.layers[0].trainable = False\n", + "\n", + "model.summary()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ఈ మోడల్ చివరకి దాకా క్లాసిఫికేషన్ నెట్‌వర్క్‌లాగా కనిపిస్తుంది, ఇది ఒక చిత్రం తీసుకుని తరగతిని తిరిగి ఇస్తుంది. కానీ, చిక్కు విషయం ఏమిటంటే, VGG16ని ఫీచర్ ఎక్స్ట్రాక్టర్‌లాగా ఉపయోగించాలనుకుంటున్నాం, మరియు దీన్ని మళ్ళీ శిక్షణ కలపదలచలేదు. కాబట్టి, మనasu **కన్వల్యూషనల్ ఫీచర్ ఎక్స్ట్రాక్టర్ యొక్క وزنాలు నిశ్చలీకరించాలి**. మేము నెట్‌వర్క్ యొక్క మొదటి స్థరాన్ని `model.layers[0]`ని పిలిచి పొందవచ్చు, మరియు కేవలం `trainable` ప్రాపర్టీని `False`గా సెట్ చేయాల్సి ఉంటుంది.\n", + "\n", + "> **గమనిక**: ఫీచర్ ఎక్స్ట్రాక్టర్ రేట్లు నిశ్చలీకరించడం అవసరం, ఎందుకంటే కాకపోతే, శిక్షణ అందుకోని క్లాసిఫయర్ లేయర్ ఒరిజినల్ ప్రీ-ట్రెయిన్ చేసిన కన్వల్యూషనల్ ఎక్స్ట్రాక్టర్ వాటిని నాశనం చేయవచ్చు.\n", + "\n", + "మన నెట్‌వర్క్ లో మొత్తం పరిమాణాలు సుమారుగా 15 మిలియన్ల ఉంటే, మేము కేవలం 25k పరిమాణాలను మాత్రమే శిక్షణ పెడుతున్నాము. మిగతా అన్ని టాప్-లెవల్ కన్వల్యూషనల్ ఫిల్టర్లు ప్రీ-ట్రెయిన్ అయ్యాయి. ఇది మంచిది, ఎందుకంటే మేము తక్కువ సంక్షిప్త ఉదాహరణలతో తక్కువ మొత్తం పరిమాణాలను ఫైన్-ట్యూన్ చేయగలమని.\n", + "\n", + "ఇప్పుడు మనం నెట్‌వర్క్‌ని శిక్షణ పెడతాము మరియు మనం ఎంత మంచి ఫలితాలు పొందగలమో చూద్దాం. కొంత కాలం నడిచే వ్యవధి ఎక్కువగా ఉంటుంది అని భావించండి, మరియు ఎగ్జిక్యూషన్ కొంత కాలం నిలిచిపోయినట్లు అనిపించినా ఆందోళన చెందకండి.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "310/310 [==============================] - 265s 716ms/step - loss: 0.9917 - acc: 0.9512 - val_loss: 0.8156 - val_acc: 0.9671\n" + ] + } + ], + "source": [ + "model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['acc'])\n", + "hist = model.fit(ds_train, validation_data=ds_test)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "మనకు అనుకూలంగా కాపులు మరియు కుక్కల విభజకాన్ని సరిగ్గా పొందినట్లు కనిపిస్తోంది! \n", + "\n", + "## మోడల్ సేవ్ మరియు లోడ్ చేయడం\n", + "\n", + "మేము మోడల్‌ను శిక్షణ ఇచ్చాక, మోడల్ నిర్మాణం మరియు శిక్షణ పొందిన బరువులను భవిష్యత్తులో ఉపయోగానికి ఒక ఫైల్‌గా సేవ్ చేయవచ్చు:\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "INFO:tensorflow:Assets written to: data/cats_dogs.tf/assets\n" + ] + } + ], + "source": [ + "model.save('data/cats_dogs.tf')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "తర్వాత మనం ఎప్పుడైనా ఫైలుండి మోడల్‌ను లోడ్ చేయవచ్చు. తదుపరి ప్రయోగం మోడల్‌ను ధ్వంసం చేస్తే ఇది మీకు ఉపయోగకరంగా ఉండవచ్చు - మీరు మొదుడుగా మళ్లీ ప్రారంభించాల్సిన అవసరం ఉండదు.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "model = keras.models.load_model('data/cats_dogs.tf')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## ఫైన్-ట్యూనింగ్ ట్రాన్స్ఫర్ లెర్నింగ్\n", + "\n", + "గత సెక్షన్‌లో, మనం చివరి క్లాసిఫైయర్ లేయర్‌ను మన డేటాసెట్లో ఉన్న చిత్రాలను వర్గీకరించడానికి శిక్షణ ఇచ్చాము. అయితే, మనం ఫీచర్ ఎక్స్‌ట్రాక్టర్‌ను మళ్లీ శిక్షణ ఇవ్వలేదు, మరియు మన మోడల్ ImageNet డేటా పై నేర్చుకున్న ఫీచర్లపై ఆధారపడి ఉంది. మీ వస్తువులు సాధారణ ImageNet చిత్రాలు నుండి దృశ్యంగా భిన్నంగా ఉంటే, ఈ ఫీచర్ల సమ్మేళనం ఉత్తమంగా పనిచేయకపోవచ్చు. అందువల్ల, కన్వల్యూషనల్ లేయర్లను కూడా శిక్షణ మొదలుపెట్టడం తోుకవది.\n", + "\n", + "అలా చేయడానికి, మనం ముందుగా ఫ్రీజ్ చేసిన కన్వల్యూషనల్ ఫిల్టర్ పరామితులను అన్‌ఫ్రీజ్ చేసుకోవచ్చు. \n", + "\n", + "> **గమనిక:** మొదట మీరు పరామితులను ఫ్రీజ్ చేసి, తరగతి లేయర్‌లో బరువులను స్థిరపరచడానికి కొన్ని epochs శిక్షణ చేయడం ముఖ్యం. మీరు వెంటనే అన్‌ఫ్రీజ్ చేసిన పరామితులతో ఎండ్-టు-ఎండ్ నెట్‌వర్క్‌ను శిక్షణ మొదలెడితే, పెద్ద లోపాలు కన్వల్యూషనల్ లేయర్లలో ప్రీ-ట్రెయిన్ అయ్యిన బరువులను ధ్వంసం చేసేవి.\n", + "\n", + "మన కన్వల్యూషనల్ VGG-16 మోడల్ మొదటి లేయర్ లో ఉంది, మరియు అది చాలా లేయర్లను కలిగి ఉంటుంది. మనం దాని నిర్మాణంపై ఒక చూపు వేయవచ్చు: \n" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: \"vgg16\"\n", + "_________________________________________________________________\n", + "Layer (type) Output Shape Param # \n", + "=================================================================\n", + "input_1 (InputLayer) [(None, 224, 224, 3)] 0 \n", + "_________________________________________________________________\n", + "block1_conv1 (Conv2D) (None, 224, 224, 64) 1792 \n", + "_________________________________________________________________\n", + "block1_conv2 (Conv2D) (None, 224, 224, 64) 36928 \n", + "_________________________________________________________________\n", + "block1_pool (MaxPooling2D) (None, 112, 112, 64) 0 \n", + "_________________________________________________________________\n", + "block2_conv1 (Conv2D) (None, 112, 112, 128) 73856 \n", + "_________________________________________________________________\n", + "block2_conv2 (Conv2D) (None, 112, 112, 128) 147584 \n", + "_________________________________________________________________\n", + "block2_pool (MaxPooling2D) (None, 56, 56, 128) 0 \n", + "_________________________________________________________________\n", + "block3_conv1 (Conv2D) (None, 56, 56, 256) 295168 \n", + "_________________________________________________________________\n", + "block3_conv2 (Conv2D) (None, 56, 56, 256) 590080 \n", + "_________________________________________________________________\n", + "block3_conv3 (Conv2D) (None, 56, 56, 256) 590080 \n", + "_________________________________________________________________\n", + "block3_pool (MaxPooling2D) (None, 28, 28, 256) 0 \n", + "_________________________________________________________________\n", + "block4_conv1 (Conv2D) (None, 28, 28, 512) 1180160 \n", + "_________________________________________________________________\n", + "block4_conv2 (Conv2D) (None, 28, 28, 512) 2359808 \n", + "_________________________________________________________________\n", + "block4_conv3 (Conv2D) (None, 28, 28, 512) 2359808 \n", + "_________________________________________________________________\n", + "block4_pool (MaxPooling2D) (None, 14, 14, 512) 0 \n", + "_________________________________________________________________\n", + "block5_conv1 (Conv2D) (None, 14, 14, 512) 2359808 \n", + "_________________________________________________________________\n", + "block5_conv2 (Conv2D) (None, 14, 14, 512) 2359808 \n", + "_________________________________________________________________\n", + "block5_conv3 (Conv2D) (None, 14, 14, 512) 2359808 \n", + "_________________________________________________________________\n", + "block5_pool (MaxPooling2D) (None, 7, 7, 512) 0 \n", + "=================================================================\n", + "Total params: 14,714,688\n", + "Trainable params: 0\n", + "Non-trainable params: 14,714,688\n", + "_________________________________________________________________\n" + ] + } + ], + "source": [ + "model.layers[0].summary()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "మేము కన్వల్యూషనల్ బేస్ యొక్క అన్ని లేయర్లను అన్ఫ్రీజ్ చేయవచ్చు:\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "model.layers[0].trainable = True" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "అయితే, అవన్నీ ఒకేసారి unfreeze చేయడం ఉత్తమమైన ఆలోచన కాదు. మొదట, కేవలం కొన్ని చివరి కాంభాల్యూషన్ లేయర్లు మాత్రమే unfreeze చేయవచ్చు, ఎందుకంటే అవి మా చిత్రాలకు సంబంధించి ఉన్న ఉన్నత స్థాయి నమూనాలను కలిగి ఉంటాయి. ఉదాహరణకు, మొదలు పెడితే, చివరి 4 లేయర్లు తప్ప అన్ని లేయర్లను freeze చేయవచ్చు: \n" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: \"sequential\"\n", + "_________________________________________________________________\n", + "Layer (type) Output Shape Param # \n", + "=================================================================\n", + "vgg16 (Functional) (None, 7, 7, 512) 14714688 \n", + "_________________________________________________________________\n", + "flatten (Flatten) (None, 25088) 0 \n", + "_________________________________________________________________\n", + "dense (Dense) (None, 1) 25089 \n", + "=================================================================\n", + "Total params: 14,739,777\n", + "Trainable params: 7,104,513\n", + "Non-trainable params: 7,635,264\n", + "_________________________________________________________________\n" + ] + } + ], + "source": [ + "for i in range(len(model.layers[0].layers)-4):\n", + " model.layers[0].layers[i].trainable = False\n", + "model.summary()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "శిక్షణీయమైన పారామితుల సంఖ్య గణనీయంగా పెరిగిందని గమనించండి, కానీ ఇది ఇంకా మొత్తం పారామితుల సుమారు 50%కి సమీపంగా ఉంటుంది.\n", + "\n", + "అన్‌ఫ్రీజ్ చేసిన తర్వాత, కొన్ని మరిన్ని epochs శిక్షణ నిర్వహించవచ్చు (మా ఉదాహరణలో, మనం ఒక్కటి మాత్రమే చేయబోతున్నాము). ప్రీ-ట్రెయిన్డ్ వెయిట్లపై ప్రభావాన్ని తగ్గించేందుకు మీరు తక్కువ లెర్నింగ్ రేట్ ని కూడా ఎంచుకోవచ్చు. అయితే, తక్కువ లెర్నింగ్ రేట్ ఉన్నప్పటికీ, శిక్షణ ప్రారంభంలో ఖచ్చితత్వం తగ్గిపోవడం అనుకుంటే తప్పదు, చివరికి స్థిరమైన వెయిట్‌లకి కాపలీగా స్వల్పంగా ఎక్కువ స్థాయికి చేరుకోవచ్చు.\n", + "\n", + "> **గమనిక:** ఈ శిక్షణ చాలా మెల్లగా జరుగుతుంది, ఎందుకంటే మేము నెట్‌వర్క్ యొక్క అనేక పొరల ద్వారా గ్రాడియెంట్లను వెనుకకి ప్రసారం చేయాలి!\n" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "310/310 [==============================] - 201s 645ms/step - loss: 0.5270 - acc: 0.9776 - val_loss: 1.4132 - val_acc: 0.9653\n" + ] + } + ], + "source": [ + "hist = model.fit(ds_train, validation_data=ds_test)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "మనం ఎక్కువ పరిమితులతో మరింత శక్తివంతమైన నెట్‌వర్క్‌ను ఉపయోగిస్తున్నందున మేము ఎక్కువ శిక్షణ ఖచ్చితత్వం సాధించడానికి సాధ్యంగా ఉన్నాం, కానీ ధృవపత్ర ఖచ్చితత్వం అంతగా పెరగకపోవచ్చు.\n", + "\n", + "మీరు ఎక్కువ ఖచ్చితత్వాన్ని సాధించగలరా అని చూడటానికి నెట్‌వర్క్ యొక్క మరికొన్ని పొరలను అన ఫ్రీజ్ చేసి మరింత శిక్షణ పొందటానికి సంకోచించకండి!\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## ఇతర కంప్యూటర్ విజన్ మోడళ్లు\n", + "\n", + "VGG-16 అనేది అత్యంత సులభమైన కంప్యూటర్ విజన్ ఆర్కిటెక్చర్లలో ఒకటి. కేరాస్ అనేక ప్రీ-ట్రెయిన్డ్ నెట్‌వర్క్‌లను అందిస్తుంది. వాటిలో ఎక్కువగా ఉపయోగించే వంటివి మైక్రోసాఫ్ట్ అభివృద్ధి చేసిన **ResNet** ఆర్కిటెక్చర్లు మరియు గూగుల్ రూపొందించిన **Inception**. ఉదాహరణకు, అత్యంత సులభమైన ResNet-50 మోడల్ ఆర్కిటెక్చర్‌ని పరిశీలిద్దాం (ResNet అనేది వివిధ లోతులున్న మోడల్స్ కుటుంబం, మీరు నిజంగా లోతైన మోడల్ ఏలా ఉంటుందన్నదాన్ని చూడాలనుకుంటే ResNet-152 తో ప్రయోగించవచ్చు):\n" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: \"resnet50\"\n", + "__________________________________________________________________________________________________\n", + "Layer (type) Output Shape Param # Connected to \n", + "==================================================================================================\n", + "input_3 (InputLayer) [(None, 224, 224, 3) 0 \n", + "__________________________________________________________________________________________________\n", + "conv1_pad (ZeroPadding2D) (None, 230, 230, 3) 0 input_3[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv1_conv (Conv2D) (None, 112, 112, 64) 9472 conv1_pad[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv1_bn (BatchNormalization) (None, 112, 112, 64) 256 conv1_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv1_relu (Activation) (None, 112, 112, 64) 0 conv1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "pool1_pad (ZeroPadding2D) (None, 114, 114, 64) 0 conv1_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "pool1_pool (MaxPooling2D) (None, 56, 56, 64) 0 pool1_pad[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block1_1_conv (Conv2D) (None, 56, 56, 64) 4160 pool1_pool[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block1_1_bn (BatchNormali (None, 56, 56, 64) 256 conv2_block1_1_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block1_1_relu (Activation (None, 56, 56, 64) 0 conv2_block1_1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block1_2_conv (Conv2D) (None, 56, 56, 64) 36928 conv2_block1_1_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block1_2_bn (BatchNormali (None, 56, 56, 64) 256 conv2_block1_2_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block1_2_relu (Activation (None, 56, 56, 64) 0 conv2_block1_2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block1_0_conv (Conv2D) (None, 56, 56, 256) 16640 pool1_pool[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block1_3_conv (Conv2D) (None, 56, 56, 256) 16640 conv2_block1_2_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block1_0_bn (BatchNormali (None, 56, 56, 256) 1024 conv2_block1_0_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block1_3_bn (BatchNormali (None, 56, 56, 256) 1024 conv2_block1_3_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block1_add (Add) (None, 56, 56, 256) 0 conv2_block1_0_bn[0][0] \n", + " conv2_block1_3_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block1_out (Activation) (None, 56, 56, 256) 0 conv2_block1_add[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block2_1_conv (Conv2D) (None, 56, 56, 64) 16448 conv2_block1_out[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block2_1_bn (BatchNormali (None, 56, 56, 64) 256 conv2_block2_1_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block2_1_relu (Activation (None, 56, 56, 64) 0 conv2_block2_1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block2_2_conv (Conv2D) (None, 56, 56, 64) 36928 conv2_block2_1_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block2_2_bn (BatchNormali (None, 56, 56, 64) 256 conv2_block2_2_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block2_2_relu (Activation (None, 56, 56, 64) 0 conv2_block2_2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block2_3_conv (Conv2D) (None, 56, 56, 256) 16640 conv2_block2_2_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block2_3_bn (BatchNormali (None, 56, 56, 256) 1024 conv2_block2_3_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block2_add (Add) (None, 56, 56, 256) 0 conv2_block1_out[0][0] \n", + " conv2_block2_3_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block2_out (Activation) (None, 56, 56, 256) 0 conv2_block2_add[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block3_1_conv (Conv2D) (None, 56, 56, 64) 16448 conv2_block2_out[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block3_1_bn (BatchNormali (None, 56, 56, 64) 256 conv2_block3_1_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block3_1_relu (Activation (None, 56, 56, 64) 0 conv2_block3_1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block3_2_conv (Conv2D) (None, 56, 56, 64) 36928 conv2_block3_1_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block3_2_bn (BatchNormali (None, 56, 56, 64) 256 conv2_block3_2_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block3_2_relu (Activation (None, 56, 56, 64) 0 conv2_block3_2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block3_3_conv (Conv2D) (None, 56, 56, 256) 16640 conv2_block3_2_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block3_3_bn (BatchNormali (None, 56, 56, 256) 1024 conv2_block3_3_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block3_add (Add) (None, 56, 56, 256) 0 conv2_block2_out[0][0] \n", + " conv2_block3_3_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block3_out (Activation) (None, 56, 56, 256) 0 conv2_block3_add[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block1_1_conv (Conv2D) (None, 28, 28, 128) 32896 conv2_block3_out[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block1_1_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block1_1_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block1_1_relu (Activation (None, 28, 28, 128) 0 conv3_block1_1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block1_2_conv (Conv2D) (None, 28, 28, 128) 147584 conv3_block1_1_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block1_2_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block1_2_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block1_2_relu (Activation (None, 28, 28, 128) 0 conv3_block1_2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block1_0_conv (Conv2D) (None, 28, 28, 512) 131584 conv2_block3_out[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block1_3_conv (Conv2D) (None, 28, 28, 512) 66048 conv3_block1_2_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block1_0_bn (BatchNormali (None, 28, 28, 512) 2048 conv3_block1_0_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block1_3_bn (BatchNormali (None, 28, 28, 512) 2048 conv3_block1_3_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block1_add (Add) (None, 28, 28, 512) 0 conv3_block1_0_bn[0][0] \n", + " conv3_block1_3_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block1_out (Activation) (None, 28, 28, 512) 0 conv3_block1_add[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block2_1_conv (Conv2D) (None, 28, 28, 128) 65664 conv3_block1_out[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block2_1_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block2_1_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block2_1_relu (Activation (None, 28, 28, 128) 0 conv3_block2_1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block2_2_conv (Conv2D) (None, 28, 28, 128) 147584 conv3_block2_1_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block2_2_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block2_2_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block2_2_relu (Activation (None, 28, 28, 128) 0 conv3_block2_2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block2_3_conv (Conv2D) (None, 28, 28, 512) 66048 conv3_block2_2_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block2_3_bn (BatchNormali (None, 28, 28, 512) 2048 conv3_block2_3_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block2_add (Add) (None, 28, 28, 512) 0 conv3_block1_out[0][0] \n", + " conv3_block2_3_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block2_out (Activation) (None, 28, 28, 512) 0 conv3_block2_add[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block3_1_conv (Conv2D) (None, 28, 28, 128) 65664 conv3_block2_out[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block3_1_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block3_1_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block3_1_relu (Activation (None, 28, 28, 128) 0 conv3_block3_1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block3_2_conv (Conv2D) (None, 28, 28, 128) 147584 conv3_block3_1_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block3_2_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block3_2_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block3_2_relu (Activation (None, 28, 28, 128) 0 conv3_block3_2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block3_3_conv (Conv2D) (None, 28, 28, 512) 66048 conv3_block3_2_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block3_3_bn (BatchNormali (None, 28, 28, 512) 2048 conv3_block3_3_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block3_add (Add) (None, 28, 28, 512) 0 conv3_block2_out[0][0] \n", + " conv3_block3_3_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block3_out (Activation) (None, 28, 28, 512) 0 conv3_block3_add[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block4_1_conv (Conv2D) (None, 28, 28, 128) 65664 conv3_block3_out[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block4_1_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block4_1_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block4_1_relu (Activation (None, 28, 28, 128) 0 conv3_block4_1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block4_2_conv (Conv2D) (None, 28, 28, 128) 147584 conv3_block4_1_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block4_2_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block4_2_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block4_2_relu (Activation (None, 28, 28, 128) 0 conv3_block4_2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block4_3_conv (Conv2D) (None, 28, 28, 512) 66048 conv3_block4_2_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block4_3_bn (BatchNormali (None, 28, 28, 512) 2048 conv3_block4_3_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block4_add (Add) (None, 28, 28, 512) 0 conv3_block3_out[0][0] \n", + " conv3_block4_3_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block4_out (Activation) (None, 28, 28, 512) 0 conv3_block4_add[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block1_1_conv (Conv2D) (None, 14, 14, 256) 131328 conv3_block4_out[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block1_1_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block1_1_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block1_1_relu (Activation (None, 14, 14, 256) 0 conv4_block1_1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block1_2_conv (Conv2D) (None, 14, 14, 256) 590080 conv4_block1_1_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block1_2_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block1_2_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block1_2_relu (Activation (None, 14, 14, 256) 0 conv4_block1_2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block1_0_conv (Conv2D) (None, 14, 14, 1024) 525312 conv3_block4_out[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block1_3_conv (Conv2D) (None, 14, 14, 1024) 263168 conv4_block1_2_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block1_0_bn (BatchNormali (None, 14, 14, 1024) 4096 conv4_block1_0_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block1_3_bn (BatchNormali (None, 14, 14, 1024) 4096 conv4_block1_3_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block1_add (Add) (None, 14, 14, 1024) 0 conv4_block1_0_bn[0][0] \n", + " conv4_block1_3_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block1_out (Activation) (None, 14, 14, 1024) 0 conv4_block1_add[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block2_1_conv (Conv2D) (None, 14, 14, 256) 262400 conv4_block1_out[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block2_1_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block2_1_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block2_1_relu (Activation (None, 14, 14, 256) 0 conv4_block2_1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block2_2_conv (Conv2D) (None, 14, 14, 256) 590080 conv4_block2_1_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block2_2_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block2_2_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block2_2_relu (Activation (None, 14, 14, 256) 0 conv4_block2_2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block2_3_conv (Conv2D) (None, 14, 14, 1024) 263168 conv4_block2_2_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block2_3_bn (BatchNormali (None, 14, 14, 1024) 4096 conv4_block2_3_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block2_add (Add) (None, 14, 14, 1024) 0 conv4_block1_out[0][0] \n", + " conv4_block2_3_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block2_out (Activation) (None, 14, 14, 1024) 0 conv4_block2_add[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block3_1_conv (Conv2D) (None, 14, 14, 256) 262400 conv4_block2_out[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block3_1_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block3_1_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block3_1_relu (Activation (None, 14, 14, 256) 0 conv4_block3_1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block3_2_conv (Conv2D) (None, 14, 14, 256) 590080 conv4_block3_1_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block3_2_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block3_2_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block3_2_relu (Activation (None, 14, 14, 256) 0 conv4_block3_2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block3_3_conv (Conv2D) (None, 14, 14, 1024) 263168 conv4_block3_2_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block3_3_bn (BatchNormali (None, 14, 14, 1024) 4096 conv4_block3_3_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block3_add (Add) (None, 14, 14, 1024) 0 conv4_block2_out[0][0] \n", + " conv4_block3_3_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block3_out (Activation) (None, 14, 14, 1024) 0 conv4_block3_add[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block4_1_conv (Conv2D) (None, 14, 14, 256) 262400 conv4_block3_out[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block4_1_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block4_1_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block4_1_relu (Activation (None, 14, 14, 256) 0 conv4_block4_1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block4_2_conv (Conv2D) (None, 14, 14, 256) 590080 conv4_block4_1_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block4_2_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block4_2_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block4_2_relu (Activation (None, 14, 14, 256) 0 conv4_block4_2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block4_3_conv (Conv2D) (None, 14, 14, 1024) 263168 conv4_block4_2_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block4_3_bn (BatchNormali (None, 14, 14, 1024) 4096 conv4_block4_3_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block4_add (Add) (None, 14, 14, 1024) 0 conv4_block3_out[0][0] \n", + " conv4_block4_3_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block4_out (Activation) (None, 14, 14, 1024) 0 conv4_block4_add[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block5_1_conv (Conv2D) (None, 14, 14, 256) 262400 conv4_block4_out[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block5_1_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block5_1_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block5_1_relu (Activation (None, 14, 14, 256) 0 conv4_block5_1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block5_2_conv (Conv2D) (None, 14, 14, 256) 590080 conv4_block5_1_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block5_2_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block5_2_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block5_2_relu (Activation (None, 14, 14, 256) 0 conv4_block5_2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block5_3_conv (Conv2D) (None, 14, 14, 1024) 263168 conv4_block5_2_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block5_3_bn (BatchNormali (None, 14, 14, 1024) 4096 conv4_block5_3_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block5_add (Add) (None, 14, 14, 1024) 0 conv4_block4_out[0][0] \n", + " conv4_block5_3_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block5_out (Activation) (None, 14, 14, 1024) 0 conv4_block5_add[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block6_1_conv (Conv2D) (None, 14, 14, 256) 262400 conv4_block5_out[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block6_1_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block6_1_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block6_1_relu (Activation (None, 14, 14, 256) 0 conv4_block6_1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block6_2_conv (Conv2D) (None, 14, 14, 256) 590080 conv4_block6_1_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block6_2_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block6_2_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block6_2_relu (Activation (None, 14, 14, 256) 0 conv4_block6_2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block6_3_conv (Conv2D) (None, 14, 14, 1024) 263168 conv4_block6_2_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block6_3_bn (BatchNormali (None, 14, 14, 1024) 4096 conv4_block6_3_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block6_add (Add) (None, 14, 14, 1024) 0 conv4_block5_out[0][0] \n", + " conv4_block6_3_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block6_out (Activation) (None, 14, 14, 1024) 0 conv4_block6_add[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block1_1_conv (Conv2D) (None, 7, 7, 512) 524800 conv4_block6_out[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block1_1_bn (BatchNormali (None, 7, 7, 512) 2048 conv5_block1_1_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block1_1_relu (Activation (None, 7, 7, 512) 0 conv5_block1_1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block1_2_conv (Conv2D) (None, 7, 7, 512) 2359808 conv5_block1_1_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block1_2_bn (BatchNormali (None, 7, 7, 512) 2048 conv5_block1_2_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block1_2_relu (Activation (None, 7, 7, 512) 0 conv5_block1_2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block1_0_conv (Conv2D) (None, 7, 7, 2048) 2099200 conv4_block6_out[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block1_3_conv (Conv2D) (None, 7, 7, 2048) 1050624 conv5_block1_2_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block1_0_bn (BatchNormali (None, 7, 7, 2048) 8192 conv5_block1_0_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block1_3_bn (BatchNormali (None, 7, 7, 2048) 8192 conv5_block1_3_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block1_add (Add) (None, 7, 7, 2048) 0 conv5_block1_0_bn[0][0] \n", + " conv5_block1_3_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block1_out (Activation) (None, 7, 7, 2048) 0 conv5_block1_add[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block2_1_conv (Conv2D) (None, 7, 7, 512) 1049088 conv5_block1_out[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block2_1_bn (BatchNormali (None, 7, 7, 512) 2048 conv5_block2_1_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block2_1_relu (Activation (None, 7, 7, 512) 0 conv5_block2_1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block2_2_conv (Conv2D) (None, 7, 7, 512) 2359808 conv5_block2_1_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block2_2_bn (BatchNormali (None, 7, 7, 512) 2048 conv5_block2_2_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block2_2_relu (Activation (None, 7, 7, 512) 0 conv5_block2_2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block2_3_conv (Conv2D) (None, 7, 7, 2048) 1050624 conv5_block2_2_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block2_3_bn (BatchNormali (None, 7, 7, 2048) 8192 conv5_block2_3_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block2_add (Add) (None, 7, 7, 2048) 0 conv5_block1_out[0][0] \n", + " conv5_block2_3_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block2_out (Activation) (None, 7, 7, 2048) 0 conv5_block2_add[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block3_1_conv (Conv2D) (None, 7, 7, 512) 1049088 conv5_block2_out[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block3_1_bn (BatchNormali (None, 7, 7, 512) 2048 conv5_block3_1_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block3_1_relu (Activation (None, 7, 7, 512) 0 conv5_block3_1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block3_2_conv (Conv2D) (None, 7, 7, 512) 2359808 conv5_block3_1_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block3_2_bn (BatchNormali (None, 7, 7, 512) 2048 conv5_block3_2_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block3_2_relu (Activation (None, 7, 7, 512) 0 conv5_block3_2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block3_3_conv (Conv2D) (None, 7, 7, 2048) 1050624 conv5_block3_2_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block3_3_bn (BatchNormali (None, 7, 7, 2048) 8192 conv5_block3_3_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block3_add (Add) (None, 7, 7, 2048) 0 conv5_block2_out[0][0] \n", + " conv5_block3_3_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block3_out (Activation) (None, 7, 7, 2048) 0 conv5_block3_add[0][0] \n", + "__________________________________________________________________________________________________\n", + "avg_pool (GlobalAveragePooling2 (None, 2048) 0 conv5_block3_out[0][0] \n", + "__________________________________________________________________________________________________\n", + "predictions (Dense) (None, 1000) 2049000 avg_pool[0][0] \n", + "==================================================================================================\n", + "Total params: 25,636,712\n", + "Trainable params: 25,583,592\n", + "Non-trainable params: 53,120\n", + "__________________________________________________________________________________________________\n" + ] + } + ], + "source": [ + "resnet = keras.applications.ResNet50()\n", + "resnet.summary()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "మీరు చూడగలిగినట్లుగా, ఈ మోడల్ ఒకే పర్యాయ కట్టడం భాగాల్నీ కలిగి ఉంది: కన్వల్యూషనల్ లేయర్లు, పూలింగ్ లేయర్లు మరియు చివరి డెన్స్ క్లాసిఫైయర్. మేము VGG-16 ను ట్రాన్స్‌ఫర్ లెర్నింగ్ కోసం ఉపయోగిస్తునట్లే ఈ మోడల్‌ను ఖచ్చితంగా అదే విధంగా ఉపయోగించుకోవచ్చు. పై కోడ్ తో ప్రయోగం చేసి, వేరే ResNet మోడల్స్‌ని బేస్ మోడల్‌గా ఉపయోగించి, ఖచ్చితత్వం ఎలా మార్చబడుతుందో చూడు.\n", + "\n", + "## బ్యాచ్ నార్మలైజేషన్\n", + "\n", + "ఈ నెట్‌వర్క్ మరో రకమైన లేయర్‌ను కలిగి ఉంది: **బ్యాచ్ నార్మలైజేషన్**. బ్యాచ్ నార్మలైజేషన్ యొక్క ఆలోచన ఏమిటంటే, న్యూయరల్ నెట్‌వర్క్ ద్వారా ప్రవహించే విలువలను సరైన పరిధిలోకి తీసుకువెళ్లడం. సాధారణంగా న్యూయరల్ నెట్‌వర్క్‌లు అన్ని విలువలూ [-1,1] లేదా [0,1] పరిధిలో ఉన్నప్పుడు అత్యుత్తమంగా పనిచేస్తాయి, అందుకే మనం ఇన్‌పుట్ డేటాను అనుగుణంగా స్కేలింగ్/నార్మలైజ్ చేస్తాము. అయితే, లోతైన నెట్‌వర్క్ శిక్షణ సమయంలో, విలువలు ఈ పరిధికి ఎక్కువగా దాటి పోవచ్చు, ఇది శిక్షణను కష్టతరం చేస్తుంది. బ్యాచ్ నార్మలైజేషన్ లేయర్ ప్రస్తుత మినీ బ్యాచ్ లోని అన్ని విలువల సగటు మరియు స్టాండర్డ్ డివియేషన్‌ను లెక్కించి, న్యూయరల్ నెట్‌వర్క్ లేయర్‌కి పంపించే ముందు సిగ్నల్‌ను నార్మలైజ్ చేస్తుంది. ఇది లోతైన నెట్‌వర్క్‌ల స్థిరత్వాన్ని గణనీయంగా మెరుగుపరుస్తుంది.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## సారాంశం\n", + "\n", + "ట్రాన్స్‌ఫర్ లెర్నింగ్‌ని ఉపయోగిస్తూ, మన కస్టమ్ ఆబ్జెక్ట్ వర్గీకరణ పనికి త్వరగా క్లాసిఫయర్ తయారు చేసి, అధిక ఖచ్చితత్వం సాధించగలిగాము. అయితే, ఈ ఉదాహరణ పూర్తిగా న్యాయమైనది కాదు, ఎందుకంటే అసలు VGG-16 నెట్‌వర్క్ పిల్లులు మరియు కుక్కలను గుర్తించడానికి ముందుగా శిక్షణ పొందింది, కాబట్టి మనకు ఇప్పటికే నెట్‌వర్క్‌లో ఉన్న చాలా నమూనాలను మళ్లీ ఉపయోగించే అవకాశం కలిగింది. ప్రొడక్షన్ లైన్‌లోని వివరాలు లేదా వివిధ చెట్టు ఆకులు వంటి మరింత విదేశీ డొమైన్-నిర్దిష్ట వస్తువులపై తక్కువ ఖచ్చితత్వం సాధించవచ్చు.\n", + "\n", + "మనము ఇప్పుడు పరిష్కరించగలిగే క్లిష్టమైన పనులు ఎక్కువ కంప్యూటేషనల్ శక్తిని అవసరం చేస్తాయని మీరు చూడవచ్చు, మరియు CPU పై సులభంగా పరిష్కరించలేవు. తరువాతి యూనిట్‌లో, తక్కువ కంప్యూట్ వనరులను ఉపయోగించి అదే మodel్‌ను శిక్షణ ఇచ్చేందుకు మరింత తేలికపాటి అమలు ప్రయత్నిస్తాము, దీనివల్ల సగటు ఖచ్చితత్వం కొద్దిగా తక్కువ అవుతుంది.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n\n\n**అస్వీకరణ**:\nఈ పత్రం AI అనువాద సేవ [Co-op Translator](https://github.com/Azure/co-op-translator) ఉపయోగించి అనువదించబడింది. మేము ఖచ్చితత్వానికి ప్రయత్నిస్తున్నప్పటికీ, ఆటోమేటెడ్ అనువాదాలు తప్పులు లేదా అసమగ్రతలను కలిగి ఉండవచ్చు. దాని స్వదేశ భాషలో ఉన్న అసలు పత్రాన్ని అధికారం కలిగిన మూలంగా పరిగణించాలి. కీలకమైన సమాచారం కోసం, ప్రొఫెషనల్ మానవ అనువాదాన్ని సిఫారసు చేస్తాము. ఈ అనువాదం ఉపయోగం వల్ల కలిగే ఏవైనా అపార్థాలు లేదా తప్పుదారులు కోసం మేము బాధ్యత వహించము.\n\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "py38_tensorflow", + "language": "python", + "name": "conda-env-py38_tensorflow-py" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.10" + } + }, + "nbformat": 4, + "nbformat_minor": 4 } \ No newline at end of file diff --git a/translations/te/lessons/5-NLP/README.md b/translations/te/lessons/5-NLP/README.md index c28fde46..5c295de6 100644 --- a/translations/te/lessons/5-NLP/README.md +++ b/translations/te/lessons/5-NLP/README.md @@ -1,51 +1,51 @@ # సహజ భాషా ప్రాసెసింగ్ -![NLP పనుల సారాంశం ఒక డ్రాయింగ్‌లో](../../../../translated_images/te/ai-nlp.b22dcb8ca4707cea.webp) +![ఎన్‌ఎల్పీ పనుల సారాంశం ఒక డ్రాయింగ్‌లో](../../../../translated_images/te/ai-nlp.b22dcb8ca4707cea.webp) -ఈ విభాగంలో, మనం సహజ భాషా ప్రాసెసింగ్ (NLP) సంబంధిత పనులను నిర్వహించడానికి న్యూరల్ నెట్‌వర్క్‌లను ఉపయోగించడంపై దృష్టి పెట్టబోతున్నాము. కంప్యూటర్లు పరిష్కరించగలిగే అనేక NLP సమస్యలు ఉన్నాయి: +ఈ ప్రథాయంలో, మనం **సహజ భాషా ప్రాసెసింగ్ (NLP)** కు సంబంధించిన పనులను చూసే న్యూరల్ నెట్‌వర్క్స్ ఉపయోగంపై ధ్యాస పెట్టుకుందని ఉంటాం. కంప్యూటర్లు పరిష్కరించగలిగే అనేక NLP సమస్యలు ఉన్నాయి: -* **పాఠ్య వర్గీకరణ** అనేది పాఠ్య శ్రేణులకి సంబంధించిన సాధారణ వర్గీకరణ సమస్య. ఉదాహరణకు, ఇమెయిల్ సందేశాలను స్పామ్ లేదా నాన్-స్పామ్‌గా వర్గీకరించడం, లేదా వ్యాసాలను క్రీడలు, వ్యాపారం, రాజకీయాలు వంటి వర్గాలుగా వర్గీకరించడం. చాట్ బాట్లను అభివృద్ధి చేస్తున్నప్పుడు, వినియోగదారు ఏమి చెప్పాలనుకున్నాడో అర్థం చేసుకోవడం అవసరం అవుతుంది -- ఈ సందర్భంలో మనం **ఇరాదా వర్గీకరణ**తో వ్యవహరిస్తున్నాము. ఇరాదా వర్గీకరణలో తరచుగా అనేక వర్గాలతో వ్యవహరించాల్సి ఉంటుంది. -* **భావ విశ్లేషణ** అనేది సాధారణ రిగ్రెషన్ సమస్య, ఇందులో వాక్య అర్థం ఎంత సానుకూలం/నెగటివ్ అనేదానికి సంబంధించిన సంఖ్య (భావం) ఇవ్వాలి. భావ విశ్లేషణ యొక్క అభివృద్ధి చెందిన రూపం **అంశాల ఆధారిత భావ విశ్లేషణ** (ABSA), ఇందులో భావాన్ని మొత్తం వాక్యం కాకుండా వాక్యంలోని వివిధ భాగాలకు (అంశాలకు) కేటాయిస్తారు, ఉదా. *ఈ రెస్టారెంట్‌లో నాకు వంటకం నచ్చింది, కానీ వాతావరణం భయంకరంగా ఉంది*. -* **పేరు గుర్తింపు** (NER) అనేది పాఠ్యంలోని నిర్దిష్ట అంశాలను తీసుకోవడం. ఉదాహరణకు, *నేను రేపు పారిస్‌కు ప్రయాణించాలి* అనే వాక్యంలో *రేపు* అనేది తేదీకి (DATE) సూచిస్తుందని, *పారిస్* అనేది స్థలానికి (LOCATION) సంబంధించినదని అర్థం చేసుకోవాలి. -* **కీవర్డ్ ఎక్స్‌ట్రాక్షన్** NERకి సమానంగా ఉంటుంది, కానీ ఇందులో నిర్దిష్ట అంశ రకాల కోసం ముందుగా శిక్షణ లేకుండా వాక్య అర్థానికి ముఖ్యమైన పదాలను ఆటోమేటిక్‌గా తీసుకోవాలి. -* **పాఠ్య క్లస్టరింగ్** అనేది సారూప్యమైన వాక్యాలను ఒకటిగా సమూహీకరించడానికి ఉపయోగపడుతుంది, ఉదాహరణకు, సాంకేతిక మద్దతు సంభాషణలలో సారూప్యమైన అభ్యర్థనలు. -* **ప్రశ్నోత్తరం** అనేది ఒక నమూనా నిర్దిష్ట ప్రశ్నకు సమాధానం ఇవ్వగల సామర్థ్యం. నమూనా ఒక పాఠ్య భాగం మరియు ప్రశ్నను ఇన్‌పుట్‌గా తీసుకుని, ప్రశ్నకు సమాధానం ఉన్న పాఠ్య భాగాన్ని అందించాలి (లేదా, కొన్నిసార్లు సమాధానాన్ని సృష్టించాలి). -* **పాఠ్య ఉత్పత్తి** అనేది ఒక నమూనా కొత్త పాఠ్యాన్ని సృష్టించగల సామర్థ్యం. ఇది ఒక వర్గీకరణ పనిగా పరిగణించవచ్చు, ఇది కొన్ని *పాఠ్య ప్రాంప్ట్* ఆధారంగా తదుపరి అక్షరం/పదాన్ని అంచనా వేస్తుంది. GPT-3 వంటి అభివృద్ధి చెందిన పాఠ్య ఉత్పత్తి నమూనాలు, [prompt programming](https://towardsdatascience.com/software-3-0-how-prompting-will-change-the-rules-of-the-game-a982fbfe1e0) లేదా [prompt engineering](https://medium.com/swlh/openai-gpt-3-and-prompt-engineering-dcdc2c5fcd29) అనే సాంకేతికత ఉపయోగించి వర్గీకరణ వంటి ఇతర NLP పనులను కూడా పరిష్కరించగలవు. -* **పాఠ్య సారాంశం** అనేది కంప్యూటర్‌ను పొడవైన పాఠ్యాన్ని "చదవించి" దాన్ని కొన్ని వాక్యాలలో సారాంశం చేయించడానికి ఉపయోగించే సాంకేతికత. -* **యంత్ర అనువాదం** అనేది ఒక భాషలో పాఠ్యాన్ని అర్థం చేసుకోవడం మరియు మరొక భాషలో పాఠ్యాన్ని ఉత్పత్తి చేయడం కలయికగా చూడవచ్చు. +* **టెక్స్ట్ వర్గీకరణ** అనేది ఒక సాధారణ వర్గీకరణ సమస్య, ఇది వచన సలుపులతో సంబంధం కలిగినది. ఉదాహరణకు, ఇమెయిల్ సందేశాలను స్పామ్ లేదా నాన్-స్పామ్‌గా వర్గీకరించడం, లేదా వ్యాసాలను క్రీడలు, వ్యాపారం, రాజకీయాలు వంటివిగా వర్గీకరించడం. అలాగే, చాట్ బాట్ల అభివృద్ధిలో యూజర్ ఏమి చెప్పాలని భావిస్తున్నాడో అర్థం చేసుకోవాలి -- ఈ సందర్భంలో మనం **ఉద్దేశ వర్గీకరణ**తో వ్యవహరిస్తున్నాం. చాలా సందర్భాల్లో, ఉద్దేశ వర్గీకరణలో అనేక వర్గాలతో జోరుల ప్రయోజనం ఉంటుంది. +* **భావ విశ్లేషణ** ఒక సాధారణ రిగ్రెషన్ సమస్య, ఇందులో వాక్యం యొక్క అర్థం ఎంత అభినందనాత్మక లేదా ప్రతికూలమో సూచించే సంఖ్య (భావం)ని కేటాయించాలి. భావ విశ్లేషణ యొక్క మరింత అభివృద్ధి చెందిన సంస్కరణ **అంశాభిప్రాయ ఆధారిత భావ విశ్లేషణ** (ABSA) అంటే భావం పూర్తి వాక్యం కాకుండా వాక్యం భాగాలకు (అంశాలు) కేటాయించడం, ఉదా. *ఈ రెస్టారెంట్‌లో, నేను వంటకాన్ని ఇష్టపడ్డాను, కానీ వాతావరణం భయంకరంగా ఉంది*. +* **పేరు సాధారణ గుర్తింపు** (NER) అంటే వచనం నుండి కొన్ని నిర్దిష్ట ఏకకాల ప్రసంగాలను తీయడమే. ఉదాహరణకు, *నేను రేపు పారిస్‌కు ఫ్లై చేయాలి* అన్న పదంలో *రేపు* అంటే తేదీ మరియు *పారిస్* అంటే స్థలం అనేది అర్థం చేసుకోవాలి. +* **కీవర్డ్ ఎక్స్ట్రాక్షన్** NER కి సమానంగా ఉంటుంది, కానీ ప్రత్యేక ఏకకాలప్రకారాల కోసం ముందుగా శిక్షణ చేయకుండా వాక్యం అర్థానికి ముఖ్యమైన పదాలను స్వయంచాలకంగా తీసుకోవాలి. +* **వచన సమూహీకరణ** అనగా దాదాపు సమానమైన వాక్యాలను ఒకదానితో మరొకటి సమూహీకరించడంలో ఉపయోగపడుతుంది, ఉదా., సాంకేతిక మద్దతు సంభాషణలలో ఇలాంటి సమానమైన అభ్యర్థనలు. +* **ప్రశ్నోత్తరము** అంటే ఒక మోడల్ నిర్దిష్టమైన ప్రశ్నకు సమాధానం ఇవ్వగల సామర్థ్యం. మోడల్ ఒక వచన భాగం మరియు ప్రశ్నను ఇన్‌పుట్‌గా తీసుకుంటుంది, ప్రశ్నకు సమాధానం ఉన్న వచన భాగాన్ని ఇవ్వాలి (లేదా కొన్ని సందర్భాల్లో సమాధాన వచనం ఉత్పత్తి చేయాలి). +* **వచన సృష్టి** అంటే ఒక మోడల్ కొత్త వచనం సృష్టించగల సామర్థ్యం. ఇది ఒక వర్గీకరణగా పరిగణించవచ్చు, ఇది కొంత *వచన సూచన* ఆధారంగా తదుపరి అక్షరం/పదాన్ని ఊహిస్తుంది. GPT-3 వంటి ఆధునిక వచన సృష్టి మోడళ్లు [prompt programming](https://towardsdatascience.com/software-3-0-how-prompting-will-change-the-rules-of-the-game-a982fbfe1e0) లేదా [prompt engineering](https://medium.com/swlh/openai-gpt-3-and-prompt-engineering-dcdc2c5fcd29) అనే సాంకేతికత ఉపయోగించి వేరే NLP పనులను కూడా పరిష్కరిస్తాయి. +* **వచన సారాంశీకరణ** అంటే కంప్యూటర్ చాలా వడిగా వచనం చదవటం, మరియు కొన్ని వాక్యాలలో దాని సారాంశాన్ని ఇవ్వడం. +* **మిషన్ అనువాదం** అనగా ఒక భాషలో వచనం అర్ధం చేసుకుని, మరొక భాషలో వచనం సృష్టించడం. -ప్రారంభంలో, చాలా NLP పనులు వ్యాకరణాలు వంటి సాంప్రదాయ పద్ధతులతో పరిష్కరించబడ్డాయి. ఉదాహరణకు, యంత్ర అనువాదంలో మొదటి వాక్యాన్ని సింటాక్స్ ట్రీగా మార్చడానికి పార్సర్లు ఉపయోగించబడ్డాయి, ఆపై వాక్య అర్థాన్ని సూచించే ఉన్నత స్థాయి సేమాంటిక్ నిర్మాణాలు తీసుకున్నారు, ఆ అర్థం మరియు లక్ష్య భాష వ్యాకరణం ఆధారంగా ఫలితాన్ని ఉత్పత్తి చేశారు. ఈ రోజుల్లో, అనేక NLP పనులు న్యూరల్ నెట్‌వర్క్‌లను ఉపయోగించి మరింత సమర్థవంతంగా పరిష్కరించబడుతున్నాయి. +మొదట్లో, చాలామంది NLP పనులను సంప్రదాయ విధానాలతో జరిపేవారు, ఉదా. వ్యాకరణాలు. ఉదాహరణకు మిషన్ అనువాదంలో పార్సర్లు మూల వాక్యాన్ని సింటాక్స్ చెట్టు గా మార్చేవి, తరువాతపై స్థాయి సారాంశ నిర్మాణాలను తీసుకుని వాక్యం అర్థాన్ని సృష్టించేవి, ఆర్థం మరియు లక్ష్య భాష వ్యాకరణంతో ఫలితాన్ని జనరేట్ చేసేవి. ప్రస్తుతం, అనేక NLP పనులు అధిక సమర్థతతో న్యూరల్ నెట్‌వర్క్స్ ద్వారా పరిష్కరించబడుతున్నాయి. -> అనేక సాంప్రదాయ NLP పద్ధతులు [Natural Language Processing Toolkit (NLTK)](https://www.nltk.org) పైథాన్ లైబ్రరీలో అమలు చేయబడ్డాయి. వివిధ NLP పనులను NLTK ఉపయోగించి ఎలా పరిష్కరించాలో వివరించే గొప్ప [NLTK పుస్తకం](https://www.nltk.org/book/) ఆన్‌లైన్‌లో అందుబాటులో ఉంది. +> [Natural Language Processing Toolkit (NLTK)](https://www.nltk.org) పైథాన్ లైబ్రరీలో చాలా సంప్రదాయ NLP పద్ధతులు అమలవుతాయి. అంతేకాకుండా, ఎలా NLTK ఉపయోగించి వివిధ NLP పనులు పరిష్కరించవచ్చో చెప్తున్న గొప్ప [NLTK పుస్తకం](https://www.nltk.org/book/) ఆన్లైన్ లో అందుబాటులో ఉంది. -మన కోర్సులో, మనం ప్రధానంగా NLP కోసం న్యూరల్ నెట్‌వర్క్‌లను ఉపయోగించడంపై దృష్టి పెట్టబోతున్నాము, అవసరమైతే NLTKని ఉపయోగిస్తాము. +మన కోర్సులో, ఎక్కువగా న్యూరల్ నెట్‌వర్క్స్‌ని NLP కోసం ఉపయోగించేటట్టు తీసుకువస్తాం, అవసరమైతే NLTK ని ఉపయోగిస్తాం. -మనం ఇప్పటికే పట్టిక డేటా మరియు చిత్రాలతో వ్యవహరించడానికి న్యూరల్ నెట్‌వర్క్‌లను ఉపయోగించడం గురించి నేర్చుకున్నాము. ఆ డేటా రకాలతో పాఠ్యం మధ్య ప్రధాన తేడా ఏమిటంటే, పాఠ్యం అనేది మార్పిడి పొడవు కలిగిన శ్రేణి, కానీ చిత్రాల ఇన్‌పుట్ పరిమాణం ముందే తెలుసు. కన్వల్యూషనల్ నెట్‌వర్క్‌లు ఇన్‌పుట్ డేటా నుండి నమూనాలను తీసుకోవచ్చు, కానీ పాఠ్యంలో నమూనాలు మరింత సంక్లిష్టంగా ఉంటాయి. ఉదా., నెగేషన్ (నాక ఇష్టం లేదు) మరియు విషయం మధ్య అనేక పదాల దూరం ఉండొచ్చు (ఉదా. *I do not like oranges*, vs. *I do not like those big colorful tasty oranges*), కానీ అది ఒకే నమూనాగా భావించాలి. కాబట్టి, భాషను నిర్వహించడానికి మనం కొత్త న్యూరల్ నెట్‌వర్క్ రకాలు, ఉదా. *రెకరెంట్ నెట్‌వర్క్‌లు* మరియు *ట్రాన్స్‌ఫార్మర్స్* పరిచయం చేయాలి. +మేము ఇప్పటికే పట్టికా డేటా మరియు చిత్రాలతో పని చేసే న్యూరల్ నెట్‌వర్క్‌లు గురించి నేర్చుకున్నాము. ఆ డేటా రకాలతో మరియు వచనంతో ప్రధాన వ్యత్యాసం ఏమిటంటే, వచనం వరుసగా ఉంటే, చిత్రాల ఇన్‌పుట్ పరిమాణం ముందుగా తెలిసి ఉంటుంది. కాంలోవల్యూషనల్ నెట్‌వర్క్‌లు ఇన్‌పుట్ డేటా నుండి నమూనాలను వెలువరించగలవు కానీ వచన నమూనాలు మరింత క్లిష్టమైనవి. ఉదా., వాక్యం లో నెగేషన్ విషయం నుండి వేరుగా ఉండొచ్చు (ఉదా. *I do not like oranges* మరియు *I do not like those big colorful tasty oranges*), అయినా అది ఒక్కటేనైన నమూనాగా అర్థం చేసుకోవాలి. కాబట్టి భాషను నిర్వహించడానికి మనం కొత్త న్యూరల్ నెట్‌వర్క్ రకాలు అవసరం, ఉదా., *రీకరెంట్ నెట్‌వర్క్‌లు* మరియు *ట్రాన్స్‌ఫార్మర్స్*. -## లైబ్రరీలు ఇన్‌స్టాల్ చేయండి +## లైబ్రరీల ఇన్‌స్టాల్ చేయండి -మీరు ఈ కోర్సును స్థానిక Python ఇన్‌స్టాలేషన్‌లో నడుపుతున్నట్లయితే, NLPకి అవసరమైన అన్ని లైబ్రరీలను క్రింది కమాండ్లతో ఇన్‌స్టాల్ చేయవచ్చు: +మీరు ఈ కోర్సు కోసం స్థానికంగా పైథాన్ ఇన్‌స్టాలేషన్ ఉపయోగిస్తుంటే, క్రింద పేర్కొన్న ఆదేశాలను ఉపయోగించి NLP కి అవసరమైన అన్ని లైబ్రరీలను ఇన్‌స్టాల్ చేసుకోవాలి: **PyTorch కోసం** ```bash -pip install -r requirements-torch.txt +pip install -r requirements-pytorch.txt ``` **TensorFlow కోసం** ```bash pip install -r requirements-tf.txt ``` -> మీరు TensorFlowతో NLPని [Microsoft Learn](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-tensorflow/?WT.mc_id=academic-77998-cacaste)లో ప్రయత్నించవచ్చు +> [Microsoft Learn](https://docs.microsoft.com/learn/modules/intro-natural-language-processing-tensorflow/?WT.mc_id=academic-77998-cacaste)లో TensorFlowతో NLP ప్రయత్నించవచ్చు ## GPU హెచ్చరిక -ఈ విభాగంలో, కొన్ని ఉదాహరణల్లో మనం పెద్ద నమూనాలను శిక్షణ ఇస్తున్నాము. -* **GPU-సమర్థ కంప్యూటర్ ఉపయోగించండి**: పెద్ద నమూనాలతో పని చేస్తున్నప్పుడు వేచి ఉండే సమయాన్ని తగ్గించడానికి GPU-సమర్థ కంప్యూటర్‌లో మీ నోట్‌బుక్స్ నడపడం మంచిది. -* **GPU మెమరీ పరిమితులు**: GPUపై నడిపేటప్పుడు, ముఖ్యంగా పెద్ద నమూనాలను శిక్షణ ఇస్తున్నప్పుడు GPU మెమరీ తక్కువ కావచ్చు. -* **GPU మెమరీ వినియోగం**: శిక్షణ సమయంలో GPU మెమరీ వినియోగం వివిధ అంశాలపై ఆధారపడి ఉంటుంది, అందులో మినీబ్యాచ్ పరిమాణం కూడా ఉంది. -* **మినీబ్యాచ్ పరిమాణం తగ్గించండి**: GPU మెమరీ సమస్యలు ఎదురైతే, మీ కోడ్‌లో మినీబ్యాచ్ పరిమాణాన్ని తగ్గించడం ఒక పరిష్కారం కావచ్చు. -* **TensorFlow GPU మెమరీ విడుదల**: పాత TensorFlow సంస్కరణలు ఒకే Python కర్నెల్‌లో అనేక నమూనాలను శిక్షణ ఇస్తున్నప్పుడు GPU మెమరీని సరిగ్గా విడుదల చేయకపోవచ్చు. GPU మెమరీ వినియోగాన్ని సమర్థవంతంగా నిర్వహించడానికి, TensorFlowని అవసరమైనప్పుడు మాత్రమే GPU మెమరీ కేటాయించేలా సెట్ చేయవచ్చు. -* **కోడ్ చేర్చడం**: TensorFlow GPU మెమరీ కేటాయింపును అవసరమైనప్పుడు మాత్రమే పెంచేలా సెట్ చేయడానికి, మీ నోట్‌బుక్స్‌లో క్రింది కోడ్ చేర్చండి: +ఈ భాగంలో, కొన్ని ఉదాహరణలలో మనం చాలా పెద్ద మోడళ్లను శిక్షణ ఇస్తామన్నది ఉంది. +* **GPU-సమర్థ కంప్యూటర్ ఉపయోగించండి**: పెద్ద మోడళ్లతో పనిచేసేటప్పుడు వేచి ఉండే సమయాలను తగ్గించడానికి GPU-సమర్థ కంప్యూటర్‌లో నోట్బుక్స్ నడపడం సలహా. +* **GPU మెమరీ పరిమితులు**: పెద్ద మోడళ్ల శిక్షణలో GPU మెమరీ కొరతగా ఉండొచ్చు. +* **GPU మెమరీ వినియోగం**: శిక్షణ సమయంలో GPU మెమరీ వినియోగం వివిధ అంశాలపై ఆధారపడి ఉంటుంది, వాటిలోని ఒకటి మినిబ్యాచ్ పరిమాణం. +* **మినిబ్యాచ్ పరిమాణం తగ్గించండి**: GPU మెమరీ సమస్యలు ఎదురైతే, కోడ్లో మినిబ్యాచ్ పరిమాణం తగ్గించడం ఒక పరిష్కారంగా ఉపయోగపడి ఉంటుంది. +* **TensorFlow GPU మెమరీ విడుదల**: పాత TensorFlow సంకలనాలు ఒకే పైథాన్ కర్నెల్‌లో అనేక మోడళ్లను శిక్షణ ఇస్తూ GPU మెమరీను సరిగా విడుదల చేయకపోవచ్చు. GPU మెమరీ వినియోగాన్ని సమర్థవంతంగా నిర్వహించేందుకు TensorFlowని అవసరమైన వెంటనే GPU మెమరీ కేటాయించ하도록 సెట్ చేయవచ్చు. +* **కోడ్ చేర్పు**: GPU మెమరీ కేటాయింపును అవసరానికి మాత్రమే పెరుగుదల చేసే విధంగా TensorFlowని సెట్ చేయడానికి మీ నోట్బుక్స్‌లో క్రింది కోడ్ చేర్చండి: ```python physical_devices = tf.config.list_physical_devices('GPU') @@ -53,21 +53,21 @@ if len(physical_devices)>0: tf.config.experimental.set_memory_growth(physical_devices[0], True) ``` -మీకు క్లాసిక్ మెషీన్ లెర్నింగ్ దృష్టికోణం నుండి NLP నేర్చుకోవాలంటే, [ఈ పాఠ్యాల సూట్](https://github.com/microsoft/ML-For-Beginners/tree/main/6-NLP)ను సందర్శించండి +మీరు క్లాసిక్ మెషీన్ లెర్నింగ్ దృక్పథం నుండి NLP నేర్చుకోవాలనుకుంటే, [ఈ పాఠశాల శ్రేణి](https://github.com/microsoft/ML-For-Beginners/tree/main/6-NLP)ను సందర్శించండి -## ఈ విభాగంలో -ఈ విభాగంలో మనం నేర్చుకునేది: +## ఈ భాగంలో +ఈ భాగంలో మనం నేర్చుకునేది: -* [పాఠ్యాన్ని టెన్సర్లుగా ప్రాతినిధ్యం వహించడం](13-TextRep/README.md) -* [పద ఎంబెడ్డింగ్స్](14-Emdeddings/README.md) +* [పదాలను టెన్సర్స్ రూపంలో ప్రాతినిధ్యం](13-TextRep/README.md) +* [వర్డ్ ఎంబెడ్డింగ్స్](14-Emdeddings/README.md) * [భాషా మోడలింగ్](15-LanguageModeling/README.md) -* [రెకరెంట్ న్యూరల్ నెట్‌వర్క్‌లు](16-RNN/README.md) -* [జనరేటివ్ నెట్‌వర్క్‌లు](17-GenerativeNetworks/README.md) +* [రికరెంట్ న్యూరల్ నెట్‌వర్క్స్](16-RNN/README.md) +* [జనరేటివ్ నెట్‌వర్క్స్](17-GenerativeNetworks/README.md) * [ట్రాన్స్‌ఫార్మర్స్](18-Transformers/README.md) --- -**అస్పష్టత**: -ఈ పత్రాన్ని AI అనువాద సేవ [Co-op Translator](https://github.com/Azure/co-op-translator) ఉపయోగించి అనువదించబడింది. మేము ఖచ్చితత్వానికి ప్రయత్నించినప్పటికీ, ఆటోమేటెడ్ అనువాదాల్లో పొరపాట్లు లేదా తప్పిదాలు ఉండవచ్చు. మూల పత్రం దాని స్వదేశీ భాషలో అధికారిక మూలంగా పరిగణించాలి. ముఖ్యమైన సమాచారానికి, ప్రొఫెషనల్ మానవ అనువాదం సిఫార్సు చేయబడుతుంది. ఈ అనువాదం వాడకం వల్ల కలిగే ఏవైనా అపార్థాలు లేదా తప్పుదారితీసే అర్థాలు కోసం మేము బాధ్యత వహించము. +**అస్వీకరణ**: +ఈ పత్రం AI అనువాద సేవ [Co-op Translator](https://github.com/Azure/co-op-translator) ఉపయోగించి అనువదించబడింది. మేము ఖచ్చితత్వానికి ప్రయత్నిస్తున్నప్పటికీ, ఆటోమేటెడ్ అనువాదాలు తప్పులు లేదా అసమగ్రతలను కలిగి ఉండవచ్చు. దాని స్వదేశ భాషలో ఉన్న అసలు పత్రాన్ని అధికారం కలిగిన మూలంగా పరిగణించాలి. కీలకమైన సమాచారం కోసం, ప్రొఫెషనల్ మానవ అనువాదాన్ని సిఫారసు చేస్తాము. ఈ అనువాదం ఉపయోగం వల్ల కలిగే ఏవైనా అపార్థాలు లేదా తప్పుదారులు కోసం మేము బాధ్యత వహించము. \ No newline at end of file