مواد جي جدول[لڪ][ڏسو]
دماغ نيورل نيٽ ورڪن جي مقابلي ۾ آهي. هي اهو قياس آهي جيڪو عام طور تي استعمال ڪيو ويندو آهي ڪنهن نئين موضوع جي مدد ڪرڻ لاءِ مشين لرننگ ۽ مصنوعي نيورل نيٽ ورڪ جي پويان خيالن کي سمجهڻ لاءِ.
ڇاڪاڻ ته اتي رياضياتي ۽ شمارياتي حسابن جا ڪيترائي تہه آهن جيڪي مناظر جي پويان هلي رهيا آهن، انهن نيٽ ورڪن کي رياضياتي فنڪشن جي طور تي بيان ڪرڻ هڪ وڌيڪ جديد طريقو آهي.
هي انهن ماڻهن لاءِ آهي جيڪي اصل ۾ مشين لرننگ ۾ دلچسپي رکن ٿا ۽ ڏسڻ چاهين ٿا ته پٿون نيورل نيٽ ورڪ ڪوڊ ڪيئن لکيل آهي.
هن آرٽيڪل ۾، اسان اهو ڏيکارينداسين ته ڪيئن مڪمل طور تي ڳنڍيل ڊيپ نيورل نيٽورڪ (DNN) کي شروع کان شروع ڪيو وڃي. Python 3.
اسان جي پٿون نيورل نيٽورڪ ڪوڊ لاءِ فائل جي جوڙجڪ جو هڪ جائزو
هتي ٽي فائلون ٺاهي وينديون. پهرين سادي nn.py فائل آهي، جنهن تي بحث ڪيو ويندو ”سيٽ اپ هيلپر افعال“ ۽ ”Building the Neural Network from Scratch.
ٽيسٽ ڊيٽا لوڊ ڪرڻ لاءِ اسان وٽ mnist loader.py نالي هڪ فائل به هوندي، جيئن ”لوڊنگ MNIST ڊيٽا“ ۾ بيان ڪيو ويو آهي.
آخرڪار، اسان وٽ test.py نالي هڪ فائل هوندي جيڪا اسان جي نيورل نيٽ ورڪ کي جانچڻ لاءِ ٽرمينل ۾ شروع ڪئي ويندي.
هن فائل ۾ تفصيل سان بيان ڪيو ويو آهي "رننگ ٽيسٽ."
لڳائڻ
ھن سبق جي پيروي ڪرڻ لاءِ NumPy Python لائبريري کي ڊائون لوڊ ڪيو وڃي. توھان ھن کي پورو ڪري سگھوٿا ٽرمينل تي ھيٺ ڏنل حڪم استعمال ڪندي:
ماڊل درآمد ڪرڻ ۽ مددگار فنڪشن کي ترتيب ڏيڻ
صرف ٻه لائبريريون اسان کي گهربل آهن بي ترتيب ۽ NumPy، جن کي اسين فوري طور تي درآمد ڪنداسين. اسان جي نيورل نيٽ ورڪ جي شروعاتي وزنن لاءِ، اسان انھن کي بي ترتيب لائبريري استعمال ڪندي ڦيرائينداسين.
اسان جي حسابن کي تيز ڪرڻ لاء، اسان استعمال ڪنداسين NumPy يا np (ڪنوينشن طرفان، اهو اڪثر ڪري اين پي جي طور تي درآمد ڪيو ويندو آهي). اسان جي درآمد کان پوءِ اسان جا ٻه مددگار ڪم ڪيا ويندا. ٻه sigmoid افعال: هڪ ۽ sigmoid prime.
لاجسٽڪ ريگريشن sigmoid فنڪشن استعمال ڪندي ڊيٽا کي درجه بندي ڪندو، جڏهن ته بيڪ پروپيگيشن ڊيلٽا يا گريڊينٽ کي sigmoid پرائم فنڪشن استعمال ڪندي حساب ڪندو.
نيٽ ورڪ ڪلاس ٺاهڻ
مڪمل طور تي ڳنڍيل نيورل نيٽ ورڪ جي تعمير هن حصي جو واحد ڌيان آهي. نيٽ ورڪ ڪلاس سڀني ڪمن کي شامل ڪندو جيڪي بعد ۾ ايندا. فنڪشن Object() { [مقامي ڪوڊ] } شروعاتي طور تي اسان جي نيٽ ورڪ ڪلاس ۾ ٺاهي ويندي.
ھڪڙي دليل، سائيز، فنڪشنل جي ضرورت آھي Object() { [مقامي ڪوڊ] }. سائز متغير عددي قدرن جو هڪ مجموعو آهي جيڪو اسان جي نيورل نيٽ ورڪ جي هر پرت ۾ موجود ان پٽ نوڊس جي تعداد جي نمائندگي ڪري ٿو.
اسان اسان جي __init__ طريقي ۾ چار ملڪيت شروع ڪريون ٿا. ان پٽ متغير، سائيز، ترتيب ڏيڻ لاء استعمال ڪيا ويندا آھن تہه جي سائز جي فهرست ۽ تہن جو تعداد، تہن جو تعداد، ترتيب سان.
پهريون قدم بي ترتيب طور تي اسان جي نيٽ ورڪ جي ابتدائي تعصب کي هر پرت تي تفويض ڪرڻ آهي جيڪا ان پٽ پرت جي پيروي ڪري ٿي.
آخرڪار، هر ڪڙي ان پٽ ۽ آئوٽ پٽ جي وچ ۾ ان جي وزن بي ترتيب سان ٺاهيل آهي. Np.Random.Randn() هڪ بي ترتيب نموني ڏئي ٿو جيڪا عام تقسيم مان تيار ڪيل حوالي سان.
فيڊ فارورڊ فنڪشن
هڪ اعصابي نيٽ ورڪ ۾، معلومات کي فيڊ فارورڊ فنڪشن طرفان اڳتي وڌايو ويندو آهي. ھڪڙو دليل، الف، موجوده ايڪٽيويشن ویکٹر کي اشارو ڪندي، ھن فنڪشن جي ضرورت پوندي.
هي فنڪشن هر پرت تي سرگرميون جو اندازو لڳائي ٿو نيٽ ورڪ ۾ سڀني تعصبن ۽ وزنن تي بار بار ڪندي. جواب ڏنو ويو آهي اڳڪٿي، جيڪو آخري پرت جي چالو آهي.
ميني بيچ گريجوئيٽ نزول
اسان جي نيٽورڪ ڪلاس جو ڪم هارس Gradient Descent آهي. هن نسخي ۾، اسان استعمال ڪريون ٿا ميني بيچ (اسٽوچسٽڪ) گريجوئيٽ نزول، تدريسي نزول جي هڪ تبديل ٿيل تبديلي.
اهو ظاهر ڪري ٿو ته ڊيٽا پوائنٽن جو هڪ ننڍڙو بيچ استعمال ڪيو ويندو اسان جي ماڊل کي اپڊيٽ ڪرڻ لاء. چار گهربل ۽ هڪ اختياري دليل هن طريقي سان گذري ويا آهن. چار گهربل متغير آهن ٽريننگ ڊيٽا سيٽ، دورن جو تعداد، ميني بيچ جي سائيز، ۽ سکيا جي شرح (ايٽا).
ٽيسٽ ڊيٽا درخواست تي دستياب آهن. اسان ٽيسٽ ڊيٽا فراهم ڪنداسين جڏهن اسان آخرڪار هن نيٽ ورڪ جو جائزو وٺنداسين. ھن فنڪشن ۾ نمونن جو تعداد شروعاتي طور لسٽ جي ڊگھائي تي مقرر ڪيو ويو آھي جڏھن تربيتي ڊيٽا ھڪڙي فهرست جي قسم ۾ تبديل ٿي وئي آھي.
اسان پڻ ساڳيو عمل لاڳو ڪندا آهيون ڊيٽا کي جانچڻ لاءِ جيڪو ڏنو ويو آهي. اهو ان ڪري جو اسان کي لسٽن جي طور تي واپس ڪرڻ بدران، اهي حقيقت ۾ فهرستن جا زپ آهن. جڏهن اسان MNIST ڊيٽا جا نمونا بعد ۾ لوڊ ڪنداسين، اسان ان بابت وڌيڪ ڄاڻنداسين.
جيڪڏهن اسان پڪ ڪري سگهون ٿا ته اسان ٻنهي قسمن جي ڊيٽا کي فهرستن جي طور تي مهيا ڪندا آهيون، پوء هن قسم جي ڪاسٽنگ ضروري ناهي.
هڪ دفعو اسان وٽ ڊيٽا آهي، اسان هڪ لوپ ۾ تربيتي دورن تي وڃون ٿا. هڪ تربيتي دور صرف هڪ دور آهي نيورل نيٽورڪ ٽريننگ جو. اسان پهريون ڀيرو هر دور ۾ ڊيٽا کي ڦيرايو ته بي ترتيب کي يقيني بڻائڻ کان پهريان مني بيچ جي فهرست ٺاهڻ کان اڳ.
تازه ڪاري ميني بيچ فنڪشن، جيڪو هيٺ بحث ڪيو ويو آهي، هر ميني بيچ لاء سڏيو ويندو. ٽيسٽ جي درستگي پڻ واپس ڪئي ويندي جيڪڏهن ٽيسٽ ڊيٽا موجود آهي.
لاڳت کان نڪتل مددگار فنڪشن
اچو ته هڪ مددگار فنڪشن ٺاهيون جنهن کي Cost derivative سڏيو ويندو آهي ان کان اڳ جو اسان واقعي بيڪ پروپيگيشن ڪوڊ ٺاهيون. جيڪڏهن اسان پنهنجي آئوٽ پرت ۾ غلطي ڪريون ٿا، قيمت نڪتل فنڪشن ان کي ڏيکاريندو.
ان لاءِ ٻن انپٽس جي ضرورت آھي: ٻاھرين ايڪٽيويشن جي صف ۽ y-coordinates جي متوقع ٻاھرين قدرن جي.
پوئتي پروپيگيشن فنڪشن
اسان جو موجوده ايڪٽيويشن ویکٹر، ايڪٽيويشن، گڏو گڏ ڪنهن ٻئي ايڪٽيويشن ویکٹر، ايڪٽيويشن، ۽ z-ویکٹر، zs، سڀني کي ذهن ۾ رکڻ گهرجي. هڪ پرت جنهن کي ان پٽ پرت سڏيو ويندو آهي پهريون چالو ڪيو ويندو آهي.
اسان انهن کي کڻڻ کان پوء هر تعصب ۽ وزن ذريعي لوپ ڪنداسين. هر لوپ ۾ z ویکٹر کي ڊاٽ پراڊڪٽ جي وزن ۽ ايڪٽيوشن جي حساب سان شامل ڪرڻ، ان کي zs جي لسٽ ۾ شامل ڪرڻ، ايڪٽيوشن جي ٻيهر ڳڻپ ڪرڻ، ۽ ايڪٽيوشن جي لسٽ ۾ اپڊيٽ ٿيل ايڪٽيوشن کي شامل ڪرڻ شامل آهي.
آخرڪار، رياضي. ڊيلٽا، جيڪو zs ویکٹرز جي آخري عنصر جي sigmoid prime سان ضرب ڪيل پوئين پرت جي غلطي جي برابر آهي، ان کان اڳ اسان جي پٺتي پيل پاس کي شروع ڪيو وڃي.
نابلا ب جي آخري پرت ڊيلٽا لاءِ مقرر ڪئي وئي آھي، ۽ نابلا w جي آخري پرت ڊيلٽا جي ڊٽ پراڊڪٽ ۽ ايڪٽيويشن جي ٻئي کان آخري پرت لاءِ مقرر ڪئي وئي آھي (ٽرانسپوز ڪيو ويو ته جيئن اسين اصل ۾ رياضي ڪري سگھون) .
اسان اڳي وانگر اڳتي وڌون ٿا، ٻئي پرت سان شروع ڪندي ۽ آخري سان ختم ڪريون، ۽ ان آخري پرت کي مڪمل ڪرڻ کان پوءِ عمل کي ورجايو. ان کان پوءِ نابلس کي ٽوپل طور واپس ڏنو ويندو آهي.
ميني بيچ گريجوئيٽ نزول کي اپڊيٽ ڪرڻ
اسان جي SGD (اسٽوچسٽڪ گريجوئيٽ نزول) جو طريقو پهريان کان ميني بيچ اپڊيٽ کي شامل ڪري ٿو. جيئن ته اهو SGD ۾ استعمال ڪيو ويو آهي پر ان کي پڻ ضرورت آهي backprop، مون بحث ڪيو ته هن فنڪشن کي ڪٿي رکڻو آهي.
آخرڪار، مون ان کي هتي پوسٽ ڪرڻ جو انتخاب ڪيو. اهو شروع ٿئي ٿو 0 ویکٹرز جي biases ۽ Weights Nablas جي پيدا ڪرڻ سان، جيئن اسان جي backprop فنڪشن ڪيو.
ان لاءِ مني بيچ ۽ ايٽا سکيا جي شرح ان جي ٻن انپٽس جي ضرورت آھي. مني-بيچ ۾، اسان پوءِ هر ان پٽ، x، ۽ آئوٽ پُٽ، y لاءِ هر نابلا صف جي ڊيلٽا حاصل ڪرڻ لاءِ backprop فنڪشن استعمال ڪندا آهيون. نيبلا لسٽون وري انهن ڊيلٽا سان تازه ڪاري ڪيون وينديون آهن.
آخرڪار، اسان نيٽ ورڪ جي وزن ۽ تعصب کي تازه ڪاري ڪرڻ لاء سکيا جي شرح ۽ نابلس استعمال ڪندا آهيون. هر قيمت کي تازو قدر ۾ اپڊيٽ ڪيو ويو آهي، سکيا جي شرح کان گهٽ، مني بيچ جي سائيز سان ضرب ڪئي وئي، ۽ پوءِ نابلا جي قيمت ۾ شامل ڪئي وئي.
فنڪشن جو جائزو وٺو
evaluate فنڪشن حتمي آهي جيڪو اسان کي لکڻ جي ضرورت آهي. ٽيسٽ ڊيٽا هن فنڪشن لاء واحد ان پٽ آهي. هن فنڪشن ۾، اسان صرف نيٽ ورڪ جي پيداوار جو مقابلو ڪريون ٿا متوقع نتيجن سان، y. ان پٽ کي کارائڻ سان، x، اڳتي، نيٽ ورڪ جو نتيجو طئي ڪيو ويندو آهي.
مڪمل ڪوڊ
جڏهن اسان سڀني ڪوڊ کي گڏ ڪندا آهيون، اهو ڪيئن ظاهر ٿئي ٿو.
نيورل نيٽ ورڪ جي جاچ
لوڊ ڪندي MNIST ڊيٽا
هن MNIST ڊيٽا .pkl.gz فارميٽ ۾ آهي، جنهن کي اسين GZIP استعمال ڪندي کولينداسين ۽ اچار سان لوڊ ڪنداسين. اچو ته هڪ تڪڙو طريقو لکون هن ڊيٽا کي لوڊ ڪرڻ لاءِ ٽيپل سائيز جي ٽن، ٽريننگ، تصديق، ۽ ٽيسٽ ڊيٽا ۾ ورهايل.
اسان جي ڊيٽا کي منظم ڪرڻ ۾ آسان بڻائڻ لاء، اسين 10-آئٽم صف ۾ y کي انڪوڊ ڪرڻ لاءِ ٻيو فنڪشن لکنداسين. صف تمام 0s ٿيندي سواءِ 1 جي جيڪا تصوير جي صحيح عدد سان ملي ٿي.
اسان پنهنجي ڊيٽا کي پڙهڻ جي قابل فارميٽ ۾ لوڊ ڪرڻ لاءِ بنيادي لوڊ ڊيٽا ۽ هڪ گرم انڪوڊ طريقو استعمال ڪنداسين. هڪ ٻيو فنڪشن لکيو ويندو جيڪو اسان جي x قدرن کي سائيز 784 جي فهرست ۾ تبديل ڪندو، تصوير جي 784 پکسلز سان ملندڙ، ۽ اسان جي y قدرن کي انهن جي واحد گرم انڪوڊ ٿيل ویکٹر فارم ۾.
پوء اسان x ۽ y جي قيمتن کي گڏ ڪنداسين جيئن هڪ انڊيڪس ٻئي سان ملندو. اهو لاڳو ٿئي ٿو ٽريننگ، تصديق، ۽ ٽيسٽ ڊيٽا سيٽ. اسان وري تبديل ٿيل ڊيٽا واپس آڻينداسين.
هلندڙ ٽيسٽ
اسان هڪ نئين فائل ٺاهينداسين جنهن کي "mnist loader" سڏيو ويندو آهي، جيڪو اسان ٻنهي نيورل نيٽ ورڪ کي درآمد ڪندو جيڪو اسان اڳ ۾ قائم ڪيو (سادو nn) ۽ MNIST ڊيٽا سيٽ لوڊر اسان جي جاچ شروع ڪرڻ کان اڳ.
هن فائل ۾، اسان کي صرف ڊيٽا کي درآمد ڪرڻ جي ضرورت آهي، 784 جي ان پٽ پرت جي سائيز ۽ 10 جي آئوٽ پرت جي سائيز سان هڪ نيٽ ورڪ ٺاهيو، ٽريننگ ڊيٽا تي نيٽ ورڪ جي SGD فنڪشن کي هلائي، پوء ان کي ٽيسٽ ڊيٽا استعمال ڪندي ٽيسٽ ڪريو.
ذهن ۾ رکو ته اسان جي انپٽ ليئرز جي لسٽ لاءِ، ان سان ڪو به فرق نٿو پوي ته 784 ۽ 10 جي وچ ۾ ڪو به انگ ڇا آهي. اسان ٻين پرتن کي تبديل ڪري سگھون ٿا جيئن اسان چاهيون؛ صرف ان پٽ ۽ ٻاھرين سائيز مقرر ٿيل آھن.
ٽي تہه ضروري نه آهن؛ اسان استعمال ڪري سگهون ٿا چار، پنج، يا صرف ٻه. ان سان تجربو ڪرڻ جو مزو وٺو.
ٿڪل
هتي، پٿون 3 استعمال ڪندي، اسان شروع کان هڪ نيورل نيٽورڪ ٺاهيندا آهيون. اعلي سطحي رياضي سان گڏ، اسان عملدرآمد جي وضاحتن تي پڻ بحث ڪيو.
اسان مددگار ڪمن کي لاڳو ڪرڻ سان شروع ڪيو. نيورسن کي ڪم ڪرڻ لاء، sigmoid ۽ sigmoid بنيادي افعال انتهائي اهم آهن. اسان ان کان پوء فيڊ فارورڊ فنڪشن کي عملي طور تي رکون ٿا، جيڪو بنيادي عمل آهي ڊيٽا کي فيڊنگ نيٽ ورڪ ۾.
اڳيون، اسان Python ۾ گريڊينٽ ڊيسنٽ فنڪشن ٺاهيو، انجڻ جيڪو اسان جي نيورل نيٽ ورڪ کي هلائي ٿو. "مقامي مينيما" کي ڳولڻ ۽ انهن جي وزن ۽ تعصب کي بهتر ڪرڻ لاء، اسان جو اعصاب نيٽورڪ استعمال ڪري ٿو تدريسي نزول. اسان استعمال ڪندي backpropagation فنڪشن ٺاهيو گريجوئيٽ نزول.
اپڊيٽ پهچائڻ سان جڏهن آئوٽ پُٽ مناسب ليبلز سان نه ٿا ملن، هي فنڪشن نيورل نيٽ ورڪ کي ”سکڻ“ جي قابل بڻائي ٿو.
آخرڪار، اسان اسان جو نئون نئون پٿون رکيو نظرياتي نيٽورڪ MNIST ڊيٽا سيٽ استعمال ڪندي ٽيسٽ لاءِ. هر شي آساني سان ڪم ڪيو.
ڪوڊنگ خوش!
جواب ڇڏي وڃو