A Konvoliucinis neuronų tinklas (CNN) yra gilaus mokymosi neuroninio tinklo architektūros tipas, dažniausiai naudojamas Computer Vision. Kompiuterinis regėjimas yra dirbtinio intelekto sritis, leidžianti kompiuteriui suprasti ir interpretuoti vaizdą ar vaizdinius duomenis.
Kalbant apie mašininį mokymąsi, Dirbtiniai neuroniniai tinklai pasirodyti tikrai gerai. Neuroniniai tinklai naudojami įvairiuose duomenų rinkiniuose, tokiuose kaip vaizdai, garsas ir tekstas. Įvairių tipų neuroniniai tinklai naudojami skirtingiems tikslams, pavyzdžiui, nuspėti naudojamų žodžių seką Pasikartojantys neuroniniai tinklai tiksliau an LSTM , panašiai vaizdų klasifikavimui naudojame Convolution Neural Networks. Šiame tinklaraštyje mes ketiname sukurti pagrindinį CNN bloką.
Įprastame neuroniniame tinkle yra trijų tipų sluoksniai:
- Įvesties sluoksniai: Tai sluoksnis, kuriame įvedame į savo modelį. Neuronų skaičius šiame sluoksnyje yra lygus bendram mūsų duomenų ypatybių skaičiui (vaizdo atveju pikselių skaičiui).
- Paslėptas sluoksnis: Tada įvesties sluoksnio įvestis įvedama į paslėptą sluoksnį. Gali būti daug paslėptų sluoksnių, atsižvelgiant į mūsų modelį ir duomenų dydį. Kiekvienas paslėptas sluoksnis gali turėti skirtingą neuronų skaičių, kuris paprastai yra didesnis nei funkcijų skaičius. Kiekvieno sluoksnio išvestis apskaičiuojama matriciniu būdu padauginus ankstesnio sluoksnio išvestį iš to sluoksnio išmokstamų svorių, o tada pridedant mokomus paklaidas, po kurių seka aktyvinimo funkcija, dėl kurios tinklas tampa netiesinis.
- Išvesties sluoksnis: Tada paslėpto sluoksnio išvestis įvedama į logistinę funkciją, pvz., Sigmoid arba softmax, kuri konvertuoja kiekvienos klasės išvestį į kiekvienos klasės tikimybę.
Duomenys įvedami į modelį ir iš kiekvieno sluoksnio gaunama išvestis iš pirmiau nurodyto žingsnio pirmyn , tada apskaičiuojame klaidą naudodami klaidos funkciją, kai kurios dažniausiai pasitaikančios klaidų funkcijos yra kryžminė entropija, kvadratinių nuostolių klaida ir kt. Klaidos funkcija matuoja, kaip gerai veikia tinklas. Po to mes grįžtame į modelį, apskaičiuodami išvestines. Šis žingsnis vadinamas Konvoliucinis neuronų tinklas (CNN) yra išplėstinė versija dirbtiniai neuroniniai tinklai (ANN) kuri dažniausiai naudojama funkcijai išgauti iš tinklelio tipo matricos duomenų rinkinio. Pavyzdžiui, vaizdiniai duomenų rinkiniai, pvz., vaizdai ar vaizdo įrašai, kuriuose duomenų šablonai atlieka didelį vaidmenį.
CNN architektūra
Konvoliucinis neuroninis tinklas susideda iš kelių sluoksnių, tokių kaip įvesties sluoksnis, konvoliucinis sluoksnis, telkimo sluoksnis ir visiškai sujungti sluoksniai.

Paprasta CNN architektūra
Konvoliucinis sluoksnis taiko filtrus įvesties vaizdui, kad išskirtų funkcijas, jungimo sluoksnis sumažina vaizdo mėginius, kad sumažintų skaičiavimą, o visiškai prijungtas sluoksnis pateikia galutinį numatymą. Tinklas mokosi optimalių filtrų per atgalinį sklidimą ir gradiento nusileidimą.
Kaip veikia konvoliuciniai sluoksniai
Konvoliucijos neuroniniai tinklai arba covnetai yra neuroniniai tinklai, kurie dalijasi savo parametrais. Įsivaizduokite, kad turite vaizdą. Jis gali būti pavaizduotas kaip stačiakampis, kurio ilgis, plotis (vaizdo matmenys) ir aukštis (ty kanalas, nes vaizdai paprastai turi raudonus, žalius ir mėlynus kanalus).

Dabar įsivaizduokite, kad paimsite nedidelį šio vaizdo lopinėlį ir paleiskite nedidelį neuroninį tinklą, vadinamą filtru arba branduoliu, su, tarkime, K išvesčiais ir pavaizduokite juos vertikaliai. Dabar perbraukite tą neuroninį tinklą per visą vaizdą, todėl gausime kitą vaizdą su skirtingais pločiais, aukščiais ir gyliais. Vietoj R, G ir B kanalų dabar turime daugiau kanalų, bet mažesnio pločio ir aukščio. Ši operacija vadinama Konvoliucija . Jei pataisos dydis yra toks pat kaip vaizdo, tai bus įprastas neuroninis tinklas. Dėl šio mažo pleitro turime mažiau svarmenų.

Vaizdo šaltinis: Deep Learning Udacity
Dabar pakalbėkime apie šiek tiek matematikos, kuri dalyvauja visame konvoliucijos procese.
- Konvoliucijos sluoksniai susideda iš mokomų filtrų (arba branduolių), kurių plotis ir aukštis yra nedideli, o gylis yra toks pat kaip įvesties apimtis (3, jei įvesties sluoksnis yra vaizdo įvestis), rinkinio.
- Pavyzdžiui, jei turime vykdyti konvoliuciją vaizde, kurio matmenys yra 34x34x3. Galimas filtrų dydis gali būti axax3, kur „a“ gali būti 3, 5 arba 7, bet mažesnis, palyginti su vaizdo matmeniu.
- Perėjimo į priekį metu kiekvieną filtrą žingsnis po žingsnio stumiame per visą įvesties garsumą, kur kiekvienas veiksmas vadinamas žingsnis (kurios reikšmė gali būti 2, 3 arba net 4, jei tai yra dideli vaizdai) ir apskaičiuokite taško sandaugą tarp branduolio svorių ir pataisos iš įvesties tūrio.
- Slenkdami filtrus gausime 2-D išvestį kiekvienam filtrui ir dėl to juos sujungsime, gausime išvesties tūrį, kurio gylis lygus filtrų skaičiui. Tinklas išmoks naudoti visus filtrus.
Sluoksniai, naudojami kuriant ConvNets
Visa Convolution Neural Networks architektūra taip pat žinoma kaip covnets. Kovnetai yra sluoksnių seka, ir kiekvienas sluoksnis paverčia vieną tūrį į kitą per diferencijuojamą funkciją.
Sluoksnių tipai: duomenų rinkinius
Paimkime pavyzdį, paleisdami 32 x 32 x 3 dydžio vaizdo kovnetą.
- Įvesties sluoksniai: Tai sluoksnis, kuriame įvedame į savo modelį. CNN paprastai įvestis bus vaizdas arba vaizdų seka. Šiame sluoksnyje saugoma neapdorota vaizdo įvestis, kurios plotis 32, aukštis 32 ir gylis 3.
- Konvoliuciniai sluoksniai: Tai yra sluoksnis, naudojamas funkcijai iš įvesties duomenų rinkinio išskirti. Įvesties vaizdams taiko mokomų filtrų rinkinį, vadinamą branduoliais. Filtrai / branduoliai yra mažesnės matricos, paprastai 2 × 2, 3 × 3 arba 5 × 5 formos. jis slysta per įvesties vaizdo duomenis ir apskaičiuoja taško sandaugą tarp branduolio svorio ir atitinkamo įvesties vaizdo pataisos. Šio sluoksnio išvestis vadinama funkcijų žemėlapiais. Tarkime, kad šiam sluoksniui iš viso naudosime 12 filtrų, gausime 32 x 32 x 12 išvesties tūrį.
- Aktyvinimo sluoksnis: Pridėjus aktyvinimo funkciją prie ankstesnio sluoksnio išvesties, aktyvinimo sluoksniai suteikia tinklui netiesiškumo. Konvoliucijos sluoksnio išvestis taikys elementų aktyvinimo funkciją. Kai kurios įprastos aktyvinimo funkcijos yra Aprašymas : maks.(0, x), Žuvis , Nesandarus RELU ir tt Garsas nesikeičia, todėl išvesties apimtis bus 32 x 32 x 12.
- Sujungimo sluoksnis: Šis sluoksnis periodiškai įterpiamas į covnet'us, o jo pagrindinė funkcija yra sumažinti tūrio dydį, todėl skaičiavimas greitai sumažina atmintį ir taip pat apsaugo nuo per didelio pritaikymo. Yra du įprasti telkimo sluoksnių tipai maksimalus telkimas ir vidutinis telkimas . Jei naudosime maksimalų baseiną su 2 x 2 filtrais ir 2 žingsnį, gautas tūris bus 16 x 16 x 12 dydžio.

Vaizdo šaltinis: cs231n.stanford.edu
- Išlyginimas: Gauti ypatybių žemėlapiai po konvoliucijos ir sujungimo sluoksnių suplokštinami į vienmatį vektorių, kad juos būtų galima perkelti į visiškai susietą sluoksnį, kad būtų galima klasifikuoti arba regresuoti.
- Visiškai sujungti sluoksniai: Jis paima įvestį iš ankstesnio sluoksnio ir apskaičiuoja galutinę klasifikavimo arba regresijos užduotį.

Vaizdo šaltinis: cs231n.stanford.edu
- Išvesties sluoksnis: Tada visiškai sujungtų sluoksnių išvestis įvedama į logistinę funkciją, skirtą klasifikavimo užduotims, pvz., sigmoid arba softmax, kuri konvertuoja kiekvienos klasės išvestį į kiekvienos klasės tikimybę.
Pavyzdys:
Panagrinėkime vaizdą ir pritaikykime konvoliucijos sluoksnį, aktyvinimo sluoksnį ir telkimo sluoksnio operaciją, kad išgautume vidinę funkciją.
Įvesties vaizdas:
java sūpynės

Įvesties vaizdas
Žingsnis:
- importuoti reikiamas bibliotekas
- nustatykite parametrą
- apibrėžti branduolį
- Įkelkite vaizdą ir nubrėžkite jį.
- Performatuokite vaizdą
- Taikykite konvoliucijos sluoksnio operaciją ir nubraižykite išvesties vaizdą.
- Taikykite aktyvinimo sluoksnio operaciją ir nubraižykite išvesties vaizdą.
- Taikykite telkimo sluoksnio operaciją ir nubraižykite išvesties vaizdą.
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()> |
>
>
Išvestis :

Originalus pilkų tonų vaizdas

Išvestis
Konvoliucinių neuronų tinklų (CNN) pranašumai:
- Puikiai aptinka vaizdų, vaizdo įrašų ir garso signalų šablonus ir funkcijas.
- Tvirtas vertimui, sukimui ir mastelio keitimui.
- Išsamus mokymas, nereikia rankiniu būdu išgauti funkcijų.
- Gali tvarkyti didelius duomenų kiekius ir pasiekti aukštą tikslumą.
Konvoliucinių neuronų tinklų (CNN) trūkumai:
- Skaičiavimo požiūriu brangu treniruotis ir reikalauja daug atminties.
- Gali būti per daug pritaikyta, jei nepakanka duomenų arba naudojamas tinkamas reguliavimas.
- Reikalingas didelis kiekis pažymėtų duomenų.
- Aiškinamumas ribotas, sunku suprasti, ko tinklas išmoko.
Dažnai užduodami klausimai (DUK)
1: Kas yra konvoliucinis neuroninis tinklas (CNN)?
Konvoliucinis neuroninis tinklas (CNN) yra gilaus mokymosi neuroninio tinklo tipas, kuris puikiai tinka vaizdų ir vaizdo įrašų analizei. CNN naudoja daugybę konvoliucijos ir telkimo sluoksnių, kad išskirtų funkcijas iš vaizdų ir vaizdo įrašų, o tada naudoja šias funkcijas objektams ar scenoms klasifikuoti arba aptikti.
2: Kaip veikia CNN?
CNN veikia įvesties vaizdui ar vaizdo įrašui taikydami konvoliucijos ir sujungimo sluoksnius. Konvoliucijos sluoksniai ištraukia funkcijas iš įvesties, stumdami nedidelį filtrą arba branduolį virš vaizdo ar vaizdo įrašo ir apskaičiuodami taškinį sandaugą tarp filtro ir įvesties. Sluoksnių sujungimas sumažina konvoliucijos sluoksnių išvesties mėginius, kad sumažintų duomenų matmenis ir padidintų jų skaičiavimo efektyvumą.
3: Kokios yra kai kurios įprastos aktyvinimo funkcijos, naudojamos CNN?
Kai kurios įprastos aktyvinimo funkcijos, naudojamos CNN:
- Ištaisytas tiesinis vienetas (ReLU): ReLU yra neprisotinanti aktyvinimo funkcija, kuri yra efektyvi skaičiavimo požiūriu ir lengvai treniruojama.
- Nesandarus ištaisytas linijinis blokas (Leaky ReLU): Nesandarus ReLU yra ReLU variantas, leidžiantis per tinklą tekėti nedideliam kiekiui neigiamo gradiento. Tai gali padėti išvengti tinklo išmirimo treniruotės metu.
- Parametrinis ištaisytas tiesinis vienetas (PReLU): PReLU yra Leaky ReLU apibendrinimas, leidžiantis sužinoti neigiamo gradiento nuolydį.
4: Koks yra kelių konvoliucijos sluoksnių naudojimo CNN tikslas?
Naudojant kelis konvoliucijos sluoksnius CNN tinklas gali išmokti vis sudėtingesnių funkcijų iš įvesties vaizdo ar vaizdo įrašo. Pirmieji konvoliucijos sluoksniai išmoksta paprastų funkcijų, tokių kaip kraštai ir kampai. Gilesni konvoliucijos sluoksniai išmoksta sudėtingesnių savybių, tokių kaip formos ir objektai.
5: Kokie yra įprasti reguliavimo metodai, naudojami CNN?
Reguliavimo metodai naudojami siekiant užkirsti kelią CNN per daug pritaikyti treniruočių duomenis. Kai kurie įprasti reguliavimo metodai, naudojami CNN, yra šie:
java skaityti csv failą
- Dropout: Dropout atsitiktinai pašalina neuronus iš tinklo treniruotės metu. Tai verčia tinklą išmokti tvirtesnių funkcijų, kurios nepriklauso nuo vieno neurono.
- L1 reguliavimas: L1 reguliavimas sureguliuoja absoliuti svorių vertė tinkle. Tai gali padėti sumažinti svorių skaičių ir padaryti tinklą efektyvesnį.
- L2 reguliavimas: L2 reguliavimas sureguliuoja svorių kvadratas tinkle. Tai taip pat gali padėti sumažinti svorių skaičių ir padaryti tinklą efektyvesnį.
6: Kuo skiriasi konvoliucijos sluoksnis ir telkiamasis sluoksnis?
Konvoliucijos sluoksnis išskiria funkcijas iš įvesties vaizdo arba vaizdo įrašo, o kaupiamasis sluoksnis sumažina konvoliucijos sluoksnių išvesties mėginius. Konvoliucijos sluoksniai naudoja daugybę filtrų funkcijoms išgauti, o telkimo sluoksniai naudoja įvairius metodus, kad sumažintų duomenų atranką, pvz., maksimalus telkimas ir vidutinis telkimas.