TECH STASH – Telegram
TECH STASH
212 subscribers
115 photos
5 videos
15 files
254 links
اینجا هر چی رو که یاد میگیرم، به اشتراک میزارم...
هوش مصنوعی، لینوکس، اوپن سورس، برنامه نویسی و...

Admin: @D3F4U1T_ARS
Download Telegram
%autoreload

من خیلی دنبال همچنین قابلیتی تو Jupyter بودم.
قبلش با importlib انجام میدادم.

import importlib

importlib.reload(module)


ولی روی توابع و چیزایی که به این صورت ایمپورت میشن کار نمیکنه.

from module import someclass, func, var


اینکه ماژول لود شده رو دوباره ریلود کنی تا تغییراتی که توش صورت گرفته اعمال بشه و بتونید بدون restart کردن Jupyter ازش استفاده کنید.

IPython extensions - autoreload

این خیلی کارم رو ساده تر میکنه.

البته داکیومنتش رو خوب بخونین. یه سری ریزه کاری هایی داره.
مثلا recursive import ها باید به جای
from module
از
import module
استفاده کنید و خلاصه یه سری چیزایه دیگه.
Mathematics for Machine Learning

کتاب ریاضیات ماشین لرنینگ.

نویسندگان:
Marc Peter Deisenroth, A. Aldo Faisal, and Cheng Soon Ong.
(Published by Cambridge University Press.)

این کتاب خیلی مطرح هست تو زمینه ریاضیات Machine Learning.

فهرست مطالب این کتاب:

Part I: Mathematical Foundations

1. Introduction and Motivation
2. Linear Algebra
3. Analytic Geometry
4. Matrix Decompositions
5. Vector Calculus
6. Probability and Distribution
7. Continuous Optimization

Part II: Central Machine Learning Problems

8. When Models Meet Data
9. Linear Regression
10. Dimensionality Reduction with Principal Component Analysis
11. Density Estimation with Gaussian Mixture Models
12. Classification with Support Vector Machines

رایگان به صورت PDF در تو این لینک در دسترستون هست.
1
mml-book.pdf
16.8 MB
Mathematics for Machine Learning

By Marc Peter Deisenroth, A. Aldo Faisal, and Cheng Soon Ong.
(Published by Cambridge University Press.)
1
cuML

یه پروژه خیلی جالبی RAPIDS داده بیرون به اسم cuML که الگوریتم های Machine Learning لایبرری scikit-learn رو روی CUDA میبره و پردازش رو خیلی سریع تر میکنه. انویدیا هم یه بلاگ پست راجبش گذاشته.

مخزن گیت پروژه:
https://github.com/rapidsai/cuml

داکیومنت پروژه:
https://docs.rapids.ai/api/cuml/stable/

اتفاقا RAPIDS پروژه های جالب دیگه ای هم داره. مثل cuDF عملا pandas هست روی GPU. میتونه برای workflow ها و پردازش های سنگین خیلی مناسب باشه.
Low Level Learning

این یکی از کانال های YouTube محبوبم بود که آموزش های C و هر چیز مربوط به سخت افزار میزاشت.

https://www.youtube.com/@LowLevelTV

یه سری دوره های آموزشی با کیفیت داره داخل وبسایتش.

https://lowlevel.academy/courses

و یکسری دوره هاشو داخل downloadly پیدا کردم.

Low Level Academy - Zero2Hero C Programming

Low Level Academy - Fundamentals of ARM Assembly

Low Level Academy - Network Applications in C

Low Level Academy - Multi Threaded C Applications

اگر علاقه دارید به C و برنامه نویسی سطح پایین. حتما دوره هاشو ببینید.
چون کیفیت خوبی دارن.
3👍1
دیروز یاد یه جمله ای از Primeagen افتادم. که میگفت.
"(تو دنیای طراحی الگوریتم) خیلی از مسائل تبدیل به مسائل گراف میشن."

حق میگفت. انگار خیلی از مسائل تبدیل به مسائل گراف میشن.
برای مثال. مسئله محاسبه گرادیان تو 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

ویدیو های دیگش هم شاید بعدا نگاه کنم ولی خب فعلا عجله ای نیست.
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. مثال آخر تقسیم داره. لطفا حواستون به اون بخش باشه. اینکه مشتق تقسیم چی هست؟ و دارید بر حسب چی مشتق میگیرید؟
1
Einsum

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
پردازش سریع دیتا ها (قسمت دوم): وقتی هزینه کپی زیاد میشود

تو پست قبل راجب اینکه چطور یه الگوریتم رو با broadcasting سریع تر کردم صحبت کردیم.

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

vectorization:‌
که بهش SIMD هم میگن به اعمال کردن یک عملیات روی تعداد بی شماری از دیتا به صورت همزمان میکن.
تو اصطلاح برنامه نویسی هم همینه. تبدیل کردن یک loop که یه عملیاتی رو تکرار میکنه به یک عملیاتی که همزمان روی کل دیتا ها انجام میشه.

broadcasting:
در واقع broadcasting یکی از تکنیک هاست که vectorization رو ممکن میکنه.
با تغییر دادن شکل آرایه ها تا اعمال عملیات های element-wise (عضو به عضو) روشون ممکن بشه.

خب بریم سراغ داستان.

چند روز پیش داشتم روی پیاده سازی یه الگوریتمی روی numpy کار میکردم.
میخواستم این الگوریتم رو مثل الگوریتم های دیگه vectorize کنم.
تو پست قبلیم یکی از تلاش هایی که موفقیت آمیز بود و نتایج چشم گیری داشت رو نمایش دادم.
و از تکنیک broadcasting استفاده کرده بودم.

ولی این بار یه مشکلی داشت. تابع cov که covariance رو محاسبه میکرد تنها آرایه دو بعدی قبول میکرد.
همین کل فرصت هارو برای اینکه vectorize کنم ازم میگرفت.

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

خواستم واسه تست واقعی یک batch بزرگ از دیتا رو پاس بدم بهش و دیدم که memory ام کامل پر شد.
خلاصه فهمیدم که الگوریتمم خیلی غیر بهینه عملیات هارو vectorize میکنه.
در واقع دو dimension ای که برای vectorize کردن استفاده و expand کرده بودم خیلی دیتا رو تکرار کرده بودن.

خلاصه نتیجه اصلی اینجاست. هزینه کپی کردن هم کم نیست.
واسه بهینه سازی شما باید حواستون به مموری باشه.
البته که ما همیشه مبادله داریم بین سرعت و فضای مموری.
ولی کپی کردن هم خودش هزینه زمانی داره و سرعت رو پایین میاره.

فکر میکنم راه حل بهتری باشه که یک روزی حتما سراغشون میرم.
1
Channel photo updated
سلامی مجدد دوستان.
بله. بنده فعلا زنده ام.

برای این اتفاقات واقعا متاسف هستم.
و در غم از دست دادن هم وطنانمون هم شریک. 🖤🖤🖤
👍6👎3
Forwarded from Seyed Mahdi Notes (Seyed Mahdi)
میرور هامون فعلا وصله :)
توی این شرایط شاید به دردتون بخوره

https://mirrors.kubarcloud.com
این 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
ipympl: Interactive visualization for matplotlib

اگر با 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 های مختلف سازگار هست و میتونید نصب کنید و استفاده کنید. (فکر کنم برای بقیه زبان ها هم پشتیبانی داره)

pip install jupyterlab-lsp

2. jupyterlab-code-formatter

من کد هامو با black فرمت میکنم. و همین خوانایی کدم رو بالا میبره.
همینطور از isort هم پشتیبانی میکنه و کل هر cell رو با هر دو فرمت میکنه.
پیشنهاد میکنم همیشه ازش استفاده کنید.

pip install jupyterlab-code-formatter

یادتون نره که black و isort رو نصب داشته باشید وگرنه کار نمیکنه و ارور میده.

3. jupyterlab-git

افزونه git برای jupyter. در کنارش nbdime هم نصب میشه که ابزار diff (یافتن تغییرات) برای notebook ها هست.

pip install jupyterlab-git

4. 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
Forwarded from Pytopia News (Ali Hejazi)
🔈 بچه‌ها به خاطر شرایط جنگی حال حاضر کورس‌های پایتوپیا روی سایت رایگان شد.
Please open Telegram to view this post
VIEW IN TELEGRAM