alikarimi120
alikarimi120
خواندن ۴ دقیقه·۳ سال پیش

پیش نیازهای یادگیری عمیق (قسمت سوم)

سلام :) امیدوارم تا این قسمت خسته نشده باشین، در ادامه مطالب قسمت اول و دوم ، در قسمت سوم به معرفی توابع و کلاس ها و دو کتابخانه پایتون معروف مورد استفاده در یادگیری عمیق می پردازیم.

توابع :

برای تعریف تابع از کلمه کلیدی def استفاده می کنیم، کلمه کلیدی def قبل از اسم تابعمون قرار می گیره، آرگومان ورودی رو داخل پرانتز تعریف می کنیم

نکته جالب توجه در پایتون اینه وقتی که تابع تعریف می کنید شبیه زبان برنامه نوسی C++ از {} استفاده نمی کنید و از tab استفاده می کنید.

https://gist.github.com/alikarimi120/3c4fc910957c3ffcde0ce941e5830646

هنگام استفاده تنها کافی است نام تابع را بنویسید و آرگومان های تابع رو داخل پرانتز بنویسید.

https://gist.github.com/alikarimi120/a934884bec962fdadfb99d4373345023

جالبه بدونید که می تونید تابع رو پرینت کنید که در چنین شرایطی پایتون آدرس تابع رو برای شما پرینت میکنه.

https://gist.github.com/alikarimi120/305876ede64bc6dbd1bde670326be8a2

برای پاس کردن یک آرگومان به تابع درنظر داشته باشید، مقادیر آرگومان یک تابع می تونن مقادیر پیش فرض داشته باشن و بدون تعیین مقادیر آرگومان ازش استفاده کنید. اگه آرگومان رو تعیین نکنید از مقادیر پیش فرض استفاده میشه و در غیر این صورت می تونید مقادیر رو خودتون هم تعریف کنید.

https://gist.github.com/alikarimi120/df942b4800c5db69b8d67cb8c5226af1

این چند تا نکته رو در نظر داشته باشید:

1 - می تونستیم آرگومان hi رو نذاریم و یک اشتباه رخ میداد پس چه کار کنیم؟ می تونیم اسم آرگومان ها رو بنویسیم و به راحتی و بدون مشکل ارسال کنیم ، حتی می تونیم ترتیب رو جا به جا کنیم و خیالمون از این بابت راحته.
2 - فرض کنید یکی از آرگومان ها مقدار پیش فرض داره و آرگومان دیگه مقدار پیش فرض نداره! در نظربگیرید جای دو تا آرگومان رو عوض می کنید، اینجا در واقع پایتون یک خطا به ما برمیگردونه از نوع Syntax error !


کلاس ها :

شما در پایتون هم می تونید از شی گرایی بهره ببرید، برای هر کلاس می تونیم یک سری تابع، متغیر و ... تعریف کنید.

مثلا اینجا کلاس Greeter تعریف شده و تابع hello_bye هم براش تعریف شده.

https://gist.github.com/alikarimi120/8b96089159a18df050e9652ca0cc59c5


توابع داخل کلاس به دو دسته تقسیم میشن:

1 - توابع instance : که از طریق object ها فراخوانی میشن. یک پارامتر self هم همون اول دارن.

2 - توابع سطح کلاس : با استفاده از اسم کلاس میشه این توابع رو فراخوانی کرد.

نمونه ها رو در کد بالا می بینید. می بینید که نمی تونیم greeter.hello_bye رو نمی تونیم چون تابع instance هست فراخوانی کنیم و خطا دریافت می کنیم.

برای یک کلاس در پایتون یک سی توابع پیش فرض آماده داریم که با __ شروع و با __ هم به پایان میرسن که اینها توابع پیش فرض پایتون برای کلاس ها هستن . به اینها میگن داندرها و یکی از پر استفاده ترینهاش init هست که وقتی یک آبجکت از کلاس ساخته میشه فراخوانی میشه. مثلا در کد زیر یک آرگومان Name هم ارسال شده که در تابع init استفاده شده ، پس تا الان متوجه شدید آرگومان های کلاس رو از طریق تابع init می تونیم مشخص کنیم.


کتابخانه ها :

این قسمت دو کتابخانه معروف Numpy و Matplotlib رو معرفی میکنم.

1 - NumPy:

هدف این کتابخانه اینه که تمام قابلیت هایی که در متلب برای محاسبات برداری و ماتریس داریم رو برای ما فراهم کنه و حسابی به ما در محاسبات جبرخطی کمک میکنه.

برای نصبش می تونید از دستور زیر استفاده کنید.

https://gist.github.com/alikarimi120/cbf47806572654a87eea0509b833081d

با دستور زیر هم می تونید داخل کد خودتون import اش کنید. چرا حالا از as np نوشتیم؟ معمولا به خاطر طولانی بودن اسم کتابخانه ها از این دستور استفاده میکنن تا اسامی کتابخونه ها خلاصه تر بشه . معمولا NumPyرا با استفاده از np می نویسن.

https://gist.github.com/alikarimi120/f52969bf8211d3e282d5636761fe1d44

معروف ترین ساختار داده NumPy array ها هستند که تا حدی شبیه لیست هستند ولی تفاوت هایی دادرند. مثلا همه اعضا نوعشون مثل هم هست و نمی تونن شبیه لیست متغیرهایی از نوع متفاوت باشند.

https://gist.github.com/alikarimi120/28a417e3e8de815a9474b7ebefd469d9

برای تعریف NumPy array می تونیم یک لیست رو به NumPy array پاس بدیم ، تابع لیست رو دریافت میکنه و در خروجی یک NumPy array برگردونه میشه!

https://gist.github.com/alikarimi120/a82275d5a80beadfc6ae64c43d15cb2c

شبیه تابع Len هم shape در NumPy array هست که یه مقدار Tuple به ما برمیگردونه که با استفاده از اندیس می تونیم بهش دسترسی داشته باشیم. از طریق اندیس ها می تونیم مقدار NumPy array رو تغیییر بدیم. تابع ndim هم تعداد ابعاد آرایه رو برمیگردونه.

نحوه دسترسی در یک لیست تو در تو و تفاوت اون رو با NumPy array در کد زیر مشاهده می کنید:

https://gist.github.com/alikarimi120/d1d99a7986db0224b0500f47686681d0


2- Matplotlib:

کتابخانه پر استفاده ای در پایتون برای رسم نمودارها هست. حسابی در یادگیری عمیق ازش استفاده می کنید!

https://gist.github.com/alikarimi120/7e2ea69486d0cb3725965372f095d10c

دستور زیر هم برای این هست که در نوتبوک مورد استفاده هر چیزی که بخواهیم plot کنیم داخل همون صفحه plot کنه و پنجره جدیدی باز نشه!

https://gist.github.com/alikarimi120/273f70cbda98f77f9ff475eee8498ade

اینجا متغیر x رو با Np.arrange تعریف می کنیم که کاربردی شبیه range در لیست داره. میگه از 0 تا 3p با فاصله یک دهم یک Numpy array بساز و Y هم مقدار SinX میشه و بعد این نمودار رو رسم می کنیم.

https://gist.github.com/alikarimi120/322b5449e4310ad2d9caa890b1b78dab
نمودار رسم شده
نمودار رسم شده



امیدوارم مطالعه این منبع براتون مفید بوده باشه، اگه قصد داشتید از اول این مقاله رو مطالعه کنید قسمت اول رو از طریق این لینک و قسمت دوم رو از طریق این لینک می تونید مطالعه کنی

شبکه عصبییادگیری ماشینآموزشطبقه بندییادگیری عمیق
شاید از این پست‌ها خوشتان بیاید