A Rețeaua neuronală convoluțională (CNN) este un tip de arhitectură de rețea neuronală Deep Learning folosită în mod obișnuit în Computer Vision. Viziunea computerizată este un domeniu al inteligenței artificiale care permite unui computer să înțeleagă și să interpreteze imaginea sau datele vizuale.
Când vine vorba de Machine Learning, Rețele neuronale artificiale performa foarte bine. Rețelele neuronale sunt utilizate în diferite seturi de date, cum ar fi imagini, audio și text. Diferite tipuri de rețele neuronale sunt folosite în scopuri diferite, de exemplu pentru a prezice succesiunea de cuvinte pe care le folosim Rețele neuronale recurente mai precis an LSTM , în mod similar pentru clasificarea imaginilor folosim rețele neuronale de convoluție. În acest blog, vom construi un bloc de bază pentru CNN.
Într-o rețea neuronală obișnuită există trei tipuri de straturi:
- Straturi de intrare: Este stratul în care dăm input modelului nostru. Numărul de neuroni din acest strat este egal cu numărul total de caracteristici din datele noastre (numărul de pixeli în cazul unei imagini).
- Strat ascuns: Intrarea din stratul de intrare este apoi introdusă în stratul ascuns. Pot exista multe straturi ascunse, în funcție de modelul nostru și de dimensiunea datelor. Fiecare strat ascuns poate avea un număr diferit de neuroni, care este în general mai mare decât numărul de caracteristici. Ieșirea de la fiecare strat este calculată prin multiplicarea matricei a ieșirii stratului anterior cu ponderile învățate ale acelui strat și apoi prin adăugarea distorsiunilor de învățare urmată de funcția de activare care face rețeaua neliniară.
- Strat de ieșire: Ieșirea din stratul ascuns este apoi introdusă într-o funcție logistică precum sigmoid sau softmax, care convertește rezultatul fiecărei clase în scorul de probabilitate al fiecărei clase.
Datele sunt introduse în model și ieșirea din fiecare strat este obținută din pasul de mai sus este numit feedforward , apoi calculăm eroarea utilizând o funcție de eroare, unele funcții de eroare comune sunt entropia încrucișată, eroarea de pierdere pătrată etc. Funcția de eroare măsoară cât de bine funcționează rețeaua. După aceea, ne propagam înapoi în model calculând derivatele. Acest pas se numește Convolutional Neural Network (CNN) este versiunea extinsă a rețele neuronale artificiale (ANN) care este utilizat în principal pentru a extrage caracteristica din setul de date matrice asemănător grilei. De exemplu, seturi de date vizuale, cum ar fi imagini sau videoclipuri, în care modelele de date joacă un rol important.
Arhitectura CNN
Rețeaua neuronală convoluțională constă din mai multe straturi, cum ar fi stratul de intrare, stratul convoluțional, stratul de pooling și straturi complet conectate.
abonament azure

Arhitectură CNN simplă
Stratul Convoluțional aplică filtre imaginii de intrare pentru a extrage caracteristicile, stratul Pooling subesantionează imaginea pentru a reduce calculul, iar stratul complet conectat face predicția finală. Rețeaua învață filtrele optime prin retropropagare și coborâre în gradient.
Cum funcționează Straturile Convoluționale
Rețelele neuronale de convoluție sau rețelele covnet sunt rețele neuronale care își împărtășesc parametrii. Imaginează-ți că ai o imagine. Poate fi reprezentat ca un cuboid având lungimea, lățimea (dimensiunea imaginii) și înălțimea (adică canalul ca imaginile are în general canale roșu, verde și albastru).

Acum imaginați-vă că luați un mic petic din această imagine și rulați o rețea neuronală mică, numită filtru sau nucleu pe ea, cu, de exemplu, K ieșiri și reprezentându-le vertical. Acum glisați acea rețea neuronală pe întreaga imagine, ca rezultat, vom obține o altă imagine cu lățimi, înălțimi și adâncimi diferite. În loc de doar canalele R, G și B, acum avem mai multe canale, dar lățime și înălțime mai mici. Această operație se numește Convoluţie . Dacă dimensiunea patch-ului este aceeași cu cea a imaginii, va fi o rețea neuronală obișnuită. Din cauza acestui mic plasture, avem mai puține greutăți.

Sursa imagine: Deep Learning Udacity
Acum să vorbim despre un pic de matematică care este implicat în întregul proces de convoluție.
- Straturile de convoluție constau dintr-un set de filtre (sau nuclee) care pot fi învățate, având lățimi și înălțimi mici și aceeași adâncime ca cea a volumului de intrare (3 dacă stratul de intrare este intrare de imagine).
- De exemplu, dacă trebuie să rulăm convoluția pe o imagine cu dimensiunile 34x34x3. Dimensiunea posibilă a filtrelor poate fi axax3, unde „a” poate fi orice ca 3, 5 sau 7, dar mai mică în comparație cu dimensiunea imaginii.
- În timpul trecerii înainte, glisăm fiecare filtru pe întreg volumul de intrare pas cu pas, unde este numit fiecare pas pas (care poate avea o valoare de 2, 3 sau chiar 4 pentru imaginile cu dimensiuni mari) și calculați produsul punctual dintre greutățile nucleului și patch-ul din volumul de intrare.
- Pe măsură ce glisăm filtrele, vom obține o ieșire 2-D pentru fiecare filtru și, ca rezultat, le vom stivui împreună, vom obține un volum de ieșire cu o adâncime egală cu numărul de filtre. Rețeaua va învăța toate filtrele.
Straturi folosite pentru a construi ConvNets
O arhitectură completă a rețelelor neuronale Convolution este cunoscută și sub numele de covnets. Un covnets este o secvență de straturi și fiecare strat transformă un volum în altul printr-o funcție diferențiabilă.
Tipuri de straturi: seturi de date
Să luăm un exemplu prin rularea unui covnets pe o imagine cu dimensiunea 32 x 32 x 3.
explicați independența datelor
- Straturi de intrare: Este stratul în care dăm input modelului nostru. În CNN, în general, intrarea va fi o imagine sau o secvență de imagini. Acest strat deține intrarea brută a imaginii cu lățime 32, înălțime 32 și adâncime 3.
- Straturi convoluționale: Acesta este stratul, care este folosit pentru a extrage caracteristica din setul de date de intrare. Acesta aplică un set de filtre care pot fi învățate cunoscute sub numele de nuclee imaginilor de intrare. Filtrele/nucleele sunt matrici mai mici, de obicei, de formă 2×2, 3×3 sau 5×5. alunecă peste datele imaginii de intrare și calculează produsul punctual dintre greutatea nucleului și patch-ul de imagine de intrare corespunzător. Ieșirea acestui strat este denumită hărți de caracteristici. Să presupunem că folosim un total de 12 filtre pentru acest strat, vom obține un volum de ieșire de dimensiunea 32 x 32 x 12.
- Strat de activare: Prin adăugarea unei funcții de activare la ieșirea stratului precedent, straturile de activare adaugă neliniaritate rețelei. va aplica o funcție de activare în funcție de element la ieșirea stratului de convoluție. Unele funcții comune de activare sunt RELU : max(0, x), Cu gust de peşte , Leaky RELU , etc. Volumul rămâne neschimbat, prin urmare volumul de ieșire va avea dimensiuni 32 x 32 x 12.
- Stratul de grupare: Acest strat este introdus periodic în covnets, iar funcția sa principală este de a reduce dimensiunea volumului, ceea ce face ca calculul să reducă rapid memoria și, de asemenea, previne supraadaptarea. Două tipuri comune de straturi de grupare sunt pooling maxim și pooling mediu . Dacă folosim o piscină max cu 2 x 2 filtre și stride 2, volumul rezultat va fi de dimensiunea 16x16x12.

Sursa imagine: cs231n.stanford.edu
- Aplatizare: Hărțile caracteristice rezultate sunt aplatizate într-un vector unidimensional după straturile de convoluție și de grupare, astfel încât să poată fi trecute într-un strat complet legat pentru clasificare sau regresie.
- Straturi complet conectate: Preia intrarea din stratul anterior și calculează sarcina finală de clasificare sau regresie.

Sursa imagine: cs231n.stanford.edu
- Strat de ieșire: Ieșirea de la straturile complet conectate este apoi introdusă într-o funcție logistică pentru sarcini de clasificare, cum ar fi sigmoid sau softmax, care convertește rezultatul fiecărei clase în scorul de probabilitate al fiecărei clase.
Exemplu:
Să luăm în considerare o imagine și să aplicăm stratul de convoluție, stratul de activare și operația stratului de grupare pentru a extrage caracteristica interioară.
Imagine de intrare:

Imagine de intrare
Etapa:
- importa bibliotecile necesare
- setați parametrul
- definiți nucleul
- Încărcați imaginea și trasați-o.
- Reformatați imaginea
- Aplicați operația stratului de convoluție și trasați imaginea de ieșire.
- Aplicați operația stratului de activare și trasați imaginea de ieșire.
- Aplicați operația de grupare a stratului și trasați imaginea de ieșire.
Python3
# import the necessary libraries> import> numpy as np> import> tensorflow as tf> import> matplotlib.pyplot as plt> from> itertools>import> product> > # set the param> plt.rc(>'figure'>, autolayout>=>True>)> plt.rc(>'image'>, cmap>=>'magma'>)> > # define the kernel> kernel>=> tf.constant([[>->1>,>->1>,>->1>],> >[>->1>,>8>,>->1>],> >[>->1>,>->1>,>->1>],> >])> > # load the image> image>=> tf.io.read_file(>'Ganesh.webp'plain'>)>>> tf.io.decode_jpeg(image, channels>=>1>)> image>=> tf.image.resize(image, size>=>[>300>,>300>])> > # plot the image> img>=> tf.squeeze(image).numpy()> plt.figure(figsize>=>(>5>,>5>))> plt.imshow(img, cmap>=>'gray'>)> plt.axis(>'off'>)> plt.title(>'Original Gray Scale image'>)> plt.show();> > > # Reformat> image>=> tf.image.convert_image_dtype(image, dtype>=>tf.float32)> image>=> tf.expand_dims(image, axis>=>0>)> kernel>=> tf.reshape(kernel, [>*>kernel.shape,>1>,>1>])> kernel>=> tf.cast(kernel, dtype>=>tf.float32)> > # convolution layer> conv_fn>=> tf.nn.conv2d> > image_filter>=> conv_fn(> >input>=>image,> >filters>=>kernel,> >strides>=>1>,># or (1, 1)> >padding>=>'SAME'>,> )> > plt.figure(figsize>=>(>15>,>5>))> > # Plot the convolved image> plt.subplot(>1>,>3>,>1>)> > plt.imshow(> >tf.squeeze(image_filter)> )> plt.axis(>'off'>)> plt.title(>'Convolution'>)> > # activation layer> relu_fn>=> tf.nn.relu> # Image detection> image_detect>=> relu_fn(image_filter)> > plt.subplot(>1>,>3>,>2>)> plt.imshow(> ># Reformat for plotting> >tf.squeeze(image_detect)> )> > plt.axis(>'off'>)> plt.title(>'Activation'>)> > # Pooling layer> pool>=> tf.nn.pool> image_condense>=> pool(>input>=>image_detect,> >window_shape>=>(>2>,>2>),> >pooling_type>=>'MAX'>,> >strides>=>(>2>,>2>),> >padding>=>'SAME'>,> >)> > plt.subplot(>1>,>3>,>3>)> plt.imshow(tf.squeeze(image_condense))> plt.axis(>'off'>)> plt.title(>'Pooling'>)> plt.show()> |
obiect java
>
>
Ieșire :

Imagine originală în tonuri de gri

Ieșire
Avantajele rețelelor neuronale convoluționale (CNN):
- Este bun la detectarea modelelor și caracteristicilor în imagini, videoclipuri și semnale audio.
- Robuste la translație, rotație și invarianță de scalare.
- Antrenament de la capăt la capăt, nu este nevoie de extragerea manuală a caracteristicilor.
- Poate gestiona cantități mari de date și poate obține o precizie ridicată.
Dezavantajele rețelelor neuronale convoluționale (CNN):
- Este costisitor din punct de vedere informatic de antrenat și necesită multă memorie.
- Poate fi predispus la supraadaptare dacă nu se utilizează suficiente date sau o regularizare adecvată.
- Necesită cantități mari de date etichetate.
- Interpretabilitatea este limitată, este greu de înțeles ce a învățat rețeaua.
Întrebări frecvente (FAQs)
1: Ce este o rețea neuronală convoluțională (CNN)?
O rețea neuronală convoluțională (CNN) este un tip de rețea neuronală de învățare profundă care este potrivită pentru analiza imaginilor și video. CNN-urile folosesc o serie de straturi de convoluție și de grupare pentru a extrage caracteristici din imagini și videoclipuri, apoi folosesc aceste caracteristici pentru a clasifica sau detecta obiecte sau scene.
cum se returnează o matrice java
2: Cum funcționează CNN-urile?
CNN-urile funcționează prin aplicarea unei serii de straturi de convoluție și de grupare la o imagine sau un videoclip de intrare. Straturile de convoluție extrag caracteristici din intrare prin glisarea unui filtru mic, sau nucleu, peste imagine sau video și calculând produsul punctual dintre filtru și intrare. Straturile de grupare apoi eșantionează ulterior rezultatul straturilor de convoluție pentru a reduce dimensionalitatea datelor și a le face mai eficiente din punct de vedere computațional.
3: Care sunt câteva funcții de activare comune utilizate în CNN-uri?
Unele funcții de activare comune utilizate în CNN includ:
- Rectified Linear Unit (ReLU): ReLU este o funcție de activare nesaturatoare, eficientă din punct de vedere computațional și ușor de antrenat.
- Leaky Rectified Linear Unit (Leaky ReLU): Leaky ReLU este o variantă a ReLU care permite o cantitate mică de gradient negativ să curgă prin rețea. Acest lucru poate ajuta la prevenirea morții rețelei în timpul antrenamentului.
- Parametric Rectified Linear Unit (PReLU): PReLU este o generalizare a Leaky ReLU care permite învățarea pantei gradientului negativ.
4: Care este scopul utilizării mai multor straturi de convoluție într-un CNN?
Utilizarea mai multor straturi de convoluție într-un CNN permite rețelei să învețe caracteristici din ce în ce mai complexe din imaginea sau videoclipul de intrare. Primele straturi de convoluție învață caracteristici simple, cum ar fi marginile și colțurile. Straturile de convoluție mai profunde învață caracteristici mai complexe, cum ar fi forme și obiecte.
5: Care sunt unele tehnici comune de regularizare utilizate în CNN-uri?
Tehnicile de regularizare sunt folosite pentru a preveni ca CNN-urile să supraajusteze datele de antrenament. Unele tehnici comune de regularizare utilizate în CNN includ:
- Abandonul: abandonul elimină aleatoriu neuronii din rețea în timpul antrenamentului. Acest lucru obligă rețeaua să învețe caracteristici mai robuste care nu depind de niciun neuron unic.
- Regularizare L1: regularizarea L1 se regularizează valoarea absolută a greutăților din rețea. Acest lucru poate ajuta la reducerea numărului de greutăți și la eficientizarea rețelei.
- Regularizare L2: regularizarea L2 se regularizează pătratul greutăților din rețea. Acest lucru poate ajuta, de asemenea, la reducerea numărului de greutăți și la eficientizarea rețelei.
6: Care este diferența dintre un strat de convoluție și un strat de pooling?
Un strat de convoluție extrage caracteristici dintr-o imagine de intrare sau dintr-un videoclip, în timp ce un strat de grupare reduce eșantionarea ieșirii straturilor de convoluție. Straturile de convoluție folosesc o serie de filtre pentru a extrage caracteristici, în timp ce straturile de pooling folosesc o varietate de tehnici pentru a subeșantiona datele, cum ar fi pooling maxim și pooling mediu.