این آموزش ساخت شبکه عصبی با پایتون از صفر و البته قابل اجرا با زبانهای برنامهنویسی دیگر است. چرا میگوییم در پایتون و هر زبان دیگر؟ زیرا در این آموزش ما از کتابخانههای آماده پایتون برای ساخت شبکههای عصبی مصنوعی استفاده نکردیم. کدها را با پایتون خام و از صفر نوشتیم. پس شما میتوانید محتوای این دوره و کدهای آن را همزمان با هر زبان برنامهنویسی دیگر مثل سی شارپ، سی پلاس پلاس، جاوا و … نیز بازنویسی کنید.
پیش از این در همرویش فیلم شبکه عصبی کانولوشنی به زبان ساده منتشر شد. برای دیدن فیلم معرفی این آموزش بر روی این لینک (+) و یا پخش کننده پایین کلیک کنید:
برای دریافت بسته کامل این آموزش بر روی لینک زیر کلیک کنید:
شبکه عصبی کانولوشن به زبان ساده
داستان این آموزش
چندی پیش یک بسته آموزش شبکه عصبی مصنوعی از صفر (+) در همرویش منتشر شد. در آن بسته به مبانی نظری شبکههای عصبی از صفر پرداختیم. این دوره درواقع ادامه آن دوره است. آنچه آنجا آموختیم در این دوره کدنویسی میکنیم. البته در این دوره مرتب مفاهیم را یادآوری هم میکنیم.
برای آگاهی از داستان اصلی این دو بسته، توصیه میکنیم توضیحات و فیلم معرفی بسته آموزش شبکه عصبی (+) را هم بررسی کنید.
چرا ساخت شبکه عصبی با پایتون؟
همانطور که گفتیم ما در این آموزش از برنامهنویسی خام استفاده کردیم. این آموزش و کدهای آن را میتوان با زبانهای برنامهنویسی دیگر نیز پیادهسازی کرد. علت انتخاب پایتون، سادگی سینتکس و محبوبیت آن است.
این آموزش در یک نگاه
در آغاز این دوره ابزار برنامهنویسی را فراهم کردیم. ما در دفترچه ژوپیتر در کولب گوگل (+) استفاده کردیم. اما شما میتوانید کدها را در محیطهای دلخواه خود بنویسید. راهنمایی لازم را در جاهای لازم در دوره دریافت میکنید.
سپس شروع به کدنویسی کلاس شبکه عصبی کردیم. ویژگیها و متدهای شبکه را همزمان مینویسیم و میآموزیم. آنگاه از شبکه ایجاد شده یک نمونه با تعداد نورون و نرخ یادگیری مشخص میسازیم.
برای محک شبکه ساخته شده نیاز به یک پروژه داریم. پروژه شناسایی اعداد دستنویس دیتاست MNIST یک پروژه استاندارد در این زمینه است. شبکه خود را روی همین دیتاست و فرمت CSV آن اجرا کردیم. ضمناً تشخیص یا Detection با شناسایی یا Recognition متفاوت است و این را در دوره خواهید فهمید.
ما شبکه عصبی خود را با ۶۰ هزار داده امنیست تعلیم دادیم و سپس با ۱۰ هزار داده دیگر امنیست آزمایش کردیم. عملکرد (Performance) شبکه در شناسایی تصاویر به بیش از ۹۴ درصد رسید.
حالا نوبت بهینهسازی شبکه بود. در دو درس به بررسی تأثیر مفدار نرخ یادگیری (Learning Rate)، تعداد دادههای آموزش و تعداد نورونهای لایه مخفی در عملکرد شبکه تأثیر مهمی داشتند. با بهینهیابی این پارامترها عملکرد شبکه به ۹۶ درصد رسید.
ما همچنین مفهوم دوره یا Epoch را فهمیدیم. دیدیم که گرادیان کاهشی به سه صورت دستهای (Batch) و تصادفی (Stochastic) و نیمدستهای (Mini-Batch) قابل اجراست (انواع گرادیان کاهشی). با افزایش تعداد دوره به عدد ۴ عملکرد شبکه تا بیش از ۹۷ درصد بالا رفت.
در پایان این دوره دو کار اضافی را تجربه کردیم. اولی دادن تعدادی تصویر شخصی از اعداد دستنویس و محک قدرت پیشبینی شبکه بود. دومی اسکن مغزی یا باز کردن جعبه سیاه (Black Box) شبکه عصبی بود. هر دو مورد بینش ما را در مورد شبکههای عصبی مصنوعی و شیوه کار آنها بالا برد.
آموزههای اصلی:
- آشنایی با کولب و دفترچه ژوپیتر
- ساخت یک کلاس شبکه عصبی
- تنظیم وزنهای اولیه
- کدنویسی الگوریتم پیشخور (Feed-forward) و پسانتشار (Back-propagation)
- کدنویسی گرادیان کاهشی (Gradient Descent)
- آشنایی دیتاست MNIST
- فرق Image Detection و Image Recognition
- کار با numpy و matplotlib و scipy
- نحوه نرمال سازی دادهها
- تفاوت آزمایش (Test) و پیشبینی (Prediction)
- بهینهسازی شبکه و بهبود عملکرد (Performance)
- باز کردن جعبه سیاه (Black Box) شبکههای عصبی
این آموزش بینظیر است زیرا:
- ساخت شبکههای عصبی را از صفر (کد و مفهوم) میآموزید.
- ساخت شبکه عصبی با کدنویسی پایه (بدون کتابخانه آماده) است.
- با زبانهای برنامهنویسی دیگر نیز میتوانید این آموزش را اجرا کنید.
- یک پروژه شبکه عصبی برای شناسایی اعداد را تجربه میکنیم.
- یک پروژه بینایی کامپیوتر را با شبکه عصبی پیشخور تجربه میکنید.
پیشنیاز
** روزآمدی: این آموزش در واقع بخشی از مسیر یادگیری شبکه های عصبی مصنوعی (+) است. در ادامه میتوانید آموزش کدنویسی کانولوشن (+) را ببیند.
کلیدواژگان
پیاده سازی شبکه عصبی با پایتون | پیاده سازی شبکه های عصبی | فیلم اموزشی شبکه عصبی در پایتون | شبکه عصبی با پایتون | شبکه های عصبی با پایتون
ahoraa1 (خریدار محصول) –
جناب مهندس گل کاشتی 🙂 . من سه دوره پایتون از صفر و شبکه عصبی از صفر و ساخت شبکه عصبی با پایتون رو بنا به پیشنهاد شما و بخاطر علاقه مندی شخصی خودم دیدم و برای اولین بار به دنیای شبکه عصبی به صورت تخصصی پا گذاشتم .
مجموع روش عالی اموزش و صبر و حوصله همراه با تعهد به یاد دادن مفاهیم شخصیت بی نظیر و متعهد شما رو نشون میده . امید وارم همیشه در پناه حضرت دوست با عشق کارتون رو دنبال کنید و به بهره وری بیشتر این تخصصها در کشور عزیزمون همچنان کمک کنید . زنده باشید و دستتون رو میبوسم
مصطفی آصفی –
سلام و سپاس که برای لطف و بازخورد خودتون وقت گذاشتین. خوشحالم که کارم مفید بوده. قطعا در این حدی که توصیف کردین نیستم ولی لطف شما به من انرژی داد.
قاسمی (خریدار محصول) –
سلام مجدد و ممنون بابت اصلاحیه. انشالا موفق باشید
مصطفی آصفی –
سلام مجدد. ممنون از آرزوی خوبتون و وقتی که صرف کردین. شما هم همچنین
m.ghasemi (خریدار محصول) –
سپاس از شما بابت اخلاق حرفه ای تون.
البته فقط جهت اینکه دوره کامل تر بشه خدمتتون عرض کردم وگرنه دوره و آموزش های شما بینظیره.
روش گرادیان کاهشی یک روش از نوع تکراری هست که با تکرارهای یک دنباله به سمت جواب یعنی کمینه حرکت میکنه. برای روشای تکراری در آنالیز عددی مفهومی تحت عنوان مرتبه همگرایی (Rate of convergence) داریم. این مفهوم به این شکل تعریف میشه که اگر حد نسبت خطای مطلق در گام n+1ام به خطا در گام nام برابر یک ثابت مخالف صفر بشه میگیم روش همگرا از مرتبه یک یا به اصلاح روش خطی هست.
اگر در مخرج کسر خطا به توان k برسه و هنوز حد کسر برابر یک عدد ثابت ناصفر بشه روش از مرتبه k همگرا خواهد بود. مثل روش نیوتن برای ریشه یابی که همگرا از مرتبه 2 هست.
ثابت ناصفر طرف دوم رو ثابت مجانبی خطا میگیم و بهتره که عدد کوچکی باشه.
لینک ویکی پدیا خدمت شما
https://en.wikipedia.org/wiki/Rate_of_convergence
مصطفی آصفی –
سلام جناب قاسمی عزیز. پوزش بابت تاخیر درگیر بیماری شدم. ممنونم برای توضیح خوبتون. من پیام و توضیحتون رو به فایل های دانلود درس ۱۷ آموزش شبکه عصبی از صفر (+) پیوست کردم. بسیار ممنونم که برای این موضوع مهم وقت گذاشتین.
m.ghasemi (خریدار محصول) –
سلام جناب آصفی بزرگوار و خیلی ممنون بابت تدریس عالی و بسیار جامع جنابعالی.
فقط جهت اطلاع خواستم خدمتتون عرض کنم که اون مفهومی که برای روش گرادیان کاهشی در درس 17 فرمودید مرتبه اول یعنی از مشتق مرتبه ائل استفاده میکنه درست نیست. این یک مفهوم در آنالیز عددی هست و روش تکراری مرتبه اول مفهوم دیگه ای داره
مصطفی آصفی –
سلام وقتتون بخیر و ممنونم که برای بازخورد و انرژی خوبتون وقت گذاشتین. امکانش هست بیشتر توضیح بدین که در صورت نیاز اصلاحیه بزنم.
روح اله زارعی (خریدار محصول) –
سلام آقای آصفی
ببخشید بازم مزاحم میشم.
من یک شبکه عصبی برای یک مسئله رگرسیونی طراحی کردم. اما شبکه همیشه بر اساس آخرین دیتای ورودی، بهترین خروجی رو میده
البته آموزشم به شبکه به صورت به قول معروف آنلاین یا تک تک هست و نه به صورت دسته ای.
برای اصلاح، بار اول تعداد تکرار رو کم کردم تا خطا برای هر ورودی شبکه زیاد کم نشه و این طوری برایند کل ورودی ها تو آموزش حساب شه. اما باز هم نتیجه خوبی نداد.
الان به جای یک لایه مخفی، از دو لایه مخفی استفاده کردم که احساس می کنم، سوگیری به سمت آخرین ورودی شبکه، بیشتر شده.
می خواستم بدونم، به غیر نوع ورود داده ها که به نظر ورود دسته ای بهتره، چه عوامل دیگه ای در سوگیری شبکه به سمت نتیجه آخرین ورودی موثره؟
آیا تابع فعال سازی موثره؟
آیا تعداد نورون های لایه یا لایه های مخفی موثره و میشه امیدوار بود با افزایش تعداد نورون ها، شبکه بهتر آموزش ببینه. در مثال من. نورون های ورودی ۹ تا هستن که مسلما غیر قابل تغییر هستند. و لایه مخفی رو ۵ نورون انتخاب کردم.
آیا با محدود کردن اتصالات نورون های لایه ها، میشه امیدوار بود، شبکه بهتر آموزش ببینه.
یا شاید برای مسائل رگرسیونی، نکته ای وجود داره که جا انداختم.
ممنون میشم راهنمایی کنید
مصطفی آصفی –
سلام وقت بخیر. ببینید ممکنه انحراف محسوس شبکه شما ناشی از کم بودن تعداد داده ها باشه. توصیه می کنم در مورد تعداد داده مناسب بخونید و حتما داده ها رو به روش هایی که تو این فیلم مناسب سازی داده ها (+) توضیح دادم مقیاس کنید تا به ویژه تو حجم کم داده ها نوسان ها خیلی اثر یکباره نگذارن.
در مورد سوالتون فکر نمی کنم ممکنه با تغییر تابع فعال سازی اثر سوگیری به سمت یک سری از نمونه ها رو کمتر کنید ولی توصیه نمی کنم که در کل پارامترهای شبکه رو اونقدر باهاشون کار کنید و بالا و پایین کنید که یه مشکل ویژه با یک یا چند داده برطرف بشه چون اونوقت شبکه شما دچار بیش برازش و انحراف یادگیری میشه. دستی مجبورش کردین چیزی رو یاد بگیره. معماری های مختلف با یک تابع فعال سازی که منطقی بر اساس نوع مساله انتخاب شده رو آزمایش و نتایج رو مقایسه کنید و اگه چند داده خیلی سوگیری ایجاد می کنن موقت حذف و مجدد بررسیشون کنید.
البته این در مورد روش یادگیری دسته ای هست. در مورد یادگیری آنلاین گرایش به سمت داده های جدید تا حدی (تا حدی منطقیه) طبیعتا شما داری به شبکه ای که قبلا یاد گرفته می گی حالا بیا با این داده های جدید خودتو اصلاح کن. ولی خب تو یادگیری آنلاین هم باید تعداد هر بچ یا تعداد دور تزریق داده به حد کافی باشه (مشکل کمبود داده) که شبکه انحراف چشم گیر به سمت یک داده آخر نداشته باشه و برآیند اتفاق ها تا اون لحظه باشه.
این مقاله (+) برای تغییر معماری با تابع مونوتونیک هم ممکنه مفید باشه.
روح اله زارعی (خریدار محصول) –
سلام مجدد خیلی ممنونم که بررسی کردید. مجدد خودمم بررسی می کنم ببینم دقیقا چیکار کرده. مخصوصاً در مورد نکته ای که فرمودید، شاید تابع سود بوده.
در مورد پیشنهادتون شما لطف دارید. اما نمی دونم من مبتدی هم می تونم مفید باشم یا نه. اما به هر حال ثبت نام می کنم و هر چی یادگرفتم به اشتراک می ذارم. به خصوص تو زمینه حل مسائلی که باهاش روبرو میشم که فکر می کنم منبع فارسی کمی داشته باشه
مصطفی آصفی –
سلام وقت بخیر. ممنون از پاسختون. بله حتما این کار رو بکنید. هم رویش اصولا همون طور که از نامش میاد دنبال مدرس هایی هست که تدریس رو بهانه درک عمیق تر و رویش می کنن تا دوره آموزشی هم رویش خودشون و هم فراگیر رو به همراه داشته باشه.
روح اله زارعی (خریدار محصول) –
سلام آقای آصفی
بازم مزاحم همیشگی با سوالای تموم نشدنیش اومد:)
واقعا ممنونم که با صبر و دقت بالا جواب سوالات دوستان دیگه و همچنین من رو میدید.
این بار مزاحم شدم در ارتباط باا مطلبی که قبلا گفتم و اون هم پیاده سازی شبکه عصبی در اکسل سوالی بپرسم.
البته سوال من وابسطه به اکسل یا نرم افزار خاصی نیست دقیفاً
راستش من این سایت رو که یک پروژه شبکه عصبی تو اکسل داشت پیدا کردم:
https://www.codeproject.com/Articles/1273000/Machine-Learning-in-Excel
الان تفریبا صددر صدشو فهمیدم. الا یه بخش کوچیک رو
یادمه شما در بسته آموزشی شبکه عصبی مصنوعی به زبان ساده، اونجایی که به اصلاح وزن ها با روش گرادیان کاهشی رسیده بودید، درس 19، هنگام محاسبه مشتق، همون طور که خطا میشد هدف – خروجی، در مشتق خطا هم عبار هدف منهای خروجی ظاهر میشد. که خب خیلی منطقیه . اما در این فایلی که من لینک دادم، نویسنده، هنگام محاسبه مشتق خروجی رو منهای هدف کرده. البته برای محاسبه خطا هدف منهای خروجی شده، اما نمی دونم چرا برای محاسبه مشتق، برعکس عمل و خروجی رو منهای هدف کرده!
من با توجه به مسئله خودم شبکه ای تو اکسل ساختم و دیدم اگه مثل ایشون تو محاسبه مشتق، جای خروجی و هدف رو عوض نکنم، خطای شبکه م به جای کم شدن زیاد میشه و با عوض کردن جای خروجی و هدف دقیقا مثل نویسنده، شبکه درست کار کرد.
زیاد توضیح دادم و سرتون رو درد آوردم
اما خلاصه ش میشه اینکه چطور تو محاسبه خطا مثل شما هدف منهای خروجی شده اما تو محاسبه گرادیان برعکس و خروجی منهای هدف؟
بازم ممنونم از وقتی که می ذارید
مصطفی آصفی –
سلام وقتتون بخیر. مقاله جالبی رو معرفی کردین ممنونم. تا جایی که بررسی کردم اگه منظور مقاله از ستون M هدف باشه و از ستون O هم خروجی شبکه روابطی که نوشته فرقی با آموزش ندارن. اما راستش فرصت نمی کنم و اکسل هم ندارم که فایل ها رو بررسی کنم. ممکنه تو اجرای اعملی مفهوم تابع هزینه ای که تعریف کرده متفاوت باشه. البته ما در کل اگه تابع هزینه ای که داریم مفهومش عوض بشه و تابع سود بشه در این صورت مساله کمینه یابی رو تبدیل به بیشینه یابی می کنیم اما ممکنه اینجا تغییر دیگه ای تو کار باشه.
پی نوشت: اگه مایل بودین روی آموزش یادگیری ماشین در هم رویش کار کنید و یافته هاتون رو با دیگران به اشتراک بگذارین از منوی همکاری فرم پیشنهاد دوره رو تکمیل و ارسال کنید. به نظرم یافته هاتون می تونه ثبت بشه و برای دیگران و معرفی خودتون مفید واقع بشه.
روح اله زارعی (خریدار محصول) –
مجدد سلام و وقت به خیر و تشکر از آموزش خوبتون.
در ادامه سوال و پیشنهاد قبلی، می خواستم بگم حواسم نبود و گفتم تابع خطی. منظور توابعی مثل RELUs بود که میشه باهاش مقادیر بیشتر از یک رو تولید کرد.
آیا برای حل مسئله رگرسیونی باید از این تابع استفاده کنم؟
اگه این طوره. هنگام گرادیان کاهشی، مشتق این تابه چطور محاسبه میشه؟ همون طور که از ظاهر تابع می دونید در مینیممش تعریف نشده است
ممنون میشم راهنماییم کنید
مصطفی آصفی –
سلام مجدد. دقت کنید مشتق تابع ReLU دو مقداری هست. تو بازه اعداد منفی مشتق صفره و تو اعداد مثبت مشتق ۱.
در مورد سوال اولتون دقت کنید که ReLU یه تابع خطی محسوب نمیشه. دو وضعیت داره و غیرخطی محسوب میشه. به همین دلیل و برای ایجاد حالت غیرخطی و انعطاف دادن به شبکه عصبی معمولا این تابع تو لایه های مخفی استفاده میشه. باز مثل پیام پایین تاکید می کنم که انتخاب تابع فعال سازی یه چیز قطعی نیست و به ماهیت کار و تجربه شما هم بستگی داره ولی انتخاب ReLU هم می تونه یه گزینه باشه.
اما تو لایه خروجی تابع فعال سازی بستگی به خروجی نهایی شبکه داره. می تونید از تابع های خطی واقعی یا همون سیگمویید یا softmax و موارد دیگه بسته به خروجی مورد انتظار استفاده کنید.
روح اله زارعی (خریدار محصول) –
مجددا سلام و ممنونم از حوصله و صبرتون و پاسخگویی های بسیار عالی
متوجه اشتباه در برداشتم از روش پیش گرفته شده تو این آموزش شدم.
و احتمال می دم دلیل جواب نگرفتنم اینه که یه مسئله رگرسیونی رو سعی کردم به روش مسائل مقایسه ای حل کنم.
سرچ کردم و فهمیدم برای مسائل رگرسیونی از تابع سیگموئید استفاده نمی کنن و باید از توابع خطی استفاده کنم. نظر شما هم همینه؟
و یک پیشنهاد داشتم. اگر فرصت داشتید به نظرم برای درک عینی تر شبکه عصبی و اتفاقاتی که تو تغییرات وزن ها میفته خیلی می تونه مفید باشه.
اون پیشنهاد هم اینه که شبکه عصبی یه مسئله ساده تر رو به جای استفاده از پایتون، با اکسل پیاده سازی کنید. من چند کلیپ دیدم که این کار رو کردن و وزن ها و تغییراتشون و فعل و انفعالات شبکه عینی تر جلوی چشمه.
تو مسئله ای که اینجا آموزش دادید، به یک باره داده های آموزش به شبکه خورانده میشه. اما خوبه که برای دید عینی تر، شبکه یه مسئله ساده تر رو با اکسل طراحی کنید و دیتای آموزش رو هم تک تک بهش بدید تا عملکرد شبکه ملموس و عینی تر بشه.
می دونم ممکنه وقت نداشته باشید. اما اگه زمانی وقت داشتید چنین آموزشی بذارید، ممنون میشم
با تشکر
مصطفی آصفی –
سلام وقت بخیر و ممنونم که یافته های خودتون رو به اشتراک گذاشتین. بله تابع سیگمویید بیشتر برای نسبت دادن احتمال و محدوده خروجی ۰ تا ۱ مناسبه و برای مسائل رگرسیون بهتره تابعی استفاده بشه که بتونه خروجی رو سرراست تر به دست بده. البته عوامل دیگه ای مثل عمق شبکه هم در انتخاب موثر هستن.
پیشنهادتون هم پیشنهاد بسیار خوبیه. بیشتر راستش این روزا تو فکر مینی پروژه های کاربردی هوش مصنوعی هستم تا بچه ها از کاربرد به نظریه برسن. ولی حتما پیشنهادتون تو ذهنم می مونه.
منصور احمدیان (خریدار محصول) –
با عرض سلام خدمت استاد عزیز و هم رویشی های گرامی
من برای مدت طولانی روی عملکرد مغز و اینکه چطوری از این مدل ها برای ارتقای قابلیت های رایانه ها استفاده کنیم کار می کردم ، مشاهده دوره شبکه عصبی مصنوعی از صفر و همچنین این دوره باعث شد به بینش عمیق تری نسبت به شبکه های عصبی برسم.
نکته بسیار جالبی که طی مطالعاتم بهش رسیدم این بود که مغز انسان از طریق ارتباطات سیناپس هاست که عملیات مرتبط با حافظه و تفکر رو انجام میده!
این قضیه زمانی جالب تر میشه که در مدل های شبکه عصبی مصنوعی وزن گره (نورون)ها مساوی با سیناپس در نظر گرفته میشه و در درس 20 که راجع به جعبه سیاه شبکه عصبی صحبت کردید و اینکه چطور بوسیله وزن نورون ها از آخر به اولین لایه نورون ها برسیم برام خیلی جالب بود که شبکه عصبی مصنوعی هم مثل مغز انسان ها بوسیله سیناپس هاش که همون وزن ها باشند فکر میکنه!!!
پس نسل بعدی شبکه های عصبی باید در زمینه وزن دهی عملکرد بهتری داشته باشه تا شبیه مغز انسان عمل کنه و بتونه مسیر عصبی و رد عصبی که کلید حافظه و بالطبع تفکر انسانی هستند رو شبیه سازی کنه!
به امید اینکه یکی از هم رویشی های عزیز موارد بالا رو محقق کنه…
مصطفی آصفی –
سلام و سپاس دوباره برای انرژی و نکته های خوبتون. خوشحالم که کار مفید بوده. این البته آغاز مسیره. با توجه به نکته هایی که گفتین پیشنهاد می کنم این آموزش رایگان نوروساینس (+) در مجموعه مکتب خونه رو هم ببینید. همین طور آموزش شبکه عصبی کانولوشن (+) و کدنویسی کانولوشن (+) می تونه به درک عمیق تر شما از شبکه های عصبی عمیق کمک کنه.
داریوش رزمی (خریدار محصول) –
با سلام خدمت آقای دکتر آصفی عزیز
قبل از طرح سوالم از جنابعالی، بر خود لازم و وظیفه میدانم که از زحمات ارزنده شما در خصوص تدریس فوق العاده شبکه های عصبی و پایتون قدردانی خودم را به جای بیارم از مجموعه های بی نظیر شما نهایت بهره را برده ام تدریس حضرتعالی در حوزه پایتون و شبکه های عصبی ستودنی هست و حتی به نظر بنده کمتر کسی شاید بتوان پیدا کرد تو ایران بتونه دوره های حجیمی مثل شبکه های عصبی را چنین اموزش بده و در اختیار دانشجویان قرار بده من بی شک شیفته اخلاق و تدریس حضرتعالی شده ام.
آقای دکتر سوالی که داشتم این بود که طبق دستور العملی که در دوره پایتون داشتیم ما میومدیم تعداد لایه ورودی و خروجی و لایه پنهان و نرخ یادگیری رو به صورت عددی میدادیم داخل پایتون طبق کدهای زیر:
# determain the number of nodes in each layes
input_nodes = 3
hidden_nodes = 3
output_nodes = 5
# determain the rate of learning
learning_rate = 0.3
nn= NN(input_nodes,hidden_nodes,output_nodes,learning_rate)
print(nn.w_i_h)
nn.query([2,3,4])
حالا بنده میخوام این ورودی ها رو از متلب که در ورک اسپیس ذخیره شده فراخوانی کنم داخل پایتون و خروجی های تولیدی داخل پایتون رو این بار بدم به متلب چه راهکاری پیشنهاد میدین ممنونم از پاسخ و وقتی که در اختیار بنده و دوستان اهل علم و تحقیق میذارید. سپاسگزارم.
مصطفی آصفی –
سلام وقت بخیر. شما لطف دارین. من در حد تغریفی که کردین نیستم. ممنونم که سوالتون رو اینجا مطرح کردین. سوال خیلی جالبیه. من البته تو این مورد تجربه ای ندارم ولی بر اساس جستجویی که کردم:
۱- برای فراخوانی فایل .mat متلب تو محیط پایتون بر اساس این لینک (+) شما می تونید اول scipy رو نصب و بعد به شکل پایین عمل کنید:
import scipy.io
mat = scipy.io.loadmat(‘file.mat’)
۲- برای ذخیره نتایج پایتون به صورت ماتریکس قابل درک متلب هم بر اساس این لینک (+) می تونید داده های مورد نظرتون رو با تکه کد پایین به صورت فایل mat و ماتریس قابل درک برای متلب ذخیره کنید:
import numpy as np
import scipy.io
x = np.linspace(0, 2 * np.pi, 100)
y = np.cos(x)
scipy.io.savemat(‘test.mat’, dict(x=x, y=y))
روح اله زارعی (خریدار محصول) –
ببخشید یه سوال دیگه هم دارم
من از کدهای شما برای شبکه خودم که پیش بینی یه پارامتر شیمیایی برای حدود 66 مولکول بود استفاده کردم. تعداد متغیرهام 14 تا بودن و برای همین 14 نورون تو لایه اول گذاشتم و لایه مخفی هم 7 نورون و لایه خروجی 1 نورون
ورودی ها رو هم تو مقیاس 0 تا 1 بردم و هدف رو هم همین طور
الان می خوام بدونم خروجی شبکه از داده های آموزشی رو چطور میشه دید تا با هدف مقایسه کنم؟
من تا اینجا فقط می تونم نتیجه شبکه توی داده های آزمایشی رو ببینم و بعد با عکس عملیات مقیاس بندی مین ماکس، ببینم با داده های اصلی چه قدر تفاوت دارن (که متاسفانه اصلاً خوب نبود)
سوال دیگه اینکه مقدار خطا رو چطور چک کنم که مثلاً اگه تا به 0.01 نرسیده، آموزش متوقف نشه. این تو کد شما نبود انگار
مصطفی آصفی –
با توجه به سوال پایینتون و این سوال من فکر می کنم که درس ۱۳ رو بایستی عمیق تر درک کنید. درس ۱۳ رو اگه به خوبی درک بکنین اونجا گفتیم که هدف رو به صورت یک آرایه از احتمال پیش بینی ها به شبکه میدیم. اونجا آرایه ۱۰ عضوی برای اعداد ۰ تا ۹ بود که برای مثال شما میشه اعداد ۱ تا ۶۶. لطفا این درس رو با دقت بیشتر ببینید. ضمنا فراموش نکنید که اینجا هم خروجی ها حتما باید بین بازه ۰ تا ۱ باشن و نه خود این دو عدد.
جواب سوال دومتون هم تو درس ۱۶ پیدا می کنین. اونجا که داریم total performance رو اندازه گیری می کنیم عملا خطا تو دلشه. وقتی می گیم بازده ۰.۹۹ این یعنی خطای ۰.۰۱ . با دونستن این مفهوم شما می تونید اون مقدار total performance رو یه مقدار اولیه براش در نظر بگیرین مثلا یه عدد پایین بعد این حلقه for
for e in range (epochs):
تو بخش آموزش شبکه رو با یه حلقه while جایگزین کنید که مثلا تا وقتی که total_performance < 0.99 هست آموزش ادامه داشته باشه. البته این ممکنه باعث بیش برازش بشه ولی خب خوبه امتحانش کنید. تو حالت بهتر خوبه دو شرط رو ترکیب کنید تو حلقه while: مثلا اگه عملکرد به 0.99 رسید یا تعداد دور تعلیم از مثلا ۱۰۰۰۰ دور گذشت. این عددها باز خودشون مثال هستن و روشون بحث هست.
روح اله زارعی (خریدار محصول) –
سلام آقای آصفی عزیز
من یه سوال دیگه برام پیش اومده
شما در درس 13 شبکه عصبی با پایتون مقیاس بندی داده ها رو انجام دادید و گفتید باید داده ها رو بین 0 و 1 ببریم. و البته خود 0 و 1 نمی تونه به شبکه منقل بشه بنا به همون دلایلی که گفتید.
با روشی که انجام دادید، عملاً 0 ها به 0.01 تبدیل میشن. اما 255 ها به 1 تبدیل میشن که هرچند کم اما بازم در ورودی ها وجود دارن. آیا این یک مشکلی برای شبکه ایجاد نمی کنه؟ آیا می تونم بازه خودم رو مثلاً 0 تا 256 در نظر بگیرم و با مقیاس کرد طبق این بازه، 1 ها رو از بین ببرم؟ یا شاید روش بهتری سراغ دارید که ممنون میشم راهنمایی کنید
با تشکر
مصطفی آصفی –
سلام وقت بخیر. دقت کنید این بازه ۰ تا ۲۵۵ برای ورودی ها (طیف رنگ پیکسل) هست و خود عدد ۱ تو ورودی ها مشکلی نداره. عدد ۰ فقط مشکل داره اونم به دلیل این که وزن تصادفی که تو جریان تعلیم داده میشه وقتی در ۰ ضرب میشه (هر عددی باشه) صفر میشه و اثر این انتخاب وزن جدید از بین میره. اما عدد ۱ تو ورودی ها مشکلی نداره. پس هدف ما بردن بین بازه ۰.۰۱ تا ۱ هست که به صورت کامنت هم بالای سلول نوشتم.
اما در مقابل همون طور که از دقیقه ۱۹ به بعد فیلم می بینید مقدارهای خروجی چون خروجی سیگمویید هستن هم نباید ۰ و هم نباید ۱ باشن چون این دو عدد دو مجانب افقی تابع هستن و تابع سیگمویید نمی تونه این دو رو تولید کنه و فقط بهشون نزدیک میشه. بنابراین ما خروجی رو به صورت یه آرایه دراوردیم از ۰.۰۱ تا ۰.۹۹
محمدرضا عرفانی (خریدار محصول) –
سلام
ممنون بابت دوره ی بسیار عالی
سوالی دارم از خدمتتون…
شما مسئله رو با فقط یک لایه ی پنهان حل کردید.
و در مورد تعداد لایه های پنهان و معیاری برای انتخاب آن و چگونگی پیاده سازی آن در پایتون، بیزحمت یک جلسه برگزار کنید.
برای درک بهتر الگوریتم این نیاز بسیار احساس میشود.
ممنون
sajjad shokri (خریدار محصول) –
درورد بر شما مهندس آصفی
عالی بود عالی
بسیار جالب و جذاب و پله به پله آموزش رو جلو بردین.
مصطفی آصفی –
سلام و سپاس از انرژی خوبتون و این که برای ارسال لطفتون وقت گذاشتین. خوشحالم که کار براتون مفید بوده.
رامین بزرگی (خریدار محصول) –
سلام
وقت بخیر اینکه دنبال یاد دادن ما هیگیری هستید در اموزش خیلی عالی بود خیلی خوب توضیح دادید من تا درس ده و یازده خیلی دوست داشتم و انتظارم این بود که همان طور که همه چی را ساده گفته بودید به جای اینکه برید روی عکس یه تابع ساده را که یه سری ورودی و خروجی داره بررسی می کردیم وچون در پایان اموزش شبکه عصبی از صفر گفته بودید برید خودتان یه تابع پیدا کنید و با ماشین حساب ، حساب کنید من انتظارم این بود که یه شبکه کوچک مثلا سه در سه باشه تا بیشتر با کارکرد اشنا بشیم و ملموس تر بشه و بتونیم تغییرات در نورون پنهان را به عینه ببینیم و پرینت کنیم و ببینیم در هر نورون چه عددی وجود داره با هر دور یادگیری به نظرم جای یکی دو درس که بتونه یه شبکه مثلا با 9 نورون را تحلیل کنه توی این اموزش به شدت خالی هست
سپاس از شما
مصطفی آصفی –
سلام وقت بخیر، ممنون از انرژی خوب و از پیشنهاد خوبتون. برای روزآمدی های بعدی دوره یادداشت می کنم اگه بتونم حتما اضافه می کنم.
baeidi (خریدار محصول) –
سلام و عرض ادب خدمت استاد آصفی گرامی
از راهنمایی شما بسیار ممنونم. حتما مطابق فرمایش جنابعالی مسیر را ادامه خواهم داد.
مجددا از جنابعالی و تدریس فوق العاده شما و وقتی که برای پاسخ به ابهامات ما قرار میدهید ممنون و سپاسگزارم.
ارادتمند شما
baeidi (خریدار محصول) –
سلام و عرض ادب خدمت جناب استاد آصفی گرامی
ضمن تشکر فراوان اززحمات و آموزش های عالی شما مزاحم شدم سوال کنم در ادامه راه ، شما یادگیری تنسورفلو و کراس را پیشنهاد میفرمایید یا پایتورچ و یا حتی کتابخانه دیگری در این خصوص ؟
ممنونم
مصطفی آصفی –
سلام و سپاس از انرژی خوبتون. ببینید ادامه راه ما به نیازمون بستگی داره ولی خب اول کار چون ابزارها رو هم خوب نمی شناسیم نمی دونیم که کدوم یکی به نیاز ما بیشتر می خوره.
ضمن دعوت به مطالعه این مقاله tensorflow vs pytorch (+) توصیه می کنم که تو آغاز راه زیاد سخت نگیرید چون تو قدم های اول ما با چالش های خیلی تخصصی و ریز درگیر نیستم که فریم ورک ها رو متمایز کنه و وقتی هم که به اون سطح برسیم با اون نوع از چالش ها جایی هستیم که شناخت لازم رو از ماهیت کارمون داریم و تعویض ابزار (اگه نیاز باشه) خیلی برامون سخت نیست.
البته این حالتم ممکنه که گاهی شخص از همون قدم های اول شروع به مدلسازی یک مساله پیچیده یا بزرگ می کنه و ممکنه بعدا به دلیل حجم کار بالایی که انجام داده برگشت به ابزار دیگه خیلی ساده نباشه. در این صورت باید بگم هر دوی این ابزارها تا حد زیادی جواب کار شما رو میدن.
من پیشنهاد می کنم سراغ آموزش تنسورفلو (+) برید و بعد آموزش کدنویسی شبکه کانولوشن با تنسورفلو (+) که دید بیشتری از امکانات یه کتابخونه آماده برای ساخت شبکه های عصبی و بعد شبکه های عصبی عمیق به شما میده.
پینوشت: اکه نیازتون حل مساله به خصوصی با چالش های مشخص در آغاز راه هست بر اساس نوع چالش ها بهتره مقاله های مقایسه ای بین این دو ابزار رو جستجو کنید.
روح اله زارعی (خریدار محصول) –
با سلام خدمت آقای آصفی عزیز
من دوره های شما رو شبکه عصبی و پیاده سلزی با پایتون رو دیدم.
یه سوال ذهنم رو درگیر کرده و اون اینکه چرا تو ساخت کلاس برای شبکه عصبی، به جای ساخت کلاسی از نورون با اجزای ورودی و وزن و تابع فعال ساز خروجی؛ کلاسی از لایه ها(لایه ورودی، لایه پنهان و لایه خروجی، به همراه متغیری برلی وزن ها) می سازن؟
چراکلاسی از یک نورون نمیسازن و بعد از روی اون کپی ایجاد کنن برای شبکه؟
امیدوارم منظورم رو درست رسونده باشم
مصطفی آصفی –
سلام و ممنون از دقت نظرتون. بله شی گرایی این شبکه بیشتر جنبه آموزشی داره و اگرچه غلط نیست ولی قطعا حالت های بهتری براش وجود داره.
در شی گرایی شبکه عصبی میشه از تعریف کلاس هایی برای انواع لایه ها استفاده کرد. این شیوه ای هست که شما تو کراس هم می بینید. وقتی قراره شبکه عمیقی ساخته بشه مثلا یک لایه کانولوشن می سازیم با مشخصات ورودی معین، یک لایه فلتن می سازیم با مشخصات معین، یک لایه پیشخور می سازیم و بعد همه این ها رو می چینیم پشت هم که بشه یک شبکه. به این ترتیب شما می تونید شبکه هایی با انواع چیدمان لایه ها با تعداد نورون ها و تابع های فعال سازی و وزن دهی های گوناگون داشته باشین.
سورس کد و مستندات تنسورفلو کراس یا این آموزش شبکه عصبی با تنسورفلو (+) رو ببینید و این آموزش بینایی کامپیوتر با تنسورفلو و کراس (+) تماشای فصل دومش به ویژه می تونه به شما عملی تکمیلی و خوبی بده.
ابراهیم (خریدار محصول) –
سلام. من در زمینه هوش مصنوعی چیزی نمیدونم. به لطف شما و این آموزش +آموزش قبلی که مدل کارکرد و محاسبات ماتریسی و… شبکهneural network الان تازه فهمیدم قضیه از چه قراره. با این تمرین دستخط و آموزش شبکه عصبی حالا اگه ما بتونیم این وزن ها را ذخیره کنیم که مجموعا حدود ۸۰ هزار تا وزن میشه، میتوان در جایی که لازم بود وزن ها را مجدد با آن مقادیر ذخیره شده پر کرد و عملا دیگر نیاز به آموزش مجدد با داده ها که حدودا ۶۰ هزار عکس بود نیست.
بیشتر هدف من بخش آخر هست یعنی کد هووش مصنوعی که به اندازه کافی آموزش دیده و حالا میخوایم ازش استفاده کنیم. یعنی فقط از قسمتquery ورودی را بدهیم و نتیجه را بگیریم.
مثلا در مورد ترجمه متن یا تشخیص چهره و …. پروژه های آموزش دیده هست که وزن های آن مشخص شده و فقط آن را در سیستم خود لود کنیم و ورودی تصویر(برای تشخیص چهرا) یا متن(برای ترجمه) و … را به آن داده و نتیجه را از query آن بگیریم
اگر امکان داره در این باره هم توضیح بدهید.
مصطفی آصفی –
سلام و سپاس از بازخوردتون. خوشحالم که کار مفید بوده. بله این رو بهش می گن یادگیری انتقالی (Transfer Learning). نمونه این کار رو شما می تونید تو آموزش یولو (+) و بعد آموزش یولو اختصاصی (+) ببینید. ما اینجا از وزن های تعلیم دیده قبلی استفاده می کنیم. حتی خودمون تو بسته دوم وزن هایی رو بهبود می دیم برای دیتاست خودمون تا بعدها استفاده کنیم.
همین طور آموزش کدنویسی شبکه عصبی کانولوشن (+) خانم دبیری این موضوع رو به شکل دیگه ای در خودش داره که بعد از دوره های بالا می تونه براتون مفید باشه.
علی (خریدار محصول) –
آموزش فوق العاده بود استاد آصفی درکه عمیقی از شبکه های عصبی بهم داد امیدوارم شاهد موفقیت های روز افزون شما باشیم لطفاً در خصوص ساخت شبکه های عصبی برای تحلیل و پیش بینی بازار های مالی هم دوره قرار بدید حتی شده با یه مثال کاربردی کوچیک چون تو وب سایت فرادرس آموزشی در این مورد دیدم ولی متأسفانه آموزش کاربردی ای نبود و شبکه عصبی ای تعلیم ندید کلا تئوری بود.
با تشکر از زحمات شما
مصطفی آصفی –
سلام وقت بخیر. شما لطف دارین. ممنونم برای آرزو و انرژی خوبتون. همچنین. بله در این مورد داریم کار می کنیم و اتفاقا همین لحظه که این پیام رو می نویسیم در حال ضبط آموزش شبکه عصبی LSTM و شبکه عصبی پیشخور برای پیش بینی بازارهای مالی هستیم. هم رویش رو در شبکه های اجتماعی با شناسه hamruyesh دنبال کنید تا از انتشار این دو بسته به موقع مطلع بشین.
علی عرفان (خریدار محصول) –
سلام و عرض ادب و تشکر از تدریس بسیار عالیتون
می خوام یک nlp بسازم برای زبان فارسی که کلمه بعد رو پیش بینی کنه
اما روش دادن این نوع اطلاعات رو به شبکه عصبی و گرفتن خروجی مناسب رو بلد نیستم
لطفا اگر میشه راهنمایی کنید
آموزش شبکه عصبی کانولوشنال و تنسورفلو رو هم دیدم
مصطفی آصفی –
سلام و سپاس برای لطف و انرژی خوبتون. شما به یه مدل زبانی مثل GPT نیاز دارین که مبنای ChatGPT هست. این فیلم ساخت GPT با پایتون (+) می تونه به شما ایده بده.
پینوشت: شناسه AsefyCom رو در اینستاگرام یا آپارات/یوتیوب دنبال کنید. ساخت مدل های زبانی رو احتمالا به صورت یک دوره بر اساس منبع بالا و منابع دیگه توضیح بدم.
زهرا محمدی (خریدار محصول) –
سلام وقت بخیر
ببخشید کد پروژه ها رو از کجا بتونم دریافت کنم توی کدهایی که طبق فیلم ها پیش رفتم یه خطایی توی جلسه 15 به خطای زیر برخوردم درستی که تابع کوئری توی تست های قبلی درست جواب میداد
ValueError Traceback (most recent call last)
in ()
6
7
—-> 8 nn.query((np.asfarray(test_row_data[1:])/(255.0*0.99))+0.01)
1 frames
/usr/local/lib/python3.9/dist-packages/numpy/core/overrides.py in dot(*args, **kwargs)
ValueError: shapes (10,100) and (784,1) not aligned: 100 (dim 1) != 784 (dim 0)
, تابع کوئری
def query(self,inputs_list):
inputs=np.array(inputs_list,ndmin=2).T
x_hidden=np.dot(self.w_i_h,inputs)
o_hidden=self.activation_function(x_hidden)
x_output=np.dot(self.w_h_o,inputs)
o_output=self.activation_function(x_output)
return o_output
مصطفی آصفی –
سلام وقت بخیر. ببینید خطایی که دارید دریافت می کنید نمی گه تابع کوئری مشکل داره؛ بلکه داره میگه یه جایی تو این تابع مشکل پیش اومده. خود مشکل اگه دقت کنید این خطه:
ValueError: shapes (10,100) and (784,1) not aligned: 100 (dim 1) != 784 (dim 0)
احتمالا شکلی که ماتریس ها رو تعریف کردین مشکل داره و تو ضرب ماتریسی خطا ایجاد شده.
این لینک سورس کد (+) که می تونید تطبیق بدین و مشکل رو پیدا کنید.
reza.mac1999@gmail.com –
من کلا تازه داشتم با شبکه های عصبی اشنا میشدم و این دوره دید عمیق و جامعی در این باره بهم داد . و با توجه به اینکه زمان هر جلسه کم بود اصلا خسته کننده نبود.
سپاس فراوان از استاد
مصطفی آصفی –
سلام. خیلی خوشحالم که کار مفید بوده. ممنون که برای ارسال انرژی مثبت وقت گذاشتین.
محمد عاشورپور (خریدار محصول) –
سلام، توی درس ۱۸ توضیحی راجع به گرادیان کاهشی دستهای داده بودید، پیشنهادی که ارائه داده بودید رو اعمال کردم، با epoch=4 جواب خوبی نداد.
هر دو رابطه پشنهادی آقای بنجیو در مورد مقادیر اولیه وزنها رو اعمال کردم، نتیجه بهتری با شرایط یکسان با کار شما، حاصل نشد. به نظر میرسد که کار شما بهینهترین روش بوده باشد.
مصطفی آصفی –
سلام و خیلی ممنون که اطلاع دادین. دقت کنید یک روش برای همه مسائل همیشه بهینه نیست. اصولا ماهیت شبکه های عصبی رو تصادف بنا شده و بنابراین راهکارهای مختلف رو برای مسائل مختلف همیشه امتحان کنید.
محمد عاشورپور (خریدار محصول) –
ممنون از پاسخدهی، تابع استفاده شده برای ساخت وزنهای تصادفی در متلب تفاوتی با تابع نامپای نداشت. w_h_o=randn(o_nodes,h_nodes)*(h_nodes^(-0.5)). البته خوشبختانه مشکل برطرف شد. با توجه به اینکه در متلب عدد صفر در نمایش تصویر معادل سیاه میباشد برای نمایش صحیح در تابع imshow در متلب، همه مقادیر ماتریس را از مقدار ۲۵۵ کم کرده بودم. inputs=(۲۵۵-(B(row,2:end))/255)*.99+0.01. با اصلاح آن به صورت inputs=((B(row,2:end))/255)*.99+0.01. نتیجه مطلوب حاصل شد.
به نظر میرسد چون ورودی اصلی دارای مقادیر زیادی از صفر بود و با رابطهای که من اول استفاده کرده بودم، در ورودی مقادیر زیادی ۱ قرار میگرفت و اون مشکل ساز میشد.
آیا این برداشتم درست است؟
مصطفی آصفی –
سلام و ممنون از این که اطلاع دادین. نکته جالبی گفتین. البته من خیلی وقته که با متلب کار نمی کنم و متمزکر نیستم و روی سیستم هم ندارم که تست کنم ولی به نظر میاد برداشتتون درسته.
محمد عاشورپور (خریدار محصول) –
سلام استاد،بسته آموزشی که ارائه دادید بسیار عالی بود.
بنده فعلا تا درس ۱۸ نگاه کردم و ضمن نوشتن و اجرای دستورات در پایتون در متلب هم کدنویسی کردم. در پایتون خوشبختانه جواب خوبی گرفتم اما متاسفانه در متلب با اینکه به نظرم از لحاظ کدنویسی ایرادی نداشت و دقیقا مشابه مراحل پایتون بود، نتیجه نهایی خوبی ارائه نداد. اگر امکانش هست راهنمایی کنید.
بسیار متشکر
مصطفی آصفی –
سلام و ممنون از لطفتون. منظورتون اینه که تعلیم تو متلب خوب اتفاق نیفتاد؟ ببینید فرآیند تعلیم شبکه عصبی بر پایه وزن های تصادفی پیش میره و ممکنه تو دو محیط یا حتی تو دو بار تعلیم تو یک محیط یکسان نتیجه مشابهی نداشته باشیم. بررسی کنید که تابعی که برای ساخت وزن ها یا کارهای تصادفی تو متلب استفاده می کنید چه تفاوتی با نمونه نامپای استفاده شده تو این آموزش داره.
حسین مظفری (خریدار محصول) –
سلام وقت بخیر ببخشید یک ویدیو هست داخل آپارات تا پارت 8 بیشتر نیست خواستم ببینم اونو چطوری باید تهیه کنم؟
https://www.aparat.com/v/9AGWt/%D8%A2%D9%85%D9%88%D8%B2%D8%B4_%D8%B3%D8%A7%D8%AE%D8%AA_%D8%B4%D8%A8%DA%A9%D9%87_%D8%B9%D8%B5%D8%A8%DB%8C_%D8%A7%D8%B2_%D8%B5%D9%81%D8%B1_–_%D8%AF%D8%B1%D8%B3_%DB%B8%3A_%DA%AF%D8%B1%D8%A7%D8%AF%DB%8C%D8%A7%D9%86
مصطفی آصفی –
سلام وقت بخیر. شما اول این آموزش شبکه عصبی از صفر (+) رو ببینید و بعد همین بسته این صفحه رو.
امینه ایزی (خریدار محصول) –
با سلام و خسته نباشید
و سپاس بیکران بابت این محتوای ارزنده
یه سوالی داشتم
در درس 18 این دوره فرمودین که ما داریم از batch gradian استفاده می کنیم!
در صورتی که با هر نمونه اموزشی شبکه اپدیت میشه و خودتون هم بیان کردین که iter=60000 هست
ایا این معنی stocastic gradian رو نمیده؟؟
من فکر می کردم که در حالت batch gradian ، تمام داده اموزشی داده میشه و بعد از شبکه اپدیت میشه نه با هر نمونه!!
لطفا راهنمایی کنید
من خییلی گیج شدم
مصطفی آصفی –
سلام و ممنون از انرژي و دقت نظر خوبتون. درست می فرمایید من باید کد رو اونجا طوری اصلاح می کردم که همه مقدارهای اصلاح وزنی که بر اساس داده های اتفاق می افته مستقل جایی ذخیره بشن و در پایان یک دور کامل که همه داده بررسی شدن اون وقت میانگین این اصلاح وزن ها رو محاسبه و به عنوان اصلاح وزن اون دوره (epoach) روی وزن های اولیه اعمال می کردم.
پینوشت: این شیوه روزآمدی وزن که الان روی شبکه اجرا شده شبیه Stochastic Gradient Descent هست ولی من هدفم اون نبوده تو آموزش. تو اصلاح گرادیان تصادفی ما همه نمونه ها رو بررسی نمی کنیم چون معمولا اون روش برای داده های کلان در یادگیری عمیق کاربرد داره. ضمنا تو روش گرادیان تصادفی انتخاب داده ها باید به صورت تصادفی و نه مطابق با نمونه های تحویلی باشه.
پینوشت ۲: با سپاس از شما این توضیح رو من به درس ۱۸ هم به عنوان بهروزرسانی پیوست می کنم.
امیر –
سلام وقت بخیر همطنور که در توضیحات گفتین پروژه این دوره تشخیص اعداد هست
بعد از دیدن این دوره میتونم با تغییر و دانشی که کسب کردم یه پروژه برای تشخیص متون فارسی یا موارد مشابه ایجاد کنم؟
مصطفی آصفی –
سلام به شما. بله اما قطعا نه با بازدهی خیلی بالا.
ببینید ما در اینجا از یک شبکه عصبی پیش خور برای تشخیص اعداد دست نویس استفاده می کنیم. این آموزش برای شروع کار با شبکه های عصبیه و مثالی که استفاده کردیم برای ایجاد یک درک خوبه. اما واقعیت اینه که امروز برای تشخیص فیچر در تصاویر از شبکه های عصبی پیچیده تری به نام کانولوشن استفاده میشه. و معمولا چنین شبکه هایی رو شما از پایه نمی سازید. شما اگر درک اولیه از شبکه های عصبی دارید توصیه می کنم آموزش شبکه های عصبی کانولوشن رو جستجو کنید.
مریم –
سلام شبتون بخیر من ی اموزشی میخواهم ک بتواند از چند دیتا که به متغیرهای مختلفی وابسته هستند یک رابطه ارائه دهذ و یک پارامتری را محاسبه کند. مثلا یک پارامتری بنام مقاومت داریم که به چند متغیر بنام A ,B, C,D,… وابسته هست و حال میخاهم رابطه ای ارائه دهم برای محاسبه مقاومت برحسب این متغیرها
سوالم این است که آیا با دیدن این آموزش می توانم این کار را انجام دهم؟ و اینکه در نزم افزار متلب هم آموزش هست یا اینکه فقط تئوری های پایه شبکه عصبی بیان شده است؟
مصطفی آصفی –
سلام به شما. بله از شبکه های پس انتشار می تونید برای مدلسازی ارتباط بین متغیرهای مستقل با یک یا چند متغیر وابسته اقدام کنید. این آموزش اجرا هست و تئوری ها در بسته قبلی گفته شده. مسیر یادگیری به این شکله :
آموزش شبکه عصبی از صفر (+)
آموزش ساخت شبکه عصبی از صفر (همین آموزش این صفحه)
آموزش تنسورفلو برای ساخت سریع شبکههای عصبی (+)
با این سه آموزش میتونید شبکههای پیشبینی کننده طراحی کنید. دقت کنید با این شبکه میتونید مقدارهای تازه رو پیش بینی کنید ولی لزوما به شما یک رابطه دقیق نمیده. یک رابطه پیچیده در دل یک شبکه عصبی (بعد از یادگیری) شکل میگیره. اگر هدفتون یافتن یک تابع ریاضی بین چند متغیر باشه ممکنه این آموزش پایین براتون کافی باشه:
آموزش GEP – تابع یابی ریاضی با هوش مصنوعی (+)
روش بیان ژنی یک روش ابتکاری از نوع الگوریتمهای ژنتیکه.
kamyabsh226@gmail.com (خریدار محصول) –
سلام وقتتون بخیر ببخشید ولی میشه بگین کجا کد اشتباه رفتم که این پیغام میده اگر کمک کنید ممنون میشم
https://colab.research.google.com/drive/17LMsCrRv9kfBFqW_c90QsrEOLw_P2gWp#scrollTo=kw3tpgcFH0Zk&line=4&uniqifier=2
مصطفی آصفی –
سلام وقت شما هم بخیر. لینکی که گذاشتین دسترسی عمومی نداره. لطفا متن خطایی که دریافت می کنید ارسال کنید تا هم فکری کنیم.
kamyabsh226@gmail.com (خریدار محصول) –
سلام وقتتون بخیر اگر لطف کنید این پیغام که برا من اومدم راهنمایی کنید ممنون میشم
https://colab.research.google.com/drive/1t4pCUY6VS3z6tmMFFHG_XwOo97sUy1Qm?usp=sharing
مصطفی آصفی –
سلام به شما. آرایه row_data[1:] پر نشده و طبیعتا نمی تونه reshape بشه. باید قبلش با لیست پر بشه.
متین (خریدار محصول) –
سلام استاد
بنده تمام فیلم های آموزشی این مجموعه را دیدم خیلی عالی بود
ولی متاسفانه الان که دارم شبکه را برای مجموعه داده های دیگر تعریف می کنم شبکه بهم جواب نادرست می دهد امکانش هست آدرس ایمیلتون را بهم بدین تا بتوانم کدم را براتون ارسال کنم و اشتباه کارم را بهم بگین چون شبکه ام هیچ خطایی نداره ولی جواب نهایی اشتباه است
مصطفی آصفی –
سلام به شما. مشکلی که دارید کاملا طبیعیه. ببینید دقت کنید شبکه عصبی یک الگوریتم قطعی ریاضی نیست که برای مسائل مشخصی همیشه به شیوه مشخصی جواب بده. شما یک شبکه رو با یک معماری برای یک سری داده اجرا می کنید می تونه یاد بگیره. برای مجموعه داده دیگه ای می بینید خوب جواب نمیده. به همین دلیله که مجموعه هایی مثل یوتیوب برای شناخت کاربرش با هوش مصنوعی مدام داره داده جمع می کنه.
در هر صورت چیزی که شما می تونید انجام بدین، تحلیل داده ها برای شناخت بهتر و طراحی بهتر پارامترهای ورودی و کار با پارامترهای معماری شبکه (همون طور که تو دوره گفته شد) و شاید اصلاح داده های آموزش هست. تجربه و تجربه.
در مورد درخواستتون برای ارسال فایل متاسفانه با این که دوست دارم به تک تک پیام ها جواب بدم ولی الان شاید بیشتر از ۳۰۰۰ پیام تو ایمیل من هست که اصلا فرصت نمی کنم ببینم. به همین دلیل هم هم رویش رو درست کردم که مواردی رو یک بار ضبط کنم و بارها دیده بشه. واقعا متاسفم که نمی تونم به صورت اختصاصی کمکتون کنم.
فاطمه عباسی (خریدار محصول) –
سلام مجدد ، من فیلم آموزش شما رو تا اواسطش دیدم تا امروز . میتونم بگم بین مراجع ایرانی نظیر نداره. معرکه س. و اینکه فرمودین فیلم از فرادرس ببینم راستش من اصلا به فرادرس اعتماد ندارم چون چند تا رو قبلا دیدم جالب نبود ابدا. ولی اگه فیلمی رو شما دیده باشین و پیشنهاد بدین قبول میکنم چون به شخص شما اعتماد دارم. و لطفا تو زمینه ی یادگیری عمیق و یا تحلیل سری های زمانی هم فیلم آموزشی بسازین
مصطفی آصفی –
سلام و ممنون از لطف شما. فرادرس متاسفانه آموزش هایی که مدرس های دیگه تولید می کنن یه مقدار داوریش جالب نیست و گاهی خوبه گاهی نه ولی آموزش هایی که خود آقای کلامی هریس یا آقای آتش پز تولید کردن (مثل اون نمونه که گفتم) اینا خوبن معمولا.
ما هم انشالله مسیر هوش مصنوعی رو تو هم رویش تکمیل می کنیم و حتی شما اگه علاقه مند باشین می تونید با مدل کوچینگ هم رویش خودتون هم یاد بگیرین و هم یاد بدین. این پست (+) رو ببینید و در صورت تمایل دایرکت اینستاگرام پیام بدین تا راهنمایی برای مراحل کار دریافت کنید.
فاطمه عباسی (خریدار محصول) –
سلام وقت بخیر. من بر حسب نیاز این دوره رو الان تهیه کردم اما هنوز ندیدم. میخواستم بدونم که آیا با این دوره میتونم مسئله ای که باهاش مواجه هستم رو انجام بدم : هدفم اینه که به وسیله شبکه عصبی سری زمانی x رو با استفاده از سه سری زمانیه دیگه به نام های a, b, c به عنوان ویژگی های اون سری زمانی پیشبینی کنم و محاسبه کنم که کدام سری زمانی در پیشبینی x بهتر عمل کرده .
خواهش میکنم راهنماییم کنین
مصطفی آصفی –
سلام وقت شما هم بخیر. ازتون می خوام که فیلم معرفی دوره رو با دقت ببینید. دقت کنید که این دوره پیشنیازی داره و همچنین پروژه ساخته شده در طول دوره هم همون طور که تو فیلم معرفی گفته شده تشخیص اعداد دست نویس هست. اگه شما نقطه صفر هستین در پایان این دوره انتظار نمی ره که به سرعت بتونید دانسته ها رو به مساله جدید تطبیق بدین اما انتظار میره که با درک کافی از مفاهیم پایه و شیوه کدنویسی بتونید قدرت سرچ لازم رو برای پیدا کردن منابع جدید و تطبیق با یافته های قبلی برای حل مساله پیدا کنید.
در اون زمان احتمالا این آموزش دوستان در فرادرس (+) از جمله مواردیه که می تونه کمکتون کنه.
میلاد (خریدار محصول) –
عالی هستین آقای آصفی
در ادامه این آموزش ها مجموعه جدیدی در دست تهیه دارین؟
مصطفی آصفی –
سلام و ممنون از لطف شما. صفحه هم رویش در اینستاگرام (+) رو دنبال کنید به زودی برنامه های تازه ای اونجا داریم. یکی از هدف های خودم احتمالا آموزش هوش مصنوعی در معاملات هست.
آرمان کریمی (خریدار محصول) –
واقعا عالی بود ، همیشه با keras و PyTorch شبکه عصبی میساختم و کار میکردم و فرایند کلی رو میفهمیدم . اما با این آموزش احسااس میکنم حالا خیلی بهتر میتونم اون فریم ورک ها رو درک کنم
اخرین بخش اموزش که از خروجی به ورودی میرسه واقعا دید جدیدی بهم داد.
دم همتون گرم…
مصطفی آصفی –
اینجا هم ازلطف شما سپاسگزارم. از پیام مثبتتون برای ادامه مسیر انرژي گرفتم.
Parmis (خریدار محصول) –
سلام استاد خسته نباشید ما چطور میتونیم مقاله های یک سایت رو بصورت دیتاست در بیاریم و بعنوان ورودی برای آموزش شبکه استفاده کنیم
مصطفی آصفی –
سلام به شما. می تونید از تکنیک های خزش در وب استفاده کنید.
آموزش مقدماتی وب اسکریپینگ (+)
آموزش پیشرفته وب اسکریپینگ (+)
آموزش اسکریپی – کتابخانه خزش پایتون (+)
البته دقت کنید که اجازه خزش رو باید از اون سایت بگیرین. به خصوص اگه بخواین نتایج کارتون رو منتشر کنید. بسیاری سایت ها مثل اینستاگرام یا نمونه های داخیلی زیادی صریحا خزش محتواشون رو ممنوع کردن.
هومن عابدینی (خریدار محصول) –
سلام وقت شما بخیر
آموزشتون بسیار عالی و جامع بود و به زبان ساده توضیح داده شد
بنده یک راهنمایی میخواستم
من دوره های هوش مصنوعی از صفر و همچنین این دوره از شما و دوره های کامل برنامه نویسی با MQL از خانم کرمی را دیدم و استفاده کردم
سوال من اینه که اگه من بخوام رباتی رو توی متاتریدر با استفاده از هوش مصنوعی تهیه کنم اول اینکه آیا الگوریتم خاصی برای اینگونه مسایل هست و دوم اینکه نحوه اجرای اون توی MQL به چه صورت هست و آیا شما دوره آموزشی و یا برنامه ای برای آموزش نحوه استفاده از هوش مصنوعی در متاتریدر و یا به طور کلی در مورد استفاده از هوش مصنوعی در مورد بازارهای مالی ندارید
و یا میتونید من رو در این زمینه راهنمایی کنید
با تشکر
مصطفی آصفی –
سلام و ممنون از لطف شما. اول در جریان باشید که شما می تونید کلاس شبکه عصبی ساده یا عمیقی رو با پایتون طراحی کنید و در MQL5 صدا کنید.
انشالله امسال در مورد کاربرد هوش مصنوعی در معامله الگوریتمی دوره خواهیم داشت. اما تا اون کار آماده بشه برای این که معطل نشید توصیه می کنم سرفصل های این منبع (+) رو برای نمونه بررسی کنید.
همون طور که می بینید به خصوص از شبکه های عصبی عمیق مثل CNN یا GANN میشه برای پیش بینی سری های زمانی استفاده کرد. مقدارهای قیمت در یک توالی زمانی به زبان خیلی ساده یک سری زمانی هستند.
kaziva5408@gmail.com –
با سلام و احترام استاد آصفی
من میخواستم تزم را با جولیا کار کنم و رشته ام عمران آب هست من چطور میتونم در این خصوص اطلاعاتی کسب کنم که آیا جولیا برای رشته عمران آب کارایی خواهد داشت یا خیر؟
مصطفی آصفی –
سلام به شما. می بخشین که به پایان سال خوردیم و این قدر جوابتون دیر شده.
در مورد سوالتون ببینید ابزار مهم نیست اصلا. شما رشته مهندسی هستین. مساله مهمه. شما باید ببینید مساله چیه و بعد ابزار مناسب پیدا کنید. جولیا وقتی خوبه که سرعت اجرا اهمیت پیدا می کنه. مثلا فرض کنید برای استخراج یک تعداد داده از وب یا اجرای یک الگوریتم خاص یادگیری عمیق این که جولیا زمان اجرا رو یک پنجم بکنه می تونه اجرای نهایی رو از ۵ روز به ۱ روز تغییر بده (وقتی پروژه خیلی بزرگه).
حالا سوالی که ممکنه براتون پیش بیاد اینه که من از کجا بفهمم در نهایت مساله ای که داریم چقدر پردازش نیاز داره. اگه این رو نمی تونید از بررسی مطالعه های موردی به دست بیارید روش راحت اینه که اول مساله رو تو مقیاس کوچیک طرح و با راه دست ترین ابزارها حل کنید. بعد ممکنه اصلا اون رو با جولیا یا خود زبان سی برای مقیاس بزرگ بازنویسی کنید.
Moarefizadeh (خریدار محصول) –
سلام آموزش بینظیر بود استاد من میخام برای آموزش شبکه عصبی مکالمه های فروش یک شرکت بازاریابی رو بعنوان ورودی به شبکه بدم چطوری میتونم دسترسی پیدا کنم به مکالمه های تلفنی یک شرکت بازاریابی؟
مصطفی آصفی –
سلام. ممنون از لطفتون. بانک های داده خارجی نظیر این دیتاست (+) موجود هست که می تونید با گوگل کردن موارد دیگه هم پیدا کنید. ولی متاسفانه نمونه بانک داخلی تو این زمینه نمی شناسم.
جواد –
یعنی فوق العاده ای شما
هیج جا اموزش به این خوبی در مورد شبکه عصبی ندیدم،هم از نظر علمی هم از نظر سادگی
مصطفی آصفی –
سلام به شما. خیلی ممنونم از انرژی مثبتی که ارسال کردین و این که برای ابراز لطف وقت گذاشتین. خوشحالم که مفید بوده و ازتون می خوام با معرفی آموزش به دیگران از این رویه تولید پرزحمت و بهای اندک هم رویش حمایت کنید.
محمد –
استاد آصفی یکی از بهترین اساتید ایران چه از نظر علم و چه از نظر اخلاق هستند. امیدوارم هر روز شاهد پیشرفت و موفقیت روز افزون این عزیز بزرگوار باشیم.
مصطفی آصفی –
سلام و ممنون از محبت و لطفی که به بنده دارین. منم برای شما آرزوی موفقیت و شادکامی دارم.