Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Razvoj sopstvenog framework-a za duboko učenje u C++ jeziku #1

Open
kolemare opened this issue Dec 5, 2024 · 1 comment
Open

Razvoj sopstvenog framework-a za duboko učenje u C++ jeziku #1

kolemare opened this issue Dec 5, 2024 · 1 comment
Assignees
Labels
odobreno Extra attention is needed

Comments

@kolemare
Copy link

kolemare commented Dec 5, 2024

Tim:

Marko Kostić E9 2/2023

Github Repository:

CNN-CPP

Definicija Problema:

Razvoj i evaluacija sopstvenog framework-a za duboko učenje pod nazivom CNN-CPP u programskom jeziku C++ od nule. Cilj projekta je kreiranje fleksibilnog i potpuno konfigurabilnog rešenja za klasifikaciju slika korišćenjem dubokih neuronskih mreža, uz poređenje performansi sa postojećim alatima poput TensorFlow-a.

Ključni ciljevi:

  • Razvoj modularnog i konfigurabilnog framework-a, koji omogućava:

    • Konvolucione slojeve sa prilagodljivim kernelima, stride parametrima i padding opcijama.
    • Batch normalizaciju za stabilizaciju i ubrzanje treninga.
    • Pooling slojeve (Max i Average pooling) za redukciju dimenzionalnosti.
    • Različite funkcije aktivacije, uključujući:
      • ReLU
      • Sigmoid
      • Tanh
      • Softmax
      • Leaky ReLU
      • ELU (Exponential Linear Unit)
    • Flatten sloj za pripremu podataka za potpuno povezane slojeve.
    • Potpuno povezane slojeve za finalnu klasifikaciju.
  • Konfigurabilnost na svim nivoima modela, uključujući:

    • Više tipova inicijalizacije za kernel-e, bias-e i težine (He, Xavier, random uniform).
    • Fleksibilnost u dizajnu modela, omogućavajući korisnicima da kreiraju arhitekture poput:
      • LeNet sa prilagodljivim brojem slojeva i filtera.
      • AlexNet za složenije probleme.
    • Sekvencijalni način kreiranja modela, identičan onom u TensorFlow-u (Sequential API).
  • Napredne tehnike treninga i optimizacije, uključujući:

    • ELRALES (Epoch Loss Recovery Adaptive Learning Early Stopping) za adaptivno učenje, koji omogućava modelu da u slučajevima kada loss raste izvan predefinisanih granica, vrati stanje trainable parametara na najuspešniju epohu do sada i koriguje stopu učenja, kao i da donese odluku o ranom zaustavljanju ako napretka u učenju više nema.
    • Gradient clipping za kontrolu eksplozije gradijenata.
    • Learning rate decay za postepeno smanjenje stope učenja, uključujući:
      • Eksponencijalni pad (Exponential Decay)
      • Stepenasti pad (Step Decay)
      • Polinomijalni pad (Polynomial Decay)
      • Pad u obrnutom vremenu (Inverse Time Decay)
      • Kosinusni pad (Cosine Decay)
    • Batch učenje sa podrškom za:
      • Balansirane batch-eve (uniformna raspodela kategorija po batch-u)
      • Nasumične batch-eve (pandam TF-u "Flow From Directory")
  • Podrška za višestruke optimizatore i njihovu konfiguraciju, uključujući:

    • SGD (Stochastic Gradient Descent).
    • SGD sa momentom.
    • Adam optimizator.
    • RMSprop.
  • Evaluacija performansi kroz:

    • Vizualizaciju metrika kao što su preciznost (accuracy) i gubitak (loss).
    • Poređenje sa TensorFlow-om, koristeći iste arhitekture i dataset-ove.
  • Numerička preciznost i efikasnost:

    • 64-bitna preciznost za superiornu numeričku stabilnost u odnosu na 16-bitnu i 32-bitnu koju TF koristi.
    • Paralelizacija konvolucije na nivou slike za bolje iskorišćenje CPU resursa.
  • Augmentacija slika će biti implementirana sa podrškom za sledeće tehnike:

    • Skaliranje slike (Zoom in/out)
    • Horizontalno okretanje (Horizontal Flip)
    • Vertikalno okretanje (Vertical Flip)
    • Dodavanje Gaussian šuma (Add Gaussian Noise)
    • Primena Gaussian zamućenja (Gaussian Blur)
    • Shear transformacija (Shearing)
    • Normalizacija vrednosti piksela (Normalization)
  • Automatski one-hot encoding na osnovu strukture dataset-a:

    • Automatsko mapiranje kategorija u one-hot reprezentaciju na osnovu direktorijumske strukture dataset-a.
  • Detaljan matematički opis svih komponenti sistema:

    • Cilj projekta je pružiti sveobuhvatan matematički opis ključnih komponenti framework-a, uključujući konvolucione slojeve, batch normalizaciju, pooling slojeve, aktivacione funkcije, tehnike optimizacije, loss funkcije i druge elemente.
  • Doxygen dokumentacija:

    • Projekat će obuhvatiti generisanje Doxygen dokumentacije na osnovu komentara unutar C++ koda, čime će se omogućiti automatsko kreiranje detaljne tehničke dokumentacije. Dokumentacija će pokrivati strukturu koda, klase, metode, funkcije i parametre.

Poseban fokus projekta:

  1. Postizanje fleksibilnosti i konfigurabilnosti na nivou arhitekture i parametara modela.
  2. Poređenje performansi framework-a CNN-CPP sa TensorFlow-om na identičnim modelima i konfiguraciji, uključujući preciznost, vreme treninga i stabilnost učenja.
  3. Praktična primena na dataset-ovima poput CIFAR-10 i MNIST, uz demonstraciju prednosti u performansama i kontroli treninga.
@kolemare kolemare changed the title Razvoj sopstvenog framework-a za duboko učenje u C++ jeziku: Evaluacija performansi i primena na problemu klasifikacije slika Razvoj sopstvenog framework-a za duboko učenje u C++ jeziku Dec 5, 2024
@vdragan1993 vdragan1993 self-assigned this Dec 12, 2024
@vdragan1993
Copy link
Member

Tema odobrena.
Srećan rad.

@vdragan1993 vdragan1993 added the odobreno Extra attention is needed label Dec 12, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
odobreno Extra attention is needed
Projects
None yet
Development

No branches or pull requests

2 participants