Deep learning
Deep learning-ul imită modul în care funcționează creierul uman pentru a
procesa informația sau a lua anumite decizii. In acest tip de învatare avem mai
multe straturi care se numesc layers în cel mai simplu model avem 3 dar putem
ajunge la mii de de la layers.
Retelele neuronale sunt conectate prin caracteristici numite weights (ponderi
numerice) si invatata prin ajustarea acestora. Sunt niste valori pe care le dăm
noi si prin testare, comparand rezultatele ajustam aceste weights-uri si astfel sa
ajungem la modele cat mai bune care sa ia decizii bune, dar sa nu ajunga la un
overflow( adica depasirea limitelor invatare prea buna gen sa stie exact ce sa
spuna, sa invete pe de rost datele de test)
O retea neuronala este formata din Layere de input adica datele brute x-urile
noastre, hidden layers sunt straturile ascunde si defapt aici e tot procesul de
aici se invata de fapt caracteristiciile si cu cat inaintam in layers cu atat
caracteristiicile sunt mai complexe si definesc mai bine obiectul studiului si mai
e output layers unde de aici ies rezultatele
Codul pe care l-am scris este in python si pentru a-l rula il punem in Jupyter
notebook sau in google colab, iar tensorflow e o biblioteca facuta de google
speciala pentru partea de deep learning .Avem f multe functii pe care le folosim
pentru construire si antrenare predefinite. Mai e inca un avantaj la tensorflow
faptul ca putem face aplicatii cu acesta si poate fi integrat in mobile/
embedded devices
Acum voi descrie coodul: am implementat cea mai simpla metoda de retea
neuronala densa cu regresie
model = [Link]([
[Link](shape=(2,)),
[Link](16, activation='relu'),
[Link](2)
])
[Link](shape=(2,)) in aceasta linie ai input care vede 2 lucruri
dyupa cum am definit la x avem 2 valori 70 si 0.25 deci is 2 date care imi intra in
neuron apoi o sa avem 16 celule de gandire(neuroni) care se afla in hidden
layers si fiecare are functia de activare relu, aceasta functie de activare relu uita
de valorile negative nu le baga in seama si le pune ca si 0 el doar ia valori
pozitive mai sunt si alte tipuri de functii de activare sigmoid etc, dar aceasta
este deobicei cea mai foloista aici (relu), iar sigmoidul se mai folosetse la retele
convolutionare pe partea de iesire. si la final avem 2 neuroni care prezic adica
is valorile din y. nueronii is conectati intre ei adica cei 16 neuroni din hidden is
conectati fiecare la cei 2 de inceput si tot asa.
[Link](optimizer='adam', loss='mse')
[Link](X, y, epochs=300, verbose=1)
acest cod imi optimizez codul cu adam care e un algoritm de optimizare pentru
a ajuat neuronii sa invete cat mai bine, iar mse e un tip de loss( functie
matematica care masaora diferenta dintre predictiile modelui adica ce crede ca
e raspunsuul ok si valorile care is defapt reale) care se caluleaza ca (1/n) × Σ(yi -
ŷi)² unde n = numărul de exemple
- yi = valoarea reală (ground truth)
- ŷi = predicția modelului
- Σ = suma pentru toate exemplele
Exemplu concret cu datele tale:
Datele tale de antrenament
X = [[70, 0.25], [80, 0.22], [90, 0.20]]
y = [[120, 80], [125, 82], [130, 85]]
Să presupunem că după prima epocă, modelul prezice:E DOAR UN EXEMPLU
Input Target Real Predicție Model Calculul MSE
[70, 0.25] [120, 80] [110, 75] (120-110)² + (80-75)² = 100 + 25 = 125
Am folosit MSE pentru ca am niste valori continue nu binare.
[Link](X, y, epochs=300, verbose=1) prin linia asta o sa analizam de 300 de
ori datele si de fiecare data cand gresim vom invata din ceea ce gresim si la
urmatorul pas va putea prezice mai bine ceea ce ne dorim sa aflam defapt si
astfel modelul va tot invata din greseli.
Pentru a putea sa-l folosim in in aplicatii mobile sau pe partea de embedded
datele trebuie aduse si facute micute, deorece o placuta nu poate duce f multe
date pentru ca au memorie micuta, exemplul meu nu are multe date, pentru ca
e de test, dar daca las ca dispozitivul sa ruleze mult voi avea multe date care
ocupa o dimensiune destul de mare asa ca le voi face mai mici prin apelearea
functilor predefinite converter =
[Link].from_keras_model(model)
tflite_model = [Link]()prima inie ii analzazaahitctura si ii identiica
layre si oper suportate si a doua imi covertete eectiv datele apoi pentu
eficienta ii salvez biar dtele with open("model_hr_pct.tflite", "wb") as f:
[Link](tflite_model)
tflite_model e bia si nu e text, ar daca as incerca sa salvez text s-ar pierde date
si iormaii, iar operatiile de I/O is mai rpide si ajortaet latfoerelor de embedded
si app asteapta format bnar pentru tot ce rueaza in spaele dispoitiv este binar.