Aplicații Deep Dearning folosind platforma Tensorflow [609359]

MINISTERUL EDUCA Ț IEI NA Ț IONALE
UNIVERSITATEA "OVIDIUS" DIN CONSTAN Ț A
FACULTATEA DE MATEMATICĂ Ș I INFORMATICĂ
SPECIALIZAREA INFORMATICĂ

LUCRARE DE LICEN Ț Ă
Aplicații Deep Dearning folosind platforma Tensorflow

Coordonator ș tiin ț ific:
Conf.univ.dr. Elena Pelican

Absolvent: [anonimizat]
2017

Cuprins

Cuprins

Lista Figurilor 3

1. ​ Introducere 5
1.1 ​ Setul de imagini 6

2. ​ Starea actuală a domeniului 7
2.1 ​ Re ț ele recurente ș i problemele la backpropagation 9

3 ​ Soluția propusă 10
3.1 ​ Preprocesare 10
3.1.1 ​ Normalizare cu momen ț i 10
3.1.2 ​ Corectarea înclinăr ​ ii 11
3.1.3 ​ Segmentarea imaginii ș i transformarea cosinus 12
3.2 ​ Re ț ele neuronale convolu ț ionale 13
3.3 ​ Re ț ele neuronale recuren te 15
3.3.1 ​ Long short term memory 16
3.3.2 ​ Multi-Dimentional LSTM 16
3.4 ​ Clasificarea temporală continuă 17
3.4.1 ​ Algoritmul CTC forward backward 18
3.4.2 ​ CTC func ț ia obiectiv 19
3.4.3 ​ Adam optimizer 21
3.4.4 ​ Decodarea 22
3.4.5 ​ Model lingvistic 23

4 ​ Prezentarea aplica ț iilor 25
4.1 ​ Librăria Tensorflow 26
4.2 ​ Recunoa ș terea scrisului d e mâna 27
4.2.1 ​ Alegerea meta-parametrilor 27
4.2.2 ​ Rezultate ob ț inute 29
4.2.3 ​ ​ Analiza SWOT 31
4.3 ​ Clasificarea textului din celulele unui tabel 31
4.3.1 ​ Detectarea tabelului 32
4.3.2 ​ Preprocesarea celulelor 33
4.3.3 ​ Rețele convolu ț ionale 34
1

4.3.3.1 ​ Generarea imaginilor cu zgomot (noise) 34
4.3.3.2 ​ Algoritmi genetici pentru alegerea meta-parametrilor 35
4.3.4 ​ Descrierea re ț elei neur onale 36
4.3.5 ​ Dropout 37
4.3.6 ​ Integrarea cu Drupal ș i Konvajs 38
4.3.7 ​ Analiza SWOT 39

Concluzii 40

Referin ț e bibliografice 43

2

Lista Figurilor

fig 1. Exemple de imagini din setul de imagini IAM 6
fig 2. Autoencoderul înva ț ă o reprezentare a imaginii într-un subspa ț iu mai mic apoi o
reconstruie ș te 8
f ​ ig 3. O comparare dintre un Autoencoder ș i PCA 8
fig 4. Backpropagation, propagarea erori 9
fig 5. Exemplu de imagine cu înclinarea corectata 1 ​ 2
fig 6. Aplicarea transformării cosinus asupra ferestrelor 1 ​ 3
fig 7. Calcularea unei valori din imaginea filtrata 1 ​ 4
fig 8. Re ț ele convolu ț ionale 1 ​ 4
fig 9. Reprezentarea unei re ț ele recurente simple 1 ​ 5
fig 10. LSTM (sursa) 1 ​ 6
fig 11. Reprezentarea unei re ț ele recurente care procesează un tensor 2d 1 ​ 7
fig 12. Drumurile posibile pentru a forma cuvântul ‘CAT’ 1 ​ 8
fig 13. Reprezentare grafica cum Gradient descent func ț ionează 2 ​ 0
fig 14. Valoarea func ț iei ob iectiv cu diferite metode de optimizare 2 ​ 1
fig 15. Ș irul de vectori de p robabilită ț i emi ș i de re ț eaua recurenta pentru o imagine cu
cuvântul ‘would’ 2 ​ 3
fig 16. Reprezentarea posibilită ț ilor de calculare a probabilită ț ilor în modelele n-gram 2 ​ 4
fig 17. Starea actuala a ingineriei învă ț ării automate (Machine Learning ​ ) 2 ​ 6
fig 18. Statisticile librăriei Tensorflow de pe github 2 ​ 6
fig 19. Graful computa ț ional pentru modelul cu nivele de celule LSTM creat cu ajutorul
Tensorboard 2 ​ 7
fig 20. Nivele suprapuse de celule ale re ț elei recurente 2 ​ 8
fig 21. Re ț ele recurente Bid irec ț ionale 2 ​ 8
fig 22. Arhitectura re ț elei n euronale cu MDLSTM ș i convolu ț ii 2 ​ 9
fig 23. ​ Rata de clasificare gre ș ită ​ pentru antrenare set utilizând nivele de Celule LSTM 3 ​ 0
3

fig 24. ​ Rata de clasificare gre ș ită ​ pentru testare set utilizând Multidimentional Lstm 3 ​ 0
fig 25. Rezultate ob ț inute p e setul de imagini IAM 3 ​ 0
fig 26. Exemple preziceri text 3 ​ 1
fig 27. Detectarea tabelului 3 ​ 2
fig 28. Detectarea liniilor 3 ​ 3
fig 29. Clasificarea celulelor 34
fig 30. Crearea imaginilor cu zgomot (noise ​ ) 35
fig 31. Schema algoritmului genetic 3 ​ 6
fig 32. Ilustrare re ț elei conv olu ț ioale 37
fig 33. Eliminarea neuronilor folosind Dropout 3 ​ 7
fig 34. Statistici Drupal 3 ​ 8

4

Capitolul 1

Introducere

Deep learning este un domeniu de cercetare devenit popular recent. Re ț elele neuronale au
fost create în secolul 20, însă nu au fost folosite din cauza gradientului exploziv ș i resurselor
tehnologice limitate. Acum re ț ele neuronale dau cele mai bune rezultate la multe sarcini din
inteligentă artificială ca detec ț ia unui obiect, procesarea limbajului natural, clasificarea imaginilor.
Recunoașterea scrisului de mâna este o sarcina destul de grea. Cercetătorii vin cu mai multe
abordări ai acestei probleme, diferite metode de procesarea imaginii încercând să elimine zgomotul
format de umbre, linii sau pete de pe pagina pe care s-a scris, înclinarea unui cuvânt sau a unui
întreg ș ir de cuvinte. A doua abordare este folosirea unor metode din domenii diferite ca
recunoa ș terea vocii.
În momentul de fa ț ă există o mul ț ime de informa ț ie în forma scrisă, de asemenea dispunem
de o mul ț ime de tehnologii care ne permit sa extragem informa ț ie utilă din datele care sunt în formă
digitală, căutarea unui cuvânt, documente cu con ț inut asemănător, crearea unui rezumat, găsirea
cuvintelor cheie. Odată cu dezvoltarea unei tehnologii pentru a transforma scrisul de mâna în format
digital, vom avea accesul la o mul ț ime de posibilită ț i, îmbunătă ț ind modul ș i timpul de lucru al
multor companii ș i institu ț ii. De exemplu, într-o ș coală unde notele se scriu în catalog, având o
aplica ț ie care transformă o imagine a unui tabel într-un tabel digital, o mul ț ime de opera ț ii se pot
realiza pentru a crea diverse statistici utile pentru elevi, părin ț i ș i profesori.
Lucrarea este organizată în 4 capitole. Primul capitol este o introducere în problema
recunoa ș terii scrisului, se descrie setul de date folosit pentru experimente, no ț iuni generale întâlnite
atunci când se aplică re ț elele neuronale. Al doilea capitol se axează pe metodele folosite pentru a
recunoa ș te scrisul de mâna ș i care sunt problemele cu care se confruntă. Al treilea capitol este o
descriere a algoritmilor care au fost folosi ț i pentru a procesa setul se date, diferite tipuri de re ț ele
neuronale care vor fi folosite pentru a crea modele de recunoa ș tere a scrisului de mână, cât ș i
metodele folosite pentru a detecta un tabel ș i liniile lui dintr-o imagine. De asemenea în acest
capitol se descriu mai multe arhitecturi ale re ț elelor neuronale care combinate dau rezultate bune la
recunoa ș terea scrisului de mâna. Al patrulea capitol con ț ine aplica ț iile care au fost create utilizând
diferite tipuri de re ț ele neuronale. Prima aplica ț ie este recunoa ș terea scrisului de mâna având ca
date de intrare o imagine cu unul, doua sau trei cuvinte în limba engleza. A doua aplica ț ie reprezintă
un web site unde utilizatorul poate încărca o imagine cu un tabel, apoi se detectează celulele
tabelului pentru a fi clasificate în 13 categorii.
5

1.1 Setul de imagini

Ca imagini pentru testarea ș i antrenarea modelelor am folosit setul de imagini AIM, care
con ț ine text în limba englez a, scris pe o tablă albă, scanat cu rezolu ț ia 300 ​ dpi ș i salvat ca imagine
jpg cu 256 niveluri de gri.
În continuare prezentăm statistici referitoare la setul de imagini AIM 3.0:
– 657 persoane
– 1539 pagini scanate
– 5685 propozi ț ii
– 13353 linii de text
– 115320 cuvinte

fig 1. Exemple de imagini din setul de imagini IAM

6

Capitolul 2

Starea actuală a domeniului

Starea actuală a domeniului în problema recunoa ș terii scrisului se schimbă rapid din cauza
actualită ț ii ei, dar ș i din cauza inova ț iilor din domeniul Deep Learning. Ini ț ial imaginile cu scrisul
de mâna erau abordate cu ajutorul segmentării imaginii în ferestre mai mici pentru a con ț ine o literă,
apoi se făcea o clasificare a fiecărei ferestre. Această abordare era destul de greu de realizat din
cauza că fiecare fereastră trebuia să aibă o etichetă, care se atribuia manual. În dependen ț ă de
dimensiunea ferestrei ș i suprapunerea aleasă între două ferestre adiacente, numărul de ferestre putea
să fie destul de mare. De asemenea pentru atribuirea unui ș ir de caractere pentru un ș ir de ferestre se
folosea Hidden Markov Models. Aceste modele foloseau probabilită ț i de trecere dintr-o stare care
reprezintă un caracter în alta combinate cu probabilită ț ile de a observa un caracter la pasul curent.
Aceste modele au fost ​ surclasate ca performan ț ă de către re ț ele recurente împreună cu clasificarea
temporală continuă introdusă în anul 2006 de către Alex Graves et all ​ [1] ​ . În privin ț a extragerii
caracteristicilor dintr-o fereastră se foloseau diferite metode de ortogonalizare care presupunea
găsirea vectorilor ca bază a subspa ț iului în care se află vectorul corespunzător ferestrei, ce de ț in cea
mai multă informa ț ie neces ară pentru a reconstrui acel vector utilizând cât mai pu ț ini vectori ai
bazei. Ca alternativă la ace ș ti algoritmi s-a introdus re ț elele convolu ț ionale, care folosesc filtre
pentru a extrage caracteristicile necesare dintr-o imagine. Această abordare a fost adoptată datorită
faptului că într-o imagine un pixel este dependent de pixelii vecini. Din această cauză re ț ele
convolu ț ionale au avut un fo arte mare succes în vederea artificială (computer vision).
Aici vom compara PCA ​ (Principal Component Analysis) cu un ​ autoencoder convolu ț ional.
Autoencoderul este o re ț ea neuronală formată din mai multe nivele convolu ț ionale sau complet
conectate. După fiecare nivel convolu ț ional se împarte imaginea ob ț inută în blocuri ș i se extrage
maximul, astfel se reduce dimensiunea imaginii ini ț iale însa se păstrează caracteristicile ei. Această
opera ț ie se nume ș te ​ maxpool ​ . Pentru a păstra informa ț ia relevantă se folose ș te o func ț ie de activare
care se nume ș te ​ ReLU ​ . Acea stă func ț ie setează toate valorile negati ve la zero. Men ț ionăm faptul că
valorile negative nu sunt folositoare, deoarece ele semnifică că în regiunea dată filtrul care s-a
aplicat nu se potrive ș te. ​ Decoderul este format din 2 nivele ​ deconvolu ț ionale care folosesc
transpusa filtrului folosit la convolu ț ie pentru a reconstrui valorile care au fost folosite atunci când
s-a făcut convolu ț ia, adică folosind opera ț ia inversă convolu ț iei. Iar pentru a readuce dimensiunea
ini ț ială a imaginii se folose ș te ​ uppooling care setează valoarea unui pixel al unei imagini la pozi ț ia
de unde a fost luată atunci când s-a făcut ​ maxpooling ​ , iar valorile care lipsesc se setează la valoarea
maximă dintre vecini sau devin media aritmetica a vecinilor nenuli.
Astfel un ​ autoencoder înva ț ă o reprezentare a imaginilor într-un spa ț iu mai mic, apoi
reconstruie ș te imaginea, antrenându-se astfel ca eroarea dintre imaginea ini ț ială ș i imaginea
7

reconstruită sa fie cât mai mică. De asemenea ​ autoencoderul se folose ș te ș i la eliminarea
perturba ț iilor dintr-o imagin e. Pentru a face acest lucru se folose ș te ca date de intrare o imagine la
care se adaugă zgomot (noise), iar după reconstruc ț ie se calculează eroarea dintre imaginea
reconstruită ș i imaginea ini ț iala fără zgomot.

fig 2. Autoencoderul înva ț ă o reprezentare a imaginii într-un subspa ț iu mai mic, apoi o reconstruie ș te ( ​ sursa ​ ) 1
S-a observat ca imaginile reduse la 10 numere de către ​ autoencoder ​ pot reproduce imaginea ini ț ială
mai bine decât un PCA cu 50 de componente. De asemenea dacă reducem componentele la 2 ș i
facem un grafic cu clasele, vom observa o reprezentare mai bună a claselor cu ​ autoencoder ​ decât cu
PCA.
Fig 3. O comparare dintre un Autoencoder ș i PCA ( ​ sursa ​ ) 2

__________________________________________________________________________
– ​ http://www.inference.vc/stereovision-autoencoder/ 1
– ​ http://nikhilbuduma.com/2015/03/10/the-curse-of-dimensionality 2

8

2.2 Re ț ele recurente ș i problemele la backpropagation

S-a constatat că clasificarea ferestrelor imaginilor nu este eficientă din cauza că o singură
formă poate fi caractere diferite în dependen ț ă de context. Deci este nevoie de un algoritm care să
re ț ină informa ț ia de la pa ș ii anteriori pentru a clasifica astfel de forme. Încă din anii 1990 a fost
cunoscută arhitectura re ț elei neuronale recurente care dispunea de o memorie a celulei care se
transmitea de la procesarea unui vector dintr-un ș ir de vectori la următorul. Re ț eaua se nume ș te
recurentă din cauza că rezultatul de la pasul curent devine data de intrare pentru pasul viitor
împreună cu caracteristicile ferestrei de la pasul viitor. De asemenea variabilele care se folosesc
pentru calcularea stării interne a celulei cât ș i rezultatului la fiecare pas sunt la fel. Deci celula
recurentă trebuie sa fie capabilă sa proceseze un ș ir de vectori de caracteristici ș i sa producă un ș ir
de vectori de probabilită ț i ca la pasul ​ t ​ sa observăm un caracter ca rezultat.
Există mai multe probleme care au cauzat ca re ț ele recurente să fie aproape abandonate până
în anii 2000. Prima problema a fost lipsa resurselor computa ț ionale. Pentru a antrena o re ț ea
neuronala cu câteva mii de parametri este nevoie de un GPU. A doua problemă a fost gradientul
care devenea foarte mic sau foarte mare atunci când se deriva func ț ia obiectiv în raport cu
variabilele re ț elei neuronale.

fig 4. Backpropagation, propagarea erorii ( ​ sursa ​ ).

________________________________________________________________________________________________
( ​ sursa ​ )-http://www.wildml.com/2015/10/recurrent-neural-networks-tutorial-part-3-backpropagation-through-ti
me-and-vanishing-gradients/

9

Capitolul 3

Solu ț ia prop usă

Pentru recunoa ș terea scrisului de mâna am experimentat construind mai multe modele de
re ț ele neuronale utilizând diferite metode de preprocesare a setului de date. Modelele create con ț in
nivele de neuroni conecta ț i total, nivele convolu ț ionale, dropout, celule recurente de tipul Long
Short Term Memory cât ș i Multi-Dimentional LSTM. Pentru a găsi numărul optim de nivele
neuronale cât ș i numărul de neuroni pentru a extrage caracteristicile dintr-o imagine am folosit un
algoritm genetic care folosea ca individ o arhitectura a unui model, iar genele erau parametrii unui
nivel neuronal. Algoritmii genetici se foloseau doar atunci când se putea găsi în timp util o
convergentă mai bună a modelului, din cauza că la seturi de date mai mari timpul de antrenare este
de câteva ore, iar algoritmul genetic ar fi trebuit sa ruleze câteva săptămâni sau chiar luni pentru a
verifica câteva genera ț ii.

3.1 Preprocesare

Pentru fiecare imagine din setul IAM există un fi ș ier xml care descrie dreptunghiul în care
se afla fiecare cuvânt din imagine. Dreptunghiul este descris cu ajutorul pozi ț iei col ț ului stânga-sus,
lungimea ș i lă ț imea lui. Utilizând informa ț ia din fi ș ierele xml se extrag linii cu cuvinte de lungimea
de maxim 100 pixeli ș i înăl ț imea de 40 pixeli. Fiecare imagine pentru antrenare ș i testare este
formată din unul sau două cuvinte, centrate pe verticală, se adaugă linii ș i coloane pentru ca
imaginile sa fie de dimensiuni egale. Pixelii imaginii se normalizează pentru a fi între 0 ș i 1.

3.1.1 Normalizare cu momen ț i

Aplicăm binarizare Otso ​ [2] asupra imaginilor, pixelii din fundal (background) fiind seta ț i la
0 ș i pixelii textului devin 1. Binarizarea Otso găse ș te o valoare pentru a delimita pixelii obiectului ș i
pixelii din fundal minimizând varian ț a dintre pixelii obiectului ș i pixelii din fundal.

unde este probabilitatea pixelilor obiectului iar este probabilitatea pixelilor din fundal.
Iar ș i sunt varian ț a celor doua clase, pentru un prag (threshold) ​ t ​ . ( t ) σ 2
0 ( t ) σ 2
1
10

Pentru a ob ț ine informa ț ie referitoare la pozi ț ia textului în imagine ne vom folosi de
momen ț ii geometrici ș i centrali ai imaginii.
Momen ț ii geometrici ai imag inii sunt:

Putem calcula coordonatele centrului formei din imagine cu ajutorul momen ț ilor: ș i x = m 0 0 m 1 0
. y = m 0 0 m 1 0
Iar momen ț ii centrali ai imag inii sunt:

Momen ț ii ne dau informa ț ie importantă referitoare la densitatea ș i structura textului:
● – este masa obiectului din imagine m 0 0
● ș i reprezin tă centrul formei din imagine m 0 1 m 1 0
● ș i μ 0 0 = 1 μ 0 1 = μ 1 0 = 0
Astfel cu ajutorul momen ț ilor putem translata obiectul din imagine, astfel încât scrisul să fie în
centrul imaginii. De asemenea imaginea poate fi rotită ș i redimensionată astfel încât informa ț ia
importantă din imagine să nu fie deteriorată. Pentru ecua ț iile de translatare ș i redimensionare se
poate consulta ​ [3] ​ .

3.1.2 Corectarea înclinării

Pentru fiecare linie se îndreaptă scrisul în cazul în care este înclinat după procedeul descris
aici ​ [4] ​ , ​ [5] ​ . Pentru unghiurile între -45° ș i 45°, cu pasul 3°, se rote ș te imaginea cu unghiul
respectiv. Se calculează numărul de pixeli ce apar ț in scrisului de mâna pe o coloană, linia primului
ș i ultimului pixel din coloan a respectivă ce apar ț ine scrisului de mâna. Se împarte numărul de pixeli
ai obiectului la distan ț a dintre primul ș i ultimul pixel din coloană . Dacă valoarea ob ț inută e mai
mare ca 0.9 atunci acea coloană devine coloană plină. Se alege unghiul de rotire pentru care
numărul de coloane pline e maxim. Ini ț ial se calculează următoarea histogramă pentru coloanele
imaginii rotite:
( m ) H α = h ( m ) α
Δ y ( m ) α
unde este densitatea verticală pe coloana ​ m ș i este distan ț a dintre cel mai de sus ș i ( m ) h a y ( m ) Δ a
cel mai de jos pixel din aceea ș i coloană. Dacă coloana ​ m ​ con ț ine o linie continuă , ( m ) = . 9 H a > 0
altfel . Pentru fiecare unghi se calculează următoarea func ț ie: ( m ) ∈ [ 0 , . 9 ) H a 0
( a ) ( i ) S = ∑
i : H ( i ) = > 0 . 9 a h a 2

unghiul ​ a ​ pentru care ​ S(a) ​ este cel mai mare se alege ca unghi de înclinare pentru imagine.
11

fig 5. Exemplu de imagine cu înclinarea corectată
Această corectare a înclinării este importantă din cauza că o fereastră ar trebui să con ț ină cel
pu ț in un caracter, însa în caz ul când scrisul este înclinat un singur caracter poate face parte din mai
multe ferestre.

3.1.3 Segmentarea imaginii ș i transformarea cosinus

Fiecare imagine se mătură/parcurge cu o fereastră de lă ț imea 12 pixeli ș i cu înăl ț imea
imaginii ini ț iale, cu pasul de 3 pixeli pentru a forma un ș ir de ferestre care se suprapun. Pentru a
eviden ț ia informa ț ia care este în centrul ferestrei se aplică o transf ormare cosinus, care reprezintă
înmul ț irea fiecărei linii a ferestrei cu un vector care are valorile de la extremită ț i aproape de 0 ș i
valorile din centru aproape de 1. Astfel în ferestrele ob ț inute se vor con ț ine caracteristici referitoare
la caracterul din centru, cât ș i informa ț ie referitoare la unele păr ț i ale caracterelor vecine.

12

fig 6. Aplicarea transformării cosinus asupra ferestrelor

Această transformare este foarte importantă pentru a eviden ț ia o parte din fereastră ș i pentru
a nu clasifica de mai multe ori acela ș i caracter, de asemenea o singură fereastră con ț ine informa ț ie
referitoare ș i la vecinii săi.

3.2 Re ț ele neuronale con volu ț ionale

Re ț ele neuronale convolu ț ionale folosesc filtre cu care imaginea care trebuie procesată se
filtrează. Notăm numărul de canale ale imaginii ini ț iale cu , fie numărul de filtre aplicate , iar c i c o
imaginea care se ob ț ine după aplicarea acestei convolu ț ii are numărul de canale . c o
Filtrarea unei imagini ​ f ​ cu un filtru ​ g ​ este reprezentată de:

( i , , ) ( i , , ) ∗ g ( p , , ) I n e w j t = ∑
i ∑
j ∑
k ∑
p ∑
q ∑
t f j k q t

13

fig 7. Calcularea unei valori din imaginea filtrată ( ​ sursa ​ ) 1

După aplicarea convolu ț iei se aplică un ​ maxpool ​ . Se formează regiuni de înăl ț imea ​ h ș i
lă ț imea ​ l ​ , ș i se alege maximul din fiecare regiune ob ț inându-se o imagine mai mică. Pentru
imaginea ob ț inută se aplic ă o func ț ie de activare ​ ReLU care atribuie valoarea zero tuturor
variabilelor care sunt mai mici ca zero.

fig 8. Re ț ele convolu ț ionale ( ​ sursa ​ ) 2

Acest tip de re ț ea neuronala a devenit o inova ț ie extraordinară, îmbunătă ț ind semnificativ
performan ț a de clasificare a imaginilor. În acest moment cele mai bune clasificatoare ca Inception,
________________________________________________________________________________________________
http://brohrer.github.io/how_convolutional_neural_networks_work.html 1

https://github.com/Hvass-Labs/TensorFlow-Tutorials/blob/master/02_Convolutional_Neural_Network.ipynb 2

14

ResNet folosesc re ț ele conv olu ț ionale. De asemenea numărul variab ilelor din re ț eaua neuronală s-a
redus semnificativ, din cauza că într-o re ț ea convolu ț ională se înva ț ă doar filtrele cu care se face
convolu ț ia, nu ș i o matrice de legături ca la nivelele neuronale conectate total, ceea ce a făcut ca
modele convolu ț ionale sa se antreneze mai rapid. Acum este posibil de antrenat o re ț ea neuronala
convolu ț ională pentru a recunoa ș te imagini 28×28 cu cifre de la 0 la 9 scrise de mâna din setul de
imagini MNIST în doar câteva minute. De men ț ionat faptul că odată cu mărirea rezolu ț iei imaginei
numărul de variabile din cadrul re ț elei convolu ț ionale nu cre ș te din cauza că fiecare pixel nu este
considerat un neuron ca în cazul re ț elelor conectate total. Re ț elele convolu ț ionale formează
următorul nivel neuronal procesând informa ț ia doar de la vecinii unui pixel, în contrast cu re ț elele
conectate total care folosesc to ț i neuronii de la nivelul anterior.
3.3 Re ț ele neuronale rec urente

Pentru a putea procesa un ș ir de vectori de caracteristici ș i pentru a ob ț ine ca rezultat alt ș ir
de vectori de clasificări trebuie să folosim re ț ele neuronale recurente. Re ț ele recurente reprezintă o
re ț ea de neuroni care comb ină datele de intrare de la pasul t ș i ​ rezultatul de la pasul t-1 ​ pentru a
ob ț ine rezultatul la pasul t ​ . Astfel de arhitecturi sunt eficiente pentru a memora dependen ț ele de
scurtă durată însă atunci când se propagă gradientul la antrenare, el poate deveni foarte mic sau
foarte mare.

fig 9. Reprezentarea unei re ț ele recurente simple ( ​ sursa ​ )

Stările interne ​ s ș i rezultatul ​ o se calculează având ca date de intrare ș irul de vectori ​ x ​ . Matricele ​ V,
W ​ ș i ​ U ​ sunt variabilele ce vo r fi învă ț ate atunci când se va face ​ backpropagation ​ .

________________________________________________________________________________________________
( ​ sursa ​ ) – http://www.wildml.com/2015/09/recurrent-neural-networks-tutorial-part-1-introduction-to-rnns/
15

Pentru a calcula rezultatul re ț elei recurente la pasul curent s-a folosit func ț ia ​ softmax pentru a emite
un vector de probabilită ț i care la adunare dau aproximativ 1.

3.3.1 Long Short Term Memory

Pentru ca re ț eaua neuronală recurentă să poată re ț ine informa ț ia de lungă durată s-a introdus
un tip nou de arhitectură pentru re ț elele recurente, care utilizează conceptul de poartă (gate) pentru a
ș terge din memorie sau re ț ine informa ț ia din pa ș ii preceden ț i.
fig 10. LSTM ( ​ sursa ​ )

Por ț ile au ca func ț ie de activare – func ț ia sigmoid, astfel valorile por ț ilor sunt 0 sau 1, deci
celula înva ț ă să manipulez e informa ț ia din memorie utilizând informa ț ia învă ț ată din pa ș ii
preceden ț i ș i datele de intrare de la pasul curent . h t − 1 x t
Această inova ț ie a făcut posibilă rezolvarea problemei gradientului care explodează/dispare.
Gradientul nu este propagat până la începutul ș irului de vectori de caracteristici, ci până la un pas t
unde por ț ile celulei sunt zero .

3.3.2 Multi-Dimentional LSTM

Re ț ele recurente prim esc ca date de intrare un ș ir de vectori, însă imaginile sunt formate din
blocuri care sunt dependente de vecinii din planul 2d. Pentru a putea procesa o imagine s-a creat o
generalizare a re ț elei neuron ale recurente pentru a putea procesa tensorii multidimensionali. Această
idee a fost discutată de către Alex Graves în anul 2012 ​ [6] ​ . Pentru a procesa un tensor 2d, se
împarte imaginea în blocuri de dimensiunea 2×2. Iar atunci când se procesează un bloc se folose ș te
rezultatul celulelor care au procesat celula vecină pe verticală ș i orizontală.
________________________________________________________________________________________________
( ​ sursa ​ ) – http://colah.github.io/posts/2015-08-Understanding-LSTMs

16

fig 11. Reprezentarea unei re ț ele recurente care procesează un tensor 2d ( ​ sursa ​ )

Pentru a calcula starea internă a unei celule se folose ș te stările interne ale vecinilor de pe
verticală ș i orizontală:

unde ​ x reprezintă date de intrare, ​ h ș i ​ q sunt stările interne ș i rezultatul de la pozi ț ia i,j. Cu se ± 1
notează vecinii verticali ș i orizontali.
3.4 Conectarea temporală continuă

O problemă în recunoa ș terea scrisului de mâna este că atunci când se face segmentarea unei
imagini în bucă ț i mai mici, pentru fiecare segment trebuie să i se atribuie o etichetă manual, lucrul
care era foarte greu pentru seturi de date foarte mari.
Pentru a clasifica întreaga imagine adaugăm o etichetă nouă vocabularului nostru, eticheta
că nu există nici un caracter ( ​ blank) la pasul ​ t ​ . Astfel este posibil de antrenat un model pentru a
clasifica o imagine fără a avea o etichetă pentru fiecare segment, ci având textul corect pentru
întreaga imagine.
Rezultatul ob ț inut de la re ț eaua recurentă LSTM este un vector de probabilită ț i ca la pasul ​ t
să observăm caracterul i ​ , . Probabilită ț ile se calculează ∈ [ 0 , u m a r u l d e c a r a c t e r e l a n k ] i n + b
utilizând o func ț ie de activa re ​ softmax având ca rezultat probabilită ț i care se adună la 1 ș i sunt în
intervalul dintre 0 ș i 1.
y t
k = e a t
k

k ′ e k ′ a t
k ′
unde este rezultatul dat de LSTM la pasul ​ t al elementului cu id ​ k ​ , ș i este probabilitatea ca la a t
k y t
k
pasul t sa observăm caracterul cu id ​ k ​ . Rezultatul ob ț inut este folosit pentru a estima probabilitatea
condi ț ională de a observa un caracter ​ k ​ la timpul ​ t ​ având ca date de intrare ș irul ​ x ​ :

. ( k , | x ) y t
k = p t
probabilitatea condi ț ională p( |x) de a observa ș irul este calculat prin înmul ț irea tuturor π π
caracterelor ș i ​ blank ​ la fiecar e pas:

________________________________________________________________________________
(sursa)-https://www.semanticscholar.org/paper/Offline-Handwriting-Recognition-with-Multidimensio-Graves-Sc
hmidhuber/30c8974b8d21764775614f2f425ccc4113a89e11
17

( π | x ) ( π , | x ) p = ∏ T
t = 1 p t t = ∏ T
t = 1 y t
π t
unde este eticheta observată la timpul ​ t ​ în ș irul . π t π

fig 12. Drumurile posibile pentru a forma cuvântul ‘CAT’ ( ​ sursa ​ ) π

Ș irul este mapat la text prin operatorul B care ș terge caracterele care se repeta apoi eticheta
blank. Ca exemplu ​ B ​ (a,-,a,b,-) ș i ​ B ​ (-,a,a,-,-,a,b,b) for avea ca rezultat ș irul (a,a,b). Probabilitatea de
a observa un ș ir de etichete se calculează ca suma tuturor ș irurile posibile care au ca rezultat ș irul
propus.

Aceasta metodă permite re ț elei neuronale sa fie antrenată fără ca imaginile segmentate să fie
clasificate manual.

3.4.1 Algoritmul CTC forward backward

Pentru a permite existen ț a etichetei ​ blank în ș irul prezis, formăm un ș ir de etichete modificat
l ​ ’, cu etichete ​ blank adăugate la începutul, sfâr ș itul ș i între fiecare doua caractere. Lungimea ș irului
l’ este ​ 2*|l|+1 ​ . Pentru un ș ir de etichete ​ l ​ , definim variabila forward ca suma probabilită ț ilor a t
s
tuturor ș irurilor de lungime ​ t ​ care sunt mapate de ​ B ​ în prefixe de lungimea ​ s/2 ​ ale lui ​ l ​ , exemplu:
α t s = ∑
π : B ( π ) = l 1 : t ′ 1 : s
2 ∏ t
t = 1 ′ y t ′
π

unde pentru un ș ir ​ s ​ , este un sub ș ir ( ), ș i ​ s/2 este rotunjit prin lipsa la o s a : b , , . . , , s a s a + 1 . s b − 1 s b
valoare întreagă. Valoarea poate fi calculata recursiv. a t
s
Fiind posibil ca ș irurile să în ceapă cu ​ blank ​ sau primul caracter , ob ț inem valorile ini ț iale: l 1
. α . α , s α 1
1 = y 1
b 1
2 = y 1
l 1 s 1 = 0 ∀ > 2
________________________________________________________________________________
(sursa) – http://wantee.github.io/2015/02/08/rnnlib-connectionist-temporal-classification-and-transcription-layer/
18

ș i recursivitatea:

Evident , din cauza că aceste variabile corespund unor stări
pentru care nu există destul timp pentru a completa ș irul.
Variabila backward este definită ca suma probabilită ț ilor tuturor ș irurilor a căror sufixe ce se β t
s
încep cu ​ t ​ sunt mapate la sufixul lui ​ l’ ​ începând cu ​ s/2 ​ .
β t
s = ∑
π : B ( π ) = l t : T ′ : | l | s
2 ′ ∏ T
t = t ′ y t ′
π t ′

regulile de ini ț ializare sunt u rmătoarele:
; β ; , s l | − 1 β T
| l | ′ = 1 T
| l | − 1 ′ = 1 = 0 ∀ < | ′
cu recursivitatea:

la fel din cauza că corespund unor stări care nu pot fi terminate. , ∀ s t β t
s = 0 > 2
În cele din urmă probabilitatea observării unui ș ir este suma produselor dintre variabilele
forward ș i backward:
(1) ( l | x ) β p = ∑ | l | ′
s = 1 α t
s t
s

3.4.2 CTC func ț ia obiect iv

Func ț ia pe care o vom deriva pentru a modifica variabilele din re ț eaua neuronală se
define ș te ca logaritmul nega tiv al probabilită ț ii de a prezice corect ș irul de caractere pentru întreg
setul de imagini de antrenare (training). Fie S mul ț imea de antrenare, ce con ț ine perechi de tipul
imagini ș i text (x,z). Atunci definim func ț ia obiectiv O:
​ (2) n p ( z | x ) O = − ∑
( x , z ) ∈ S l

Re ț eaua poate fi antrenată cu o metodă de tipul gradientului descent, pentru început derivând
func ț ia O în raport cu rezult atul re ț elei apoi folosind ​ backpropagatio n ​ [7] pentru a găsi derivatele în
raport cu variabilele re ț elei n euronale.
Un caracter poate apărea mai multe ori într-un ș ir, deci definim o mul ț ime de pozi ț ii unde caracterul
k apare ca ​ lab ​ ( ​ l,k ​ ) = { ​ s | = ​ k ​ }, care poate fi o mul ț ime vidă. Apoi setam ​ l=z ș i derivam (1) în l ′ s
raport cu rezultatul re ț elei pe ntru a ob ț ine:
19

β ∂ y t
k ∂ p ( z | x ) = 1
y t
k ∑
s ∈ l a b ( z , k ) α t s t
s

înlocuind în (2):
β ∂ O
∂ y t
k = − 1
p ( z | x ) y t
k ∑
s ∈ l a b ( z , k ) α t s t
s

pentru a folosi ​ backpropagation avem nevoie de derivata func ț iei obiectiv în raport cu rezultatul
re ț elei înainte ca func ț ia de activare sa fie aplic ată. Pentru func ț ia ​ softmax ​ avem: α t
k
, δ − y y ∂ α t
k ∂ y t
k ′ = y t
k ′ k k ′ t
k ′ t
k
ș i mai departe:
− β ∂ O
∂ a t
k = y t
k 1
p ( z | x ) ∑
s ∈ l a b ( z , k ) α t
s t
s

Pentru a antrena modelul găsim prezicerile re ț elei neuronale, calculăm eroarea prezicerilor
în raport cu textul corect, apoi derivăm func ț ia obiectiv în raport cu variabilele re ț elei neuronale
recurente ș i convolu ț ionale. După ce am găsit cât de mult fiecare variabilă influen ț ează eroarea,
actualizăm variabilele în direc ț ia negativă a gradientului. Cât de mult ne ducem în această direc ț ie
setăm cu ajutorul variabilei care se nume ș te rata de învă ț are. Dacă rata de învă ț are este foarte mică
atunci modelul va converge greu, dacă este mare atunci modelul poate sări peste optimul global.

fig 13. Reprezentare grafică cum gradient descent se duce în direc ț ia minimului func ț iei ( ​ sursa ​ )
________________________________________________________________________________
(sursa) – http://brohrer.github.io/how_convolutional_neural_networks_work.html
20

3.4.3 Adam Optimizer

Gradient descent este unul dintre cele mai importante inova ț ii care au permis re ț elelor
neuronale să devină unul dintre cele mai buni estimatori universali de func ț ii. O varia ț ie a acestei
metode care se descurca excelent cu re ț ele neuronale recurente este Adam (Adapt momentum
estimation) Optimizer ​ [8] ​ . Această metodă calculează momentul gradientului pentru fiecare
parametru ș i atunci când se actualizează o variabilă se ț ine cont de direc ț ia în care gradientul era
orientat la itera ț iile anterioar e, apoi actualizăm momentul gradientului luând în considera ț ie direc ț ia
curentă a gradientului pentru variabila curenta.

fig 14. Valoarea func ț iei obiectiv(eroare de clasificare) pentru setul de imagini MNIST cu diferite tipuri
de gradient descent ( ​ sursa ​ )

________________________________________________________________________________
(sursa) – https://arxiv.org/abs/1412.6980

21

3.4.4 Decodarea
Decodarea unei re ț ele CTC (găsirea celui mai probabil ș ir ​ y având ca date de intrare ș irul ​ x ​ )
este realizată prin găsirea celui mai probabil caracter la fiecare pas în timp:

Pentru o acurate ț e mai mare la clasificarea unui ș ir de caractere vom folosi ​ beam search care poate
fi integrat cu un model lingvistic.
Definim , , ca probabilitatea etichetei ​ blank ​ după prefixul ​ y la timpul ​ t ​ , ( y , ) P r − t ( y , ) P r + t r ( y , ) P t
probabilitatea prefixului y ​ urmată de un caracter la pasul ​ t ș i probabilitatea totală a unui prefix ​ y la
timpul ​ t ​ , cu . ( y , ) ( y , ) P r ( y , ) t = P r + t + P r − t
Definim probabilitatea de mărire a prefixului ​ y ​ cu un caracter ​ k ​ la pasul ​ t ​ :

unde ​ Pr(k,t|x) este probabilitatea observării caracterului ​ k ob ț inută de la re ț eaua neuronală la timpul
t ​ , p(k,y) este probabilitatea tranzi ț iei de la prefixul ​ y la prefixul ​ y+k ș i este ultimul caracter din
prefixul ​ y ​ . Definim ca prefix al ș irului de caractere ​ y cu ultimul caracter ș ters ș i este ș irul fără y ¬ ∅
nici un caracter. Evident ( ∅ , ) , t . P r + t = 0 ∀
Probabilitatea de tranzi ț ie ​ p(k,y) reprezintă informa ț ia ob ț inută dintr-un model lingvistic. În CTC
standard ​ p(k,y) este 1. Putem folosi un dic ț ionar setând ​ p(k,y) = 1 dacă prefixul ( ​ y+k ​ ) este un cuvânt
din dic ț ionar ș i 0 altfel.

Algoritmul CTC Beam search
Ini ț ializăm ​ : ⇐ [ ] , ( ∅ , ) ⇐ 1 B P r − 0
for ​ t = 1..T ​ do
b = cele mai probabile W ș iruri din B
B = {}
​ for ​ y in b ​ do
​ if ​ y != ​ then ∅
( y , ) ⇐ P r ( y , − 1 ) P r ( y , | x ) P r + t + t e t
​ if ​ ​ then y ∈ b ¬
( y , ) ⇐ P r ( y , ) r ( y , y , ) P r + t + t + P e ¬ t
( y , ) ⇐ P r ( y , − 1 ) P r ( − , | x ) P r − t + t t
​ add ​ y to B
​ for ​ k=1..K ​ do
( y , ) ⇐ 0 P r − + k t
( y , ) ⇐ P r ( k , , ) P r + + k t y t
add (y+k) to B
return ​ P r ( y , ) m a x y ∈ B 1
| y | T

22

fig 15. Ș irul de vectori de probabilită ț i emi ș i de re ț eaua recurentă pentru o imagine cu cuvântul ‘would’

3.4.5 Model lingvistic

Modelul lingvistic este o parte foarte importantă a modelului de recunoa ș tere a scrisului de
mână din cauza că atunci când re ț eaua neuronală se antrenează să recunoască textul, nu ș tie toate
combina ț iile de litere posibil e, de aceea modelul lingvistic va combina probabilită ț ile de observare a
unui caracter cu probabilită ț ile de tranzi ț ie dintr-o mul ț ime de caractere în alta.
Cel mai simplu model lingvistic este folosirea unui dic ț ionar, atunci când un ș ir de cuvinte
formează un cuvânt care există în dic ț ionar atunci probabilitatea acestei mul ț imi este unu, iar în
celelalte cazuri probabilitatea este zero. Acest model lingvistic eviden ț iază corectitudinea predic ț iei
ca ș irul de caractere să con ț ină cuvinte corect scrise, însă nu are o influen ț ă asupra corectitudinii
cuvintelor în context, adică nu există o probabilitate ca un cuvânt să urmeze după alt cuvânt.
Pentru a calcula rapid dacă un cuvânt se află sau nu în dic ț ionar, am modelat dic ț ionarul ca o
trie. O trie este o structură de date având forma unui arbore, fiecare muchie din arbore reprezintă un
caracter. Atunci când un cuvânt se termina într-un nod, se atribuie nodului valoarea 1.
Complexitatea căutării unui cuvânt în trie este liniară: O(numărul de caractere în cuvântul căutat) în
compara ț ie cu complexitate a căutării simple O(numărul de cuvinte din dic ț ionar * numărul de
caractere în cuvântul căutat).
Modelele n-gram reprezintă modele care calculează probabilitatea ca un caracter să apară
după n caractere. Această metoda a apărut ca o alternativă pentru a calcula probabilitatea ca un
caracter să apară după un ș ir de caractere, dacă ș irul de caractere este de lungime mare, această
probabilitate este dificil de calculat. Din această cauză probabilitatea se aproximează cu folosirea
23

ultimelor ​ n ​ caractere din ș ir.

fig 16. Reprezentarea posibilită ț ilor de calculare a probabilită ț ilor în modelele n-gram ( ​ sursa ​ )

Pentru a salva probabilită ț ile am folosit un tensor n dimensional, pentru ​ 1-gram ​ – un vector,
pentru ​ bi-gram o matrice, pentru ​ tri-gram un tensor 3-dimensional. Am parcurs fiecare cuvânt din
dic ț ionar ș i am calculat numărul de apari ț ii a grupurilor de 1, 2 ș i 3 caractere. Apoi am folosit
func ț ia ​ softmax ​ pentru a norm aliza probabilită ț ile.
După ce am folosit modelul lingvistic pentru a aproxima probabilită ț ile tranzi ț iilor dintre
caractere, a urmat pasul de sortare a predic ț iilor. Fiecare cuvânt din textul prezis se verifică dacă
apar ț ine unui dic ț ionar format din 5000 cele mai des folosite cuvinte în limba engleză. Dacă
cuvântul nu apar ț ine dic ț ionarului atunci se găse ș te cel mai apropiat cuvânt de cuvântul căutat
având ca criteriu de compara ț ie numărul de schimbări al cuvântului căutat pentru a forma cuvântul
din dic ț ionar. Se alege predi c ț ia cu cele mai pu ț ine editări ș i cele mai multe cuvinte din dic ț ionar ca
solu ț ie.

________________________________________________________________________________
(sursa) – https://www.aclweb.org/anthology/P/P14/P14-1108.xhtml

24

Capitolul 4

Prezentarea aplica ț iilor

Învă ț area automată (Machine learning) este un domeniu relativ tânăr, având un poten ț ial
foarte mare. Ingineria software este foarte evoluată în compara ț ie cu dezvoltarea ș i aplicarea în
practică a modelelor re ț elelor neuronale. Atunci când dorim sa folosim un model în aplica ț ie
întâlnim în general 3 etape. Prima etapă este colectarea datelor, datele de cele mai multe ori se
schimbă cu trecerea timpului, ș i modele trebuie antrenate utilizând date relevante predic ț iilor pe
care va trebui să le facă. De exemplu atunci când prezicem produsele pe care un cumpărător va dori
sa le cumpere bazându-ne pe cumpărăturile ce le-a făcut ș i produsele pe care le-a accesat, trebuie să
ș tim ce produse avem la acest moment în stoc. A doua etapă este antrenarea propriu-zisă a
modelului. Acesta etapă poate fi destul de dificilă, deoarece antrenarea modelelor neuronale poate
cere foarte mari resurse computa ț ionale. Dezvoltatorii re ț elelor neuronale trebuie sa decidă ce tip de
calculatoare vor fi folosite pentru a antrena modelul ș i cum aceste modele vor fi salvate pentru a
putea fi folosite în produc ț ie. Ultima etapa este folosirea modelului în produc ț ie. Atunci când
aplica ț ia trimite o cerere de prezicere, modelul este încărcat ș i datele transmise de aplica ț ie sunt
folosite ca date de intrare pentru re ț eaua neuronală. În dependen ț ă de mediul de rulare al aplica ț iei
ș i mediul de antrenare ș i prezicere al modelului pot interveni diferite probleme: cum se execută mai
multe preziceri de la mai multe cereri, cum se procesează o cerere de prezicere, se a ș teaptă până la
un anumit număr de cereri pentru a rula modelul cu mai multe date pentru a salva timpul de
execu ț ie sau rulăm modelul cu date mai pu ț ine dar mai des. De asemenea pot interveni probleme
atunci când schimbăm modelul de prezicere sau avem mai multe modele ș i dorim diferitor tipuri de
utilizatori sa oferim diferite preziceri.

25

fig 17. Starea actuală a ingineriei învă ț ării automate (Machine Learning) în compara ț ie cu ingineria
software ( ​ sursa ​ ) 1
4.1 Librăria tensorflow
Librăria tensorflow este o platformă pentru dezvoltarea re ț elelor neuronale scrisă în c++, dar
care are frontend ș i în pytho n. Cu această librărie se pot rula programe de antrenare a modelelor în
paralel pe mai multe dispozitive. Componentele de bază ale librăriei Tensorflow sunt variabilele ș i
opera ț iile. Atunci când toate componentele unei opera ț ii sunt accesibile ș i calculate opera ț ia poate fi
apelată. Atunci când se define ș te graful computa ț ional, variabilele care sunt date de intrare pentru
re ț eaua neuronala sunt numite ​ placeholders ș i nu au valoare la momentul definirii grafului
computa ț ional, ci doar ț in locul variabilelor care vor fi setate la executarea programului. Acesta este
un principiu al programării simbolice, mai întâi se define ș te graful computa ț ional, apoi se
compilează ș i se execută. Din această cauză este dificil de identificat erorile atunci când apar, de
asemenea graful computa ț ional nu poate fi schimbat în timpul antrenării fără a folosi tehnici
avansate de organizare a opera ț iilor ș i condi ț iilor. Tensorflow este cea mai populara librărie pentru
învă ț area automată de pe gith ub.

fig 18. Statisticile librăriei Tensorflow de pe github ( ​ sursa ​ ) 2
________________________________________________________________________________
– ​ http://www.brianvellmure.com/2014/01/09/anatomy-growth-insights-fuel-dynamic-growth-organization/ 1
– http://github.com/tensorflow 2
26

4.2 Recunoa ș terea scris ului de mâna

Ca date de intrare pentru re ț eaua neuronala avem tensori care reprezintă imaginea ș i textul
corespunzător imaginii. Pentru text se face o mapare de la caractere la cifre. Datele de intrare despre
imagine au dimensiunea numărul de ferestre, lungimea unei ferestre, lă ț imea unei ferestre.
Tensorflow nu procesează doar o imagine la un pas, ci mai multe odată pentru a îmbunătă ț i timpul
de procesare. Deci vom folosi o mul ț ime de imagini ș i texte cu denumirea de ​ batch ​ . Toate imaginile
trebuie sa fie de dimensiune egală, din această cauză se adaugă linii ș i coloane pentru imaginile de
dimensiuni mai mici.

4.2.1 Alegerea meta-parametrilor

Pentru primul nivel al re ț elei neuronale convolu ț ionale am folosit 32 de filtre cu
dimensiunea 5×5, pentru ​ maxpool s-a folosit blocuri de dimensiunea de 2×2 pentru a extrage
maximul. Pentru al doilea nivel convolu ț ional s-a folosit 64 de filtre 5×5 ș i maxpool 2×2.

fig 19. Graful computa ț ional pentru modelul cu nivele de celule LSTM creat cu ajutorul instrumentului
Tensorboard

Pentru LSTM s-a folosit un număr de 500 de neuroni pentru starea celulei. Iar re ț eaua
neuronală recurentă a fost formată din două nivele de celule LSTM. Fiecare vector ob ț inut la timpul
t ​ al primei re ț ele neuronale s e folosesc ca date de intrare pentru a doua re ț ea neuronală.
Pentru a plasa prezicerile la pasul potrivit s-a folosit clasificarea temporală continuă. Cu CTC se
calculează ș i eroarea. Apoi toate variabilele re ț elei se schimbă în dependen ț ă de derivata func ț iei
obiectiv în raport cu aceste variabile, deoarece fiecare variabilă influen ț ează prezicerea.
27

fig 20. Nivele suprapuse de celule ale re ț elei recurente ( ​ sursa ​ ) 1

S-a observat că prezicerile la un pas ​ t depind nu doar de caracterele anterioare ci ș i de
caracterele posterioare. Această observa ț ie a fost un punct de pornire pentru folosirea re ț elelor
recurente bidirec ț ionale ​ [9] care în loc sa proceseze informa ț ia doar de la stânga la dreapta, mai
folosesc o re ț ea neuronală recurentă pentru a procesa ș irurile de caracteristici ș i de la dreapta la
stânga combinând rezultatele pentru a forma o prezicere mai bună la pasul ​ t ​ .

fig 21. Re ț ele recurente Bidirec ț ionale ( ​ sursa ​ ) 2
________________________________________________________________________________
1-http://www.wildml.com/2015/10/recurrent-neural-network-tutorial-part-4-implementing-a-grulstm-rnn-with-p
ython-and-theano/
– http://blog.jacobandreas.net/monference.html 2
28

Pentru modelul care am folosit multi-dimentional LSTM, este format din 4 MDLSTM în toate cele
4 direc ț ii, apoi se calculează media aritmetică a rezultatelor. Urmează un nivel convolu ț ional. Totul
se termina cu un ș ir de vecto ri de probabilită ț i care sunt procesa ț i de către CTC.

fig 22. Arhitectura re ț elei neuronale cu MDLSTM ș i convolu ț ii ( ​ sursa ​ )
Ini ț ial imaginea care este procesată se împarte în blocuri de lungimea ​ h ș i ​ w ​ . Dacă
dimensiunea imaginii nu se împarte exact la ​ h ș i ​ w atunci se adaugă linii ș i coloane de zero astfel
încât dimensiunile să se împartă exact la ​ h ș i ​ w ​ . Se crează o instan ț ă a unei celule LSTM, însă care
va avea ca date de intrare o stare dublă, o stare de la vecinul de pe verticală ș i o stare de la vecinul
de pe orizontală. Se calculează valorile por ț ilor ș i se calculează starea ș i rezultatul curent.
Partea dificilă a acestui algoritm este că trebuie găsite stările ce corespund vecinilor celulei
curente. Ini ț ial to ț i vectorii ce sunt date de intrare pentru re ț eaua recurentă sunt extra ș i din imagine
ș i păstra ț i într-o lista. Ș tiind numărul de blocuri pe verticală ș i orizontală ș i indexul stării curente
putem calcula care sunt vecinii.
Pot fi identificate patru moduri de a procesa o imagine: de sus în jos ș i din stânga la dreapta,
de jos în sus ș i din stânga la dreapta, de jos în sus ș i din dreapta la stânga, de sus în jos ș i din
dreapta la stânga. Calculăm toate cele 4 rezultate pentru fiecare direc ț ie ș i calculăm media
aritmetică a lor, apoi putem folosi o re ț ea convolu ț ională pentru a extrage informa ț ia utilă din
procesarea cu re ț eaua neuronală recursivă. O altă abordare ar putea fi folosirea unei re ț ele
convolu ț ionale pentru fiecare rezultat în parte, apoi se face sumarea rezultatelor.
Acest tip de re ț ea neuronală a dat cele mai mai bune rezultate deoarece combină memoria
re ț elelor recurente cu caracte rul de dependen ț ă locală a imaginilor.
4.2.2 Rezultate ob ț inute
Pentru a calcula eroarea am definit o ​ func ț ie care este de fapt suma tuturor schimbărilor ​ ,
adăugărilor ș i ș tergerilor unui caracter din textul prezis pentru a ob ț ine textul corect. Acest lucru se
face folosind un algoritm din programarea dinamica care are complexitate O( ) unde ​ m si ​ n n * m
sunt lungimea cuvintelor procesate. Ideea care a stat la baza acestui algoritm este că pentru a
rezolva problema globală putem combina solu ț iile la câteva probleme de acela ș i tip însă de
dimensiuni mai mici. În cazul de fa ț ă încercăm sa găsim numărul minim de editări a unui prefix al
textului prezis pentru a ob ț ine un prefix al textului corect. Notam cu numărul minim de e i , j
schimbări pentru a schimba primele ​ i ​ litere din textul prezis pentru a ob ț ine primele ​ j ​ litere
________________________________________________________________________________
(sursa) – https://arxiv.org/pdf/1312.4569.pdf
29

din textul corect. Notăm cu caracterul ​ i ​ al textului prezis ș i cu caracterul ​ j ​ al textului corect. p i c j
Valorile ini ț iale sunt următoarele:
, e i , 0 = i e 0 , j = j
iar forma recursivă a algoritmului este:
, daca e i , j = e i − 1 , j − 1 p i = c j
, dacă m i n ( e , ) e i , j = i − 1 , j e i , j − 1 + 1 e d i f e r i t d e c p i j

fig 23. Rata de clasificare gre ș ită a unui caracter pentru setul de testare utilizând nivele de celule LSTM

fig 24. Rata de clasificare gre ș ită a unui caracter (Label rate error) pentru setul de testare utilizând
Multi-dimentional Lstm
Model Rata de
clasificare
gre ș ită a
unui caracter
Antrenare Rata de
clasificare
gre ș ită a
unui caracter
Testare Valoarea
func ț iei
obiectiv
Antrenare Valoarea
func ț iei
obiectiv
Testare Numărul de
itera ț ii a
setului de
antrenare
LSTM 0.05 0.25 0.5 11.1 10
MDLSTM 0.01 0.18 0.02 2.4 6

fig 25. Rezultate ob ț inute pe setul de imagini IAM

30

correct : on the correct : already correct : had
pred : an the pred: asready pred: had

fig 26. Exemple preziceri text

4.2.3 Analiza SWOT
Puncte tari Puncte slabe
– Clasificarea unor ș ir de caractere
dintr-o imagine
– Antrenarea se poate face pe mai multe
dispozitive în paralel
– Există mai multe modele de re ț ele
neuronale care au arătat rezultate bune
– Vocabularul este restrâns la literele
mici ale alfabetului latin
– Cuvintele pe care s-a antrenat sunt din
limba engleză
– Imaginile con ț in doar 2-3 cuvinte
Oportunită ț i Amenin ț ări
– Crearea aplica ț iilor care ar putea
transforma documente în format
electronic
– Există multe companii ș i institu ț ii care
ar dori o astfel de aplica ț ie – Modelul nu garantează corectitudinea
transformării din formă scrisă în formă
digitală
– Este nevoie de interven ț ia umană pentru
a valida o transformare

4.3 Clasificarea textului din celulele unui tabel

Foarte multă informa ț ie este păstrată în tabele. În anumite cazuri celulele tabelelor sunt
formate din doar câteva caractere ș i avem o mul ț ime de tabele care con ț in informa ț ie importantă.
Dacă ar fi posibil de transformat tabelele din imagini în format digital ar fi posibil de extras
statistici extrem de benefice organiza ț iilor care obi ș nuiesc să stocheze informa ț ia în format scris.
Pentru această aplica ț ie am ales o subproblemă care presupune clasificarea celulelor unui
tabel în 13 categorii: cifrele de la 0 la 10, litera ‘a’ ș i nici un caracter. Această aplica ț ie ar fi foarte
utilă institu ț iilor educa ț ionale care obi ș nuiesc sa păstreze notele în cataloage.
.

31

4.3.1 Detectarea tabelelor

Există foarte multă informa ț ie care este în formă scrisă într-un tabel, de exemplu notele în
cataloagele ș colare, formele în documenta ț ia unei farmacii sau rezultatele unui test grilă. Pentru a
putea folosi la maxim de uneltele care se aplică informa ț iei digitale trebuie sa găsim o solu ț ie pentru
a putea transforma un tabel în format electronic.
Ca date de intrare avem o imagine care con ț ine o pagină cu un tabel. Primul pas ar fi să
detectăm acest tabel. Pentru a detecta acest tabel vom folosi o func ț ie predefinita din OpenCV
findCounturs care detectează formele, vom alege cea mai mare formă cu 4 laturi, apoi vom decupa
acel dreptunghi.

fig 27. Detectarea tabelului
Următorul pas este sa detectăm liniile. Aceasta se poate face folosind ​ hough-line detector.
Acesta func ț ie returnează toate liniile existente în imagine. Func ț ia din OpenCV permite setarea
lungimii unei posibile linii, distan ț a dintre două linii care pot fi considerate o singură linie. Filtrăm
toate liniile pentru a ob ț ine doar liniile verticale sau orizontale eliminând liniile care au diferen ț a
componentei ​ x mai mare ca 5 pixeli pentru liniile verticale ș i diferen ț a mai mare ca 5 pixeli pentru
componenta ​ y pentru liniile orizontale. Acum selectăm liniile verticale ș i orizontale, apoi le grupăm
în clase ce vor reprezenta o linie din tabel. Această grupare se va face cu ajutorul algoritmului
32

kmeans. Kmeans are nevoie de numărul de linii pentru a găsi liniile ce apar ț in unei linii din tabel.
Din păcate func ț ia din Open CV nu returnează toate liniile tabelului din cauza specificului imaginii,
ilumina ț iei ș i umbrelor. Din această cauză am implementat o func ț ie care calculează distan ț a cea
mai probabilă dintre linii, apoi rearanjează liniile în raport cu distan ț a dintre linii găsită anterior.
După ce am găsim liniile orizontale ș i verticale putem extrage celulele tabelului.

fig 28. Detectarea liniilor

4.3.2 Preprocesarea celulelor

Re ț eaua neuronală are ca date de intrare un tensor de dimensiunea 28×28, de aceea trebuie
să redimensionăm celulele pentru a avea această dimensiune. De asemenea fiecare pixel trebuie
mapat între 0 ș i 1 pentru a permite re ț elei neuronale să lucreze cu numere mici. La moment se
extrag celulele considerând că liniile sunt strict verticale sau orizontale.

33

fig 29. Clasificarea celulelor

4.3.3 Rețele convolu ț ionale

Pentru antrenare este nevoie de foarte multe imagini cu cifre de dimensiunea 28×28. Pentru
aceasta am folosit un set de imagini foarte popular în cercetările din domeniul vederii artificiale
(computer vision) MNIST. Acesta este format din 70000 de imagini pentru antrenare ș i 10000
pentru testare. Antrenând modelul pe acest set de imagini am ob ț inut o rată de recunoa ș tere de
99.96% pentru imaginile din acela ș i set, însă când am încercat să aplic acest model pe imagini
extrase dintr-un tabel am ob ț inut o rată de recunoa ș tere sub 50%. Aceasta a fost din cauza că
imaginile pe care s-a antrenat modelul nu aveau zgomot (noise) ca liniile tabelului sau cercuri care
s-au format după aplicarea unui prag (threshold).

4.3.3.1 Generarea imaginilor cu zgomot (noise)

Pentru a antrena modelul sa fie imun la perturba ț iile apărute din cauza liniilor tabelului am
adăugat perturba ț ii ș i imaginilor din setul de imagini MNIST. Pentru a ob ț ine perturba ț ii relevante
am folosit imagini ale celulelor care nu au nici un caracter ș i le-am adăugat ca fundal pentru
imaginile setului MNIST.
Astfel antrenând modelul folosind imagini cu perturba ț ii am ob ț inut o eroare de clasificare a
unei imagini ce apar ț ine unu i tabel sub 10%.
34

fig 30. Crearea imaginilor cu zgomot (noise)

De asemenea pentru ca modelul sa nu proceseze de doua ori aceea ș i imagine am folosit
pentru fiecare imagine rota ț ii pe verticala de 10° grade, transla ț ii ale imaginii de 5 pixeli pe
verticală sau orizontală. Această îmbunătă ț ire a făcut ca modelul sa generalizeze formele unui
caracter ș i să fie imun la rota ț ii, translare ș i liniile tabelului care au fost extrase împreună cu celula.

4.3.3.2 Algoritmi genetici pentru alegerea meta-parametrilor

Pentru a alege cea mai bună arhitectură a re ț elei neuronale am folosit un algoritm genetic.
Pentru a reprezenta un model am folosit o listă de nivele neuronale. Un nivel neuronal este
reprezentat cu ajutorul unei liste de numere întregi care indică tipul nivelului neuronal ș i parametrii
lui ca numărul de neuroni, dimensiunea unui bloc pentru nivelele convolu ț ionale ș i ​ maxpooling ​ .
Pentru a evalua un model am verificat ca modelul să fie valid. Apoi am rulat modelul pentru
10 minute ș i am salvat rata de clasificare corectă a imaginilor din setul de testare. Am sortat
modelele după rata de clasificare corectă apoi am selectat 10 cele mai bune modele. Pentru cele 10
modele am făcut combina ț ii de modele ș i muta ț ii. Muta ț iile se efectuează în felul următor: se alege
aleator numărul de muta ț ii, se alege tipul muta ț iei dintre: ș tergere nivel, adăugare nivel sau
schimbare nivel neuronal.
Adăugarea unui nivel neuronal se face în felul următor: random se alege pozi ț ia unde să se
adauge nivelul neuronal în cadrul re ț elei neuronale, apoi se alege tipul nivelului, urmează alegerea
parametrilor dintr-o lista de parametrii valizi pentru fiecare tip de nivel neuronal.
Pentru a ș terge un niv el neuronal, se alege pozi ț ia lui aleator.
Pentru a schimba un nivel neuronal se alege pozi ț ia la fel aleator, apoi parametrii se schimbă
cu parametri valizi pentru tipul de nivel neuronal curent.
Am folosit următoarele tipuri de nivele neuronale:
1. re ț ele convolu ț ionale
2. nivele complet conectate
3. dropout
4. maxpooling
5. func ț ie de activare
Pentru nivelul convolu ț ional se alegea dimensiunea filtrului ș i numărul de filtre. Pentru
nivelele complet conectate se alegea numărul de neuroni, pentru ​ dropout se alegea numărul de
35

neuroni care deveneau zero atunci când se făcea antrenarea pentru a for ț a modelul sa găsească noi
metode de a ob ț ine inform a ț ie utilă din datele de intrare pentru a clasifica un caracter, pentru
maxpooling se seta dimensiunea blocului din care se extrăgea maximul, pentru func ț ia de activare
se alegea una dintre func ț iile : softmax, tanh, ReLU, sigmoid.
Una dintre probleme este că nivele convolu ț ionale ș i nivele conectate complet au diferite
dimensiuni pentru tensorii ca date de intrare. Pentru nivele convolu ț ionale se folose ș te un tensor cu
dimensiunea: (numărul de imagini, înăl ț imea imaginii, lă ț imea imaginii, numărul de canale). Iar ca
rezultat nivelul convolu ț ional avea un tensor cu dimensiunea: (numărul de imagini procesate,
înăl ț imea imaginii, lă ț imea imaginii ș i numărul de filtre). Pentru un nivel conectat complet datele de
intrare sunt un tensor cu dimensiunea: (numărul de imagini, numărul de neuroni intrare), iar ca
rezultat: (numărul de imagini, numărul de neuroni ie ș ire).

fig 31. Schema algoritmului genetic ( ​ sursa ​ )
4.3.4 Descrierea re ț elei n euronale

În urma rulării algoritmului genetic pentru 2 zile pe un GPU de pe floydhub am ob ț inut
următoarea re ț ea neuronală cu timpul optim de învă ț are a valorilor variabilelor.
Re ț eaua neuronală este formată din 4 nivele: 2 nivele convolu ț ionale ș i 2 nivele complet
conectate care vor prezice o clasă din cele 13 clase. Primul nivel convolu ț ional este format din 64
de filtre de dimensiunea 5×5, al doilea nivel convolu ț ional are 124 de filtre. Primul nivel conectat
total are 1500 de neuroni, iar ultimul 13 neuroni ce reprezintă prezicerile claselor. Între nivelele
neuronale conectate total s-a folosit un ​ dropout ​ de 50%.
_______________________________________________________________________________
(sursa) – https://genetic.io/en/introduction-genetic-algorithms/
36

fig 32. Ilustrarea re ț elei convolu ț ioale ( ​ sursa ​ ) 1
4.3.5 Dropout

Atunci când o re ț ea neuronală încearcă sa prezică o clasă, ea caută caracteristici pe care le
va recunoa ș te în exemplel e procesate. O problemă des întâlnita la antrenarea acestor re ț ele
neuronale este ​ overfitting ​ : atunci când re ț eaua neuronală înva ț ă să recunoască exemplele din setul
de antrenare însă nu generalizează destul de bine pentru a clasifica corect exemplele din setul de
testare. Pentru a împiedica acest lucru s-a folosit dropout-ul [10] care atribuie unui număr de
neuroni dintr-un nivel neuronal valoarea zero. Astfel re ț eaua neuronală nu poate depinde de
activarea unor neuroni, ci trebuie sa folosească cât mai multă informa ț ie din caracteristicile
exemplelor pentru a face o clasificare corectă.

fig 33. Eliminarea neuronilor folosind Dropout ( ​ sursa ​ ) 2
_________________________________________________________________________________
– ​ http://www.mamicode.com/info-detail-1138907.html 1
– http://brohrer.github.io/how_convolutional_neural_networks_work.html 2
37

4.3.6 Integrare cu CMS Drupal ș i librăria KonvaJS
Pentru a rula aplica ț ia pentru utilizatorul final am ales sistemul de gestionare a con ț inutului
pe internet Drupal 8, iar pentru a manipula ș i vizualiza imaginile în browser se va folosi librăria
javascript KonvaJS.
Drupal este unul dintre cele mai populare CMS din industria web, multe institu ț ii
guvernamentale, spitale, universită ț i folosesc Drupal ca platformă pentru site-ul lor.

fig 34. Statistici Drupal ( ​ sursa ​ )
Ini ț ial am creat entită ț i pentru clase, obiecte, profesori, elevi. Rela ț iile dintre entită ț i se
setează foarte u ș or utilizâ nd câmpuri pentru o entitate cu referin ț ă la altă entitate. Pentru
recunoa ș terea celulelor dintr-un tabel am folosit o entitate în care se încarcă imaginea cu un tabel,
se alege clasa, obiectul, profesorul ș i datele calendaristice pentru care sunt notele. Apoi se
vizualizează imaginea în pagina web, ș i cu ajutorul librăriei ConvaJS se ata ș ează linii ș i figuri
pentru a putea corecta prezicerile făcute de OpenCV ș i Tensorflow atunci când se detectează
tabelul, liniile ș i se clasifică valorile celulelor tabelului.
De asemenea prezicerile corectate pot fi transformate în seturi de imagini pentru a fi folosite
la antrenarea ulterioară a modelului. Pentru a antrena modelul în browser am creat entită ț i pentru o
instan ț ă a modelului unde se adaugă codul python a modelului ș i se setează valorile dimensiunilor ș i
denumirea datelor de intrare pentru re ț eaua neuronală. Apoi am creat o entitate pentru a rula un job
de antrenare unde se setează modelul pe care îl vom antrena, valorile modelului anterior pentru a nu
porni antrenarea de la zero, seturile de imagini din care vom lua imaginile pentru antrenare,
numărul de itera ț ii, număru l de imagini procesate la o itera ț ie ș i raportul numărului de imagini
pentru testare la numărul de imagini pentru antrenare. După ce modelul a fost antrenat, valorile
variabilelor se salvează pentru a fi folosite pentru a prezice celulele tabelului. Astfel cu ajutorul
CMS Drupal a fost posibil realizarea colectării datelor, antrenare modelului ș i servirea modelului în
produc ț ie.

_______________________________________________________________________________
(sursa) – https://drupal.org

38

4.3.7 Analiza SWOT

Puncte tari Puncte slabe
– Transformarea unui tabel dintr-o
imagine în format electronic
– Este posibil de corectat gre ș elile
modelului de clasificare
– Antrenarea modelului pe diferite seturi
de imagini – Detectarea tabelului ș i liniilor necesită
corectări
– Aplica ț ia necesită o persoană pentru a
verifica corectitudinea unei etape pentru
a trece la următoarea
Oportunită ț i Amenin ț ări
– Există multe institu ț ii care ar fi
interesate să folosească această aplica ț ie
– Lipsa concuren ț ei în regiune – Utilizatorul trebuie să în ț eleagă etapele
de procesare a imaginii: detec ț ia
paginii, tabelului, liniilor ș i clasificarea
celulelor.

39

Concluzii

Am observat că rețelele neuronale permit clasificarea imaginilor mai bine ca alte metode din
învă ț area automată (machine learning). Iar clasificarea temporală continuă permite clasificarea unei
imagini segmentate în ferestre fără a atribui fiecărei ferestre o etichetă manual. După mai multe
încercări am reu ș it sa implementez o re ț ea recurentă care poate sa proceseze ș i tensori cu două
dimensiuni a ș a cum sunt imaginile. Multi-Dimentional LSTM s-au adeverit a fi foarte eficiente
deoarece folosesc informa ț ia care vine de la celulele vecine de pe verticală ș i orizontală. Iar în
combina ț ie cu re ț elele convolu ț ionale care folosesc rela ț iile unui pixel cu vecinii săi au dat cel mai
bun rezultat ob ț inut de mine.
Este de men ț ionat faptul ca re ț ele recurente multidimension ale au fost mai u ș or de antrenat
deoarece nu au nevoie de o preprocesare la fel ca la re ț elele recurente simple pentru care s-au creat
ferestre suprapuse, s-au aplicat transformări cosinus pe orizontală apoi au fost procesate de re ț ele
convolu ț ionale. În contrast, pentru re ț elele multidimensionale imag inea de prezis a fost procesată
integral de către re ț elele recurente ș i convolu ț ionale. Din păcate Tensorflow nu are o implementare
a re ț elelor recurente multidi mensionale clasice, însă ne permit să creăm propriile noastre arhitecturi
mai complicate utilizând clase ca TensorArray ș i whileLoop. Pentru a face parte din grupul
programatorilor care au contribuit la librăria Tensorflow am trimis două cereri de a adăuga codul
creat de mine la versiunea curentă a platformei. Primul ​ pull request reprezintă o implementare a 1
re ț elelor recurente multidim ensionale folosind TensorArray ș i whileLoop. Al doilea ​ pull request 2
adăuga o op ț iune pentru re ț elele recurente folosite la procesarea imaginilor de a grupa pixelii în
blocuri de dimensiune variabilă. De asemenea am creat câteva repertorii pe github cu diferite
modele de re ț ele neuronale pentru recunoa ș terea scrisului de mână. Primul ​ repertoriu folose ș te 3
re ț ele convolu ț ionale ș i recurente pentru a clasifica imagini întregi ș i ș iruri de ferestre. Al doilea
repertoriu folose ș te o parte din codul echipei de la Google oferit ca punct de pornire pentru un 4
concurs de clasificare a filmule ț elor de pe Youtube pentru a rula codul distribuit pe mai multe 5
dispozitive pe Google ML Cloud împreună cu propriile mele modele ș i set de imagini.
Informa ț ia care este păstrată în formă scrisă ar putea aduce un beneficiu esen ț ial persoanelor
care îl de ț in dacă ar putea folosi instrumentele pentru procesarea datelor digitale. De exemplu notele
din cataloage ar fi foarte utile dacă ar fi în format electronic. Elevii ar putea vedea notele în orice
moment. De asemenea este cunoscut faptul că unele ș coli au implementat sisteme pentru a pune
notele on-line, însă mai multe sunt institu ț iile care păstrează notele în format scris. Având o
aplica ț ie care ar putea rapid transforma notele scrise în format electronic profesorii, părin ț ii ș i elevii
_______________________________________________________________________________
– https://github.com/tensorflow/tensorflow/pull/10615 1
– https://github.com/tensorflow/tensorflow/pull/10692 2
– https://github.com/johnsmithm/handwritten-sequence-tensorflow 3
– https://github.com/johnsmithm/handwritten-tf-1.0 4
– https://github.com/google/youtube-8m 5
40

au avea acces la informa ț ie care ar fi de ajutor pentru a motiva elevii să înve ț e. De asemenea
conducerea institu ț iei ar avea statistici referitoare la numărul de note la un obiect, ce profesor nu a
pus nici o notă într-o perioadă de timp, lista elevilor cu media notelor cea mai bună la diferite
obiecte.

Re ț ele neuronale dau rezultatele cele mai bune la majoritatea sarcinilor din inteligen ț a
artificială ca recunoa ș terea vocii, traducerea textului, dat răspuns la o întrebare despre un text sau
imagine etc. Din această cauză abilitatea de a crea ș i de a îmbunătă ț i o re ț ea neuronală este un
beneficiu extraordinar care ar putea fi un avantaj mare la rezolvarea unei probleme din via ț a reală.
Deep learning este un domeniu ce merită explorat, cu ajutorul căruia se pot crea o mul ț ime
de aplica ț ii utile pentru organ iza ț ii educa ț ionale, business, guvernamentale etc.

5.1 Lucru pe viitor

La acest moment am implementat o aplica ț ie care poate clasifica celulele unui tabel în 13
categorii. Ar fi un avantaj utilizarea recunoa ș terii numelui ș i prenumelui unei persoane din celulele
unui tabel. Astfel ar fi posibil transformarea unor forme mai dificile în format digital.
O problemă des întâlnită atunci când se dore ș te antrenarea unui model este folosirea unor
date relevante. Aceste date trebuie sa fie cât mai multe posibil ș i sa fie de o diversitate ridicată
pentru ca modelul sa poată generaliza formele întâlnite. Pentru a avea date relevante cineva ar trebui
să eticheteze toate imaginile din setul de date, ceea ce este foarte greu din cauza numărului mare de
caractere. O solu ț ie ar fi generarea scrisului pentru a forma date relevante, iar prin folosirea unor
perturba ț ii care ar face imaginile generate sa arate ca imagini reale, modelul ar putea învă ț a să
recunoască formele reale fără nici o problemă. În cazul cataloagelor: generarea numelor ș i
prenumelor cu ajutorul re ț elelor neuronale pentru a antrena alta re ț ea neuronala sa recunoască
aceste cuvinte.

41

Referin ț e bib liografice

[1] Alex Graves, Navdeep Jaitly. Towards End-to-End Speech Recognition with Recurrent
Neural Networks. Proceedings of the 31st International Conference on Machine Learning,
PMLR 32(2):1764-1772, 2014, 3-6.
[2] ​ Chen Yu, Chen Dian-ren, Li Yang. ​ Otsu's thresholding method based on gray
level-gradient two-dimensional histogram. ​ 2010 2nd Interna tional Asia Conference on
Informatics in Control, Automation and Robotics (CAR 2010)
[3] Michał Kozielski, Jens Forster, Hermann Ney. Moment-based Image Normalization for
Handwritten Text Recognition. ​ 2012 International Conference on Frontiers in
Handwriting Recognition. 2012, 2-3.
[4] E. Kavallieratou*, N. Fakotakis, G. Kokkinakis. Slant estimation algorithm for OCR
systems. Journal Pattern Recognition, 2001, 2-3.
[5] Alessandro Vinciarelli *, Juergen Luettin. A new normalization technique for cursive
handwritten words. Pattern Recognition Letters, Vol 22, no. 9, pp 1043-1050, June 2001, 5-7.
[6] Alex Graves, Jürgen Schmidhuber. Offline Handwriting Recognition with
Multidimensional Recurrent Neural Networks. Advances in Neural Information Processing
Systems 21 (NIPS 2008), 2-4.
[7] R. J. Williams and D. Zipser, “Gradient-based learning algorithms for recurrent
connectionist networks,” in Backpropagation: Theory, Architectures, and Applications, Y.
Chauvin and D. E. Rumelhart, Eds. Hillsdale, NJ: Erlbaum, 1990.
[8] ​ Diederik P. Kingma, Jimmy Ba ​ . Adam: A Method for Stochastic Optimization. 3rd
International Conference for Learning Representations, San Diego, 2015
[9] Mike Schuster and Kuldip K. Paliwal. Bidirectional Recurrent Neural Networks – IEEE
TRANSACTIONS ON SIGNAL PROCESSING, VOL. 45, NO. 11, NOVEMBER 1997 2673
[10] Nitish Srivastava, Geoffrey Hinton, Alex Krizhevsky, Ilya Sutskever, Ruslan
Salakhutdinov. Dropout: A Simple Way to Prevent Neural Networks from Overfitting.
Journal of Machine Learning Research 15 (2014)

42

Similar Posts