Мундариҷа[Пинҳон кардан][Намоиш]
Майнаро бо шабакаҳои нейронӣ муқоиса кардан мумкин аст. Ин аналогияест, ки маъмулан барои кӯмак ба шахси нав дар ин мавзӯъ дар фаҳмидани ғояҳои паси омӯзиши мошинсозӣ ва шабакаҳои нейронии сунъӣ истифода мешавад.
Азбаски дар паси парда якчанд қабатҳои ҳисобҳои математикӣ ва оморӣ вуҷуд доранд, муайян кардани ин шабакаҳо ҳамчун вазифаи математикӣ як усули пешрафтатар аст.
Ин барои одамоне мебошад, ки воқеан ба омӯзиши мошин таваҷҷӯҳ доранд ва мехоҳанд бубинанд, ки чӣ гуна рамзи шабакаи нейронии Python навишта шудааст.
Дар ин мақола, мо нишон медиҳем, ки чӣ тавр сохтани шабакаи амиқ нейрониро (DNN) аз сифр дар Python 3.
Баррасии сохтори файл барои рамзи шабакаи нейронии Python
Дар ин ҷо се файл эҷод карда мешавад. Аввалин файли оддии nn.py аст, ки дар "Танзим кардани функсияҳои ёрирасон" ва "Сохтани шабакаи нейрон аз сифр" муҳокима карда мешавад.
Мо инчунин файле бо номи mnist loader.py хоҳем дошт, то маълумоти санҷиширо бор кунад, тавре ки дар "Боркунии маълумоти MNIST" тавсиф шудааст.
Дар ниҳоят, мо файле бо номи test.py дорем, ки дар терминал барои санҷиши шабакаи нейронии мо оғоз мешавад.
Ин файл дар "Санҷишҳои иҷрошаванда" муфассал тавсиф шудааст.
насби
Барои риояи ин дастур китобхонаи NumPy Python бояд бор карда шавад. Шумо метавонед инро бо истифода аз фармони зерин дар терминал иҷро кунед:
Воридоти модулҳо ва насб кардани функсияи Ёрдам
Танҳо ду китобхонае, ки мо талаб мекунем, тасодуфӣ ва NumPy мебошанд, ки мо онҳоро фавран ворид мекунем. Барои вазнҳои ибтидоии шабакаи нейронии мо, мо онҳоро бо истифода аз китобхонаи тасодуфӣ омехта мекунем.
Барои суръат бахшидан ба ҳисобкунии мо, мо NumPy ё np-ро истифода мебарем (аз рӯи анъана, он одатан ҳамчун np ворид карда мешавад). Ду вазифаи ёрирасони мо пас аз воридоти мо анҷом дода мешавад. Ду вазифаи сигмоидӣ: як ва сигмоидӣ.
Регрессияи логистикӣ маълумотро бо истифода аз функсияи сигмоид тасниф мекунад, дар ҳоле ки бозгашт паҳншавӣ дельта ё градиентро бо истифода аз функсияи сигмоид ҳисоб мекунад.
Эҷоди синфи шабака
Сохтани шабакаи пурраи нейронӣ ягона ҳадафи ин бахш мебошад. Синфи шабака ҳамаи вазифаҳоеро, ки баъд аз он меоянд, фаро мегирад. Функсияи Object() { [коди модарӣ] } дар аввал дар синфи шабакаи мо сохта мешавад.
Як далел, андозаҳо аз ҷониби функсияи Object() { [рамзи модарӣ] } талаб карда мешавад. Тағйирёбандаи андозаҳо маҷмӯи арзишҳои ададӣ мебошад, ки шумораи гиреҳҳои вурудро дар ҳар як қабати шабакаи нейронии мо ифода мекунад.
Мо чор хосиятро дар усули __init__ оғоз мекунем. Тағирёбандаҳои воридотӣ, андозаҳо барои муқаррар кардани рӯйхати андозаи қабатҳо ва шумораи қабатҳо, қабатҳои ададӣ истифода мешаванд.
Қадами аввал ин ба таври тасодуфӣ таъин кардани ғаразҳои ибтидоии шабакаи мо ба ҳар як қабате, ки аз қабати вуруд пайравӣ мекунад, мебошад.
Ниҳоят, ҳар як пайванди байни қабатҳои воридотӣ ва баромад вазни худро ба таври тасодуфӣ тавлид мекунад. Np.Random.Randn() намунаи тасодуфиро медиҳад, ки аз тақсимоти муқаррарӣ барои контекст гирифта шудааст.
Функсияи Форвард
Дар шабакаи нейронӣ, иттилоот тавассути функсияи интиқол ба пеш фиристода мешавад. Барои ин функсия як аргумент, a, ки вектори фаъолсозии ҷорӣро нишон медиҳад, талаб карда мешавад.
Ин функсия фаъолсозӣ дар ҳар як қабатро тавассути такрори тамоми ғаразҳо ва вазнҳои шабака ҳисоб мекунад. Ҷавоби додашуда пешгӯӣ аст, ки фаъолсозии қабати охирин аст.
Пастшавии градиенти хурд
Асбоби кории синфи Шабакаи мо градиент Дессент мебошад. Дар ин версия, мо градиенти хурди (стохастикӣ), як варианти тағирёфтаи градиентро истифода мебарем.
Ин нишон медиҳад, ки як гурӯҳи хурди нуқтаҳои додаҳо барои навсозии модели мо истифода мешавад. Ба ин усул чаҳор далели ҳатмӣ ва як далели ихтиёрӣ интиқол дода мешаванд. Чаҳор тағирёбандаи зарурӣ маҷмӯи маълумотҳои омӯзишӣ, шумораи давраҳо, андозаи хурди партияҳо ва суръати омӯзиш (эта) мебошанд.
Маълумоти санҷишӣ тибқи дархост дастрас аст. Вақте ки мо дар ниҳоят ин шабакаро арзёбӣ мекунем, мо маълумоти санҷиширо пешниҳод хоҳем кард. Шумораи намунаҳо дар ин функсия аввал ба дарозии рӯйхат муқаррар карда мешавад, вақте ки маълумоти омӯзишӣ ба намуди рӯйхат табдил дода мешавад.
Мо инчунин ҳамин равандро барои санҷиши додаҳои додашуда истифода мебарем. Ин дар он аст, ки ба ҷои он ки ба мо ҳамчун рӯйхат баргардонида шаванд, онҳо воқеан зипҳои рӯйхатҳо мебошанд. Вақте ки мо намунаҳои маълумоти MNIST-ро дертар бор мекунем, мо дар ин бора бештар маълумот хоҳем гирифт.
Агар мо итминон ҳосил кунем, ки ҳарду намуди маълумотро ҳамчун рӯйхат пешниҳод мекунем, пас ин кастинг ҳатман муҳим нест.
Вақте ки мо маълумот дорем, мо давраҳои омӯзишро дар як давра мегузарем. Давраи омӯзиш танҳо як даври омӯзиши шабакаи нейрон аст. Мо аввал маълумотро дар ҳар як давра омехта мекунем, то тасодуфиро пеш аз таҳияи рӯйхати хурди гурӯҳҳо таъмин кунем.
Функсияи навсозии мини партия, ки дар зер баррасӣ мешавад, барои ҳар як мини-партия даъват карда мешавад. Агар маълумоти санҷиш мавҷуд бошад, дурустии санҷиш низ баргардонида мешавад.
Функсияи ёрирасон аз арзиши ҳосилшуда
Биёед пеш аз он ки воқеан рамзи бозгашти паҳншавиро эҷод кунем, аввал вазифаи ёрирасонро бо номи ҳосилшудаи хароҷот таҳия кунем. Агар мо дар қабати баромади худ хато кунем, онро функсияи ҳосилшудаи хароҷот нишон медиҳад.
Он ду вурудро талаб мекунад: массиви фаъолсозии баромад ва координатаҳои y-и арзишҳои пешбинишудаи баромад.
Функсияи бозгашт
Вектори фаъолсозии ҳозираи мо, фаъолсозӣ, инчунин ҳама гуна векторҳои фаъолсозӣ, фаъолсозӣ ва z-векторҳои z, ҳама бояд дар хотир нигоҳ дошта шаванд. Аввалин қабате, ки қабати воридотӣ номида мешавад, фаъол мешавад.
Мо ҳар як ғараз ва вазнро пас аз гузоштани онҳо ҳал мекунем. Ҳар як ҳалқа ҳисобкунии вектори z-ро ҳамчун ҳосили нуқтаҳои вазнҳо ва фаъолсозӣ, илова кардани он ба рӯйхати zs, аз нав ҳисоб кардани фаъолсозӣ ва илова кардани фаъолсозии навшуда ба рӯйхати фаъолкуниҳо дар бар мегирад.
Ниҳоят, математика. Делта, ки ба хатогии қабати қаблӣ зарб ба саршумори сигмоиди элементи охирини векторҳои zs баробар аст, пеш аз оғози гузариш ба ақиб ҳисоб карда мешавад.
Қабати охирини nabla b ҳамчун делта муқаррар карда шудааст ва қабати ниҳоии nabla w маҳсули нуқтаҳои дельта ва қабати дуюм то охирини фаъолсозӣ (гузаранда шудааст, то мо воқеан математикаро иҷро кунем) .
Мо мисли пештара, аз қабати дуюм сар карда, бо охирин ба анҷом мерасем ва пас аз анҷом додани ин қабатҳои охирин равандро такрор мекунем. Наблаҳо пас аз он ҳамчун tuple баргардонида мешаванд.
Навсозии пастшавии градиенти хурд
Усули мо SGD (бориши градиенти стохастикӣ) аз қабл навсозии хурди партияро дар бар мегирад. Азбаски он дар SGD истифода мешавад, аммо инчунин пуштибониро талаб мекунад, ман баҳс кардам, ки ин функсияро дар куҷо ҷойгир кунам.
Ниҳоят, ман қарор додам, ки онро дар ин ҷо нашр кунам. Он аз тавлиди 0 вектори наблаҳои ғаразҳо ва вазнҳо оғоз мешавад, ба монанди функсияи пуштибонии мо.
Он ҳамчун ду вуруди он мини-партия ва суръати омӯзиши eta-ро талаб мекунад. Дар мини-партия, мо пас аз функсияи backprop истифода мебарем, то дельтаи ҳар як массиви nabla барои ҳар як вуруд, x ва баромад, y ба даст орем. Рӯйхати nabla пас аз ин делтаҳо нав карда мешавад.
Ниҳоят, мо суръати омӯзиш ва наблаҳоро барои навсозии вазнҳо ва ғаразҳои шабака истифода мебарем. Ҳар як арзиш ба арзиши охирин нав карда мешавад, камтар суръати омӯзиш, бо андозаи минибатч зарб карда мешавад ва сипас ба арзиши nabla илова карда мешавад.
Баҳодиҳии функсия
Функсияи арзёбӣ вазифаи охиринест, ки мо бояд нависем. Маълумоти санҷишӣ ягона вуруди ин функсия мебошад. Дар ин функсия, мо танҳо натиҷаҳои шабакаро бо натиҷаи пешбинишуда муқоиса мекунем, y. Бо ғизо додани вуруд, x, ба пеш, баромадҳои шабака муайян карда мешаванд.
Кодекси пурра
Вақте ки мо ҳамаи рамзҳоро муттаҳид мекунем, он чунин пайдо мешавад.
Санҷиши шабакаи нейронӣ
Боркунии маълумоти MNIST
Дар Маълумоти MNIST дар формати .pkl.gz аст, ки мо онро бо истифода аз GZIP мекушоем ва бо шарбат бор мекунем. Биёед як усули зудро барои бор кардани ин маълумот ҳамчун як банди андозаи се, ки ба маълумотҳои омӯзишӣ, тасдиқ ва санҷиш тақсим карда мешаванд, нависед.
Барои осон кардани идора кардани додаҳои мо, мо функсияи дигареро менависем, то y-ро ба массиви 10 адад рамзгузорӣ кунад. Массив ҳама 0ҳо хоҳад буд, ба истиснои 1, ки ба рақами дурусти тасвир мувофиқат мекунад.
Мо маълумоти асосии сарборӣ ва як усули рамзгузории гармро барои бор кардани маълумоти мо ба формати хондашаванда истифода мебарем. Функсияи дигар навишта мешавад, ки арзишҳои x-и моро ба рӯйхати андозаи 784, ки ба 784 пикселҳои тасвир мувофиқат мекунанд ва арзишҳои y-и моро ба шакли ягонаи вектории рамзгузории гарм табдил медиҳанд.
Сипас, мо арзишҳои x ва y-ро тавре муттаҳид мекунем, ки як индекс ба дигараш мувофиқат кунад. Ин ба маҷмӯи маълумотҳои омӯзиш, тасдиқ ва санҷиш дахл дорад. Сипас мо маълумоти тағирёфтаро бармегардонем.
Санҷишҳои иҷрошаванда
Мо файли наверо бо номи "mnist loader" месозем, ки ҳам шабакаи нейронро, ки қаблан таъсис дода будем (nn оддӣ) ва ҳам боркунаки маҷмӯи додаҳои MNIST пеш аз оғози санҷиш ворид мекунад.
Дар ин файл, танҳо ба мо лозим аст, ки маълумотро ворид кунем, шабакаеро бо андозаи қабати вуруди 784 ва андозаи қабати баромади 10 созем, функсияи SGD-и шабакаро дар маълумоти омӯзишӣ иҷро кунем ва сипас онро бо истифода аз маълумоти санҷиш санҷем.
Дар хотир доред, ки барои рӯйхати қабатҳои вурудии мо, фарқе надорад, ки кадом рақамҳо дар байни 784 ва 10 ҳастанд. танҳо андозаи даромад ва баромад муқаррар карда шудаанд.
Се қабат лозим нест; мо метавонем чор, панҷ ё ҳатто дуторо истифода барем. Аз озмоиш бо он лаззат баред.
хулоса
Дар ин ҷо, бо истифода аз Python 3, мо шабакаи нейронро аз сифр эҷод мекунем. Дар баробари математикам олй, хусусиятхои татбицро низ мухокима кардем.
Мо аз иҷрои вазифаҳои ёрирасон оғоз кардем. Барои кор кардани нейронҳо, функсияҳои асосии сигмоид ва сигмоид муҳиманд. Сипас, мо функсияи пешбурди интиқолро, ки раванди асосии интиқоли маълумот ба шабакаи нейрон аст, дар амал татбиқ кардем.
Баъдан, мо дар Python, муҳаррике, ки шабакаи нейронии моро меронад, функсияи фаромадани градиентро сохтем. Барои ҷойгир кардани "минимаҳои маҳаллӣ" ва оптимизатсияи вазнҳо ва ғаразҳои онҳо, шабакаи нейронии мо градиентро истифода мебарад. Мо бо истифода аз функсияи бозгашти такрорӣ эҷод кардем пастшавии градиент.
Бо расонидани навсозиҳо, вақте ки натиҷаҳо ба тамғакоғазҳои мувофиқ мувофиқат намекунанд, ин функсия ба шабакаи нейрон имкон медиҳад, ки “омӯзад”.
Дар ниҳоят, мо Python-и нави худро гузоштем шабакаи нейралӣ ба санҷиш бо истифода аз маҷмӯи маълумоти MNIST. Ҳама чиз бемаънӣ кор мекард.
Рамзгузории хушбахт!
Дин ва мазҳаб