Tabl Cynnwys[Cuddio][Dangos]
Mae'r ymennydd yn debyg i rwydweithiau niwral. Dyma'r gyfatebiaeth a ddefnyddir yn nodweddiadol i gynorthwyo rhywun sy'n newydd i'r pwnc i ddeall y syniadau y tu ôl i ddysgu peirianyddol a rhwydweithiau niwral artiffisial.
Oherwydd bod sawl haen o gyfrifiannau mathemategol ac ystadegol yn digwydd y tu ôl i'r llenni, mae diffinio'r rhwydweithiau hyn fel swyddogaeth fathemategol yn ddull mwy datblygedig.
Mae hyn ar gyfer y bobl sydd â diddordeb mewn dysgu peirianyddol ac sydd eisiau gweld sut mae cod rhwydwaith niwral Python yn cael ei ysgrifennu.
Yn yr erthygl hon, byddwn yn dangos sut i adeiladu rhwydwaith niwral dwfn wedi'i gysylltu'n llawn (DNN) o'r dechrau Python 3.
Trosolwg o'r Strwythur Ffeil ar gyfer Ein Cod Rhwydwaith Niwral Python
Bydd tair ffeil yn cael eu creu yma. Y cyntaf yw'r ffeil nn.py syml, a fydd yn cael ei drafod yn “Setting Up Helper Functions” ac “Adeiladu'r Rhwydwaith Niwral o Scratch.”
Bydd gennym hefyd ffeil o'r enw mnist loader.py i lwytho'r data prawf, fel y disgrifir yn “Llwytho Data MNIST.”
Yn olaf, bydd gennym ffeil o'r enw test.py a fydd yn cael ei lansio yn y derfynell i brofi ein rhwydwaith niwral.
Disgrifir y ffeil hon yn fanwl yn “Rhedeg Profion.”
Gosod
Rhaid lawrlwytho llyfrgell NumPy Python er mwyn dilyn y tiwtorial hwn. Gallwch chi gyflawni hyn trwy ddefnyddio'r gorchymyn canlynol ar y derfynell:
Mewnforio Modiwlau a sefydlu'r swyddogaeth Helper
Yr unig ddwy lyfrgell sydd eu hangen arnom yw hap a NumPy, y byddwn yn eu mewnforio ar unwaith. Ar gyfer pwysau cychwynnol ein rhwydwaith niwral, byddwn yn eu cymysgu gan ddefnyddio'r llyfrgell ar hap.
Er mwyn cyflymu ein cyfrifiannau, byddwn yn defnyddio NumPy neu np (yn ôl confensiwn, mae'n aml yn cael ei fewnforio fel np). Bydd ein dwy swyddogaeth cynorthwyydd yn cael eu gwneud ar ôl ein mewnforion. Dwy swyddogaeth sigmoid: un a chysefin sigmoid.
Bydd atchweliad logistaidd yn dosbarthu data gan ddefnyddio'r ffwythiant sigmoid, tra bydd backpropagation yn cyfrifo'r delta neu'r graddiant gan ddefnyddio'r ffwythiant cysefin sigmoid.
Creu Dosbarth Rhwydwaith
Adeiladu rhwydwaith niwral cwbl gysylltiedig yw unig ffocws yr adran hon. Bydd y dosbarth rhwydwaith yn cwmpasu'r holl swyddogaethau sy'n dod ar ôl. Bydd y ffwythiant Gwrthrych() { [cod brodorol] } yn cael ei greu i ddechrau yn ein dosbarth rhwydwaith.
Mae angen un ddadl, meintiau, gan y ffwythiant Gwrthrych() { [cod brodorol] }. Mae'r newidyn meintiau yn gasgliad o werthoedd rhifol sy'n cynrychioli nifer y nodau mewnbwn sy'n bresennol ym mhob haen o'n rhwydwaith niwral.
Rydym yn cychwyn pedwar priodwedd yn ein dull __init__. Defnyddir y newidynnau mewnbwn, meintiau, i osod y rhestr o feintiau haenau a nifer yr haenau, nifer yr haenau, yn y drefn honno.
Y cam cyntaf yw neilltuo ar hap ogwyddiadau cychwynnol ein rhwydwaith i bob haen sy'n dilyn yr haen fewnbwn.
Yn olaf, mae pob cyswllt rhwng yr haenau mewnbwn ac allbwn yn cael ei bwysau a gynhyrchir ar hap. Mae Np.Random.Randn() yn rhoi hapsampl wedi'i dynnu o'r dosraniad normal ar gyfer cyd-destun.
Swyddogaeth Bwydo Ymlaen
Mewn rhwydwaith niwral, anfonir gwybodaeth ymlaen gan y swyddogaeth bwydo ymlaen. Bydd angen un ddadl, a, sy'n nodi'r fector actifadu cyfredol, ar gyfer y swyddogaeth hon.
Mae'r swyddogaeth hon yn amcangyfrif yr actifadu ar bob haen trwy ailadrodd dros yr holl ragfarnau a phwysau yn y rhwydwaith. Yr ateb a roddir yw'r rhagfynegiad, sef actifadu'r haen olaf.
Disgyniad Graddiant swp bach
Ceffyl gwaith ein dosbarth Rhwydwaith yw Disgyniad Graddiant. Yn y fersiwn hwn, rydym yn defnyddio disgyniad graddiant swp bach (stochastig), amrywiad wedi'i addasu o ddisgyniad graddiant.
Mae hyn yn dangos y bydd swp bach o bwyntiau data yn cael eu defnyddio i ddiweddaru ein model. Mae angen pedair ac un ddadl ddewisol yn cael eu trosglwyddo i'r dull hwn. Y pedwar newidyn gofynnol yw'r set ddata hyfforddi, nifer yr cyfnodau, maint y sypiau bach, a'r gyfradd ddysgu (eta).
Mae data prawf ar gael ar gais. Byddwn yn cyflenwi data prawf pan fyddwn yn gwerthuso'r rhwydwaith hwn yn y pen draw. Mae nifer y samplau yn y swyddogaeth hon yn cael ei osod i hyd y rhestr i ddechrau unwaith y bydd y data hyfforddi wedi'i drawsnewid yn fath o restr.
Rydym hefyd yn defnyddio'r un broses i brofi data a roddir i mewn. Mae hyn oherwydd yn hytrach na chael eu dychwelyd atom fel rhestrau, maent yn wir yn sipiau o restrau. Pan fyddwn yn llwytho'r samplau data MNIST yn ddiweddarach, byddwn yn dysgu mwy am hyn.
Os gallwn sicrhau ein bod yn darparu'r ddau fath o ddata fel rhestrau, yna nid yw'r math hwn o gastio o reidrwydd yn hanfodol.
Unwaith y bydd gennym y data, rydym yn mynd dros y cyfnodau hyfforddi mewn dolen. Dim ond un rownd o hyfforddiant rhwydwaith niwral yw cyfnod hyfforddi. Yn gyntaf byddwn yn cymysgu'r data ym mhob cyfnod i sicrhau haprwydd cyn gwneud rhestr o sypiau bach.
Bydd y swyddogaeth swp mini diweddaru, a drafodir isod, yn cael ei alw ar gyfer pob swp bach. Bydd cywirdeb y prawf hefyd yn cael ei ddychwelyd os yw data'r prawf ar gael.
Swyddogaeth cynorthwyydd cost-deilliadol
Gadewch i ni ddatblygu swyddogaeth cynorthwyydd o'r enw deilliad cost yn gyntaf cyn i ni greu'r cod backpropagation mewn gwirionedd. Os byddwn yn gwneud camgymeriad yn ein haen allbwn, bydd y swyddogaeth deilliadol cost yn ei ddangos.
Mae angen dau fewnbwn: yr arae actifadu allbwn a chyfesurynnau y y gwerthoedd allbwn a ragwelir.
Swyddogaeth backpropagation
Rhaid cofio ein fector actifadu presennol, actifadu, yn ogystal ag unrhyw fectorau actifadu, actifadau, a fectorau z, zs. Mae haen o'r enw'r haen mewnbwn yn cael ei actifadu yn gyntaf.
Byddwn yn dolennu trwy bob gogwydd a phwysau ar ôl eu gosod. Mae pob dolen yn cynnwys cyfrifo'r fector z fel cynnyrch dot y pwysau a'r actifadu, ei ychwanegu at y rhestr o zs, ailgyfrifo'r actifadu, ac ychwanegu'r actifadu wedi'i ddiweddaru at y rhestr o actifadau.
Yn olaf, y mathemateg. Mae'r delta, sy'n hafal i'r cyfeiliornad o'r haen flaenorol wedi'i luosi â'r cysefin sigmoid o elfen olaf y fectorau z, yn cael ei gyfrifo cyn i ni ddechrau ein llwybr yn ôl.
Mae haen olaf nabla b wedi'i gosod i fod y delta, a'r haen olaf o nabla w wedi'i gosod i fod yn gynnyrch dot y delta a'r ail haen i'r olaf o actifadau (wedi'i drawsosod fel y gallwn wneud y mathemateg mewn gwirionedd) .
Rydym yn symud ymlaen fel o'r blaen, gan ddechrau gyda'r ail haen a gorffen gyda'r olaf, ac ailadrodd y broses ar ôl cwblhau'r haenau olaf hyn. Yna rhoddir y nablas yn ôl fel tuple.
Diweddaru disgyniad graddiant swp Mini
Mae ein dull SGD (disgyniad graddiant stocastig) o'r blaen yn cynnwys diweddaru swp bach. Gan ei fod yn cael ei ddefnyddio yn SGD ond hefyd yn gofyn am wrth gefn, bûm yn dadlau ble i roi'r swyddogaeth hon.
Yn olaf, fe wnes i ddewis ei bostio yma. Mae'n dechrau trwy gynhyrchu 0 fector o'r gogwyddiadau a'r pwysau nablas, yn union fel y gwnaeth ein ffwythiant cefnlen.
Mae angen y swp bach a'r gyfradd ddysgu eta fel ei ddau fewnbwn. Yn y swp bach, rydyn ni wedyn yn defnyddio'r swyddogaeth backprop i gael delta pob arae nabla ar gyfer pob mewnbwn, x, ac allbwn, y. Yna caiff y rhestrau nabla eu diweddaru gyda'r deltas hyn.
Yn olaf, rydym yn defnyddio'r gyfradd ddysgu a'r nablas i ddiweddaru pwysau a thueddiadau'r rhwydwaith. Mae pob gwerth yn cael ei ddiweddaru i'r gwerth mwyaf diweddar, llai'r gyfradd ddysgu, wedi'i luosi â maint y swp bach, ac yna'n cael ei ychwanegu at y gwerth nabla.
Gwerthuso swyddogaeth
Y swyddogaeth gwerthuso yw'r un olaf y mae angen i ni ei hysgrifennu. Y data prawf yw'r unig fewnbwn ar gyfer y swyddogaeth hon. Yn y swyddogaeth hon, rydym ond yn cymharu allbynnau'r rhwydwaith â'r canlyniad a ragwelir, y. Trwy fwydo'r mewnbwn, x, ymlaen, mae allbynnau'r rhwydwaith yn cael eu pennu.
Cod Cwblhau
Pan fyddwn yn cyfuno'r holl god, dyma sut mae'n ymddangos.
Profi Rhwydwaith Niwral
Wrthi'n llwytho data MNIST
Mae adroddiadau Data MNIST mewn fformat .pkl.gz, y byddwn yn ei agor gan ddefnyddio GZIP a'i lwytho â phicl. Gadewch i ni ysgrifennu dull cyflym i lwytho'r data hwn fel tuple o faint tri, wedi'i rannu'n ddata hyfforddi, dilysu a phrofi.
Er mwyn gwneud ein data yn haws i'w reoli, byddwn yn ysgrifennu swyddogaeth arall i amgodio'r y i mewn i gyfres 10-eitem. Bydd yr arae i gyd yn 0s ac eithrio 1 sy'n cyfateb i ddigid cywir y ddelwedd.
Byddwn yn defnyddio'r data llwyth sylfaenol ac un dull amgodio poeth i lwytho ein data i fformat darllenadwy. Bydd swyddogaeth arall yn cael ei hysgrifennu a fydd yn trosi ein gwerthoedd x yn rhestr o faint 784, sy'n cyfateb i 784 picsel y ddelwedd, a'n gwerthoedd y yn eu ffurf fector sengl wedi'i amgodio'n boeth.
Yna byddwn yn cyfuno'r gwerthoedd x ac y fel bod un mynegai yn cyfateb i'r llall. Mae hyn yn berthnasol i'r hyfforddiant, dilysu, a setiau data prawf. Yna byddwn yn dychwelyd y data wedi'i newid.
Profion Rhedeg
Byddwn yn gwneud ffeil newydd o'r enw “llwythwr mnist” a fydd yn mewnforio'r rhwydwaith niwral a sefydlwyd gennym yn flaenorol (nn syml) a'r llwythwr set ddata MNIST cyn i ni ddechrau profi.
Yn y ffeil hon, y cyfan sydd angen i ni ei wneud yw mewnforio'r data, adeiladu rhwydwaith gyda maint haen mewnbwn o 784 a maint haen allbwn o 10, rhedeg swyddogaeth SGD y rhwydwaith ar y data hyfforddi, yna ei brofi gan ddefnyddio'r data prawf.
Cofiwch, ar gyfer ein rhestr o haenau mewnbwn, nad yw'n gwneud unrhyw wahaniaeth beth yw unrhyw un o'r rhifau rhwng 784 a 10. Gallwn newid yr haenau eraill unrhyw ffordd y dymunwn; dim ond y meintiau mewnbwn ac allbwn sy'n sefydlog.
Nid oes angen tair haen; efallai y byddwn yn defnyddio pedwar, pump, neu hyd yn oed dim ond dau. Cael hwyl yn arbrofi ag ef.
Casgliad
Yma, gan ddefnyddio Python 3, rydym yn creu rhwydwaith niwral o'r dechrau. Ynghyd â mathemateg lefel uchel, buom hefyd yn trafod manylion gweithredu.
Dechreuon ni trwy weithredu swyddogaethau cynorthwyydd. Er mwyn i'r niwronau weithio, mae'r ffwythiannau cysefin sigmoid a sigmoid yn hollbwysig. Yna byddwn yn rhoi'r swyddogaeth bwydo ymlaen ar waith, sef y broses sylfaenol ar gyfer bwydo data i'r rhwydwaith niwral.
Nesaf, fe wnaethon ni greu'r swyddogaeth disgyniad graddiant yn Python, yr injan sy'n gyrru ein rhwydwaith niwral. Er mwyn lleoli “minima lleol” a gwneud y gorau o'u pwysau a'u rhagfarnau, mae ein rhwydwaith niwral yn defnyddio disgyniad graddiant. Rydym yn creu y swyddogaeth backpropagation gan ddefnyddio disgyniad graddiant.
Trwy gyflwyno diweddariadau pan nad yw'r allbynnau'n cyd-fynd â'r labeli cywir, mae'r swyddogaeth hon yn galluogi'r rhwydwaith niwral i “ddysgu.”
Yn olaf, rydyn ni'n rhoi ein Python newydd sbon rhwydwaith nefol i'r prawf gan ddefnyddio set ddata MNIST. Gweithredodd popeth yn llyfn.
Codio Hapus!
Gadael ymateb