విషయ సూచిక[దాచు][చూపండి]
మెదడు న్యూరల్ నెట్వర్క్లతో పోల్చవచ్చు. మెషీన్ లెర్నింగ్ మరియు ఆర్టిఫిషియల్ న్యూరల్ నెట్వర్క్ల వెనుక ఉన్న ఆలోచనలను అర్థం చేసుకోవడానికి సబ్జెక్ట్కు కొత్తవారికి సహాయం చేయడానికి సాధారణంగా ఉపయోగించే సారూప్యత ఇది.
తెర వెనుక అనేక గణిత మరియు గణాంక గణనలు జరుగుతున్నందున, ఈ నెట్వర్క్లను గణిత విధిగా నిర్వచించడం మరింత అధునాతన పద్ధతి.
ఇది మెషిన్ లెర్నింగ్ పట్ల ఆసక్తి ఉన్న వ్యక్తుల కోసం మరియు పైథాన్ న్యూరల్ నెట్వర్క్ కోడ్ ఎలా వ్రాయబడిందో చూడాలనుకునే వ్యక్తుల కోసం.
ఈ కథనంలో, మొదటి నుండి పూర్తిగా కనెక్ట్ చేయబడిన డీప్ న్యూరల్ నెట్వర్క్ (DNN)ని ఎలా నిర్మించాలో మేము ప్రదర్శిస్తాము. పైథాన్ 3.
మా పైథాన్ న్యూరల్ నెట్వర్క్ కోడ్ కోసం ఫైల్ స్ట్రక్చర్ యొక్క అవలోకనం
ఇక్కడ మూడు ఫైల్లు సృష్టించబడతాయి. మొదటిది సాధారణ nn.py ఫైల్, ఇది “సహాయక విధులను సెటప్ చేయడం” మరియు “మొదటి నుండి న్యూరల్ నెట్వర్క్ను రూపొందించడం”లో చర్చించబడుతుంది.
"MNIST డేటాను లోడ్ చేస్తోంది"లో వివరించిన విధంగా, పరీక్ష డేటాను లోడ్ చేయడానికి mnist loader.py అనే ఫైల్ కూడా మా వద్ద ఉంటుంది.
చివరగా, మా న్యూరల్ నెట్వర్క్ని పరీక్షించడానికి టెర్మినల్లో ప్రారంభించబడే test.py అనే ఫైల్ని మేము కలిగి ఉంటాము.
ఈ ఫైల్ “రన్నింగ్ టెస్ట్లు”లో వివరంగా వివరించబడింది.
సంస్థాపన
ఈ ట్యుటోరియల్ని అనుసరించడానికి NumPy పైథాన్ లైబ్రరీని తప్పనిసరిగా డౌన్లోడ్ చేసుకోవాలి. టెర్మినల్పై కింది ఆదేశాన్ని ఉపయోగించడం ద్వారా మీరు దీన్ని సాధించవచ్చు:
మాడ్యూల్లను దిగుమతి చేయడం మరియు హెల్పర్ ఫంక్షన్ను సెటప్ చేయడం
మాకు అవసరమైన రెండు లైబ్రరీలు యాదృచ్ఛికం మరియు NumPy, మేము వెంటనే దిగుమతి చేస్తాము. మా న్యూరల్ నెట్వర్క్ ప్రారంభ బరువుల కోసం, మేము వాటిని యాదృచ్ఛిక లైబ్రరీని ఉపయోగించి షఫుల్ చేస్తాము.
మా గణనలను వేగవంతం చేయడానికి, మేము NumPy లేదా npని ఉపయోగిస్తాము (సంప్రదాయం ప్రకారం, ఇది తరచుగా npగా దిగుమతి చేయబడుతుంది). మా దిగుమతుల తర్వాత మా ఇద్దరి సహాయక విధులు చేయబడతాయి. రెండు సిగ్మోయిడ్ విధులు: ఒకటి మరియు సిగ్మోయిడ్ ప్రైమ్.
లాజిస్టిక్ రిగ్రెషన్ సిగ్మోయిడ్ ఫంక్షన్ని ఉపయోగించి డేటాను వర్గీకరిస్తుంది, అయితే బ్యాక్ప్రొపగేషన్ సిగ్మోయిడ్ ప్రైమ్ ఫంక్షన్ని ఉపయోగించి డెల్టా లేదా గ్రేడియంట్ను గణిస్తుంది.
నెట్వర్క్ క్లాస్ని సృష్టిస్తోంది
పూర్తిగా అనుసంధానించబడిన న్యూరల్ నెట్వర్క్ను నిర్మించడం ఈ విభాగం యొక్క ఏకైక దృష్టి. నెట్వర్క్ క్లాస్ తర్వాత వచ్చే అన్ని ఫంక్షన్లను కలిగి ఉంటుంది. ఆబ్జెక్ట్() { [స్థానిక కోడ్] } ఫంక్షన్ మా నెట్వర్క్ క్లాస్లో ప్రారంభంలో సృష్టించబడుతుంది.
ఆబ్జెక్ట్() { [స్థానిక కోడ్] } ఫంక్షన్కి ఒక ఆర్గ్యుమెంట్, పరిమాణాలు అవసరం. పరిమాణాల వేరియబుల్ అనేది మా న్యూరల్ నెట్వర్క్లోని ప్రతి లేయర్లో ఉన్న ఇన్పుట్ నోడ్ల సంఖ్యను సూచించే సంఖ్యా విలువల సమాహారం.
మేము మా __init__ పద్ధతిలో నాలుగు లక్షణాలను ప్రారంభించాము. ఇన్పుట్ వేరియబుల్స్, పరిమాణాలు, వరుసగా లేయర్ పరిమాణాల జాబితా మరియు లేయర్ల సంఖ్య, సంఖ్య లేయర్లను సెట్ చేయడానికి ఉపయోగించబడతాయి.
ఇన్పుట్ లేయర్ని అనుసరించే ప్రతి లేయర్కు యాదృచ్ఛికంగా మా నెట్వర్క్ ప్రారంభ పక్షపాతాలను కేటాయించడం మొదటి దశ.
చివరగా, ఇన్పుట్ మరియు అవుట్పుట్ లేయర్ల మధ్య ఉన్న ప్రతి లింక్ దాని బరువులను యాదృచ్ఛికంగా ఉత్పత్తి చేస్తుంది. Np.Random.Randn() సందర్భం కోసం సాధారణ పంపిణీ నుండి తీసుకోబడిన యాదృచ్ఛిక నమూనాను అందిస్తుంది.
ఫీడ్ ఫార్వర్డ్ ఫంక్షన్
న్యూరల్ నెట్వర్క్లో, సమాచారం ఫీడ్ఫార్వర్డ్ ఫంక్షన్ ద్వారా ముందుకు పంపబడుతుంది. ఈ ఫంక్షన్ ద్వారా ప్రస్తుత యాక్టివేషన్ వెక్టర్ని సూచించే ఒక ఆర్గ్యుమెంట్, a అవసరం.
ఈ ఫంక్షన్ నెట్వర్క్లోని అన్ని పక్షపాతాలు మరియు బరువులను పునరావృతం చేయడం ద్వారా ప్రతి లేయర్లోని క్రియాశీలతలను అంచనా వేస్తుంది. ఇచ్చిన సమాధానం ప్రిడిక్షన్, ఇది చివరి పొర యొక్క క్రియాశీలతలు.
మినీ-బ్యాచ్ గ్రేడియంట్ డీసెంట్
మా నెట్వర్క్ క్లాస్ వర్క్హోర్స్ గ్రేడియంట్ డిసెంట్. ఈ సంస్కరణలో, మేము మినీ-బ్యాచ్ (స్టాకాస్టిక్) గ్రేడియంట్ డీసెంట్ని ఉపయోగిస్తాము, ఇది గ్రేడియంట్ డీసెంట్ యొక్క సవరించిన వైవిధ్యం.
మా మోడల్ను అప్డేట్ చేయడానికి చిన్న బ్యాచ్ డేటా పాయింట్లు ఉపయోగించబడతాయని ఇది సూచిస్తుంది. నాలుగు అవసరమైన మరియు ఒక ఐచ్ఛిక వాదన ఈ పద్ధతికి పంపబడుతుంది. నాలుగు అవసరమైన వేరియబుల్స్ శిక్షణ డేటా సెట్, యుగాల సంఖ్య, చిన్న-బ్యాచ్ల పరిమాణం మరియు అభ్యాస రేటు (ఎటా).
అభ్యర్థనపై పరీక్ష డేటా అందుబాటులో ఉంది. మేము చివరికి ఈ నెట్వర్క్ని మూల్యాంకనం చేసినప్పుడు మేము పరీక్ష డేటాను సరఫరా చేస్తాము. శిక్షణ డేటాను జాబితా రకంగా మార్చిన తర్వాత ఈ ఫంక్షన్లోని నమూనాల సంఖ్య ప్రారంభంలో జాబితా పొడవుకు సెట్ చేయబడుతుంది.
మేము అందించిన డేటాను పరీక్షించడానికి కూడా అదే విధానాన్ని వర్తింపజేస్తాము. ఎందుకంటే జాబితాలుగా మాకు తిరిగి ఇవ్వబడకుండా, అవి నిజంగా జాబితాల జిప్లు. మేము తర్వాత MNIST డేటా నమూనాలను లోడ్ చేసినప్పుడు, మేము దీని గురించి మరింత తెలుసుకుంటాము.
మేము రెండు రకాల డేటాను జాబితాలుగా అందిస్తున్నామని నిర్ధారించుకోగలిగితే, ఈ రకం-కాస్టింగ్ తప్పనిసరిగా అవసరం లేదు.
మేము డేటాను కలిగి ఉన్న తర్వాత, మేము ఒక లూప్లో శిక్షణా యుగాలను దాటుతాము. శిక్షణా కాలం అనేది ఒక రౌండ్ న్యూరల్ నెట్వర్క్ శిక్షణ మాత్రమే. మినీ-బ్యాచ్ల జాబితాను రూపొందించే ముందు యాదృచ్ఛికతను నిర్ధారించడానికి మేము మొదట ప్రతి యుగంలోని డేటాను షఫుల్ చేస్తాము.
దిగువ చర్చించబడిన నవీకరణ మినీ బ్యాచ్ ఫంక్షన్, ప్రతి మినీ-బ్యాచ్ కోసం పిలవబడుతుంది. పరీక్ష డేటా అందుబాటులో ఉంటే పరీక్ష ఖచ్చితత్వం కూడా తిరిగి ఇవ్వబడుతుంది.
కాస్ట్-డెరివేటివ్ హెల్పర్ ఫంక్షన్
మనం నిజంగా బ్యాక్ప్రొపగేషన్ కోడ్ని సృష్టించే ముందు కాస్ట్ డెరివేటివ్ అనే హెల్పర్ ఫంక్షన్ని డెవలప్ చేద్దాం. మన అవుట్పుట్ లేయర్లో పొరపాటు జరిగితే, కాస్ట్ డెరివేటివ్ ఫంక్షన్ దానిని చూపుతుంది.
దీనికి రెండు ఇన్పుట్లు అవసరం: అవుట్పుట్ యాక్టివేషన్ల శ్రేణి మరియు ఊహించిన అవుట్పుట్ విలువల y-కోఆర్డినేట్లు.
బ్యాక్ప్రొపగేషన్ ఫంక్షన్
మా ప్రస్తుత యాక్టివేషన్ వెక్టర్, యాక్టివేషన్, అలాగే ఏదైనా ఇతర యాక్టివేషన్ వెక్టర్స్, యాక్టివేషన్లు మరియు z-వెక్టర్స్, zs, అన్నీ తప్పనిసరిగా గుర్తుంచుకోవాలి. ఇన్పుట్ లేయర్ అని పిలువబడే లేయర్ ముందుగా యాక్టివేట్ చేయబడుతుంది.
మేము వాటిని ఉంచిన తర్వాత ప్రతి పక్షపాతం మరియు బరువు ద్వారా లూప్ చేస్తాము. ప్రతి లూప్లో z వెక్టర్ను బరువులు మరియు యాక్టివేషన్ యొక్క డాట్ ఉత్పత్తిగా గణించడం, దానిని zs జాబితాకు జోడించడం, యాక్టివేషన్ను మళ్లీ లెక్కించడం మరియు యాక్టివేషన్ల జాబితాకు అప్డేట్ చేసిన యాక్టివేషన్ను జోడించడం వంటివి ఉంటాయి.
చివరగా, గణితం. zs వెక్టర్స్లోని చివరి మూలకం యొక్క సిగ్మోయిడ్ ప్రైమ్తో గుణించబడిన మునుపటి పొర నుండి వచ్చే లోపానికి సమానమైన డెల్టా, మన బ్యాక్వర్డ్ పాస్ను ప్రారంభించే ముందు గణించబడుతుంది.
నాబ్లా బి యొక్క చివరి పొర డెల్టాగా సెట్ చేయబడింది మరియు నాబ్లా w యొక్క చివరి పొర డెల్టా యొక్క డాట్ ప్రోడక్ట్గా సెట్ చేయబడింది మరియు యాక్టివేషన్ల యొక్క రెండవ నుండి చివరి లేయర్ (ట్రాన్స్పోజ్ చేయబడింది కాబట్టి మనం వాస్తవానికి గణితాన్ని చేయగలము) .
మేము మునుపటిలా కొనసాగుతాము, రెండవ లేయర్తో ప్రారంభించి చివరిదానితో ముగించాము మరియు ఈ చివరి పొరలను పూర్తి చేసిన తర్వాత ప్రక్రియను పునరావృతం చేస్తాము. నబ్లాస్ను తిరిగి టుపుల్గా ఇస్తారు.
మినీ-బ్యాచ్ గ్రేడియంట్ సంతతిని నవీకరిస్తోంది
మునుపటి నుండి మా SGD (స్టాకాస్టిక్ గ్రేడియంట్ డీసెంట్) పద్ధతి మినీ-బ్యాచ్ అప్డేటింగ్ను కలిగి ఉంటుంది. ఇది SGDలో ఉపయోగించబడుతుంది కానీ బ్యాక్ప్రాప్ కూడా అవసరం కాబట్టి, ఈ ఫంక్షన్ను ఎక్కడ ఉంచాలో నేను చర్చించాను.
చివరగా, నేను దానిని ఇక్కడ పోస్ట్ చేయడానికి ఎంపిక చేసాను. ఇది మా బ్యాక్ప్రాప్ ఫంక్షన్ చేసినట్లుగానే, బయాస్లు మరియు బరువుల నాబ్లాస్ యొక్క 0 వెక్టర్లను ఉత్పత్తి చేయడం ద్వారా ప్రారంభమవుతుంది.
దీనికి మినీ-బ్యాచ్ మరియు ఎటా లెర్నింగ్ రేట్ రెండు ఇన్పుట్లుగా అవసరం. మినీ-బ్యాచ్లో, మేము ప్రతి ఇన్పుట్, x మరియు అవుట్పుట్, y కోసం ప్రతి నాబ్లా శ్రేణి యొక్క డెల్టాను పొందేందుకు బ్యాక్ప్రాప్ ఫంక్షన్ని ఉపయోగిస్తాము. నాబ్లా జాబితాలు ఈ డెల్టాలతో నవీకరించబడతాయి.
చివరగా, నెట్వర్క్ బరువులు మరియు పక్షపాతాలను అప్డేట్ చేయడానికి మేము లెర్నింగ్ రేట్ మరియు నాబ్లాస్ని ఉపయోగిస్తాము. ప్రతి విలువ ఇటీవలి విలువకు నవీకరించబడింది, తక్కువ లెర్నింగ్ రేట్, మినీబ్యాచ్ పరిమాణంతో గుణించబడుతుంది, ఆపై నాబ్లా విలువకు జోడించబడుతుంది.
పనితీరును అంచనా వేయండి
మూల్యాంకనం ఫంక్షన్ అనేది మనం వ్రాయవలసిన చివరిది. ఈ ఫంక్షన్కు పరీక్ష డేటా మాత్రమే ఇన్పుట్. ఈ ఫంక్షన్లో, మేము నెట్వర్క్ యొక్క అవుట్పుట్లను ఊహించిన ఫలితంతో మాత్రమే పోల్చాము, 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 మధ్య ఉన్న సంఖ్యల సంఖ్యకు తేడా లేదని గుర్తుంచుకోండి. ఇతర లేయర్లను మనకు నచ్చిన విధంగా మార్చుకోవచ్చు; కేవలం ఇన్పుట్ మరియు అవుట్పుట్ పరిమాణాలు పరిష్కరించబడ్డాయి.
మూడు పొరలు అవసరం లేదు; మేము నాలుగు, ఐదు, లేదా కేవలం రెండు ఉపయోగించవచ్చు. దానితో సరదాగా ప్రయోగాలు చేయండి.
ముగింపు
ఇక్కడ, పైథాన్ 3ని ఉపయోగించి, మేము మొదటి నుండి న్యూరల్ నెట్వర్క్ని సృష్టిస్తాము. ఉన్నత-స్థాయి గణితంతో పాటు, మేము అమలు యొక్క ప్రత్యేకతలను కూడా చర్చించాము.
మేము సహాయక విధులను అమలు చేయడం ద్వారా ప్రారంభించాము. న్యూరాన్లు పనిచేయడానికి, సిగ్మోయిడ్ మరియు సిగ్మోయిడ్ ప్రధాన విధులు కీలకమైనవి. మేము ఫీడ్ఫార్వర్డ్ ఫంక్షన్ను ఆచరణలో పెట్టాము, ఇది న్యూరల్ నెట్వర్క్లోకి డేటాను అందించడానికి ప్రాథమిక ప్రక్రియ.
తర్వాత, మన న్యూరల్ నెట్వర్క్ను నడిపించే ఇంజిన్ అయిన పైథాన్లో మేము గ్రేడియంట్ డీసెంట్ ఫంక్షన్ని సృష్టించాము. "స్థానిక మినిమా"ని గుర్తించడానికి మరియు వాటి బరువులు మరియు పక్షపాతాలను ఆప్టిమైజ్ చేయడానికి, మా న్యూరల్ నెట్వర్క్ గ్రేడియంట్ డిసెంట్ని ఉపయోగిస్తుంది. మేము బ్యాక్ప్రొపగేషన్ ఫంక్షన్ని ఉపయోగించి సృష్టించాము ప్రవణత సంతతి.
అవుట్పుట్లు సరైన లేబుల్లతో సరిపోలనప్పుడు అప్డేట్లను బట్వాడా చేయడం ద్వారా, ఈ ఫంక్షన్ న్యూరల్ నెట్వర్క్ను “నేర్చుకోవడానికి” అనుమతిస్తుంది.
చివరగా, మేము మా సరికొత్త పైథాన్ని ఉంచాము నాడీ నెట్వర్క్ MNIST డేటా సెట్ని ఉపయోగించి పరీక్షకు. అంతా సజావుగా సాగింది.
హ్యాపీ కోడింగ్!
సమాధానం ఇవ్వూ