You are on page 1of 12

MINISTERUL EDUCATIE SI CERCETARII AL REPUBLICII

MOLDOVA
UNIVERSITATEA TEHNICA A MOLDOVEI
FACULTATEA TEHNOLOGIA ALIMENTELOR
Departamentul Tehnologia Produselor Alimentare

UTILIZAREA LIMBAJULUI DE
PROGRAMARE PYNTHON PENTRU
IMPLEMENTAREA UNEI RETELE
NEURONALE

A efectuat : Malai Irina


Verificat : Braniste Rodica

CHISINAU, 2023
1. INTRTODUCERE
Multe sisteme de calcul naturale (automate celulare pentru
modelarea diferitelor fenomene fizice și sociale, difuzarea
reacțiilor rețelelor celulare neliniare, optimizarea algoritmilor
bazați pe inteligență, etc) sunt considerate astăzi de către
cercetători pentru modelarea și înțelegerea unei game largi de
fenomene fizice, biologice și de altă natură (propagarea
focului, modelele de evacuare a populației, gestionarea
dezastrelor, creșterea tumorii, propagarea sunetului etc.) sau
prelucrarea semnalului (senzori de imagine inteligenți, etc.).
O caracteristică comună pentru majoritatea sistemelor
computerizate naturale este interconectarea unui număr mare de
unități de bază (numite celule, practic simple sisteme dinamice
neliniare). Acești algoritmi se caracterizează printr-un nivel
ridicat de paralelism, astfel că se așteaptă accelerarea
semnificativă atunci când sunt disponibile anumite platforme
computaționale paralele. Printre platformele cele mai convenabile
și mai ieftine sunt cardurile grafice cu suport CUDA de la NVIDIA
sau alte platforme pentru programarea unităților de procesare
multi-core. Multe dintre modelele de computere natural menționate
mai sus au fost recent analizate de diverși cercetători din
perspectiva unor implementări eficiente (calcul de înalta
performanță) care indică de multe ori accelerații importante (una
sau două ordine de mărime) comparativ cu cea mai bună
implementare pe nucleul procesorului. [1]
Asigurarea unei implementări eficiente în CPU sau GPU necesită
abilități profunde de programare și cunoașterea diverselor
tehnologii software. Soluțiile vin adesea după cicluri lungi
de dezvoltare. Pe de altă parte, numeroși oameni de știință și-ar
dori să aibă acces la astfel de facilități de calcul într-o manieră
mult mai transparentă, orientată spre probleme și care nu se
bazează pe concentrarea prea mare pe problemele de
programare la nivel scăzut.
Cu alte cuvinte, productivitatea ridicată devine o problemă
importantă, ceea ce înseamnă o reducere dramatică a timpului de
dezvoltare de la idee la implementare. Majoritatea furnizorilor
de software științific, care au abordat deja problema
productivității ridicate, susțin acum o programare transparentă a
dispozitivelor GPU. Este nevoie de mult efort și cercetarea este
încă în fază incipientă pentru a dezvolta o programare
transparentă și de înaltă productivitate a platformelor de calcul
mai puternice. Portabilitatea ridicată a unei implementări este,
de asemenea, o problemă importantă care trebuie luată în
considerare.

2. CUPRINS
2.1 Rețelele neurale

Rețelele neurale RN, sunt o ramură din știința inteligenței


artificiale, și constituie totodată, principial, un obiect
de cercetare și pentru neuroinformatică. Rețelele neurale artificiale
caracterizează ansambluri de elemente de procesare simple,
puternic interconectate și operând în paralel, care urmăresc să
interacționeze cu mediul înconjurător într-un mod
asemănător creierelor biologice și care prezintă capacitatea de a
învăța. Ele sunt compuse din neuroni artificiali, sunt parte a
inteligenței artificiale și își au, concepțional, originea ca și neuronii
artificiali, în biologie. Nu există pentru RNA o definiție general
acceptată a acestor tipuri de sisteme, dar majoritatea cercetătorilor
sunt de acord cu definirea rețelelor neurale artificiale ca rețele de
elemente simple puternic interconectate prin intermediul unor
legături numite interconexiuni prin care se
propagă informație numerică. Originea acestor rețele trebuie
căutată în studierea rețelelor bioelectrice din creier formate
de neuroni și sinapsele acestora. Principala trăsătură a acestor
rețele este capacitatea de a învăța pe bază de exemple, folosindu-se
de experiența anterioară pentru a-și îmbunătăți performanțele.

Limbajul de programare este 3 mijlocul de comunicare cu o


platforma computațională. Simularea presupune rularea
executarea algoritmului implementat, precum și evaluarea
performanței în vederea eficientizării acestuia.
Limbajul de programare este mijlocul de comunicare cu o
platforma computațională. Simularea presupune rularea /
executarea algoritmului implementat, precum și evaluarea
performanței în vederea eficientizării acestuia.

2.2 Python

Python este un limbaj de programare de nivel înalt, interpretat,


orientat pe obiecte, care subliniază idealurile de lizibilitate și
simplitate a codului. În acest moment, s-ar putea să vă gândiți la
Python ca precursorul tuturor celorlalte limbi. Sintaxa simplă a lui
Python este responsabilă pentru creșterea sa fulgerătoare în
popularitate. În plus, sintaxa concisă vă permite să petreceți mult
mai mult timp dezvoltării structurii fundamentale, făcând din
Python o alegere excelentă pentru procedurile de învățare
automată. Ușurința de utilizare a lui Python este mai importantă
decât orice altceva pentru a face din acesta opțiunea cea mai
preferată printre inginerii AI. Cu toate acestea, este un instrument
performant și utilizat pe scară largă limbaj de programare capabil
de proceduri complexe pentru o gamă largă de locuri de muncă și
platforme. În ceea ce privește tehnologia actuală, cel mai important
motiv pentru care Python este de obicei în frunte este că cadrele
specifice AI au fost create pentru limbaj. TensorFlow, un set de
instrumente open-source conceput în special pentru învățarea
automată, care poate fi folosit pentru deep rețele
neuronale antrenament și inferență, este una dintre cele mai
populare. Printre celelalte cadre centrate pe AI se numără:

 scikit-learn — o bibliotecă Python pentru antrenament modele de


învățare automată.
 Keras este o interfață de programare pentru calcule matematice
complicate.
 PyTorch este o bibliotecă Python pentru procesarea limbajului
vizual și natural.
 Theano este un pachet care vă permite să definiți, să optimizați și
să evaluați expresii mathematic

2.3 Utilizarea Pynthon


Python este un limbaj de programare foarte popular, oferind
posibilitatea programării structurate dar și orientate pe obiect și
incluzând și elemente din paradigma funcțională. Este un limbaj de
scripting, ceea ce înseamnă că este interpretat și nu compilat,
economisind mult timp în procesul de dezvoltare și debugging.
Limbajul combină o putere remarcabilă cu o sintaxă foarte clară.
Are module, clase, excepții, tipuri dinamice și garbage
collection. API-ul Python oferă module pentru o gamă foarte
mare de funcționalități, de la cele de bază pentru lucrul cu șiruri și
fișiere, până la cele pentru lucrul cu procese, threaduri, sockets,
serializare etc. Multe dintre aceste module oferă o interfață foarte
similară programării la nivel de sistem din C, astfel încât funcțiile
Python au același nume si aproximativ aceiași parametrii ca cei
pentru funcțiile din C pentru apeluri de sistem. Pentru calcul
numeric și grafice există bibliotecile NumPy, SciPy și Matplotlib.
Python este un limbaj ce oferă foarte multe funcționalități și are
o curbă de învățare rapidă atât pentru programatorii ce cunosc
deja limbaje precum C și Java, cât și pentru începători. Deși
este un limbaj interpretat, acest lucru nu a stat în calea
popularității sale și folosirii în numeroase proiecte. Python pune
accentul pe curățenia și simplitatea codului, iar sintaxa sa le
permite dezvoltatorilor să exprime unele idei programatice într-o
manieră mai clară și mai concisă decât în alte limbaje de
programare ca C.
2.4 Rețele neurale artificiale

RNA (Rețele neurale artificiale) sunt sisteme de procesare a


informației, compuse din unități simple de procesare,
interconectate între ele și care acționează în paralel. Aceste
elemente sunt inspirate din sistemele nervoase biologice. La fel ca
în natură, funcția rețelei e determinată de legăturile dintre
elemente. Ponderile legăturilor dintre unități sunt cele care
memorează informația învățată de rețea . Rețeaua se instruiește
prin ajustarea acestor ponderi, conform unui algoritm.

2.4.1 Caracteristicile RNA :


- reprezentarea distribuită a informației : informația din rețea este
stocată în mod distribuit ( în structura de ponderi ), ceea ce face ca
efectul unei anumite intrări asupra ieșirii să depindă de toate
ponderile din rețea.
- capacitatea de generalizare în cazul unor situații neconținute în
datele de instruire . Aceasta caracteristica depinde de numărul de
ponderi, adică de dimensiunea rețelei . Se constată că creșterea
dimensiunii rețelei duce la o bună memorare a datelor de
instruire, dar scad performanțele asupra datelor de testare , ceea
ce înseamnă că RNA a pierdut capacitatea de generalizare.
Stabilirea numărului optim de neuroni din stratul ascuns, care este
o etapă cheie în proiectarea unei RNA, se poate face alegând
valoarea de la care începe să descrească
performanța RNA pe setul de testare.
- toleranța la zgomot : RNA pot fi instruite , chiar dacă datele
sunt afectate de zgomot , diminuându-se - evident - performanța
ei .
- rezistență la distrugerea parțială : datorită reprezentării distribuite
a informației , RNA poate opera și în cazul distrugerii unei mici
părți a ei .
- rapiditate în calcul : RNA consuma mult timp pentru instruire,dar
odată antrenate vor calcula rapid ieșirea rețelei pentru o anumită
intrare .
Putem antrena o RNA să realizeze o anumită funcție, prin
ajustarea valorilor conexiunilor (ponderilor) dintre elemente.
În biologie, neuronul este o celulă adaptată la recepționarea și
transmiterea informației. Un număr suficient de mare de astfel de
celule pot crea structuri de complexitate deosebită, exemplul
pertinent fiind creierul nostru. De aici a pornit ideea rețelelor
neuronale artificiale (RNA). Deși mult mai simple, ele oferă o
serie de rezultate remarcabile ce sunt similare cu procesele aparent
naturale.

2.5 Crearea primei retele


Warren McCulloch și Walter Pits au creat în anii ’40 prima
abstractizare al acestui mecanism complex. La început, ei au
privit acest neuron ca pe-o funcție. Deși e o abordare foarte
simplistă, măcar oferă o primă abstractizare matematică a
neuronului. Astfel:
1. Sinapsele pe care un neuron le făcea prin dendrite cu alți
neuroni au devenit INTRĂRI;
2. Corpul neuronului a devenit un SUMATOR + o FUNCȚIE
DE ACTIVARE (funcție de transfer)
3. Axonul a devenit IEȘIREA
4. Pentru a reprezenta caracteristici neliniare simple s-a introdus
noțiunea de bias.
Doi sau mai mulți neuroni se pot combina într-un strat, iar o RNA
poate conține unul sau mai multe straturi de acest fel. Straturile au
roluri diferite: stratul care produce ieșirea rețelei este numit strat de
ieșire. iar celelalte straturi se numesc straturi ascunse.
Rețelele multi-strat sunt foarte eficiente. Rețelele cu “transmitere
înainte” au de obicei unul sau mai multe straturi ascunse cu
neuroni sigmoidali, urmate de un strat cu neuroni liniari.
Mai multe straturi de neuroni, cu funcții de transfer neliniare,
permit rețelei să învețe relații liniare și neliniare între vectorii de
intrare și de ieșire. Stratul liniar de ieșire permite rețelei să producă
valori în afara domeniului de la -1 la +1. Pe de altă parte, dacă se
dorește restricționarea ieșirilor unei rețele (de ex., între 0 si 1),
atunci stratul de ieșire trebuie să utilizeze o funcție de transfer
sigmoidală. De exemplu, o rețea cu două straturi, unde primul strat
este sigmoid și al doilea strat este liniar, poate fi antrenat să
aproximeze orice funcție (cu un număr finit de discontinuități).

2.6 Rețelele neuronale


Rețelele neuronale sunt ca și calele de lucru ale învățării profunde.
Cu suficiente date și putere de calcul, acestea pot fi utilizate pentru
a rezolva majoritatea problemelor din învățarea profundă. Este
foarte ușor să utilizați o bibliotecă Python sau R pentru a crea o
rețea neuronală și a o antrena pe orice set de date și pentru a obține
o precizie excelentă. Putem trata rețelele neuronale ca doar niște
cutii negre și le putem folosi fără nicio dificultate. Dar, deși pare
foarte ușor să mergeți în acest fel, este mult mai interesant să aflați
ce se află în spatele acestor algoritmi și cum funcționează.
În acest articol vom intra în unele dintre detaliile construirii unei
rețele neuronale. Voi folosi Python pentru a scrie cod pentru rețea.
De asemenea, vom folosi biblioteca numpy a lui Python pentru a
efectua calcule numerice. Înainte de a începe să scriem cod pentru
rețeaua noastră neuronală, să așteptăm și să înțelegem ce este exact
o rețea neuronală.
Fig.2.6.1 diagramă a unei rețele neuronale

În imaginea de mai sus puteți vedea o diagramă foarte


casuală a unei rețele neuronale. Are câteva cercuri colorate
conectate între ele cu săgeți îndreptate către o anumită direcție.
Aceste cercuri colorate sunt uneori denumite neuroni.
Aceste neuroni nu sunt altceva decât funcții matematice care,
atunci când sunt date unele intrare, genera un ieșire.
Ieșire de neuroni depinde de intrare si parametrii din neuroni. Le
putem actualiza parametrii pentru a obține o valoare dorită din
rețea.

Fiecare dintre acestea neuroni sunt definite folosind funcția


sigmoidă. A funcția sigmoidă dă o ieșire între zero la unu pentru
fiecare intrare pe care o primește. Aceste unități sigmoide sunt
conectate între ele pentru a forma o rețea neuronală. Prin
conexiune aici înțelegem că ieșirea unui strat de unități sigmoide
este dată ca intrare pentru fiecare unitate sigmoidă a stratului
următor. În acest fel, rețeaua noastră neuronală produce o ieșire
pentru orice intrare dată. Procesul continuă până când am ajuns la
stratul final. Stratul final își generează ieșirea. Acest proces al unei
rețele neuronale generatoare de ieșire pentru un
dat intrare este Propagare înainte. Ieșirea stratului final se mai
numește predicție a rețelei neuronale. Mai târziu în acest articol
vom discuta despre modul în care noi evaluați predicțiile. Aceste
evaluări pot fi folosite pentru a spune dacă rețeaua noastră
neuronală are nevoie de îmbunătățiri sau nu.
Imediat după ce stratul final își generează ieșirea, calculăm funcția
de cost. Funcția de cost calculează cât de departe este rețeaua
noastră neuronală de a face predicțiile dorite. Valoarea funcției de
cost arată diferența dintre valoarea prezisă si valoarea adevărului.
Obiectivul nostru aici este de a minimiza valoarea funcția de cost.
Procesul de minimizare a funcției cost necesită un algoritm care
poate actualiza valorile parametrii în rețea în așa fel încât funcția
de cost să o atingă valoare minimă.
Algoritmi precum coborâre în gradient și coborâre gradient
stochastic sunt utilizate pentru actualizarea fișierului parametrii a
rețelei neuronale. Acești algoritmi actualizează valorile greutăților
și părtinirilor fiecărui strat din rețea în funcție de modul în care va
afecta funcția de minimizare a costurilor. Efectul asupra
minimizării funcției de cost în raport cu fiecare dintre greutățile și
părtinirile fiecărui neuron de intrare din rețea este calculat
de propagarea înapoi.
3. CONCLUZII

Utilizarea facila a Pythonului creste productivitatea pentru


programatorii avansați.Timpul de scriere a unui program ce va avea
același comportament în mai multelimbaje de programare arata
de ce pythonul este mult mai preferat decât alte limbaje.Un
program în python se scrie de trei pana la cinci ori mai rapid decât
în limbajul Java, și de cinci pana la zece ori mai scurt fata de
limbajul C++. Exista anumite statistici carelauda limbajul Python
afirmând ca un singur programator Python ar putea face aceeași
munca cat doi programatori în C++.Cum este și normal, exista
domenii în care limbajele de nivel înalt, precum C sau Javanu pot
fi dispensate, cum ar fi programarea embedded, unde viteza și
spațiul de stocaremic limitează posibilitatea de a folosi python.
Python are o comunitate bine dezvoltata și asta datorata în special
simplității limbajuluide programare.In mod normal limbajele
interpretate sunt de cele mai multe ori mai lente decât
celecompilate.Totuși, precum Java, Python este si un limbaj “byte-
compiled“ ,rezultând oforma intermediara mai aproape de mașină.
Acest aspect face ca pythonul sa fie un limbaj rapid, dar să permită
păstrarea tuturor avantajelor unui limbaj interpretabil.
4. BIBLIOGRAFIE

1.,-Implementarea unui strat de neuroni sigmoidali în limbajele Python;

2.5., 2.6.,-Cum se construiește o rețea neuronală?;

2.1, 2.4, 2.4.1, -Rețea neurala;

2.2, 2.3- Introducere Python;


3.,-Python – o unealtă utilă;
Fig.2.6.1- diagramă a unei rețele neuronale;

You might also like