பொருளடக்கம்[மறை][காட்டு]
மூளை நரம்பியல் நெட்வொர்க்குகளுடன் ஒப்பிடத்தக்கது. இயந்திரக் கற்றல் மற்றும் செயற்கை நரம்பியல் நெட்வொர்க்குகளுக்குப் பின்னால் உள்ள யோசனைகளைப் புரிந்துகொள்வதற்கு இந்தப் பாடத்தில் புதியவர்களுக்கு உதவ பொதுவாகப் பயன்படுத்தப்படும் ஒப்புமை இதுவாகும்.
திரைக்குப் பின்னால் கணித மற்றும் புள்ளியியல் கணக்கீடுகளின் பல அடுக்குகள் நடப்பதால், இந்த நெட்வொர்க்குகளை ஒரு கணிதச் செயல்பாடாக வரையறுப்பது மிகவும் மேம்பட்ட முறையாகும்.
இது உண்மையில் இயந்திர கற்றலில் ஆர்வமுள்ளவர்களுக்கானது மற்றும் பைதான் நியூரல் நெட்வொர்க் குறியீடு எவ்வாறு எழுதப்படுகிறது என்பதைப் பார்க்க விரும்புகிறது.
இந்தக் கட்டுரையில், புதிதாக முழுமையாக இணைக்கப்பட்ட ஆழமான நரம்பியல் வலையமைப்பை (DNN) எவ்வாறு உருவாக்குவது என்பதை விளக்குவோம். பைதான் 3.
எங்கள் பைதான் நியூரல் நெட்வொர்க் குறியீட்டிற்கான கோப்பு கட்டமைப்பின் கண்ணோட்டம்
இங்கே மூன்று கோப்புகள் உருவாக்கப்படும். முதலாவது எளிய nn.py கோப்பு, இது "உதவி செயல்பாடுகளை அமைத்தல்" மற்றும் "புதிதாக இருந்து நியூரல் நெட்வொர்க்கை உருவாக்குதல்" ஆகியவற்றில் விவாதிக்கப்படும்.
"MNIST தரவை ஏற்றுகிறது" என்பதில் விவரிக்கப்பட்டுள்ளபடி, சோதனைத் தரவை ஏற்றுவதற்கு mnist loader.py என்ற கோப்பு எங்களிடம் இருக்கும்.
இறுதியாக, எங்கள் நரம்பியல் நெட்வொர்க்கை சோதிக்க டெர்மினலில் தொடங்கப்படும் test.py என்ற கோப்பு எங்களிடம் இருக்கும்.
இந்தக் கோப்பு "இயங்கும் சோதனைகளில்" விரிவாக விவரிக்கப்பட்டுள்ளது.
நிறுவல்
இந்த டுடோரியலைப் பின்பற்ற, NumPy பைதான் நூலகம் பதிவிறக்கம் செய்யப்பட வேண்டும். முனையத்தில் பின்வரும் கட்டளையைப் பயன்படுத்தி இதைச் செய்யலாம்:
தொகுதிகளை இறக்குமதி செய்தல் மற்றும் உதவி செயல்பாட்டை அமைத்தல்
எங்களுக்குத் தேவைப்படும் இரண்டு நூலகங்கள் ரேண்டம் மற்றும் NumPy ஆகும், அதை நாங்கள் உடனடியாக இறக்குமதி செய்வோம். எங்கள் நரம்பியல் நெட்வொர்க்கின் ஆரம்ப எடைகளுக்கு, சீரற்ற நூலகத்தைப் பயன்படுத்தி அவற்றை மாற்றுவோம்.
எங்கள் கணக்கீடுகளை விரைவுபடுத்த, நாங்கள் NumPy அல்லது np ஐப் பயன்படுத்துவோம் (மாநாட்டின்படி, இது பெரும்பாலும் np ஆக இறக்குமதி செய்யப்படுகிறது). எங்கள் இறக்குமதிக்குப் பிறகு எங்கள் இரண்டு உதவியாளர் செயல்பாடுகள் செய்யப்படும். இரண்டு சிக்மாய்டு செயல்பாடுகள்: ஒன்று மற்றும் சிக்மாய்டு பிரைம்.
லாஜிஸ்டிக் பின்னடைவு சிக்மாய்டு செயல்பாட்டைப் பயன்படுத்தி தரவை வகைப்படுத்தும், அதே சமயம் பேக் ப்ரோபேகேஷன் சிக்மாய்டு பிரைம் செயல்பாட்டைப் பயன்படுத்தி டெல்டா அல்லது சாய்வைக் கணக்கிடும்.
நெட்வொர்க் வகுப்பை உருவாக்குதல்
முழுமையாக இணைக்கப்பட்ட நரம்பியல் வலையமைப்பை உருவாக்குவது இந்தப் பிரிவின் ஒரே மையமாகும். நெட்வொர்க் வகுப்பு அதன் பிறகு வரும் அனைத்து செயல்பாடுகளையும் உள்ளடக்கும். ஆப்ஜெக்ட்() { [நேட்டிவ் குறியீடு] } என்ற செயல்பாடு முதலில் எங்கள் நெட்வொர்க் வகுப்பில் உருவாக்கப்படும்.
ஆப்ஜெக்ட்() { [நேட்டிவ் குறியீடு] } செயல்பாட்டிற்கு ஒரு வாதம், அளவுகள் தேவை. அளவுகள் மாறி என்பது நமது நரம்பியல் நெட்வொர்க்கின் ஒவ்வொரு அடுக்கிலும் உள்ள உள்ளீட்டு முனைகளின் எண்ணிக்கையைக் குறிக்கும் எண் மதிப்புகளின் தொகுப்பாகும்.
எங்கள் __init__ முறையில் நான்கு பண்புகளை துவக்குகிறோம். உள்ளீட்டு மாறிகள், அளவுகள், முறையே அடுக்கு அளவுகள் மற்றும் அடுக்குகளின் எண்ணிக்கை, எண் அடுக்குகளின் பட்டியலை அமைக்கப் பயன்படுகிறது.
முதல் படி, உள்ளீட்டு லேயரைப் பின்தொடரும் ஒவ்வொரு லேயருக்கும் எங்கள் நெட்வொர்க்கின் ஆரம்ப சார்புகளை தோராயமாக ஒதுக்க வேண்டும்.
இறுதியாக, உள்ளீடு மற்றும் வெளியீட்டு அடுக்குகளுக்கு இடையே உள்ள ஒவ்வொரு இணைப்பும் அதன் எடைகள் தோராயமாக உருவாக்கப்படுகின்றன. Np.Random.Randn() என்பது சூழலுக்கான இயல்பான விநியோகத்திலிருந்து எடுக்கப்பட்ட சீரற்ற மாதிரியை வழங்குகிறது.
ஊட்ட முன்னோக்கி செயல்பாடு
ஒரு நரம்பியல் வலையமைப்பில், ஃபீட்ஃபார்வர்டு செயல்பாட்டின் மூலம் தகவல் அனுப்பப்படுகிறது. ஒரு வாதம், a, தற்போதைய செயல்படுத்தும் திசையன், இந்த செயல்பாட்டிற்கு தேவைப்படும்.
இந்தச் செயல்பாடு, நெட்வொர்க்கில் உள்ள அனைத்து சார்புகள் மற்றும் எடைகளை மீண்டும் மீண்டும் செய்வதன் மூலம் ஒவ்வொரு அடுக்கிலும் உள்ள செயல்பாடுகளை மதிப்பிடுகிறது. கொடுக்கப்பட்ட பதில் கணிப்பு, இது கடைசி அடுக்கின் செயல்பாடுகள் ஆகும்.
மினி-பேட்ச் கிரேடியன்ட் வம்சாவளி
எங்கள் நெட்வொர்க் வகுப்பின் பணிக் குதிரை கிரேடியன்ட் டிசென்ட் ஆகும். இந்தப் பதிப்பில், நாங்கள் மினி-பேட்ச் (ஸ்டோகாஸ்டிக்) கிரேடியன்ட் வம்சாவளியைப் பயன்படுத்துகிறோம்.
எங்கள் மாதிரியைப் புதுப்பிக்க ஒரு சிறிய தொகுதி தரவு புள்ளிகள் பயன்படுத்தப்படும் என்பதை இது குறிக்கிறது. தேவையான நான்கு மற்றும் ஒரு விருப்ப வாதம் இந்த முறைக்கு அனுப்பப்படுகிறது. தேவையான நான்கு மாறிகள் பயிற்சி தரவு தொகுப்பு, சகாப்தங்களின் எண்ணிக்கை, மினி-தொகுதிகளின் அளவு மற்றும் கற்றல் விகிதம் (eta).
கோரிக்கையின் பேரில் சோதனை தரவு கிடைக்கும். இறுதியில் இந்த நெட்வொர்க்கை மதிப்பிடும்போது சோதனைத் தரவை வழங்குவோம். பயிற்சித் தரவு பட்டியல் வகையாக மாற்றப்பட்டவுடன், இந்தச் செயல்பாட்டில் உள்ள மாதிரிகளின் எண்ணிக்கை ஆரம்பத்தில் பட்டியலின் நீளத்திற்கு அமைக்கப்படும்.
கொடுக்கப்பட்ட தரவைச் சோதிப்பதற்கும் நாங்கள் அதே செயல்முறையைப் பயன்படுத்துகிறோம். ஏனென்றால், பட்டியல்களாக எங்களிடம் திரும்புவதற்குப் பதிலாக, அவை உண்மையில் பட்டியல்களின் ஜிப்களாகும். MNIST தரவு மாதிரிகளை நாங்கள் பின்னர் ஏற்றும்போது, இதைப் பற்றி மேலும் அறிந்து கொள்வோம்.
இரண்டு வகையான தரவையும் பட்டியல்களாக வழங்குவதை உறுதிசெய்ய முடிந்தால், இந்த வகை-வார்ப்பு அவசியமில்லை.
எங்களிடம் தரவு கிடைத்ததும், பயிற்சி சகாப்தங்களை ஒரு சுழற்சியில் செல்கிறோம். ஒரு பயிற்சி காலம் என்பது ஒரு சுற்று நரம்பியல் நெட்வொர்க் பயிற்சி மட்டுமே. மினி-பேட்ச்களின் பட்டியலை உருவாக்கும் முன், சீரற்ற தன்மையை உறுதிசெய்ய, ஒவ்வொரு சகாப்தத்திலும் உள்ள தரவை முதலில் மாற்றுவோம்.
கீழே விவாதிக்கப்படும் புதுப்பிப்பு மினி தொகுதி செயல்பாடு, ஒவ்வொரு சிறு தொகுதிக்கும் அழைக்கப்படும். சோதனைத் தரவு கிடைத்தால், சோதனைத் துல்லியமும் வழங்கப்படும்.
காஸ்ட் டெரிவேட்டிவ் ஹெல்பர் செயல்பாடு
நாம் உண்மையில் backpropagation குறியீட்டை உருவாக்கும் முன் முதலில் காஸ்ட் டெரிவேட்டிவ் எனப்படும் ஹெல்பர் செயல்பாட்டை உருவாக்குவோம். நமது அவுட்புட் லேயரில் தவறு செய்தால், காஸ்ட் டெரிவேட்டிவ் செயல்பாடு அதைக் காட்டும்.
இதற்கு இரண்டு உள்ளீடுகள் தேவை: அவுட்புட் ஆக்டிவேஷன் வரிசை மற்றும் எதிர்பார்க்கப்பட்ட வெளியீட்டு மதிப்புகளின் y-ஆயங்கள்.
Backpropagation செயல்பாடு
எங்களின் தற்போதைய ஆக்டிவேஷன் வெக்டார், ஆக்டிவேஷன், அத்துடன் வேறு எந்த ஆக்டிவேஷன் வெக்டார்ஸ், ஆக்டிவேஷன்கள் மற்றும் z-வெக்டார்களான zs, அனைத்தையும் மனதில் வைத்திருக்க வேண்டும். உள்ளீட்டு அடுக்கு எனப்படும் அடுக்கு முதலில் செயல்படுத்தப்படுகிறது.
அவற்றைப் போட்ட பிறகு ஒவ்வொரு சார்பு மற்றும் எடையையும் சுற்றிப்பார்ப்போம். ஒவ்வொரு லூப்பிலும் z வெக்டரை எடைகள் மற்றும் செயல்படுத்துதலின் புள்ளிப் பொருளாகக் கணக்கிடுவது, அதை zs பட்டியலில் சேர்ப்பது, செயல்படுத்தலை மீண்டும் கணக்கிடுவது மற்றும் புதுப்பிக்கப்பட்ட செயல்படுத்தலை செயல்படுத்தல்களின் பட்டியலில் சேர்ப்பது ஆகியவை அடங்கும்.
இறுதியாக, கணிதம். zs திசையன்களின் கடைசி உறுப்புகளின் சிக்மாய்டு பிரைம் மூலம் பெருக்கப்படும் முந்தைய அடுக்கின் பிழைக்கு சமமான டெல்டா, நமது பின்தங்கிய பாஸைத் தொடங்குவதற்கு முன் கணக்கிடப்படுகிறது.
nabla b இன் கடைசி அடுக்கு டெல்டாவாக அமைக்கப்பட்டுள்ளது, மேலும் nabla 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 ஐப் பயன்படுத்தி, புதிதாக ஒரு நியூரல் நெட்வொர்க்கை உருவாக்குகிறோம். உயர்நிலை கணிதத்துடன், செயல்படுத்தலின் பிரத்தியேகங்களையும் நாங்கள் விவாதித்தோம்.
உதவியாளர் செயல்பாடுகளை செயல்படுத்துவதன் மூலம் தொடங்கினோம். நியூரான்கள் வேலை செய்ய, சிக்மாய்டு மற்றும் சிக்மாய்டு பிரைம் செயல்பாடுகள் முக்கியமானவை. நரம்பியல் நெட்வொர்க்கில் தரவை ஊட்டுவதற்கான அடிப்படை செயல்முறையான ஃபீட்ஃபார்வர்டு செயல்பாட்டை நாங்கள் நடைமுறைக்குக் கொண்டுவருகிறோம்.
அடுத்து, எங்கள் நரம்பியல் வலையமைப்பை இயக்கும் இயந்திரமான பைத்தானில் சாய்வு இறங்கு செயல்பாட்டை உருவாக்கினோம். "உள்ளூர் மினிமாவை" கண்டறிந்து அவற்றின் எடைகள் மற்றும் சார்புகளை மேம்படுத்த, எங்கள் நரம்பியல் நெட்வொர்க் சாய்வு வம்சாவளியைப் பயன்படுத்துகிறது. நாங்கள் பயன்படுத்தி backpropagation செயல்பாட்டை உருவாக்கினோம் சாய்வு வம்சாவளி.
வெளியீடுகள் சரியான லேபிள்களுடன் பொருந்தாதபோது புதுப்பிப்புகளை வழங்குவதன் மூலம், இந்தச் செயல்பாடு நரம்பியல் நெட்வொர்க்கை "கற்றுக்கொள்ள" உதவுகிறது.
இறுதியாக, நாங்கள் எங்கள் புத்தம் புதிய பைத்தானை வைத்தோம் நரம்பு நெட்வொர்க் MNIST தரவு தொகுப்பைப் பயன்படுத்தி சோதனைக்கு. எல்லாம் சீராக செயல்பட்டது.
இனிய குறியீட்டு முறை!
ஒரு பதில் விடவும்