Rețele neuronale. Rețele neuronale cu puls: creierul în computer. Compararea bibliotecilor folosind exemplul sarcinii de clasificare a cifrelor scrise de mână

De data aceasta am decis să studiez rețelele neuronale. Am reușit să dobândesc abilități de bază în această chestiune în vara și toamna lui 2015. Prin abilități de bază, vreau să spun că pot crea o rețea neuronală simplă de la zero. Puteți găsi exemple în depozitele mele GitHub. În acest articol, voi oferi câteva explicații și voi împărtăși resurse pe care le puteți găsi utile în studiul dumneavoastră.

Pasul 1. Neuroni și metoda feedforward

Deci, ce este o „rețea neuronală”? Să așteptăm cu asta și să ne ocupăm mai întâi de un neuron.

Un neuron este ca o funcție: ia mai multe valori ca intrare și returnează una.

Cercul de mai jos reprezintă un neuron artificial. Primește 5 și returnează 1. Intrarea este suma celor trei sinapse conectate la neuron (trei săgeți în stânga).

În partea stângă a imaginii vedem 2 valori de intrare (în verde) și un offset (în maro).

Datele de intrare pot fi reprezentări numerice a două proprietăți diferite. De exemplu, la crearea unui filtru de spam, acestea ar putea însemna prezența a mai mult de un cuvânt scris cu MAJUSCULE și prezența cuvântului „Viagra”.

Valorile de intrare sunt înmulțite cu așa-numitele „greutăți”, 7 și 3 (evidențiate cu albastru).

Acum adăugăm valorile rezultate cu offset și obținem un număr, în cazul nostru 5 (evidențiat cu roșu). Aceasta este intrarea neuronului nostru artificial.

Apoi neuronul efectuează un calcul și produce o valoare de ieșire. Avem 1 pentru că valoarea rotunjită a sigmoidului la punctul 5 este 1 (vom vorbi despre această funcție mai detaliat mai târziu).

Dacă acesta ar fi un filtru de spam, faptul că ieșirea 1 ar însemna că textul a fost marcat ca spam de către neuron.

Ilustrație a unei rețele neuronale de pe Wikipedia.

Dacă combinați acești neuroni, obțineți o rețea neuronală care se propagă direct - procesul merge de la intrare la ieșire, prin neuroni conectați prin sinapse, ca în imaginea din stânga.

Pasul 2. Sigmoid

După ce ați urmărit lecțiile Welch Labs, este o idee bună să consultați Săptămâna 4 din cursul de învățare automată al Coursera despre rețelele neuronale, pentru a vă ajuta să înțelegeți cum funcționează acestea. Cursul intră foarte adânc în matematică și se bazează pe Octave, în timp ce eu prefer Python. Din această cauză am sărit peste exerciții și am învățat totul cunoștințe necesare din videoclip.

Sigmoidul afișează pur și simplu valoarea dvs. (prin axă orizontală) pentru intervalul de la 0 la 1.

Prima mea prioritate a fost să studiez sigmoidul, așa cum a figurat în multe aspecte ale rețelelor neuronale. Știam deja ceva despre asta din a treia săptămână a cursului mai sus menționat, așa că am urmărit videoclipul de acolo.

Dar nu vei ajunge departe doar cu videoclipurile. Pentru înţelegere deplină Am decis să-l codez singur. Așa că am început să scriu o implementare a unui algoritm de regresie logistică (care folosește un sigmoid).

A durat o zi întreagă, iar rezultatul a fost cu greu satisfăcător. Dar nu contează, pentru că mi-am dat seama cum funcționează totul. Codul poate fi văzut.

Nu trebuie să faci asta singur, așa cum este nevoie cunoștințe de specialitate- principalul lucru este că înțelegeți cum funcționează sigmoidul.

Pasul 3. Metoda de backpropagation

Înțelegerea modului în care funcționează o rețea neuronală de la intrare la ieșire nu este atât de dificilă. Este mult mai dificil de înțeles cum o rețea neuronală învață din seturile de date. Principiul pe care l-am folosit se numește

Yandex a implementat nou algoritm căutare bazată pe rețele neuronale. Potrivit experților, acest lucru ar trebui să ajute compania să crească piata ruseasca decalaj față de principalul concurent - Google

Holding-ul rus de internet Yandex a introdus un nou algoritm de căutare bazat pe rețele neuronale. Acest lucru a fost anunțat de șeful serviciului de relevanță al serviciului, Alexander Safronov. Noul algoritm, numit „Korolyov”, caută nu numai după cuvinte cheie, ci și după semnificație, iar la întrebările complexe se oferă răspunsuri mai precise, a explicat un reprezentant Yandex.

În 2016, Yandex a introdus algoritmul Palekh, care compară în timp real sensul unei solicitări rare și unice și titlul unei pagini web, chiar dacă nu au comun Cuvinte cheie. De exemplu, când întreabă „un tablou în care cerul se învârte”, un motor de căutare va putea returna „Noaptea înstelată” a lui Van Gogh. Spre deosebire de Palekh, Korolev este capabil să analizeze întreaga pagină, precum și semnificația interogărilor care conduc alți utilizatori la ea.

Șeful departamentului de căutare Yandex, Andrei Styskin, a dat un alt exemplu de cerere complexă: „un film despre spațiu în care un tată comunică cu fiica lui prin mâinile a doua”. În acest caz, interogarea nu conține cuvinte cheie, dar algoritmul de căutare este capabil să înțeleagă asta despre care vorbim despre filmul „Interstellar”, spune Styskin.

Potrivit reprezentanților serviciului, rețeaua neuronală este capabilă de auto-învățare, astfel încât cu cât mai mulți utilizatori caută într-un motor de căutare, cu atât rezultatele vor fi mai precise. Platforma deschisă de crowdsourcing Yandex.Toloka, lansată în 2014, va fi folosită pentru testare. În esență, acesta este un serviciu în care oricine poate participa la testarea produselor Yandex, le poate oferi evaluări și poate lăsa comentarii. Acest lucru permite companiei să-și îmbunătățească serviciile, iar utilizatorii primesc recompense bănești pentru aceasta. În prezent, peste 1 milion de utilizatori sunt înregistrați în Yandex.Toloka.

„Problema cu rețelele neuronale a fost că acestea erau foarte lente și nu puteau fi folosite pentru a lucra cu cantități uriașe de text în timp real”, spune Igor Ashmanov, fondatorul și managing partner Ashmanov and Partners. „Dacă Yandex a reușit cu adevărat să implice rețelele neuronale în indexarea întregului volum al Runetului, acest lucru este interesant, aceasta este o descoperire destul de serioasă din punct de vedere tehnologic.” Cât de mult va îmbunătăți noul algoritm calitatea căutării și dacă o va îmbunătăți în principiu, rămâne de analizat, a menționat Ashmanov.

Principalul concurent al Yandex, Google, conform șefului Ashmanov și Partners, nu a anunțat încă oficial introducerea rețelelor neuronale în algoritmii săi de căutare. „Google își poate permite să configureze diferit factorii de clasare și să experimenteze mai mult timp în acest domeniu fără a introduce noi tehnologii în căutare, pur și simplu pentru că compania are mai mulți programatori și resurse”, a menționat expertul.


Prinde din urmă și depășește

Potrivit analistului VTB Capital Vladimir Bespalov, o nouă versiune Motorul de căutare rus este un pas pentru menținerea cotei Yandex pe piață. „Aplicația mobilă Search actualizată, noul algoritm al motorului de căutare - toate acestea ar trebui să ajute Yandex să se stabilizeze și să-și mărească cota pe piața de căutare”, spune expertul. — Efectul nu se va simți imediat, ci reducerea interogări de căutare V termen lung poate avea un efect mai puțin favorabil asupra performanței viitoare. Căutarea este principalul produs al Yandex, principalul venit al companiei este publicitatea, care este legată de căutare.

Păstrează-ți poziția în căutare pe mobil„Yandex” poate fi ajutat de decizia FAS, amintește Bespalov. În luna aprilie a acestui an, departamentul a încheiat un acord de reglementare cu principalul său concurent firma ruseasca pe piața de căutare - Google. Potrivit acestuia, gigantul american al internetului va reconsidera acordurile cu producătorii de smartphone-uri Android din Rusia și va permite utilizatorilor să aleagă altele alternative ca principale pe dispozitivele lor. căutări pe Google Servicii.

La sfârșitul celui de-al doilea trimestru al acestui an, cota Yandex pe piața de căutare din Rusia se ridica la 54,3%, după cum a raportat Yandex N.V. (compania-mamă a Yandex) în raportul său financiar cu referire la propriul serviciu de analiză Yandex.Radar. La 31 iulie, conform Yandex.Radar, Google ocupa 40,36% dintre acestea motoare de căutare in Rusia. Potrivit LiveInternet, în medie în ultimele trei luni printre motoarele de căutare, Yandex a fost în frunte cu o cotă de 51,1%, Google a avut 43,9%. Yandex N.V. nu dezvăluie veniturile din căutare, dar direcția „căutare și portal” a adus companiei 20,135 miliarde de ruble, cu 22% mai mult decât în ​​aceeași perioadă din 2016.

„Versiunea anterioară revoluționară a căutării Matrixnet a permis lui Yandex să se desprindă de Google și să-și mărească ponderea cu aproape 10 puncte procentuale. Timp de o jumătate de an. Acesta este un exemplu clar al modului în care utilizarea tehnologiilor inovatoare duce la rezultate evidente de afaceri chiar și pe o piață atât de complexă precum motorul de căutare”, spune partenerul director al școlii online Skyeng și fost director al Dezvoltare internațională„Yandex” Alexander Laryanovsky.

Potrivit Tatyana Danielyan, director adjunct pentru cercetare și dezvoltare al grupului de companii ABBYY, introducerea de noi algoritmi de căutare poate modifica, de asemenea, clasamentul (ordinea în care site-urile sunt afișate în rezultatele cautarii). Cu toate acestea, acesta va fi un plus pentru site-urile în sine, spune ea: „Utilizatorii vor avea mai multe șanse să viziteze pagini care într-adevăr le satisface nevoile, iar conversiile site-ului pot crește semnificativ.”

Kruchinin Dmitri, Dolotov Evgeniy, Kustikova Valentina, Druzhkov Pavel, Kornyakov Kirill

Introducere

În prezent, învățarea automată este un domeniu în curs de dezvoltare. cercetare științifică. Acest lucru se datorează atât capacității de a colecta și prelucra datele mai rapid, mai ridicat, mai puternic, mai ușor și mai ieftin, cât și dezvoltării unor metode de identificare din aceste date a legilor prin care au loc procesele fizice, biologice, economice și de altă natură. În unele probleme, când o astfel de lege este destul de dificil de determinat, se folosește învățarea profundă.

Invatare profunda examinează metode pentru modelarea abstracțiilor la nivel înalt în date folosind transformări neliniare secvențiale multiple, care sunt de obicei reprezentate ca rețele neuronale artificiale. Astăzi, rețelele neuronale sunt folosite cu succes pentru a rezolva probleme precum prognoza, recunoașterea modelelor, compresia datelor și o serie de altele.

Relevanța subiectului învățare automatăși, în special, învățarea profundă este confirmată de apariția regulată a articolelor despre Acest subiect pe Habré: Acest articol este dedicat analiza comparativa niste instrumente softwareînvăţare profundă, dintre care În ultima vreme a apărut un număr mare. Aceste instrumente includ biblioteci de software, extensii de limbaj de programare și limbi independente, permițând utilizarea algoritmilor gata pregătiți pentru crearea și antrenamentul modelelor de rețele neuronale. Instrumentele de deep learning existente au funcționalități diferite și necesită utilizatorului diferite niveluri cunoștințe și abilități. Alegerea potrivita folosirea unui instrument este o sarcină importantă care vă permite să obțineți rezultatul dorit în cel mai mic timp și cu mai puțin efort.

Articolul prezintă scurtă recenzie instrumente pentru proiectarea și formarea modelelor de rețele neuronale. Accentul este pus pe patru biblioteci: Caffe, Pylearn2, Torch și Theano. Sunt luate în considerare capacitățile de bază ale acestor biblioteci și sunt date exemple de utilizare a acestora. Calitatea și viteza bibliotecilor sunt comparate atunci când se construiesc topologii identice de rețele neuronale pentru a rezolva problema clasificării cifrelor scrise de mână (setul de date MNIST este folosit ca set de antrenament și de testare). Se încearcă, de asemenea, să se evalueze în practică ușurința de utilizare a bibliotecilor în cauză.

Setul de date MNIST

În continuare, baza de date MNIST () de imagini cu cifre scrise de mână va fi utilizată ca set de date studiat. Imaginile din această bază de date au o rezoluție de 28x28 și sunt stocate în format de tonuri de gri. Numerele sunt centrate pe imagine. Întreaga bază de date este împărțită în două părți: instruire, constând din 50.000 de imagini și testare, formată din 10.000 de imagini.

Instrumente software pentru rezolvarea problemelor de învățare profundă

Există multe software pentru rezolvarea problemelor de învățare profundă. În găsiți o comparație generală a funcționalității celor mai cunoscute, aici vă prezentăm Informații generale despre unele dintre ele (). Primele șase biblioteci software implementează cea mai largă gamă de metode de deep learning. Dezvoltatorii oferă oportunități de a crea rețele neuronale complet conectate (FC NN), rețele neuronale convoluționale (CNN), autoencoder (AE) și mașini Boltzmann restricționate (RBM). Este necesar să acordați atenție bibliotecilor rămase. Deși au mai puține funcționalități, în unele cazuri simplitatea lor ajută la obținerea unei productivități mai mari.

Tabelul 1. Capacitățile software de deep learning

# Nume Limba O.C. FC NN CNN A.E. R.B.M.
1 DeepLearnToolbox Matlab Windows, Linux + + + +
2 Theano Piton Windows, Linux, Mac + + + +
3 Pylearn2 Piton Linux, Vagrant + + + +
4 Deepnet Piton Linux + + + +
5 Deepmat Matlab ? + + + +
6 Torță Lua, C Linux, Mac OS X, iOS, Android + + + +
7 Darch R Windows, Linux + - + +
8 Caff e C++, Python, Matlab Linux, OS X + + - -
9 nnForge C++ Linux + + - -
10 CXXNET C++ Linux + + - -
11 Cuda-convnet C++ Linux, Windows + + - -
12 Cuda CNN Matlab Linux, Windows + + - -

Pe baza informațiilor furnizate și a recomandărilor experților, au fost selectate patru biblioteci pentru o analiză ulterioară: - una dintre cele mai mature și mai complete biblioteci funcțional și - utilizate pe scară largă de către comunitate. Fiecare bibliotecă este luată în considerare conform următorului plan:
  1. Scurte informații de fundal.
  2. Caracteristici tehnice (OS, limbaj de programare, dependențe).
  3. Funcționalitate.
  4. Un exemplu de formare a unei rețele de regresie logistică.
  5. Pregătirea și utilizarea modelului construit pentru clasificare.
După examinarea bibliotecilor listate, acestea sunt comparate pe o serie de configurații de rețea de testare.

Biblioteca Caffe



Caffe este în dezvoltare din septembrie 2013. Dezvoltarea a început cu Yangqing Jia în timpul studiilor sale la Universitatea din California din Berkeley. De atunci, Caffe a fost susținut activ de Centrul de Viziune și Învățare Berkeley (BVLC) și de comunitatea de dezvoltatori de pe GitHub. Biblioteca este distribuită sub Licență BSD 2-Clauza.

Caffe este implementat folosind limbajul de programare C++, având disponibile wrapper-uri Python și MATLAB. Sistemele de operare acceptate oficial sunt Linux și OS X și există, de asemenea, un port neoficial pentru Windows. Caffe folosește biblioteca BLAS (ATLAS, Intel MKL, OpenBLAS) pentru calcule vectoriale și matrice. Alături de aceasta, dependențele externe includ glog, gflags, OpenCV, protoBuf, boost, leveldb, nappy, hdf5, lmdb. Pentru a accelera calculele, Caffe poate fi rulat pe un GPU folosind capacitățile de bază ale tehnologiei CUDA sau biblioteca de primitive de deep learning cuDNN.

Dezvoltatorii Caffe susțin capacitatea de a crea, antrena și testa rețele neuronale complet conectate și convoluționale. Datele de intrare și transformările sunt descrise de concept strat. În funcție de formatul de stocare, pot fi utilizate următoarele tipuri de straturi de date sursă:

  • DATE - definește un strat de date în format leveldb și lmdb.
  • HDF5_DATA - strat de date în format hdf5.
  • IMAGE_DATA este un format simplu care presupune că fișierul conține o listă de imagini cu o etichetă de clasă.
  • si altii.
Transformările pot fi specificate folosind straturi:
  • INNER_PRODUCT este un strat complet conectat.
  • CONVOLUȚIE - strat convoluțional.
  • POOLING - strat de pooling spațial.
  • Local Response Normalization (LRN) - nivel local de normalizare.
Alături de aceasta, la generarea transformărilor, acestea pot fi folosite diverse funcții activare.
  • Parte pozitivă (rectified-linear unit, ReLU).
  • Funcția sigmoidă (SIGMOID).
  • Tangenta hiperbolica (TANH).
  • Valoarea absolută (ABSVAL).
  • Exponentiație (PUTERE).
  • Funcția de probabilitate logală normală binomială (BNLL).
Ultimul strat al modelului rețelei neuronale trebuie să conțină o funcție de eroare. Biblioteca are următoarele funcții:
  • Eroare pătrată medie (MSE).
  • Pierderea balamalei.
  • Funcția de pierdere logistică.
  • Funcția de câștig de informații.
  • Pierderea entropiei în cruce sigmoidală.
  • Funcția Softmax. Generalizează entropia încrucișată sigmoidală în cazul a mai mult de două clase.
În procesul de formare a modelelor sunt utilizate diverse metode de optimizare. Dezvoltatorii Caffe oferă implementări ale unui număr de metode:

În biblioteca Caffe, topologia rețelelor neuronale, datele inițiale și metoda de antrenament sunt specificate folosind fișiere de configurare în format prototxt. Fișierul conține o descriere a datelor de intrare (antrenament și test) și a straturilor rețelei neuronale. Să luăm în considerare etapele construcției unor astfel de fișiere folosind exemplul rețelei de „regresie logistică” (). În cele ce urmează, vom presupune că fișierul se numește linear_regression.prototxt și se află în directorul examples/mnist.
Orez. 2. Structura rețelei neuronale

Biblioteca Pylearn2


Pylearn2 este o bibliotecă dezvoltată în laboratorul LISA de la Universitatea din Montreal din februarie 2011. Are aproximativ 100 de dezvoltatori pe GitHub. Biblioteca este distribuită sub licența BSD 3-Clause.

Pylearn2 implementat în Limbajul Python, Sistemul de operare Linux este în prezent acceptat, este, de asemenea, posibil să rulați pe orice sistem de operare folosind mașină virtuală, deoarece dezvoltatorii furnizează un wrapper configurat mediu virtual bazat pe Vagrant. Pylearn2 este un superset al bibliotecii Theano. Sunt necesare suplimentar PyYAML, PIL. Pentru a accelera calculele, Pylearn2 și Theano folosesc Cuda-convnet, care este implementat în C++/CUDA, ceea ce oferă o creștere semnificativă a vitezei.

Pylearn2 acceptă capacitatea de a crea rețele neuronale complet conectate și convoluționale, tipuri variate autoencodere (Auto-Encodere Contractive, Auto-Encodere cu dezgomot) și mașini Boltzmann limitate (Gaussian RBM, Spike-and-Slab RBM). Sunt furnizate mai multe funcții de eroare: cross-entropie, log-probabilitate. Sunt disponibile următoarele metode de predare:

  • Batch Gradient Descent (BGD).
  • Coborâre a gradientului stocastic (SGD).
  • Coborâre a gradientului conjugat neliniar (NCG).
În biblioteca Pylearn2, rețelele neuronale sunt specificate folosind descrierea lor în Fișier de configurareîn format YAML. Fișierele YAML sunt convenabile și într-un mod rapid serializarea obiectelor așa cum este dezvoltată folosind tehnici de programare orientată pe obiecte.

Biblioteca Tortei


Torch este o bibliotecă de calcul științific cu suport extins pentru algoritmii de învățare automată. Dezvoltat de Idiap Research Institute, New York University și NEC Laboratories America, din 2000, distribuit sub licență BSD.

Biblioteca este implementată în Lua folosind C și CUDA. Limbajul rapid de scripting Lua, combinat cu tehnologiile SSE, OpenMP și CUDA, permite lui Torch să arate o viteză bună în comparație cu alte biblioteci. Pe acest moment sistemele de operare sunt suportate sisteme Linux, FreeBSD, Mac OS X. Modulele principale funcționează și pe Windows. Dependențele Torch includ imagemagick, gnuplot, nodejs, npm și altele.

Biblioteca constă dintr-un set de module, pentru care fiecare este responsabil diverse etape lucrul cu rețele neuronale. Deci, de exemplu, modulul nn oferă configurarea rețelei neuronale (definirea straturilor și a parametrilor acestora), modul optim conține implementări ale diferitelor metode de optimizare utilizate pentru antrenament și gnuplot oferă capacitatea de a vizualiza date (construiți grafice, afișați imagini etc.). Instalarea modulelor suplimentare vă permite să extindeți funcționalitatea bibliotecii.

Torch vă permite să creați rețele neuronale complexe folosind un mecanism container. Container este o clasă care combină componentele declarate ale unei rețele neuronale într-o singură configurație comună, care poate fi ulterior transferată la procedura de antrenament. O componentă a unei rețele neuronale poate fi nu numai straturi complet conectate sau convoluționale, ci și funcții de activare sau eroare, precum și containere gata făcute. Torch vă permite să creați următoarele straturi:

  • Strat complet conectat (liniar).
  • Funcții de activare: tangentă hiperbolică (Tanh), selectare minim (Min) sau maxim (Max), funcție softmax (SoftMax) și altele.
  • Straturi convoluționale: convoluție (Convolution), subțiere (SubSampling), pooling spațial (MaxPooling, AveragePooling, LPPooling), normalizare diferențe (SubtractiveNormalization).
Funcții de eroare: Eroare pătrată medie (MSE), CrossEntropy etc.

Următoarele metode de optimizare pot fi utilizate în timpul antrenamentului:

Să ne uităm la procesul de configurare a unei rețele neuronale în Torch. Mai întâi trebuie să declarați un container, apoi să adăugați straturi la acesta. Ordinea în care adăugați straturi este importantă deoarece... ieșirea stratului (n-1) va fi intrarea celui de-al n-lea.
regresie = nn.Sequential() regresie:add(nn.Linear(784,10)) regresie:add(nn.SoftMax()) pierdere = nn.ClassNLLCriterion()
Utilizarea și antrenarea unei rețele neuronale:

  1. Încărcarea datelor de intrare X. Funcția torch.load(path_to_ready_dset) vă permite să încărcați un set de date pre-preparat în text sau format binar. De obicei, acesta este un tabel Lua format din trei câmpuri: dimensiune, date și etichete. Dacă nu există un set de date gata făcut, puteți utiliza funcții standard limba Lua(de exemplu, io.open(nume fișier [, mod])) sau funcții din pachetele de bibliotecă Torch (de exemplu, image.loadJPG(nume fișier)).
  2. Determinarea răspunsului rețelei pentru datele de intrare X:
    Y = regresie:forward(X)
  3. Calculul funcției de eroare E = pierdere(Y,T), în cazul nostru aceasta este funcția de probabilitate.
    E = pierdere:forward(Y,T)
  4. Calculul gradienților conform algoritmului retropropagare.
    dE_dY = pierdere:înapoi(Y,T) regresie:înapoi(X,dE_dY)
Acum hai să punem totul împreună. Pentru a antrena o rețea neuronală în biblioteca Torch, trebuie să vă scrieți propria buclă de antrenament. În ea, declarați o funcție specială (închidere) care va calcula răspunsul rețelei, va determina valoarea erorii și va recalcula gradienții și va transmite această închidere funcției coborâre în gradient pentru a actualiza ponderile rețelei.
-- Creați variabile speciale: greutățile rețelei neuronale și gradienții lor w, dE_dw = regresie:getParameters() local eval_E = function(w) dE_dw:zero() -- Actualizați gradienți local Y = regresie:forward(X) local E = pierdere : forward(Y,T) local dE_dY = loss:backward(Y,T) regresie:backward(X,dE_dY) return E, dE_dw end -- Apoi în bucla de antrenament numim optim.sgd(eval_E, w, optimState)
unde optimState sunt parametrii de coborâre a gradientului (learningRate, momentum, weightDecay etc.). Puteți urmări întregul ciclu de antrenament.

Este ușor de observat că procedura de declarare, ca și procedura de instruire, necesită mai puțin de 10 linii de cod, ceea ce indică ușurința de utilizare a bibliotecii. În același timp, biblioteca vă permite să lucrați cu rețele neuronale la un nivel destul de scăzut.

Salvarea și încărcarea rețelei instruite se face folosind funcții speciale:
torch.save(cale, regresie) net = torch.load(cale)
Odată încărcată, rețeaua poate fi folosită pentru clasificare sau formare suplimentară. Dacă trebuie să aflați cărei clase îi aparține elementul eșantion, atunci trebuie doar să traversați rețeaua și să calculați rezultatul:
rezultat = net:forward(eșantion)
Mai mult exemple complexe pot fi găsite în materialele de instruire ale bibliotecii.

Biblioteca Theano


Theano este o extensie a limbajului Python care vă permite să calculați eficient expresii matematice, care conțin tablouri multidimensionale. Biblioteca și-a primit numele în onoarea soției filosofului și matematicianului grec antic Pitagora - Theano (sau Theano). Theano a fost dezvoltat în laboratorul LISA pentru a sprijini dezvoltarea rapidă a algoritmilor de învățare automată.

Biblioteca este implementată în Python și este acceptată pe sistemele de operare sisteme Windows, Linux și Mac OS. Theano include un compilator care traduce expresiile matematice scrise în Python în cod eficient C sau CUDA.

Theano oferă set de bază instrumente pentru configurarea rețelelor neuronale și antrenamentul acestora. Este posibil să implementați complet multistrat rețelele conectate(Multi-Layer Perceptron), rețele neuronale convoluționale (CNN), rețele neuronale recurente (recurente Rețele neuronale, RNN), autoencodere și mașini Boltzmann restricționate. De asemenea, sunt furnizate diverse funcții de activare, în special, sigmoid, softmax, cross-entropie. În timpul antrenamentului, este utilizată coborârea gradientului lot (Batch SGD).

Să ne uităm la configurația unei rețele neuronale în Theano. Pentru comoditate, vom implementa clasa LogisticRegression(), care va conține variabile - parametri antrenabili W, b și funcții pentru lucrul cu aceștia - calculând răspunsul rețelei (y = softmax(Wx + b)) și funcția de eroare. Apoi, pentru a antrena rețeaua neuronală, creăm funcția train_model. Pentru aceasta, este necesar să se descrie metodele care determină funcția de eroare, regula de calcul a gradienților, metoda de modificare a greutăților rețelei neuronale, dimensiunea și locația eșantionului mini-lot (imaginile în sine și răspunsurile). pentru ei). Odată ce toți parametrii au fost determinați, funcția este compilată și transmisă buclei de antrenament.


Orez. 3. Diagrama de clasă pentru implementarea unei rețele neuronale în Theano

Implementarea software a clasei

clasa LogisticRegression(obiect): def __init__(self, input, n_in, n_out): # y = W * x + b # declara variabile, determină tipul, numărul de intrări și ieșiri self.W = theano.shared (# inițializează ponderi inițiale la zero value=numpy.zeros((n_in, n_out), dtype=theano.config.floatX), name="W", borrow=True) self.b = theano.shared(value=numpy.zeros(( n_out,), dtype=theano.config.floatX), name="b", borrow=True) # adăugați funcția de activare softmax, ieșirea rețelei este variabilă y_pred self.p_y_given_x = T.nnet.softmax(T.dot(input, self.W) + self.b) self.y_pred = T.argmax(self.p_y_given_x, axis=1) self.params = # definește funcția de eroare def negative_log_likelihood(self, y): return -T.mean(T. log(self.p_y_given_x )) # x - alimentat la intrarea în rețea # un set de imagini (minibatch) este aranjat în rânduri în matrice x # y - răspunsul rețelei la fiecare probă x = T.matrix("x") y = T.ivector("y") # creați un model de regresie logistică fiecare imagine MNIST are o dimensiune de 28*28 clasificator = LogisticRegression(input=x, n_in=28 * 28, n_out=10) # error function value that we are încercând să minimizați în timpul antrenamentului costul = classifier.negative_log_likelihood(y) # pentru a calcula gradienții, trebuie să apelați funcția Theano - grad g_W = T.grad(cost=cost, wrt=classifier.W) g_b = T.grad(cost =cost, wrt=classifier.b) # definiți regulile de actualizare a actualizărilor ponderilor rețelei neuronale = [(classifier.W, classifier.W - learning_rate * g_W), (classifier.b, classifier.b - learning_rate * g_b)] # compilați funcția de antrenament, în viitor va fi apelată în bucla de antrenament train_model = theano.function(inputs =, outputs=cost, updates=updates, givens=( x: train_set_x, y: train_set_y ))


Pentru a salva și încărca rapid parametrii rețelei neuronale, puteți utiliza funcțiile din pachetul cPickle:
import cPickle save_file = open("cale", "wb") cPickle.dump(classifier.W.get_value(borrow=True), save_file, -1) cPickle.dump(classifier.b.get_value(borrow=True), save_file , -1) save_file.close() file = open("cale") classifier.W.set_value(cPickle.load(save_file), borrow=True) classifier.b.set_value(cPickle.load(save_file), borrow=True )
Este ușor de observat că procesul de creare a unui model și de determinare a parametrilor acestuia necesită scrierea unui cod voluminos și zgomotos. Biblioteca este de nivel scăzut. Este imposibil să nu remarci flexibilitatea acestuia, precum și capacitatea de a implementa și utiliza propriile componente. Pe site-ul oficial al bibliotecii există un numar mare de materiale educaționale pe diverse teme.

Compararea bibliotecilor folosind exemplul sarcinii de clasificare a cifrelor scrise de mână

Infrastructura de testare

În timpul experimentelor de evaluare a performanței bibliotecilor, a fost utilizată următoarea infrastructură de testare:
  1. Ubuntu 12.04, Intel core i5-3210M @ 2,5 GHz (experimente cu CPU).
  2. Ubuntu 14.04, Intel Core i5-2430M @ 2.4GHz + NVIDIA GeForce GT 540M (experimente GPU).
  3. GCC 4.8, NVCC 6.5.

Topologii de rețea și parametri de antrenament

Experimentele de calcul au fost efectuate pe rețele neuronale complet conectate și convoluționale cu următoarea structură:

Toate greutățile au fost inițializate aleatoriu conform unei legi de distribuție uniformă în intervalul (−6/(n_in + n_out), 6/(n_in + n_out)), unde n_in, n_out sunt numărul de neuroni la intrarea și la ieșire a stratului , respectiv. Parametrii coborârii gradientului stocastic (SGD) sunt aleși să fie egali cu următoarele valori: rata de învățare - 0,01, impuls - 0,9, scăderea greutății - 5e-4, dimensiunea lotului - 128, numărul maxim de iterații - 150.

Rezultate experimentale

Timpul de antrenament al rețelelor neuronale descrise mai devreme ( , ) folosind cele patru biblioteci considerate este prezentat mai jos (