Giter VIP home page Giter VIP logo

bin-lab-nn's Introduction

Laboratorní cvičení BIN4 : Neuronové sítě

Cílem čtvrtého cvičení v předmětu BIN je seznámit se s neuronovými sítěmi a jejich výpočetní náročností.

Info o NN

Projděte si teorii představenou na přednášce BIN. Dále se seznamte s prací s neuronovými sítěmi ve frameworku Tensorflow, která je popsaná v Jupyter noteboocích popisujících

Vlastní spuštění a testování

Pro spuštění máte několik možností:

  • DOPORUČENO: stáhnout notebook na Google CoLab, můžete otevřít projekt přímo z Githubu (nutné zadat mrazekv do cesty, pak vybrat bin-lab-nn a příslušný notebook). Potom kliknete do boxu s kódem (kde můžete dělat změny) a pomocí Shift+Enter spustit daný blok. Pozor, je nutné postupovat postupně a nepřeskakovat kernely. V menu Běh -> Změnit typ běhového prostředí vyberte běh na GPU.
  • z repozitáře https://github.com/mrazekv/bin-lab-nn si stáhnout Python soubory. Tyto soubory můžete pustit u sebe (nutnost Python3 + Tensorflow + Keras a nejlépe aspoň základní GPU) či na serveru merlin (pozor, je potřeba spouštět příkazem python3.8 <nazev_skriptu>).

Úkoly

Implementujte trénování a testování následujících sítí pro dataset MNIST a trénování pro 10 epoch.

Implementujte následující sítě:

  • MLP (fully-connected): 784-300-10
  • MLP (fully-connected): 784-100-10
  • MLP (fully-connected): 784-100-100-10
  • MLP (fully-connected): 784-300-300-10
  • Konvoluční 2 konvoluce + 120-84-10 fully connected
  • Konvoluční 2 konvoluce + 120-10 fully connected
  • Konvoluční 1 konvoluce + 120-84-10 fully connected (odstraňte druhou konvoluci a následnou pooling layer)
  • Konvoluční 1 konvoluce + 120-10 fully connected (odstraňte druhou konvoluci a následnou pooling layer)

Vlastnosti sítí shrňte v tabulce, kde bude uveden:

  • Typ sítě
  • Dosažená validační přesnost (po 10 epochách)
  • Počet násobení v plně propojených vrstvách
  • Počet násobení v konvolučních vrstvách
  • Počet trénovacích parametrů

Vytvořte X-Y (scatter) graf, kde na ose X bude celkový počet násobení (~energie) a na ose Y bude výsledná přesnost. Diskutujte výsledky, zejména otázku, které sítě byste zvažovali pro použití. Pro vykreslení využijte Python v Jupyter notebooku. Ukázka vykreslení je

import matplotlib.pyplot as plt
import pandas as pd

# Data ve formatu prikon / pocet_nasobeni
# TODO: upravte dle vlastniho uvazeni
df = pd.DataFrame([
  {"type" : "mlp", "accuracy": 97.4, "MAC": 100},
  {"type" : "mlp", "accuracy": 98.4, "MAC": 200},
  {"type" : "conv", "accuracy": 99.4, "MAC": 200},
])

fig, ax = plt.subplots(figsize=(8, 6))

for nn_type, label, color in [("mlp", "MLP sítě", "tab:orange"), ("conv", "Konvoluční sítě", "tab:blue")]:
  df_tmp = df.query("type == @nn_type")
  ax.scatter(df_tmp["MAC"], df_tmp["accuracy"], color=color, label=label)

ax.set(
    xlim=(0, None),
    ylim=(0, 100)
    # todo
)
ax.legend()

# plt.savefig("obrazek.pdf")
# plt.savefig("obrazek.png")
fig.show()

Do výpočtu počtu násobení v plně propojených vrstvách je nutné zahrnout: počet vstupních neuronů a počet neuronů ve vrstvě. Pro výpočet počtu násobení v konvolučních vrstvách je nutné zahrnout: velikost vstupního obrázku, počet kanálů ve vstupním obrázku, velikost filtru, počet výstupních kanálů.

Co si připravit pro hodnocení

  • Tabulka přesností + vzorec výpočtů)
  • Graf (včetně dodržení všech náležitostí grafu)
  • Shrnutí výsledků a závěr (ústně)

bin-lab-nn's People

Contributors

mrazekv avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.