Aktuálně, 24. dubna: N3 neuronová síť
- Cvičení do hodiny: trénování neuronové sítě v kódu train.py na datech mnist.npz.
- Cíle:
- Spusťte kód a počkejte, až se neuronová síť natrénuje. Program můžete spouštět opakovaně, výsledky vždycky budou trochu jiné. Jeden výstup mi pošlete do chatu (jako text nebo jako screenshot).
- Napište vysvětlení, co ten textový výstup programu znamená. Stačí jedna věta, a je v pořádku tipovat, ale vysvětlete každou část, co program vypisuje.
- Napište svoje zhodnocení, jak na tom je tenhle výstup programu oproti jiným, kdy jste ho spouštěli. Stačí jedna věta a je v pořádku napsat jen od oka, jak vám to připadá.
Minule, 10. dubna: N2 opravdové bludiště
- Cvičení do hodiny: bludiste.py
- doplňte funkci
nakresli_caru
.- pozor, má kreslit na dvojnásobných souřadnicích, než jaké dostala.
- doplňte funkci
- Cíle:
- doplňte funkci
vsechny_hrany
.- Například na bludišti 3x2 má vypsat 7 hran:
[((0, 0), (1, 0)), ((0, 0), (0, 1)), ((0, 1), (1, 1)), ((0, 1), (0, 2)), ((0, 2), (1, 2)), ((1, 0), (1, 1)), ((1, 1), (1, 2))]
. - O chlup jednodušší je vynechat poslední sloupec a poslední řádek. Potom stačí z každého bodu udělat čáru doprava a dolů. Až vám tohle bude fungovat, přidáte ten sloupec a řádek a máte hotovo.
- Například na bludišti 3x2 má vypsat 7 hran:
- doplňte funkci
najdi_praotce
.- když
slovnik.get(dite)
vrací hodnotuNone
, tak jsme zatím žádného otce neurčili. V takovém případě má funkce vrátit rovnou ten bod:return dite
- když
otec = slovnik.get(dite)
vrátí nějaký výsledek, tak chceme možná vrátit tenhle výsledek:return otec
. Jestli ale on sám má nějakého otce, musíme pokračovat dál.
- když
- na konci programu smažte
nakresli_caru((0, 0), (0, 4))
anakresli_caru((0, 4), (4, 4))
, aby program kreslil jenom bludiště.
- doplňte funkci
- Teorie: vlastně jsme implementovali Kruskalův algoritmus na minimální kostru v grafu, kde váhy hran nastavíme náhodně.
- Na příště: připomeňte si úkoly, které jste nenaprogramovali. To znamená:
- úkoly, které jste odevzdali jen jako popis postupu a
- úkoly, se kterými vám pomáhal někdo jiný (robot) a úplně jim nerozumíte.
Zadání na 4. čtvrtletí
- 10. dubna: N2 opravdové bludiště
- Cvičení do hodiny: bludiste.py
- doplňte funkci
nakresli_caru
.- pozor, má kreslit na dvojnásobných souřadnicích, než jaké dostala.
- doplňte funkci
- Cíle:
- doplňte funkci
vsechny_hrany
.- Například na bludišti 3x2 má vypsat 7 hran:
[((0, 0), (1, 0)), ((0, 0), (0, 1)), ((0, 1), (1, 1)), ((0, 1), (0, 2)), ((0, 2), (1, 2)), ((1, 0), (1, 1)), ((1, 1), (1, 2))]
. - O chlup jednodušší je vynechat poslední sloupec a poslední řádek. Potom stačí z každého bodu udělat čáru doprava a dolů. Až vám tohle bude fungovat, přidáte ten sloupec a řádek a máte hotovo.
- Například na bludišti 3x2 má vypsat 7 hran:
- doplňte funkci
najdi_praotce
.- když
slovnik.get(dite)
vrací hodnotuNone
, tak jsme zatím žádného otce neurčili. V takovém případě má funkce vrátit rovnou ten bod:return dite
- když
otec = slovnik.get(dite)
vrátí nějaký výsledek, tak chceme možná vrátit tenhle výsledek:return otec
. Jestli ale on sám má nějakého otce, musíme pokračovat dál.
- když
- na konci programu smažte
nakresli_caru((0, 0), (0, 4))
anakresli_caru((0, 4), (4, 4))
, aby program kreslil jenom bludiště.
- doplňte funkci
- Teorie: vlastně jsme implementovali Kruskalův algoritmus na minimální kostru v grafu, kde váhy hran nastavíme náhodně.
- Cvičení do hodiny: bludiste.py
- 3. dubna: N1 bludiště
- Cíl: program nakreslí bludiště.
- Jak se to pozná: černé pixely označují zeď a z rohu do rohu bludiště vede nějaká cesta.
- Jak postupovat:
- Nainstalujte numpy a matplotlib
- Vytvořte prázdné pole
np.ones((výška, šířka))
- Některé části pole programem nastavte na nuly
- Zobrazte výsledek pomocí
matplotlib.imshow
- Cvičení do hodiny:
- np.py
- Upravte program tak, aby nakreslil dům a stromeček (nebo jiný roztomilý obrázek podle vašeho vkusu).
Organizace čtvrtého čtvrtletí
Ve čtvrtém čtvrtletí naučíme několik neuronových sítí a prověříme, kolik jste se naučili vy sami.
- Na začátku každé hodiny bude na webu zadání práce. Během hodiny se na zadání letmo podíváme.
- Termín odevzdání je důsledně před začátkem následující hodiny.
- Splnit práci jde buďto fungujícím kódem, nebo vysvětlením (stačí jeden odstavec), jak jste postupovali a proč to nešlo.
- Na hodině můžu vyžadovat, abyste odevzdaný kód vysvětlili nebo k vysvětlení napsali kus kódu. Jestli vyjde najevo, že svojí odevzdané práci vůbec nerozozumíte, neuznám ji.
- Na začátku každé hodiny si dáme krátké cvičení.
- Termín odevzdání je během hodiny (např. 7:55).
- Pokud na hodině nejste, máte termín až do začátku následující hodiny.
- Cvičení se počítá do závěrečného hodnocení.
- Za 70 % úkolů splněných včas je jednička na závěrečném vysvědčení, pak to jde dolů po 15 %.
- Počítají se do toho i čtyři úlohy ze třetího pololetí.
jméno | N1 3. 4. |
N2 10. 4. |
N3 24. 4. |
---|---|---|---|
FM | ✘ | ✘ | |
JP | ✓ | R | |
MB | ✓ | ✓ | |
OP | ✓ | ✓ | |
SV | ✓ | V | |
ŠP | ✓ | ⏲ | |
TA | ✘ | ✘ |
- ✓: splněno kódem, V: splněno vysvětlením
- R: možná splněno, pokud kódu rozumíte
- ⏲: nebylo odevzdáno včas, ✘: vůbec neodevzdáno
Zadání z 3. čtvrtletí
- 27. března: P4 slovo v kontextu
- Cíl: program, který nabízí nejlepší slovo vzhledem k tomu, co jsme už napsali.
- Jak se to pozná: máte lidským jazykem určené, co pro váš program znamená "kontext".
- Jak postupovat:
- Stáhněte si program kontext.py, spusťte ho a pochopte, jak funguje.
- Zamyslete se a napište komentář na začátek programu: co z předcházejícího textu má vliv na předpovídané slovo.
- Změňte způsob, jak se počítá
context
a ověřte, že program dělá to, co jste naplánovali v bodě 1. - (bonus) Upravte, co program dělá, když neví.
- 20. března: P3 slova v textu
- Cíl: program, který v zadaném textu najde nejčastější slovo.
- Jak se to pozná: na začátku programu je ukázkový text. Když program spustíte, tak má vypsat slovo, které se v tom textu vyskytuje pětkrát.
- Jak postupovat:
- Stáhněte si program nejcastejsi.py a vyzkoušejte si ho spustit. Všimněte si, že neříká pravdu: slovo "nespravedlností" se v textu vyskytuje jen jednou. Skóre se počítá špatně.
- Upravte funkci
ohodnot
, aby každému slovu spočítala, kolikrát se v textu vyskytuje. - Zkontrolujte, že program říká pravdu, a odevzdejte ho.
- 13. března: P2 nejlepší slovo
- Cíl: program, který nabízí (v nějakém ohledu) nejlepší slovo
- Jak se to pozná: máte lidsky napsané, jaké slovo je nejlepší nabídnout, a když několikrát zkoušíte psát text, nabídne se vám správné slovo
- Jak postupovat:
- Zamyslete se a napište komentář na začátek programu: když máme víc možných slov se stejným začátkem, tak jaké slovo je nejlepší nabídnout.
- Rozmyslete si (to nemusíte psát), co program potřebuje vědět nebo vypočítat, aby to slovo našel.
- Poraďte se s lidmi a roboty a napište program do funkce
predict
.
- 27. února: P1
- zprovozněte aplikaci main.py s hlavní stránkou index.html. Podrobnější návod:
- začněte tím, že soubory stáhnete do nové složky, a pak v ní otevřete terminál (nebo Powershell):
cd "Nová Složka"
- virtuální prostředí s názvem
venv
vytvoříme příkazem v terminálu:python3 -m venv venv
- pak je potřeba ho aktivovat:
venv/Scripts/activate.ps1
- pak nainstalovat FastApi:
python3 -m pip install fastapi[standard]
- pak ho spustit:
fastapi dev main.py
- Že aplikace funguje, poznáte, když se podíváte na adresu 127.0.0.1:8000 a otevře se vám tam stránka s textovým políčkem.
- začněte tím, že soubory stáhnete do nové složky, a pak v ní otevřete terminál (nebo Powershell):
- zařiďte, aby aplikace nabízela k doplnění slova, která jsme už napsali.
- zprovozněte aplikaci main.py s hlavní stránkou index.html. Podrobnější návod:
- 6. února jednohubky:
- webová stránka s políčkem pro psaní textu, které nabízí možnosti "foo" a "bar"
- webová služba (s pomocí FastAPI), která na
/suggest
vrací seznam[1, 2, 3]
- funkce, kterou když voláme opakovaně, vrací posledních pět hodnot, co dostala jako parametr
jméno | P1 | P2 | P3 | P4 |
---|---|---|---|---|
FM | ✓ | ✓ | ✘ | ✓ |
JP | ✓ | ✘ | ✓ | ✓ |
MB | ✓ | ✘ | ✓ | ✓ |
OP | ✓ | ✓ | ✓ | ✘ |
SV | V | ✘ | ✓ | ✓ |
ŠP | ✓ | ⏲ | ✓ | ✓ |
TA | ✓ | ✘ | ✓ | V |
- ✓: splněno kódem, V: splněno vysvětlením
- ⏲: nebylo odevzdáno včas, ✘: vůbec neodevzdáno
Zadání z 2. čtvrtletí
- L1 Písmeno v seznamu (do 28. listopadu).
- L2 Fronta (do 5. prosince)
- L3 Parkoviště (do 12. prosince)
- L4 Výraz (do 19. prosince)
- L5 Rým (do 9. ledna)
- L6 Počty (do 16. ledna)
- L7 Stoupání (do 24. ledna)
Tabulka z druhého čtvrtletí
jméno | L1 | L2 | L3 | L4 | L5 | L6 | L7 |
---|---|---|---|---|---|---|---|
FM | ✘ | ✓ | ✘ | ✓ | ✘ | ✓ | ✘ |
MB | ⏲ | ⏲ | ✓ | ✓ | ⏲ | ✓ | ✓ |
ŠP | ✓ | ⏲ | ✓ | ✓ | ✓ | ✓ | ✓ |
TA | ✓ | ⏲ | ⏲ | ✓ | ✓ | ✓ | ✓ |
Zadání z 1. čtvrtletí
- Z1 Hello, World! (do 19. září)
- Z2 Popis parametru (do 26. září)
- Z3 Oblíbená rovnice (do 3. října)
- Z4 Popis postavy (do 17. října)
- Z5 Autentizace (do 24. října)
- Z6 Šikovná mocnina (do 7. listopadu)
- Z7 Hloupá odmocnina (do 14. listopadu).
Tabulka z prvního čtvrtletí
jméno | Z1 | Z2 | Z3 | Z4 | Z5 | Z6 | Z7 |
---|---|---|---|---|---|---|---|
FM | ⏲ | ⏲ | ✓ | ✓ | ⏲ | ✓ | ✓ |
MB | ✓ | ⏲ | ✓ | ✓ | ✓ | ⏲ | ✓ |
ŠP | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
TA | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |