دیروز یاد یه جمله ای از Primeagen افتادم. که میگفت.
"(تو دنیای طراحی الگوریتم) خیلی از مسائل تبدیل به مسائل گراف میشن."
حق میگفت. انگار خیلی از مسائل تبدیل به مسائل گراف میشن.
برای مثال. مسئله محاسبه گرادیان تو PyTorch هم مسئله گراف هست.
یعنی خود الگوریتم های Deep Learning هم از گراف برای بهینه سازی استفاده میکنن.
تمام عملیات هایی که بین دو tensor (که requires_grad=True براشون ست شده) انجام میشن تبدیل به یه node تو گراف محاسباتی میشن.
و وقتی که میخوایم که backward انجام بدیم. میاد و گرادیان هارو با طی کردن گراف محاسباتی از انتها به ابتدا (که برگ یا leaf ها هستن) محاسبه میکنه.
که این کارو autograd تو PyTorch انجام میده که خیلی سیستم جالبی هست. و به همین دلیل خیلی ماژولار و منعطف هست و میتونید لایه های شبکه های عصبی رو خودتون از صفر پیاده کنید.
بزودی ویدیو هایی در این باره براتون میفرستم.
"(تو دنیای طراحی الگوریتم) خیلی از مسائل تبدیل به مسائل گراف میشن."
حق میگفت. انگار خیلی از مسائل تبدیل به مسائل گراف میشن.
برای مثال. مسئله محاسبه گرادیان تو PyTorch هم مسئله گراف هست.
یعنی خود الگوریتم های Deep Learning هم از گراف برای بهینه سازی استفاده میکنن.
تمام عملیات هایی که بین دو tensor (که requires_grad=True براشون ست شده) انجام میشن تبدیل به یه node تو گراف محاسباتی میشن.
و وقتی که میخوایم که backward انجام بدیم. میاد و گرادیان هارو با طی کردن گراف محاسباتی از انتها به ابتدا (که برگ یا leaf ها هستن) محاسبه میکنه.
که این کارو autograd تو PyTorch انجام میده که خیلی سیستم جالبی هست. و به همین دلیل خیلی ماژولار و منعطف هست و میتونید لایه های شبکه های عصبی رو خودتون از صفر پیاده کنید.
بزودی ویدیو هایی در این باره براتون میفرستم.
Autograd Part 1
Patrick Leober
یه آموزش کوتاه راجب PyTorch گذاشته.
سه تا ویدیو پارت ۳، ۴ و ۵ اش خیلی خوب توضیح میدن که چطور autograd PyTorch کار میکنه.
PyTorch Tutorial 03 - Gradient Calculation With Autograd
ویدیو سوم راجب این صحبت میکنه که autograd چطوری میاد و عملیات های بین tensor هارو track میکنه و backward چه کاری انجام میده.
PyTorch Tutorial 04 - Backpropagation - Theory With Example
اینجا هم متوجه میشید که با استفاده از Chain rule و گراف عملیاتی ضبط شده چطور میشه مشتق تابع کاهشی (loss function) رو برای تک تک tensor های مد نظر بدست آورد. مثال خیلی ساده ای هم آورده. مثالش linear regression سادست.
PyTorch Tutorial 05 - Gradient Descent with Autograd and Backpropagation
تو این ویدیو هم یه شبیه سازی از مسئله قبل (linear regression) با استفاده از numpy خالص انجام میشه. و بعدش پیاده سازی PyTorch اش نوشته میشه.
پلی لیست کامل آموزشش هم اینجا هست.
PyTorch Tutorial - Complete Beginner Course
ویدیو های دیگش هم شاید بعدا نگاه کنم ولی خب فعلا عجله ای نیست.
Patrick Leober
یه آموزش کوتاه راجب PyTorch گذاشته.
سه تا ویدیو پارت ۳، ۴ و ۵ اش خیلی خوب توضیح میدن که چطور autograd PyTorch کار میکنه.
PyTorch Tutorial 03 - Gradient Calculation With Autograd
ویدیو سوم راجب این صحبت میکنه که autograd چطوری میاد و عملیات های بین tensor هارو track میکنه و backward چه کاری انجام میده.
PyTorch Tutorial 04 - Backpropagation - Theory With Example
اینجا هم متوجه میشید که با استفاده از Chain rule و گراف عملیاتی ضبط شده چطور میشه مشتق تابع کاهشی (loss function) رو برای تک تک tensor های مد نظر بدست آورد. مثال خیلی ساده ای هم آورده. مثالش linear regression سادست.
PyTorch Tutorial 05 - Gradient Descent with Autograd and Backpropagation
تو این ویدیو هم یه شبیه سازی از مسئله قبل (linear regression) با استفاده از numpy خالص انجام میشه. و بعدش پیاده سازی PyTorch اش نوشته میشه.
پلی لیست کامل آموزشش هم اینجا هست.
PyTorch Tutorial - Complete Beginner Course
ویدیو های دیگش هم شاید بعدا نگاه کنم ولی خب فعلا عجله ای نیست.
YouTube
PyTorch Tutorial 03 - Gradient Calculation With Autograd
New Tutorial series about Deep Learning with PyTorch!
⭐ Check out Tabnine, the FREE AI-powered code completion tool I use to help me code faster: https://www.tabnine.com/?utm_source=youtube.com&utm_campaign=PythonEngineer *
In this part we learn how to…
⭐ Check out Tabnine, the FREE AI-powered code completion tool I use to help me code faster: https://www.tabnine.com/?utm_source=youtube.com&utm_campaign=PythonEngineer *
In this part we learn how to…
TECH STASH
Autograd Part 1 Patrick Leober یه آموزش کوتاه راجب PyTorch گذاشته. سه تا ویدیو پارت ۳، ۴ و ۵ اش خیلی خوب توضیح میدن که چطور autograd PyTorch کار میکنه. PyTorch Tutorial 03 - Gradient Calculation With Autograd ویدیو سوم راجب این صحبت میکنه که autograd چطوری…
Autograd Part 2
در ادامه پست قبل یه ویدیویی معرفی میکنم.
PyTorch Autograd Explained - In-depth Tutorial
این ویدیو رو میتونید ادامه پارت چهارم پلی لیست پست قبل (که مرتبط با backpropagation هست) ببینید.
با این ویدیو خیلی عمیق تر کارکرد autograd رو میبینید.
برای تمرین هم میتونید گرادیان هر کدوم از مثال ها رو به صورت دستی بدست بیارید
من که خودم انجام دادم و کاملا درست بود.
فقط حواستون به دو نکته باشه:
1. قانون chain rule: اگر برای بدست آوردن گرادیان tensor ای بیشتر از یک مسیر تو گراف محاسباتی وجود داشته باشه. باید هر دو مسیر محاسبه و جمع بشن.
2. مثال آخر تقسیم داره. لطفا حواستون به اون بخش باشه. اینکه مشتق تقسیم چی هست؟ و دارید بر حسب چی مشتق میگیرید؟
در ادامه پست قبل یه ویدیویی معرفی میکنم.
PyTorch Autograd Explained - In-depth Tutorial
این ویدیو رو میتونید ادامه پارت چهارم پلی لیست پست قبل (که مرتبط با backpropagation هست) ببینید.
با این ویدیو خیلی عمیق تر کارکرد autograd رو میبینید.
برای تمرین هم میتونید گرادیان هر کدوم از مثال ها رو به صورت دستی بدست بیارید
من که خودم انجام دادم و کاملا درست بود.
فقط حواستون به دو نکته باشه:
1. قانون chain rule: اگر برای بدست آوردن گرادیان tensor ای بیشتر از یک مسیر تو گراف محاسباتی وجود داشته باشه. باید هر دو مسیر محاسبه و جمع بشن.
2. مثال آخر تقسیم داره. لطفا حواستون به اون بخش باشه. اینکه مشتق تقسیم چی هست؟ و دارید بر حسب چی مشتق میگیرید؟
YouTube
PyTorch Autograd Explained - In-depth Tutorial
In this PyTorch tutorial, I explain how the PyTorch autograd system works by going through some examples and visualize the graphs with diagrams. As you perform operations on PyTorch tensors that have requires_grad=True, you build up an autograd backward graph.…
❤1
Einsum
Einstein Summation
به یک notation یا دستگاه نوشتاری میگن که عملیات هایی که روی ماتریس ها میخوایم انجام بدیم رو توصیف میکنه.
مثلا، سینتکس نوشتاری ضرب ماتریسی به این صورت هست.
خیلی مثال های بیشتر هست. میتونید بیشتر عملیات های پایه ای numpy رو پیاده کنید.
مثل diag, dot, sum و ...
حالا چرا از این استفاده کنیم؟
اول، چون راحت تر هست.
چون میفهمم که چه اتفاقی سر این dimension ها میفته.
درسته اولش به نظر سخت میاد ولی وقتی که بیشتر کار میکنید میبینید که راحت تره.
دوم، چون وابسته به کتابخونه نیست. هر جا برید سینتکس یکیه.
چه روی PyTorch باشید، چه روی Tensorflow یا numpy یا هر کتابخونه دیگه ای که پیاده کنه.
یه ویدیو یوتیوب که کامل توضیح میده einsum چطور کار میکنه.
Einsum Is All You Need: NumPy, PyTorch and TensorFlow
همینطور یه article ای که یه سری چیزایه جا افتاده رو توضیح میده. مثلا سینتکس "...".
و یه سری توضیحات راجب einops که به شخصه ازش استفاده نکردم.
Einsum is easy and useful
Einstein Summation
به یک notation یا دستگاه نوشتاری میگن که عملیات هایی که روی ماتریس ها میخوایم انجام بدیم رو توصیف میکنه.
مثلا، سینتکس نوشتاری ضرب ماتریسی به این صورت هست.
a = np.random.randn(10, 5)
b = np.random.randn(5, 3)
# Matrix Multiplication (einsum)
np.einsum("ij,jk->ik", a, b) # Output shape: (10, 3)
# Matrix Multiplication (numpy)
np.matmul(a, b) # Output shape: (10, 3)
# More than 2 dimensions
# Inner dimensions not matching?
# Use "..." notation to indicate arbitrary dimensions
a = np.random.randn(9, 15, 10, 5)
b = np.random.randn(9, 15, 3, 5)
# Batch matrix Multiplication (einsum)
np.einsum("...ij,...kj->...ik", a, b) # Output shape: (9, 15, 10, 3)
# Batch matrix Multiplication (numpy)
np.matmul(a, b.swapaxes(-1, -2)) # Output shape: (9, 15, 10, 3)
خیلی مثال های بیشتر هست. میتونید بیشتر عملیات های پایه ای numpy رو پیاده کنید.
مثل diag, dot, sum و ...
حالا چرا از این استفاده کنیم؟
اول، چون راحت تر هست.
چون میفهمم که چه اتفاقی سر این dimension ها میفته.
درسته اولش به نظر سخت میاد ولی وقتی که بیشتر کار میکنید میبینید که راحت تره.
دوم، چون وابسته به کتابخونه نیست. هر جا برید سینتکس یکیه.
چه روی PyTorch باشید، چه روی Tensorflow یا numpy یا هر کتابخونه دیگه ای که پیاده کنه.
یه ویدیو یوتیوب که کامل توضیح میده einsum چطور کار میکنه.
Einsum Is All You Need: NumPy, PyTorch and TensorFlow
همینطور یه article ای که یه سری چیزایه جا افتاده رو توضیح میده. مثلا سینتکس "...".
و یه سری توضیحات راجب einops که به شخصه ازش استفاده نکردم.
Einsum is easy and useful
YouTube
Einsum Is All You Need: NumPy, PyTorch and TensorFlow
In this video I explain how Einstein Summation (einsum) works and why it is amazing, at the end of the video you too will realize that einsum is all you need. It works similar in all libraries with the following function call: torch.einsum, tf.einsum, numpy.einsum…
پردازش سریع دیتا ها (قسمت دوم): وقتی هزینه کپی زیاد میشود
تو پست قبل راجب اینکه چطور یه الگوریتم رو با broadcasting سریع تر کردم صحبت کردیم.
قبل از اینکه این پست رو بخونید یه سری مفاهیم رو مرور کنیم.
vectorization:
که بهش SIMD هم میگن به اعمال کردن یک عملیات روی تعداد بی شماری از دیتا به صورت همزمان میکن.
تو اصطلاح برنامه نویسی هم همینه. تبدیل کردن یک loop که یه عملیاتی رو تکرار میکنه به یک عملیاتی که همزمان روی کل دیتا ها انجام میشه.
broadcasting:
در واقع broadcasting یکی از تکنیک هاست که vectorization رو ممکن میکنه.
با تغییر دادن شکل آرایه ها تا اعمال عملیات های element-wise (عضو به عضو) روشون ممکن بشه.
خب بریم سراغ داستان.
چند روز پیش داشتم روی پیاده سازی یه الگوریتمی روی numpy کار میکردم.
میخواستم این الگوریتم رو مثل الگوریتم های دیگه vectorize کنم.
تو پست قبلیم یکی از تلاش هایی که موفقیت آمیز بود و نتایج چشم گیری داشت رو نمایش دادم.
و از تکنیک broadcasting استفاده کرده بودم.
ولی این بار یه مشکلی داشت. تابع cov که covariance رو محاسبه میکرد تنها آرایه دو بعدی قبول میکرد.
همین کل فرصت هارو برای اینکه vectorize کنم ازم میگرفت.
اومدم و تابع cov رو از رو از صفر پیاده کردم و مستقل از بعد ماتریس نوشتم.
و درون الگوریتمم استفاده کردم و دیدم که خیلی سریع نشد.
خواستم واسه تست واقعی یک batch بزرگ از دیتا رو پاس بدم بهش و دیدم که memory ام کامل پر شد.
خلاصه فهمیدم که الگوریتمم خیلی غیر بهینه عملیات هارو vectorize میکنه.
در واقع دو dimension ای که برای vectorize کردن استفاده و expand کرده بودم خیلی دیتا رو تکرار کرده بودن.
خلاصه نتیجه اصلی اینجاست. هزینه کپی کردن هم کم نیست.
واسه بهینه سازی شما باید حواستون به مموری باشه.
البته که ما همیشه مبادله داریم بین سرعت و فضای مموری.
ولی کپی کردن هم خودش هزینه زمانی داره و سرعت رو پایین میاره.
فکر میکنم راه حل بهتری باشه که یک روزی حتما سراغشون میرم.
تو پست قبل راجب اینکه چطور یه الگوریتم رو با broadcasting سریع تر کردم صحبت کردیم.
قبل از اینکه این پست رو بخونید یه سری مفاهیم رو مرور کنیم.
vectorization:
که بهش SIMD هم میگن به اعمال کردن یک عملیات روی تعداد بی شماری از دیتا به صورت همزمان میکن.
تو اصطلاح برنامه نویسی هم همینه. تبدیل کردن یک loop که یه عملیاتی رو تکرار میکنه به یک عملیاتی که همزمان روی کل دیتا ها انجام میشه.
broadcasting:
در واقع broadcasting یکی از تکنیک هاست که vectorization رو ممکن میکنه.
با تغییر دادن شکل آرایه ها تا اعمال عملیات های element-wise (عضو به عضو) روشون ممکن بشه.
خب بریم سراغ داستان.
چند روز پیش داشتم روی پیاده سازی یه الگوریتمی روی numpy کار میکردم.
میخواستم این الگوریتم رو مثل الگوریتم های دیگه vectorize کنم.
تو پست قبلیم یکی از تلاش هایی که موفقیت آمیز بود و نتایج چشم گیری داشت رو نمایش دادم.
و از تکنیک broadcasting استفاده کرده بودم.
ولی این بار یه مشکلی داشت. تابع cov که covariance رو محاسبه میکرد تنها آرایه دو بعدی قبول میکرد.
همین کل فرصت هارو برای اینکه vectorize کنم ازم میگرفت.
اومدم و تابع cov رو از رو از صفر پیاده کردم و مستقل از بعد ماتریس نوشتم.
و درون الگوریتمم استفاده کردم و دیدم که خیلی سریع نشد.
خواستم واسه تست واقعی یک batch بزرگ از دیتا رو پاس بدم بهش و دیدم که memory ام کامل پر شد.
خلاصه فهمیدم که الگوریتمم خیلی غیر بهینه عملیات هارو vectorize میکنه.
در واقع دو dimension ای که برای vectorize کردن استفاده و expand کرده بودم خیلی دیتا رو تکرار کرده بودن.
خلاصه نتیجه اصلی اینجاست. هزینه کپی کردن هم کم نیست.
واسه بهینه سازی شما باید حواستون به مموری باشه.
البته که ما همیشه مبادله داریم بین سرعت و فضای مموری.
ولی کپی کردن هم خودش هزینه زمانی داره و سرعت رو پایین میاره.
فکر میکنم راه حل بهتری باشه که یک روزی حتما سراغشون میرم.
❤1
سلامی مجدد دوستان.
بله. بنده فعلا زنده ام.
برای این اتفاقات واقعا متاسف هستم.
و در غم از دست دادن هم وطنانمون هم شریک. 🖤🖤🖤
بله. بنده فعلا زنده ام.
برای این اتفاقات واقعا متاسف هستم.
و در غم از دست دادن هم وطنانمون هم شریک. 🖤🖤🖤
👍6👎3
TECH STASH
واسه رفع فیلترینگ دو روش داریم تو لینوکس. 1. ست کردن متغییر های محیطی (Environment Variable). 2. و دیگری استفاده از proxychains. روش اول: Environment Variable دو تا متغییر داریم. اولی HTTPS_PROXY که ترافیک های رمزگزاری شده رو میفرسته به پروکسی سرور. دومی…
واسه کاربران لینوکس که میخوان برنامه ای رو پروکسی کنن.
این پست رو بد نیست یادآور باشم.
این پست رو بد نیست یادآور باشم.
TECH STASH
سلامی مجدد دوستان. بله. بنده فعلا زنده ام. برای این اتفاقات واقعا متاسف هستم. و در غم از دست دادن هم وطنانمون هم شریک. 🖤🖤🖤
با وضع موجود و فیلترینگ تا برگشت ثبات این کانال فعالیتی نخواهد داشت.
Forwarded from Seyed Mahdi Notes (Seyed Mahdi)
این playlist از object detection خیلی خوبه... کلش رو دیدم.
تو ویدیو اول از Intersection Over Union (IoU) شروع میکنه که متریکی برای دقت bounding box هست و ازش داخل loss function امون استفاده میکنیم.
ویدیو دوم میرسه به Non-Max Suppression که برای حذف bounding box های تکراری یا بیخود استفاده میشه.
ویدیو سوم به Mean Average Precision (mAP) میپردازه که به عنوان متریک برای ارزیابی دقتمون استفاده میکنیم.
و در نهایت تو دو ویدیو آخر Yolov1 و Yolov3 پیاده سازی میشه.
کلا پروژه خیلی پیچیده ای بود (برای اولین بار بود که با پیاده سازی loss function و dataset پیچیده مواجه شدم). ولی خب خیلی لذت بخش بود.
Object Detection Series (Deep Learning) - Aladdin Persson
تو ویدیو اول از Intersection Over Union (IoU) شروع میکنه که متریکی برای دقت bounding box هست و ازش داخل loss function امون استفاده میکنیم.
ویدیو دوم میرسه به Non-Max Suppression که برای حذف bounding box های تکراری یا بیخود استفاده میشه.
ویدیو سوم به Mean Average Precision (mAP) میپردازه که به عنوان متریک برای ارزیابی دقتمون استفاده میکنیم.
و در نهایت تو دو ویدیو آخر Yolov1 و Yolov3 پیاده سازی میشه.
کلا پروژه خیلی پیچیده ای بود (برای اولین بار بود که با پیاده سازی loss function و dataset پیچیده مواجه شدم). ولی خب خیلی لذت بخش بود.
Object Detection Series (Deep Learning) - Aladdin Persson
YouTube
Object Detection Series (Deep Learning)
In this video series we start assuming no previous knowledge of Object Detection and quickly build up an understanding of what this field is about and look a...
ipympl: Interactive visualization for matplotlib
اگر با MatLab کار کرده باشید میدونید که نمایش نمودارش به صورت تعاملی هست.
داخل matplotlib هم چنین قابلیتی هست و میتونه واستون مفید باشه. مخصوصا وقتی که نمودارتون سه بعدی باشه.
یکی از مثال های نمودار سه بعدی میتونه PCA یا T-SNE باشه که داخلش کاهش بعد به ۳ بعد یا ۲ بعد انجام میدید.
داکیومنتش و صفحه پکیجش اینجاست.
https://matplotlib.org/ipympl/index.html
https://pypi.org/project/ipympl/
خلاصه وار بخوام بگم. اول notebook اتون باید magic function
یا
رو ران کنید.
ولی تو استفاده ازش به مشکلات عجیب غریبی میخوردم. نمودار ها قاطی میکردن و یه سری مشکلاتی که اصلا نمیتونستم ازشون سردربیارم که چرا.
بعد از مدت ها که دوباره امتحان کردم مشخص شد مشکل از کجاست.
واسه هر cell شما باید حتما حتما یه figure جدید درست کنید.
تو مثال چند نمودار subplots خودش یه figure درست میکنه سر همین قبلش نیاز نیست انجام بدید.
اگر اینکارو انجام ندید میبینید که figure قبلی که استفاده میکردید تو cell جدیدتون استفاده میشه و خلاصه نمودار های قبلی قاطی نموداری که رسم میکنید میشن.
اگر با MatLab کار کرده باشید میدونید که نمایش نمودارش به صورت تعاملی هست.
داخل matplotlib هم چنین قابلیتی هست و میتونه واستون مفید باشه. مخصوصا وقتی که نمودارتون سه بعدی باشه.
یکی از مثال های نمودار سه بعدی میتونه PCA یا T-SNE باشه که داخلش کاهش بعد به ۳ بعد یا ۲ بعد انجام میدید.
داکیومنتش و صفحه پکیجش اینجاست.
https://matplotlib.org/ipympl/index.html
https://pypi.org/project/ipympl/
خلاصه وار بخوام بگم. اول notebook اتون باید magic function
%matplotlib widgetیا
%matplotlib ipymplرو ران کنید.
ولی تو استفاده ازش به مشکلات عجیب غریبی میخوردم. نمودار ها قاطی میکردن و یه سری مشکلاتی که اصلا نمیتونستم ازشون سردربیارم که چرا.
بعد از مدت ها که دوباره امتحان کردم مشخص شد مشکل از کجاست.
واسه هر cell شما باید حتما حتما یه figure جدید درست کنید.
plt.figure(figsize=(10, 7))تو مثال چند نمودار subplots خودش یه figure درست میکنه سر همین قبلش نیاز نیست انجام بدید.
اگر اینکارو انجام ندید میبینید که figure قبلی که استفاده میکردید تو cell جدیدتون استفاده میشه و خلاصه نمودار های قبلی قاطی نموداری که رسم میکنید میشن.
Jupyter (Lab) Extensions:
محیط jupyter یا jupyterlab یه محیط خیلی خوبی هست برای کار با notebook ها.
ولی به صورت پیشفرض یکسری مشکلات داره.
مثل autocomplete خیلی ابتدایی، نبود code formatter، نبود یک ابزار برای بررسی تغییراتی که روی نوت بوک ها انجام میدیم (diff) و نداشتن یه تم دارک خوب.
ولی خوشبختانه یکسری extension هایی برای محیط jupyter هستن که خیلی میتونن کارو راه بندازن.
موارد زیر افزونه هایی هستن که در حال حاضر استفاده میکنم.
1. jupyterlab-lsp
تو لیستم این یکی از مهم تریناست. از اونجایی که من از autocomplete و قابلیت های lsp خیلی استفاده میکنم (مثل docstring خوندن) باید حتما lsp داشته باشم.
قابلیت خوبی که داره اینه که با lsp های مختلف سازگار هست و میتونید نصب کنید و استفاده کنید. (فکر کنم برای بقیه زبان ها هم پشتیبانی داره)
2. jupyterlab-code-formatter
من کد هامو با black فرمت میکنم. و همین خوانایی کدم رو بالا میبره.
همینطور از isort هم پشتیبانی میکنه و کل هر cell رو با هر دو فرمت میکنه.
پیشنهاد میکنم همیشه ازش استفاده کنید.
یادتون نره که black و isort رو نصب داشته باشید وگرنه کار نمیکنه و ارور میده.
3. jupyterlab-git
افزونه git برای jupyter. در کنارش nbdime هم نصب میشه که ابزار diff (یافتن تغییرات) برای notebook ها هست.
4. jupyterlab-night
تم GitHub هم خیلی خوبه. البته که من همیشه تم tokyo-night رو بیشتر ترجیح میدم ولی خب پیداش نکردم و دیگه سراغش رو نگرفتم.
ولی خب این تم دارک خوبی هست که از تم GitHub dark الهام گرفتن.
یه دونه جا مونده که با پست بعدی در ارتباط هست. منتظر باشید. ;)
محیط jupyter یا jupyterlab یه محیط خیلی خوبی هست برای کار با notebook ها.
ولی به صورت پیشفرض یکسری مشکلات داره.
مثل autocomplete خیلی ابتدایی، نبود code formatter، نبود یک ابزار برای بررسی تغییراتی که روی نوت بوک ها انجام میدیم (diff) و نداشتن یه تم دارک خوب.
ولی خوشبختانه یکسری extension هایی برای محیط jupyter هستن که خیلی میتونن کارو راه بندازن.
موارد زیر افزونه هایی هستن که در حال حاضر استفاده میکنم.
1. jupyterlab-lsp
تو لیستم این یکی از مهم تریناست. از اونجایی که من از autocomplete و قابلیت های lsp خیلی استفاده میکنم (مثل docstring خوندن) باید حتما lsp داشته باشم.
قابلیت خوبی که داره اینه که با lsp های مختلف سازگار هست و میتونید نصب کنید و استفاده کنید. (فکر کنم برای بقیه زبان ها هم پشتیبانی داره)
pip install jupyterlab-lsp2. jupyterlab-code-formatter
من کد هامو با black فرمت میکنم. و همین خوانایی کدم رو بالا میبره.
همینطور از isort هم پشتیبانی میکنه و کل هر cell رو با هر دو فرمت میکنه.
پیشنهاد میکنم همیشه ازش استفاده کنید.
pip install jupyterlab-code-formatter
یادتون نره که black و isort رو نصب داشته باشید وگرنه کار نمیکنه و ارور میده.
3. jupyterlab-git
افزونه git برای jupyter. در کنارش nbdime هم نصب میشه که ابزار diff (یافتن تغییرات) برای notebook ها هست.
pip install jupyterlab-git4. jupyterlab-night
تم GitHub هم خیلی خوبه. البته که من همیشه تم tokyo-night رو بیشتر ترجیح میدم ولی خب پیداش نکردم و دیگه سراغش رو نگرفتم.
ولی خب این تم دارک خوبی هست که از تم GitHub dark الهام گرفتن.
pip install jupyterlab-nightیه دونه جا مونده که با پست بعدی در ارتباط هست. منتظر باشید. ;)
Forwarded from DeepMind AI Expert (Farzad 🦅)
دوتا کورس عالی از دانشگاه برکلی راجع به ایجنت ها ارائه شده. دوره اول فاندیمنتال و مباحث اصلی را توضیح میده و دوره دوم دوره پیشرفته راجع به ایجنت ها هست. تمام اسلایدها و ویدیوها و مقالات هم موجوده. و موضوعات مهم و اساسی را پوشش میده.
▪️ CS294/194-196 Large Language Model Agents
▪️ CS294/194-280
Advanced Large Language Model Agents
#منابع #کلاس_آموزشی #پردازش_زبان_طبیعی
🔸 مطالب بیشتر 👇👇
✅ @AI_DeepMind
🔸 @AI_Person
▪️ CS294/194-196 Large Language Model Agents
▪️ CS294/194-280
Advanced Large Language Model Agents
#منابع #کلاس_آموزشی #پردازش_زبان_طبیعی
🔸 مطالب بیشتر 👇👇
✅ @AI_DeepMind
🔸 @AI_Person
Forwarded from Pytopia News (Ali Hejazi)
Please open Telegram to view this post
VIEW IN TELEGRAM
Pytopia News
علی حجازی مدرس pytopia.ai کورس هاشو به خاطر شرایط جنگی رایگان کرده.
بعد از مدتی که بررسی کردم فهمیدم که کورس هاش خیلی با کیفیت هستن و واقعا ارزشش رو دارن.
همه کورس ها داخل وبسایت رایگان هست ولی همشون کامل نیستن. مثل کورس Design Pattern ولی اونایی که کامل هستن خیلی خوب و کامل ان.
این چهار کورس اش توجهم رو بیشتر جلب کرده.
Machine Learning (2024)
Data Processing (Numpy / Pandas)
Data Visualization
Python Programming (2023)
پس نوشت: دو هفته پیش رایگان کرده و فعلا رایگان هست...
بعد از مدتی که بررسی کردم فهمیدم که کورس هاش خیلی با کیفیت هستن و واقعا ارزشش رو دارن.
همه کورس ها داخل وبسایت رایگان هست ولی همشون کامل نیستن. مثل کورس Design Pattern ولی اونایی که کامل هستن خیلی خوب و کامل ان.
این چهار کورس اش توجهم رو بیشتر جلب کرده.
Machine Learning (2024)
Data Processing (Numpy / Pandas)
Data Visualization
Python Programming (2023)
پس نوشت: دو هفته پیش رایگان کرده و فعلا رایگان هست...
🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
ipywidgets
این ابزار خیلی بازی رو عوض کرد برای من.
قبلا تو پستی راجب ipympl صحبت کردم که میاد و نمودار هارو تعاملی یا interactive میکنه.
حالا ipywidgets میاد و یه سطح هم فراتر میبره.
چطور؟ با اضافه کردن ویجت هایی داخل Jupyter مثل Button یا Slider ها که قابلیت تغییر رو دارن.
و اینا رو میشه واسه تنظیم یه سری پارامتر ها و plot لحظه ای (زنده) از نتایج استفاده کرد.
میتونم تصور کنم که بشه تو Machine Learning هم استفاده کرد. مثلا تغییر دادن k تو KNN با یه IntSlider و مشاهده plot در همون لحظه.
(قطعا یه cell گنده میشه ولی خب خیلی interactive تر.)
تو یکی از پست هام هم راجب extension های JupyterLab صحبت کردم و یکی رو جا انداختم که همین هست.
و حال چند نکته:
اینو بهتره که در کنار ipympl استفاده کنید. در غیراینصورت وقتی آپدیت رخ میده انگار تصویر حذف و دوباره plot میشه که خیلی روون از آب در نمیاد.
و تو تابع update اتون که میاد و دوباره plot میکنه قبل از هر چیزی
این ابزار خیلی بازی رو عوض کرد برای من.
قبلا تو پستی راجب ipympl صحبت کردم که میاد و نمودار هارو تعاملی یا interactive میکنه.
حالا ipywidgets میاد و یه سطح هم فراتر میبره.
چطور؟ با اضافه کردن ویجت هایی داخل Jupyter مثل Button یا Slider ها که قابلیت تغییر رو دارن.
و اینا رو میشه واسه تنظیم یه سری پارامتر ها و plot لحظه ای (زنده) از نتایج استفاده کرد.
میتونم تصور کنم که بشه تو Machine Learning هم استفاده کرد. مثلا تغییر دادن k تو KNN با یه IntSlider و مشاهده plot در همون لحظه.
(قطعا یه cell گنده میشه ولی خب خیلی interactive تر.)
تو یکی از پست هام هم راجب extension های JupyterLab صحبت کردم و یکی رو جا انداختم که همین هست.
و حال چند نکته:
اینو بهتره که در کنار ipympl استفاده کنید. در غیراینصورت وقتی آپدیت رخ میده انگار تصویر حذف و دوباره plot میشه که خیلی روون از آب در نمیاد.
و تو تابع update اتون که میاد و دوباره plot میکنه قبل از هر چیزی
()fig.clf بزنید تا figure اتون رو پاک کنید تا ترسیم جدید با ترسیم های قبلی قاطی نشه.🔥1
چطور SQLite ده برابر سریع تر شد.
داشتم این query ای داخل SQLite از لحاظ بهینگی بررسی میکردم.
خروجیش این بود.
ولی خط آخرش
اینکه SQLite داره همون لحظه یه Bloom Filter میسازه که Query رو سریع کنه نشون میده که چقدر میتونه این data structure بدرد جستجو های سریع بخوره.
حالا bloom filter چی هست.
یه نوع data structure که با استفاده از تابع hash و یه آرایه از جنس boolean و از سایزی که ما تعیین میکنیم کار میکنه. فضای آرایه باید به اندازه کافی بزرگ باشه که بتونه تعداد خوبی دیتا رو به خونه های منحصر به فرد map کنه ولی به اندازه کافی هم کوچیک باشه که از لحاظ فضا بهینه باشه.
حال همه دیتا های اون مجموعه ای که میخوایم واسش bloom filter رو درست کنیم رو hash میکنیم و روی خونه map شده به اون hash اگر 0 بود 1 میکنیم و اگر 1 بود دست نمیزنیم.
این data structure در واقع false negative نداره. هر وقت میگه این دیتا تو این مجموعه نیست. یعنی هیچ احتمالی وجود نداره تو این مجموعه باشه. بنابراین زمانی که صرف جستجو میشد رو به کلی حذف میکنه.
بسته به استفاده و مسئله میتونه مفید باشه. ولی خب جالب بود که داخل دیتابیس هم همچنین چیزی بود.
این blog post توضیح میده که چطور bloom filter میتونه SQLite رو تا x10 برابر سریع تر کنه.
داشتم این query ای داخل SQLite از لحاظ بهینگی بررسی میکردم.
EXPLAIN QUERY PLAN
SELECT "noscript" FROM "movies" WHERE "id" IN (
SELECT "movie_id" FROM "stars" WHERE "person_id" = (
SELECT "id" FROM "people" WHERE "name" = 'Tom Hanks'
)
);
خروجیش این بود.
QUERY PLAN
|--SEARCH movies USING INTEGER PRIMARY KEY (rowid=?)
`--LIST SUBQUERY 2
|--SCAN stars
|--SCALAR SUBQUERY 1
| `--SCAN people
`--CREATE BLOOM FILTER
ولی خط آخرش
CREATE BLOOM FILTER به چشمم خورد.اینکه SQLite داره همون لحظه یه Bloom Filter میسازه که Query رو سریع کنه نشون میده که چقدر میتونه این data structure بدرد جستجو های سریع بخوره.
حالا bloom filter چی هست.
یه نوع data structure که با استفاده از تابع hash و یه آرایه از جنس boolean و از سایزی که ما تعیین میکنیم کار میکنه. فضای آرایه باید به اندازه کافی بزرگ باشه که بتونه تعداد خوبی دیتا رو به خونه های منحصر به فرد map کنه ولی به اندازه کافی هم کوچیک باشه که از لحاظ فضا بهینه باشه.
حال همه دیتا های اون مجموعه ای که میخوایم واسش bloom filter رو درست کنیم رو hash میکنیم و روی خونه map شده به اون hash اگر 0 بود 1 میکنیم و اگر 1 بود دست نمیزنیم.
این data structure در واقع false negative نداره. هر وقت میگه این دیتا تو این مجموعه نیست. یعنی هیچ احتمالی وجود نداره تو این مجموعه باشه. بنابراین زمانی که صرف جستجو میشد رو به کلی حذف میکنه.
بسته به استفاده و مسئله میتونه مفید باشه. ولی خب جالب بود که داخل دیتابیس هم همچنین چیزی بود.
این blog post توضیح میده که چطور bloom filter میتونه SQLite رو تا x10 برابر سریع تر کنه.
avi.im
How bloom filters made SQLite 10x faster - blag
This is the fascinating story of how researchers used Bloom filters cleverly to make SQLite 10x faster for analytical queries. These are my five-minute notes on the paper SQLite: Past, Present, and Future
TECH STASH
چطور SQLite ده برابر سریع تر شد. داشتم این query ای داخل SQLite از لحاظ بهینگی بررسی میکردم. EXPLAIN QUERY PLAN SELECT "noscript" FROM "movies" WHERE "id" IN ( SELECT "movie_id" FROM "stars" WHERE "person_id" = ( SELECT "id" FROM "people" WHERE…
این ساختمون داده بخشی از آموزش هایی بود که تو کورس
The Last Algorithms Course You'll Want (Part 2)
که توسط ThePrimeagen تدریس شده بود دیدم.
یه پست جامعی هم یه سال پیش گذاشتم که یه مقدار راجب تاپیک هایی که کاور میشه نوشتم.
The Last Algorithms Course You'll Want (Part 2)
که توسط ThePrimeagen تدریس شده بود دیدم.
یه پست جامعی هم یه سال پیش گذاشتم که یه مقدار راجب تاپیک هایی که کاور میشه نوشتم.
Mastering Python Design Patterns - 3rd Edition
این یکی از بهترین کتاب های Design Pattern برای پایتون هست.
اول از اصول پایه ای شروع میکنه. چهار تا قانون معروف:
1. انکپسوله کن چیزایی که متفاوت هستن.
2. ترکیب رو بر ارث بری ترجیح بده.
3. روی interface ها برنامه نویسی کن نه پیاده سازی ها. (معادل abstract base classes)
4. وابستگی کم (Loose Coupling)
بعد میرسه به SOLID که احتمالا خیلی هاتون شنیده باشید.
بعدش میره سراغ Gang of Four که دیزاین پترن های مرسومی هستن که استفاده میشن.
و در نهایت فراتر از Gang of Four که دیگه خیلی جالبه.
من یکسری از دیزاین پترن های Gang of four رو تو آموزش neetcode دیدم ولی آموزش کاملی نبود اگر بخوام رو راست باشم. به نظرم میتونست بیشتر میتونست کاور کنه.
خود کانال ArjanCodes هم خیلی آموزش راجب دیزاین پترن داره که اگر علاقه به دنبال کردن مبحث design pattern دارید خیلی بهتون پیشنهاد میدم سرچ کنید و ببینید.
این یکی از بهترین کتاب های Design Pattern برای پایتون هست.
اول از اصول پایه ای شروع میکنه. چهار تا قانون معروف:
1. انکپسوله کن چیزایی که متفاوت هستن.
2. ترکیب رو بر ارث بری ترجیح بده.
3. روی interface ها برنامه نویسی کن نه پیاده سازی ها. (معادل abstract base classes)
4. وابستگی کم (Loose Coupling)
بعد میرسه به SOLID که احتمالا خیلی هاتون شنیده باشید.
بعدش میره سراغ Gang of Four که دیزاین پترن های مرسومی هستن که استفاده میشن.
و در نهایت فراتر از Gang of Four که دیگه خیلی جالبه.
من یکسری از دیزاین پترن های Gang of four رو تو آموزش neetcode دیدم ولی آموزش کاملی نبود اگر بخوام رو راست باشم. به نظرم میتونست بیشتر میتونست کاور کنه.
خود کانال ArjanCodes هم خیلی آموزش راجب دیزاین پترن داره که اگر علاقه به دنبال کردن مبحث design pattern دارید خیلی بهتون پیشنهاد میدم سرچ کنید و ببینید.
Mastering Python Design Patterns - Third Edition.pdf
15.2 MB
Mastering Python Design Patterns - 3rd Edition
