فهرست[پټ][ښکاره]
مغز د عصبي شبکو سره د پرتلې وړ دی. دا هغه مشابهت دی چې په عموم ډول د ماشين زده کړې او مصنوعي عصبي شبکو تر شا نظرونو پوهیدو لپاره موضوع ته د نوي چا سره د مرستې لپاره کارول کیږي.
ځکه چې د ریاضیاتي او احصایوي حسابونو څو پرتونه شتون لري چې د پردې تر شا روان دي، د دې شبکو تعریف د ریاضياتي فعالیت په توګه خورا پرمختللی میتود دی.
دا د هغو خلکو لپاره دی چې واقعیا د ماشین زده کړې سره علاقه لري او غواړي وګوري چې د 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، د اوسني فعالولو ویکتور په ګوته کوي، د دې فنکشن لخوا به اړین وي.
دا فنکشن په شبکه کې د ټولو تعصبونو او وزنونو په تکرارولو سره په هر پرت کې د فعالیتونو اټکل کوي. ورکړل شوی ځواب وړاندوینه ده، کوم چې د وروستي پرت فعالیتونه دي.
د مینی بیچ تدریجي نزول
زموږ د شبکې ټولګي کاري هارس تدریجي نزول دی. په دې نسخه کې، موږ د مینی بیچ (سټوکاسټیک) تدریجي نزول کاروو، د تدریجي نزول یو بدل شوی تغیر.
دا په ګوته کوي چې د ډیټا پوائنټونو یوه کوچنۍ ډله به زموږ د ماډل تازه کولو لپاره وکارول شي. څلور اړین او یو اختیاري دلیل دې میتود ته لیږدول کیږي. څلور اړین تغیرات د روزنې ډیټا سیټ، د دورې شمیره، د کوچنیو بستونو اندازه، او د زده کړې کچه (eta) دي.
د ازموینې ډاټا د غوښتنې پراساس شتون لري. موږ به د ازموینې ډاټا چمتو کړو کله چې موږ بالاخره د دې شبکې ارزونه وکړو. په دې فنکشن کې د نمونو شمیر په پیل کې د لیست اوږدوالی ته ټاکل کیږي کله چې د روزنې ډاټا د لیست ډول ته بدله شي.
موږ د ډیټا ازموینې لپاره هم ورته پروسه پلي کوو کوم چې په کې ورکړل شوي دي. دا د دې پرځای چې موږ ته د لیست په توګه بیرته راګرځول کیږي ، دوی واقعیا د لیستونو زپ دي. کله چې موږ وروسته د MNIST ډیټا نمونې پورته کړو، موږ به پدې اړه نور معلومات زده کړو.
که موږ وکولی شو ډاډ ترلاسه کړو چې موږ دواړه ډوله ډیټا د لیست په توګه چمتو کوو ، نو دا ډول کاسټ کول لازمي ندي.
یوځل چې موږ معلومات ولرو، موږ په یوه لوپ کې د روزنې دورې ته ځو. د روزنې دوره د عصبي شبکې روزنې یوازې یو پړاو دی. موږ لومړی په هر دور کې ډاټا بدلوو ترڅو د مینی بیچونو لیست کولو دمخه تصادفي ډاډ ترلاسه کړو.
د مینی بیچ فنکشن تازه کول، کوم چې لاندې بحث شوی، د هرې مینی بیچ لپاره به وغوښتل شي. د ازموینې دقت به هم بیرته راستانه شي که چیرې د ازموینې ډاټا شتون ولري.
د لګښت مشتق مرستندویه فعالیت
راځئ چې یو مرستندویه فعالیت رامینځته کړو چې لومړی د لګښت مشتق په نوم یادیږي مخکې لدې چې موږ واقعیا د بیک پروپیګیشن کوډ رامینځته کړو. که موږ زموږ د محصول پرت کې تېروتنه وکړو، د لګښت مشتق فعالیت به دا وښیې.
دا دوه آخذونو ته اړتیا لري: د محصول فعالولو لړۍ او د اټکل شوي محصول ارزښتونو y- همغږي.
د بیک پروپاګیشن فعالیت
زموږ اوسنی فعال ویکتور، فعال کول، او همدارنګه د نورو فعالولو ویکتورونه، فعالیت، او z-ویکٹر، zs، ټول باید په پام کې ونیول شي. یو پرت چې د ان پټ پرت په نوم یادیږي لومړی فعال کیږي.
موږ به د دوی له ایښودلو وروسته د هر تعصب او وزن له لارې لوپ کړو. په هر لوپ کې د وزن او فعالولو د ډاټ محصول په توګه د z ویکتور محاسبه کول شامل دي ، د zs لیست کې یې اضافه کول ، د فعالولو بیا محاسبه کول ، او د فعالیتونو لیست کې تازه شوي فعالیت اضافه کول شامل دي.
په پای کې، ریاضی. ډیلټا، کوم چې د مخکینۍ پرت څخه د تېروتنې سره مساوي دی چې د zs ویکتورونو د وروستي عنصر سیګمایډ پریم لخوا ضرب شوی، مخکې له دې چې موږ خپل شاته پاس پیل کړو محاسبه کیږي.
د نابلا بی وروستی پرت د ډیلټا په توګه ټاکل شوی ، او د نابلا وروستی پرت د ډیلټا د ډاټ محصول او د فعالیت دوهم څخه تر وروستي پرت لپاره ټاکل شوی (ټرانسپوز شوی نو موږ واقعیا ریاضی کولی شو) .
موږ د پخوا په څیر پرمخ ځو، د دویمې طبقې سره پیل او د وروستي سره پای ته ورسوو، او د دې وروستیو پرتونو بشپړولو وروسته پروسه تکرار کړئ. نابلس بیا د ټپل په توګه بیرته ورکول کیږي.
د مینی بیچ تدریجي نزول تازه کول
زموږ د SGD (سټاکسټیک تدریجي نزول) میتود دمخه د مینی بیچ تازه کول شاملوي. څرنګه چې دا په SGD کې کارول کیږي مګر بیک پروپ ته هم اړتیا لري، ما بحث وکړ چې دا فنکشن چیرته وساتو.
په نهایت کې ، ما دا غوره کړه چې دلته یې پوسټ کړم. دا د تعصبونو او وزنونو نابلاس د 0 ویکتورونو په رامینځته کولو سره پیل کیږي ، لکه زموږ د بیک پروپ فعالیت په څیر.
دا د مینی بیچ او د ایټا زده کړې نرخ ته اړتیا لري د دې دوه انډولونو په توګه. په مینی بیچ کې، موږ بیا د بیک پروپ فنکشن کاروو ترڅو د هر انپټ، ایکس، او آوټ پوټ، y لپاره د هر نابلا سرې ډیلټا ترلاسه کړو. د نابلا لیستونه بیا د دې ډیلټا سره تازه کیږي.
په نهایت کې، موږ د شبکې وزن او تعصب تازه کولو لپاره د زده کړې کچه او نابلاس کاروو. هر ارزښت خورا وروستي ارزښت ته تازه کیږي، د زده کړې کچه کمه، د منی بیچ اندازې سره ضرب کیږي، او بیا د نابلا ارزښت ته اضافه کیږي.
د فعالیت ارزونه
د ارزونې فعالیت وروستی هغه دی چې موږ یې لیکلو ته اړتیا لرو. د ازموینې ډاټا د دې فنکشن لپاره یوازینۍ وسیله ده. په دې فنکشن کې، موږ یوازې د شبکې پایلې د اټکل شوي پایلې سره پرتله کوو، y. د ان پټ په تغذیه کولو سره ، x ، فارورډ ، د شبکې محصولات ټاکل کیږي.
بشپړ کوډ
کله چې موږ ټول کوډ سره یوځای کړو، دا څنګه ښکاري.
د عصبي شبکې ازموینه
د MNIST ډاټا بارول
د د MNIST ډاټا په .pkl.gz بڼه کې دی، کوم چې موږ به د GZIP په کارولو سره خلاص کړو او د اچار سره به بار کړو. راځئ چې د دې ډیټا د پورته کولو لپاره یو ګړندی میتود ولیکئ چې د اندازې دریمې برخې په توګه ، په روزنې ، اعتبار ، او ازموینې ډیټا ویشل شوی.
د دې لپاره چې زموږ د معلوماتو اداره کول اسانه شي، موږ به یو بل فنکشن ولیکو چې y په 10-توکي صف کې کوډ کړي. سرې به ټول 0s وي پرته له 1 څخه چې د عکس مناسب عدد سره سمون لري.
موږ به د لومړني بار ډیټا او یو ګرم انکوډ میتود وکاروو ترڅو زموږ ډیټا د لوستلو وړ شکل کې پورته کړو. یو بل فنکشن به لیکل کیږي چې زموږ د x ارزښتونه به د 784 اندازه په لیست کې بدل کړي، د عکس 784 پکسلز سره سمون لري، او زموږ y ارزښتونه د دوی واحد ګرم کوډ شوي ویکتور بڼه کې.
بیا به موږ د x او y ارزښتونه داسې یوځای کړو چې یو شاخص له بل سره سمون ولري. دا د روزنې، اعتبار، او ازموینې ډاټا سیټونو باندې تطبیق کیږي. بیا موږ بدل شوي ډاټا بیرته راګرځوو.
ټیسټ چلول
موږ به د "mnist loader" په نوم یو نوی فایل جوړ کړو چې دا به دواړه عصبي شبکه وارد کړي چې موږ مخکې تاسیس کړي (ساده nn) او د MNIST ډیټا سیټ لوډر مخکې له دې چې موږ ازموینه پیل کړو.
پدې فایل کې ، ټول هغه څه چې موږ یې کولو ته اړتیا لرو ډیټا وارد کړو ، د 784 د ان پټ پرت اندازې سره شبکه جوړه کړئ او د 10 محصول پرت اندازه سره ، د شبکې SGD فعالیت د روزنې ډیټا کې پرمخ وړئ ، بیا یې د ټیسټ ډیټا په کارولو سره ازموینه وکړئ.
په یاد ولرئ چې زموږ د ان پټ پرتونو لیست لپاره، دا هیڅ توپیر نلري چې کوم شمیرې د 784 او 10 ترمنځ وي. موږ کولی شو نور پرتونه په هر ډول چې وغواړو بدل کړو؛ یوازې د ننوتلو او محصول اندازه ټاکل شوې.
درې پرتونه اړین ندي؛ موږ ممکن څلور، پنځه، یا حتی دوه وکاروو. د هغې سره تجربه کول خوند واخلئ.
پایله
دلته، د Python 3 په کارولو سره، موږ د سکریچ څخه یو عصبي شبکه رامینځته کوو. د لوړې کچې ریاضی سره سره، موږ د پلي کولو ځانګړتیاو باندې هم بحث وکړ.
موږ د مرستندویه دندو په پلي کولو پیل وکړ. د نیورونونو د کار کولو لپاره، د سیګمایډ او سیګمایډ اصلي دندې خورا مهم دي. موږ بیا د فیډفورډ فعالیت په عمل کې کوو، کوم چې د عصبي شبکې ته د معلوماتو د تغذیه کولو بنسټیز بهیر دی.
بیا، موږ په Python کې د تدریجي نزول فعالیت رامینځته کړ، هغه انجن چې زموږ عصبي شبکه چلوي. د "محلي مینیما" موندلو لپاره او د دوی وزنونه او تعصبونه غوره کولو لپاره، زموږ عصبي شبکه تدریجي نزول کاروي. موږ د بیک پروپیګیشن فعالیت په کارولو سره رامینځته کړ تدریجي نزول.
د تازه معلوماتو په وړاندې کولو سره کله چې محصول د مناسب لیبلونو سره سمون نه خوري، دا فنکشن عصبي شبکه د "زده کړې" وړ کوي.
په نهایت کې ، موږ خپل نوی پیتون کېښود نوریال شبکه د MNIST ډیټا سیټ په کارولو سره ازموینې ته. هر څه په اسانۍ سره کار کاوه.
خوښ کوډینګ!
یو ځواب ورکړئ ووځي