አንጎል ከነርቭ አውታሮች ጋር ተመጣጣኝ ነው. ይህ በተለምዶ ለርዕሰ ጉዳዩ አዲስ የሆነ ሰው ከማሽን መማሪያ እና ከአርቴፊሻል ነርቭ አውታሮች በስተጀርባ ያለውን ሀሳብ እንዲረዳ ለመርዳት የሚውለው ተመሳሳይነት ነው።
ከትዕይንቱ በስተጀርባ በርካታ የሒሳብ እና የስታቲስቲክስ ስሌት ደረጃዎች ስላሉ፣ እነዚህን ኔትወርኮች እንደ ሒሳብ ተግባር መግለጽ የላቀ ዘዴ ነው።
ይህ በእውነቱ የማሽን መማር ፍላጎት ላላቸው እና የፓይዘን ነርቭ አውታረ መረብ ኮድ እንዴት እንደሚፃፍ ማየት ለሚፈልጉ ሰዎች ነው።
በዚህ ጽሑፍ ውስጥ ሙሉ በሙሉ የተገናኘ ጥልቅ የነርቭ ኔትወርክ (ዲኤንኤን) ከባዶ ወደ ውስጥ እንዴት መገንባት እንደሚቻል እናሳያለን። ዘንዶ 3.
ለ Python Neural Network ኮድ የፋይል መዋቅር አጠቃላይ እይታ
እዚህ የተፈጠሩ ሶስት ፋይሎች ይኖራሉ. የመጀመሪያው ቀላል nn.py ፋይል ነው፣ እሱም “የረዳት ተግባራትን ማዋቀር” እና “የነርቭ ኔትወርክን ከጭረት መገንባት” በሚለው ውስጥ ይብራራል።
በ"MNIST ውሂብን መጫን" ላይ እንደተገለጸው የሙከራ ውሂቡን ለመጫን mnist loader.py የሚባል ፋይል ይኖረናል።
በመጨረሻም የነርቭ መረባችንን ለመፈተሽ በተርሚናል ውስጥ የሚጀመረው test.py የሚል ፋይል ይኖረናል።
ይህ ፋይል በ "ሙከራዎች ሩጫ" ውስጥ በዝርዝር ተገልጿል.
መግጠም
ይህን አጋዥ ስልጠና ለመከተል የNumPy Python ቤተ-መጽሐፍት መውረድ አለበት። በተርሚናል ላይ የሚከተለውን ትዕዛዝ በመጠቀም ይህንን ማከናወን ይችላሉ-
ሞጁሎችን ማስመጣት እና የረዳት ተግባሩን ማዋቀር
የምንፈልጋቸው ሁለቱ ቤተ-መጻሕፍት ብቻ በዘፈቀደ እና NumPy ናቸው፣ እነሱም ወዲያውኑ እናስመጣለን። ለነርቭ ኔትወርክ የመጀመሪያ ክብደቶች፣ በዘፈቀደ ቤተ-መጽሐፍት በመጠቀም እናዋውራቸዋለን።
ስሌቶቻችንን ለማፋጠን፣NumPy ወይም npን እንጠቀማለን (በኮንቬንሽን፣ ብዙ ጊዜ እንደ np ነው የሚመጣው)። ሁለቱ አጋዥ ተግባሮቻችን ከውጭ ከገቡ በኋላ ይከናወናሉ። ሁለት የሲግሞይድ ተግባራት: አንድ እና ሲግሞይድ ፕራይም.
ሎጂስቲክስ ሪግሬሽን የሲግሞይድ ተግባርን በመጠቀም መረጃን ይመድባል፣ backpropagation ደግሞ የዴልታ ወይም የግራዲየንትን ሲግሞይድ ዋና ተግባርን ያሰላል።
የአውታረ መረብ ክፍል መፍጠር
ሙሉ በሙሉ የተገናኘ የነርቭ አውታር መገንባት የዚህ ክፍል ብቸኛው ትኩረት ነው. የአውታረ መረብ ክፍል በኋላ የሚመጡትን ሁሉንም ተግባራት ያጠቃልላል። ተግባር ነገር() {[native code]} በመጀመሪያ በኔትወርክ ክፍላችን ውስጥ ይፈጠራል።
አንድ ነጋሪ እሴት፣ መጠኖች፣ በነገር() {[native code] } ተግባር ያስፈልጋል። የመጠን ተለዋዋጮች በእያንዳንዱ የነርቭ አውታረ መረብ ሽፋን ውስጥ የሚገኙትን የግቤት ኖዶች ብዛት የሚወክል የቁጥር እሴቶች ስብስብ ነው።
በእኛ __init__ ዘዴ አራት ንብረቶችን እናስጀምራለን። የግቤት ተለዋዋጮች፣ መጠኖች፣ የንብርብር መጠኖችን ዝርዝር እና የንብርብሮች ብዛት፣ የቁጥር ንብርብሮችን በቅደም ተከተል ለማዘጋጀት ያገለግላሉ።
የመጀመሪያው እርምጃ የግቤት ንብርብሩን ለሚከተለው እያንዳንዱ ንብርብር የእኛን የአውታረ መረብ የመጀመሪያ አድልዎ በዘፈቀደ መመደብ ነው።
በመጨረሻም፣ በግብአት እና በውጤት ንብርብሮች መካከል ያለው እያንዳንዱ አገናኝ ክብደቶቹ በዘፈቀደ የመነጩ ናቸው። Np.Random.Randn() ለዐውደ-ጽሑፉ ከተለመደው ስርጭት የተወጣ የዘፈቀደ ናሙና ይሰጣል።
ወደፊት የመመገብ ተግባር
በነርቭ አውታረመረብ ውስጥ, መረጃ በግብረ-ሰጭ ተግባር ወደ ፊት ይላካል. አንድ ነጋሪ እሴት፣ ሀ፣ የአሁኑን የነቃ ቬክተር የሚያመለክት፣ በዚህ ተግባር ያስፈልጋል።
ይህ ተግባር በአውታረ መረቡ ውስጥ ያሉትን አድልዎ እና ክብደቶች በመድገም በእያንዳንዱ ንብርብር ላይ ያሉትን ማነቃቂያዎች ይገምታል። የተሰጠው መልስ ትንበያ ነው, እሱም የመጨረሻው ንብርብር ማግበር ነው.
ሚኒ-ባች የግራዲየንት ቁልቁለት
የእኛ የአውታረ መረብ ክፍል የስራ ፈረስ ቀስ በቀስ ቁልቁል ነው። በዚህ ስሪት ውስጥ፣ ሚኒ-ባች (ስቶካስቲክ) የግራዲየንት ቁልቁለትን እንጠቀማለን፣ የተሻሻለ የግራዲየንት መውረድ ልዩነት።
ይህ የሚያሳየው ሞዴላችንን ለማዘመን ትንሽ የውሂብ ነጥቦችን መጠቀም ነው። አራት ተፈላጊ እና አንድ አማራጭ ነጋሪ እሴት ወደዚህ ዘዴ ተላልፈዋል። የሚፈለጉት አራቱ ተለዋዋጮች የሥልጠና መረጃ ስብስብ፣ የዘመናት ብዛት፣ የሚኒ-ባችች መጠን እና የመማሪያ መጠን (eta) ናቸው።
የፈተና ውሂብ ሲጠየቅ ይገኛል። ይህንን አውታረ መረብ በመጨረሻ ስንገመግም የሙከራ ውሂብ እናቀርባለን። በዚህ ተግባር ውስጥ ያሉት የናሙናዎች ብዛት በመጀመሪያ የሥልጠና መረጃ ወደ ዝርዝር ዓይነት ከተቀየረ በኋላ በዝርዝሩ ርዝመት ላይ ተቀምጧል።
እንዲሁም የተሰጠውን ውሂብ ለመሞከር ተመሳሳይ ሂደትን እንተገብራለን። ይህ የሆነበት ምክንያት ወደ እኛ እንደ ዝርዝር ከመመለስ ይልቅ የዝርዝሮች ዚፕ በመሆናቸው ነው። የMNIST ውሂብ ናሙናዎችን በኋላ ስንጭን ስለዚህ ጉዳይ የበለጠ እንማራለን።
ሁለቱንም አይነት መረጃዎች እንደ ዝርዝር ማቅረባችንን ማረጋገጥ ከቻልን ይህ አይነት መውሰድ የግድ አስፈላጊ አይደለም።
መረጃውን ካገኘን በኋላ የሥልጠና ዘመንን በ loop እንሻገራለን። የሥልጠና ጊዜ አንድ ዙር የነርቭ ኔትወርክ ሥልጠና ብቻ ነው። ሚኒ-ባች ዝርዝር ከማዘጋጀታችን በፊት የዘፈቀደነትን ለማረጋገጥ በመጀመሪያ በእያንዳንዱ ዘመን መረጃውን እናቀላቅላለን።
ከዚህ በታች የተብራራው የዝማኔ ሚኒ ባች ተግባር ለእያንዳንዱ ሚኒ ባች ይጠራል። የፈተናው መረጃ የሚገኝ ከሆነ የፈተናው ትክክለኛነትም ይመለሳል።
ወጪ-ተመን ረዳት ተግባር
የድጋፍ ማሰራጫ ኮድን ከመፍጠራችን በፊት መጀመሪያ የወጪ መነሻ የሚባል የረዳት ተግባር እንፍጠር። በእኛ የውጤት ንብርብር ላይ ስህተት ከሠራን, የወጪው መነሻ ተግባር ያሳየዋል.
ሁለት ግብዓቶችን ይፈልጋል፡ የውጤት ገቢር አደራደር እና የሚጠበቁ የውጤት እሴቶች y-መጋጠሚያዎች።
Backpropagation ተግባር
አሁን ያለን የነቃ ቬክተር፣ አግብር፣ እንዲሁም ሌሎች ማንኛቸውም ሌሎች አግብር ቬክተሮች፣ አግብርቶች እና z-vectors፣ zs፣ ሁሉም በአእምሮ ውስጥ መቀመጥ አለባቸው። የግቤት ንብርብር የሚባል ንብርብር መጀመሪያ ነቅቷል.
እያንዳንዱን አድልዎ እና ክብደታቸውን ካስቀመጥናቸው በኋላ እናያለን። እያንዳንዱ loop z ቬክተርን እንደ የክብደቱ ነጥብ እና አግብር ማስላት፣ ወደ zs ዝርዝር መጨመር፣ ማግበርን እንደገና ማስላት እና የተሻሻለውን ገቢር በእንቅስቃሴዎች ዝርዝር ውስጥ ማከልን ያካትታል።
በመጨረሻም ሒሳብ. የመጨረሻው የ zs ቬክተር ንጥረ ነገር በሲግሞይድ ፕራይም ሲባዛ ከቀደመው ንብርብር ስህተት ጋር እኩል የሆነ ዴልታ፣ ወደ ኋላ ቀር ማለፋችንን ከመጀመራችን በፊት ይሰላል።
የመጨረሻው የ nabla b ንብርብር ዴልታ እንዲሆን ተቀናብሯል፣ እና የመጨረሻው የ nabla w ንብርብር የዴልታ የነጥብ ምርት እና ከሁለተኛ-እስከ-መጨረሻው የማግበር ንብርብር እንዲሆን ተቀናብሯል (በእርግጥ ሒሳብ መስራት እንድንችል ተላልፏል) .
እንደበፊቱ እንቀጥላለን, ከሁለተኛው ንብርብር ጀምሮ እና ከመጨረሻው ጋር እንጨርሰዋለን, እና እነዚህን የመጨረሻ ንብርብሮች ካጠናቀቅን በኋላ ሂደቱን ይድገሙት. ከዚያም ናብላዎቹ እንደ ቱፕል ይመለሳሉ.
ሚኒ-ባች ቅልመት ቁልቁለትን በማዘመን ላይ
የእኛ SGD (ስቶካስቲክ ቅልመት መውረድ) ዘዴ ከበፊቱ ሚኒ-ባች ማዘመንን ያካትታል። በSGD ውስጥ ጥቅም ላይ የሚውል ነገር ግን የጀርባ አሠራር ስለሚያስፈልገው፣ ይህን ተግባር የት እንደማስቀመጥ ተከራከርኩ።
በመጨረሻም እዚህ ለመለጠፍ ምርጫ አድርጌያለሁ። ልክ የእኛ የጀርባ ፕሮፕ ተግባራችን እንዳደረገው 0 የአድሎአዊነት እና የክብደት ናብላስ ቬክተር በማመንጨት ይጀምራል።
እንደ ሁለቱ ግብአቶቹ ሚኒ-ባች እና የኢታ ትምህርት ፍጥነትን ይፈልጋል። በትንንሽ ባች ውስጥ፣ ለእያንዳንዱ ግብዓት፣ x እና ውፅዓት፣ y የእያንዳንዱን የናብላ ድርድር ዴልታ ለማግኘት የbackprop ተግባርን እንጠቀማለን። የ nabla ዝርዝሮች በእነዚህ ዴልታዎች ተዘምነዋል።
በመጨረሻም የኔትወርኩን ክብደት እና አድሏዊነት ለማዘመን የመማር ፍጥነትን እና ናብላዎችን እንጠቀማለን። እያንዳንዱ እሴት ወደ የቅርብ ጊዜው እሴት ተዘምኗል፣ የመማር ፍጥነቱ ያነሰ፣ በሚኒባች መጠን ተባዝቶ ከዚያም ወደ nabla እሴት ይታከላል።
ተግባር ይገምግሙ
የግምገማው ተግባር ለመጻፍ የሚያስፈልገን የመጨረሻው ነው. የሙከራው ውሂብ ለዚህ ተግባር ብቸኛው ግቤት ነው። በዚህ ተግባር ውስጥ የኔትወርኩን ውጤቶች ከተጠበቀው ውጤት ጋር ብቻ እናነፃፅራለን, y. ግብዓቱን በመመገብ, x, ወደፊት, የአውታረ መረቡ ውጤቶች ይወሰናሉ.
ሙሉ ኮድ
ሁሉንም ኮድ ስናዋህድ, ይህ ነው የሚታየው.
የነርቭ ኔትወርክን መሞከር
የMNIST ውሂብን በመጫን ላይ
የ የMNIST ውሂብ በ.pkl.gz ቅርጸት ነው፣ እሱም GZIPን ተጠቅመን እንከፍተዋለን እና በ pickle እንጭነዋለን። ይህን ውሂብ እንደ ቱፕል መጠን ሶስት ለመጫን ፈጣን ዘዴን እንፃፍ፣ በስልጠና፣ ማረጋገጫ እና የሙከራ ውሂብ ተከፋፍል።
ውሂባችንን ለማቀናበር ቀላል ለማድረግ፣ yን ወደ ባለ 10-ንጥል አደራደር ለማስገባት ሌላ ተግባር እንጽፋለን። የምስሉ ትክክለኛ አሃዝ ከሚዛመደው 0 በስተቀር ድርድር ሁሉም 1s ይሆናል።
የእኛን ውሂብ ሊነበብ በሚችል ቅርጸት ለመጫን ዋናውን የመጫኛ ዳታ እና አንድ ትኩስ ኢንኮድ ዘዴን እንጠቀማለን። ሌላ ተግባር ይፃፋል የ x እሴቶቻችንን ወደ መጠን 784 የሚቀይር፣ ከምስሉ 784 ፒክሰሎች ጋር የሚዛመድ እና የ y እሴቶቻችንን ወደ ነጠላ ትኩስ ኢንኮድ የቬክተር ቅፅ።
ከዚያ አንዱ ኢንዴክስ ከሌላው ጋር እንዲመሳሰል የ x እና y እሴቶችን እናጣምራለን። ይህ ለስልጠና፣ ማረጋገጫ እና የፈተና የውሂብ ስብስቦችን ይመለከታል። ከዚያ በኋላ የተለወጠውን ውሂብ እንመለሳለን.
የሩጫ ሙከራዎች
ሙከራ ከመጀመራችን በፊት ሁለቱንም የፈጠርነውን የነርቭ ኔትወርክ (ቀላል nn) እና የMNIST ዳታ አዘጋጅ ሎደርን የሚያስመጣ “mnist ሎደር” የሚባል አዲስ ፋይል እንሰራለን።
በዚህ ፋይል ውስጥ እኛ ማድረግ ያለብን መረጃውን ወደ ሀገር ውስጥ ማስገባት ፣ የግብአት ንብርብር መጠን 784 እና የውጤት ንብርብር መጠን 10 ያለው አውታረ መረብ መገንባት ፣ የአውታረ መረብ SGD ተግባርን በስልጠና ዳታ ላይ ማስኬድ እና የሙከራ መረጃውን በመጠቀም መሞከር ነው።
ለግቤት ንብርብሮች ዝርዝሮቻችን በ 784 እና 10 መካከል ያሉት ማናቸውም ቁጥሮች ምንም ልዩነት እንደሌላቸው ያስታውሱ.ሌሎቹን ንብርብሮች በፈለግነው መንገድ መለወጥ እንችላለን; የግቤት እና የውጤት መጠኖች ብቻ ተስተካክለዋል.
ሶስት ንብርብሮች አስፈላጊ አይደሉም; አራት፣ አምስት፣ ወይም እንዲያውም ሁለት ብቻ ልንጠቀም እንችላለን። ከእሱ ጋር በመሞከር ይደሰቱ።
መደምደሚያ
እዚህ, Python 3 ን በመጠቀም, ከባዶ ጀምሮ የነርቭ አውታረ መረብ እንፈጥራለን. ከከፍተኛ ደረጃ ሒሳብ ጋር፣ የአተገባበሩን ልዩ ጉዳዮችም ተወያይተናል።
የረዳት ተግባራትን በመተግበር ጀመርን. የነርቭ ሴሎች እንዲሠሩ, ሲግሞይድ እና ሲግሞይድ ዋና ተግባራት ወሳኝ ናቸው. ከዚያ በኋላ ወደ ነርቭ አውታር መረጃን ለመመገብ መሰረታዊ ሂደት የሆነውን የፊድፎርድ ተግባርን ተግባራዊ እናደርጋለን.
በመቀጠል፣ የግራዲየንት መውረድ ተግባርን በፓይዘን ውስጥ ፈጠርን፣ የነርቭ መረባችንን የሚያንቀሳቅሰው ሞተር። “አካባቢያዊ ሚኒማ”ን ለማግኘት እና ክብደቶቻቸውን እና አድሎአዊነታቸውን ለማሻሻል፣የእኛ የነርቭ አውታረመረብ ቀስ በቀስ ቁልቁል ይጠቀማል። እኛ በመጠቀም የጀርባ ስርጭት ተግባርን ፈጠርን ቀስ በቀስ መውረድ.
ውጤቶቹ ከተገቢው መለያዎች ጋር በማይዛመዱበት ጊዜ ማሻሻያዎችን በማድረስ፣ ይህ ተግባር የነርቭ ኔትወርክን “እንዲማር” ያስችለዋል።
በመጨረሻም፣ አዲሱን ፒዮናችንን እናስቀምጣለን። የነርቭ ኔትወርክ የMNIST የውሂብ ስብስብን በመጠቀም ወደ ፈተናው. ሁሉም ነገር ያለችግር ሠርቷል።
መልካም ኮዴክ!
መልስ ይስጡ