ML & AI resources
چهار تا ویدیو با توضیح از صفر مباحث self attention و transformer باشد که رستگار شوید... ps- با تشکر از @AliAsad059 [1] https://youtu.be/yGTUuEx3GkA [2] https://youtu.be/tIvKXrEDMhk [3] https://youtu.be/23XUv0T9L5c [4] https://youtu.be/EXNBy8G43MM
استفاده از transformer ها در computer vision :
Vision Transformer
paper:
https://arxiv.org/abs/2010.11929
توضیح ویدیویی خوب:
https://youtu.be/HZ4j_U3FC94
پیاده سازی قدم به قدم Vit با pytorch :
https://youtu.be/ovB0ddFtzzA
Vision Transformer
paper:
https://arxiv.org/abs/2010.11929
توضیح ویدیویی خوب:
https://youtu.be/HZ4j_U3FC94
پیاده سازی قدم به قدم Vit با pytorch :
https://youtu.be/ovB0ddFtzzA
YouTube
Vision Transformer for Image Classification
Vision Transformer (ViT) is the new state-of-the-art for image classification. ViT was posted on arXiv in Oct 2020 and officially published in 2021. On all the public datasets, ViT beats the best ResNet by a small margin, provided that ViT has been pretrained…
🔥2
ورژن پنجم کورس جرمی هاوارد امروز منتشر شد!
Practical Deep Learning for Coders
https://course.fast.ai/
این کورس براساس کتابخونههای پایتورچ، fastai و huggingface و … هست و مباحث کامپیوتر ویژن، NLP، تحلیل داده structured، سیستمهای توصیه دهنده و الگوریتمهایی مثل رگرسیون و random forest رو پوشش میده.
توضیحات بیشتر رو میتونید در توییت جرمی هاوارد بخونید:
https://twitter.com/jeremyphoward/status/1550264123925360640?s=21&t=EFNN4D6QI6Y5EDk_KxdPCw
Practical Deep Learning for Coders
https://course.fast.ai/
این کورس براساس کتابخونههای پایتورچ، fastai و huggingface و … هست و مباحث کامپیوتر ویژن، NLP، تحلیل داده structured، سیستمهای توصیه دهنده و الگوریتمهایی مثل رگرسیون و random forest رو پوشش میده.
توضیحات بیشتر رو میتونید در توییت جرمی هاوارد بخونید:
https://twitter.com/jeremyphoward/status/1550264123925360640?s=21&t=EFNN4D6QI6Y5EDk_KxdPCw
Practical Deep Learning for Coders
Practical Deep Learning for Coders - Practical Deep Learning
A free course designed for people with some coding experience, who want to learn how to apply deep learning and machine learning to practical problems.
🔥3
Forwarded from NLP stuff
تیر آخر برای فهمیدن ترنسفورمرها!
اگر هنوزم ترنسفورمرها رو مشکل دارید و با خوندن پستهای ما روی ویرگول هنوزم دوشواری داریید، توصیه اکید میکنیم این دو تا لینک رو بجوئید. لینک اول یه بلاگ پسته که از بیخ و بن ترنسفورمرها رو توضیح میده. از اول ضرب نقطهای و وانهات انکودینگ شروع کرده تا حتی BPE رو توضیح میده.
لینک دوم هم پیادهسازی پایتورچی ترنسفورمرها رو خط به خط توضیح میده. قبلا ورژن قدیمیش رو پست کرده بودیم. کدش رو میتونید از گیتشون پول کنید و ران کنید و با دیباگ کردن خروجی و متغیرهای قضیه رو ببینید. برای یه مسئله ساده (خروجی دادن یک دنباله ورودی تصادفی) پیاده کردند که راحت خروجی و متغیرها رو ببینید.
ما هر دو این لینکها رو از ریپو سوم (از آقای Elvis) یافتیم که ریپو داره آپدیت هم میشه.
لینک بلاگ:
https://e2eml.school/transformers.html
لینک پیادهسازی:
https://nlp.seas.harvard.edu/annotated-transformer/#a-first-example
لینک ریپو:
https://github.com/dair-ai/Transformers-Recipe
#read
#blog
@nlp_stuff
اگر هنوزم ترنسفورمرها رو مشکل دارید و با خوندن پستهای ما روی ویرگول هنوزم دوشواری داریید، توصیه اکید میکنیم این دو تا لینک رو بجوئید. لینک اول یه بلاگ پسته که از بیخ و بن ترنسفورمرها رو توضیح میده. از اول ضرب نقطهای و وانهات انکودینگ شروع کرده تا حتی BPE رو توضیح میده.
لینک دوم هم پیادهسازی پایتورچی ترنسفورمرها رو خط به خط توضیح میده. قبلا ورژن قدیمیش رو پست کرده بودیم. کدش رو میتونید از گیتشون پول کنید و ران کنید و با دیباگ کردن خروجی و متغیرهای قضیه رو ببینید. برای یه مسئله ساده (خروجی دادن یک دنباله ورودی تصادفی) پیاده کردند که راحت خروجی و متغیرها رو ببینید.
ما هر دو این لینکها رو از ریپو سوم (از آقای Elvis) یافتیم که ریپو داره آپدیت هم میشه.
لینک بلاگ:
https://e2eml.school/transformers.html
لینک پیادهسازی:
https://nlp.seas.harvard.edu/annotated-transformer/#a-first-example
لینک ریپو:
https://github.com/dair-ai/Transformers-Recipe
#read
#blog
@nlp_stuff
Telegram
stuff
Machine learning model performance degrades over time. When data quality is fine, there are two usual suspects: data drift or concept drift.
▪️ Data Drift -- The input data has changed. The distribution of the variables is meaningfully different. As a result, the trained model is not relevant for this new data.
▪️ Concept Drift -- In contrast to the data drift, the distributions might even remain the same. Instead, the relationships between the model inputs and outputs change. In essence, the very meaning of what we are trying to predict evolves.
source: https://www.linkedin.com/feed/update/urn:li:share:6959891342726463488?utm_source=linkedin_share&utm_medium=member_desktop_share&utm_content=post
▪️ Data Drift -- The input data has changed. The distribution of the variables is meaningfully different. As a result, the trained model is not relevant for this new data.
▪️ Concept Drift -- In contrast to the data drift, the distributions might even remain the same. Instead, the relationships between the model inputs and outputs change. In essence, the very meaning of what we are trying to predict evolves.
source: https://www.linkedin.com/feed/update/urn:li:share:6959891342726463488?utm_source=linkedin_share&utm_medium=member_desktop_share&utm_content=post
👍2
هر لایه یک لاسفانکشن!
علمای گوگل برین اخیرا مقالهای منتشر کردن و بجای معرفی معماری و لاسفانکشن و تسک جدید نگاه جنرال تری داشتند و در اون یک فرمورک جدید برای آموزش شبکه های عصبی معرفی کردن که با این فرمورک پیشرفت قابل توجهی در عملیات Backpropagation بوجود میاد.
در این فرمورک شبکههای عصبی رو ترکیبی ماژولار (و نه بهم پیوسته) از لایهها متصور شدند که در هر لایه ابتدا یک تبدیل خطی روی ورودی اش انجام میشه و بعد هم یک تبدیل غیرخطی که همون Activation Function هست.خب تا اینجاش بجز ماژولار بودن تفاوتی با قبل نداشت. تفاوت اصلی در اینجاست که هر لایه برای خودش regularizer جدا، output target جدا و همچنین loss function جدا داره. که بخاطر همین لوکالیتی بودن اینها اسم فرمورک رو گذاشتند LocoProp. یعنی Local Loss Optimization framework.
حالا چه مزیتهایی داره؟ به گفته خود اعزه گوگل مهمترین آورده local losses کاهش زمان Trian هست. چرا که ترین هر لایه بصورت Parallel انجام میشه. ضمن اینکه با اینکه در هر لایه از یک Optimizer درجه اول استفاده میکنیم اما در عمل نتایجش تنه به تنه Optimizer های با درجات بالا (مشتقات درجه چندم) میزنه و این یعنی در عین داشتن مزایای این اپتیمایزرها تمام هزینههای محاسباتی شون اعم از matrix inversions رو نداره.
خلاصه اینکه وظیفه اینگونه شبکهها بجای اینکه آپدیت وزن ها برای به حداقل رسانی لاسفانکشن لایه آخر باشه، این فرمورک برای هر لایه یک لاسفانکشن تعریف میکنه که وظیفه شبکه کاهش اختلاف بین خروجی هرلایه و خروجی مدنظر هر لایه ست. درمورد اینکه خروجی مدنظر هرلایه رو چی تعریف میکنند تنها چیزی که فهمیدم اینه که خروجی اکتیوفانکشن میشه همون خروجی واقعی یا همون ground truth. ولی مطمئن نیستم اینجاش رو درست فهمیدم و اگه کسی از دوستان دقیقتر میدونست خوشحال میشم یاد بگیرم.
لینک مقاله: https://lnkd.in/eqsrUnJA
لینک گوگل بلاگ: https://lnkd.in/ephQyxEE
من بلد نبودم gif توضیح تصویری فرمورک رو بذارم تو پست. لینکش رو گذاشتم:
https://lnkd.in/eR83iPrn
source: https://www.linkedin.com/feed/update/urn:li:share:6960231926687227905?utm_source=linkedin_share&utm_medium=member_desktop_share&utm_content=post
علمای گوگل برین اخیرا مقالهای منتشر کردن و بجای معرفی معماری و لاسفانکشن و تسک جدید نگاه جنرال تری داشتند و در اون یک فرمورک جدید برای آموزش شبکه های عصبی معرفی کردن که با این فرمورک پیشرفت قابل توجهی در عملیات Backpropagation بوجود میاد.
در این فرمورک شبکههای عصبی رو ترکیبی ماژولار (و نه بهم پیوسته) از لایهها متصور شدند که در هر لایه ابتدا یک تبدیل خطی روی ورودی اش انجام میشه و بعد هم یک تبدیل غیرخطی که همون Activation Function هست.خب تا اینجاش بجز ماژولار بودن تفاوتی با قبل نداشت. تفاوت اصلی در اینجاست که هر لایه برای خودش regularizer جدا، output target جدا و همچنین loss function جدا داره. که بخاطر همین لوکالیتی بودن اینها اسم فرمورک رو گذاشتند LocoProp. یعنی Local Loss Optimization framework.
حالا چه مزیتهایی داره؟ به گفته خود اعزه گوگل مهمترین آورده local losses کاهش زمان Trian هست. چرا که ترین هر لایه بصورت Parallel انجام میشه. ضمن اینکه با اینکه در هر لایه از یک Optimizer درجه اول استفاده میکنیم اما در عمل نتایجش تنه به تنه Optimizer های با درجات بالا (مشتقات درجه چندم) میزنه و این یعنی در عین داشتن مزایای این اپتیمایزرها تمام هزینههای محاسباتی شون اعم از matrix inversions رو نداره.
خلاصه اینکه وظیفه اینگونه شبکهها بجای اینکه آپدیت وزن ها برای به حداقل رسانی لاسفانکشن لایه آخر باشه، این فرمورک برای هر لایه یک لاسفانکشن تعریف میکنه که وظیفه شبکه کاهش اختلاف بین خروجی هرلایه و خروجی مدنظر هر لایه ست. درمورد اینکه خروجی مدنظر هرلایه رو چی تعریف میکنند تنها چیزی که فهمیدم اینه که خروجی اکتیوفانکشن میشه همون خروجی واقعی یا همون ground truth. ولی مطمئن نیستم اینجاش رو درست فهمیدم و اگه کسی از دوستان دقیقتر میدونست خوشحال میشم یاد بگیرم.
لینک مقاله: https://lnkd.in/eqsrUnJA
لینک گوگل بلاگ: https://lnkd.in/ephQyxEE
من بلد نبودم gif توضیح تصویری فرمورک رو بذارم تو پست. لینکش رو گذاشتم:
https://lnkd.in/eR83iPrn
source: https://www.linkedin.com/feed/update/urn:li:share:6960231926687227905?utm_source=linkedin_share&utm_medium=member_desktop_share&utm_content=post
PMLR
LocoProp: Enhancing BackProp via Local Loss Optimization
Second-order methods have shown state-of-the-art performance for optimizing deep neural networks. Nonetheless, their large memory requirement and high comput...
ML & AI resources
هر لایه یک لاسفانکشن! علمای گوگل برین اخیرا مقالهای منتشر کردن و بجای معرفی معماری و لاسفانکشن و تسک جدید نگاه جنرال تری داشتند و در اون یک فرمورک جدید برای آموزش شبکه های عصبی معرفی کردن که با این فرمورک پیشرفت قابل توجهی در عملیات Backpropagation بوجود…
This media is not supported in your browser
VIEW IN TELEGRAM
این لینک واقعن بخ درد بخوره دیتاست فارسی برا همهچی تو NLP داره
https://github.com/mhbashari/awesome-persian-nlp-ir/blob/master/sections/datasets.md
https://github.com/mhbashari/awesome-persian-nlp-ir/blob/master/sections/datasets.md
GitHub
awesome-persian-nlp-ir/sections/datasets.md at master · mhbashari/awesome-persian-nlp-ir
Curated List of Persian Natural Language Processing and Information Retrieval Tools and Resources - mhbashari/awesome-persian-nlp-ir
🔥1
Forwarded from AI with Papers - Artificial Intelligence & Deep Learning
This media is not supported in your browser
VIEW IN TELEGRAM
☀️LocoProp: Composition of Neural Layers☀️
👉Google AI unveils LocoProp: novel neural paradigm for modular composition of layers.
𝐇𝐢𝐠𝐡𝐥𝐢𝐠𝐡𝐭𝐬:
✅Backprop++ via Local Loss Optimization
✅Layer-based weight-reg, target output & loss
✅Multiple local updates via first-order optimizer
✅Superior performance and efficiency
More: https://bit.ly/3Q40YJn
👉Google AI unveils LocoProp: novel neural paradigm for modular composition of layers.
𝐇𝐢𝐠𝐡𝐥𝐢𝐠𝐡𝐭𝐬:
✅Backprop++ via Local Loss Optimization
✅Layer-based weight-reg, target output & loss
✅Multiple local updates via first-order optimizer
✅Superior performance and efficiency
More: https://bit.ly/3Q40YJn
🤔1
تعدادی از کورسای علم داده دانشگاه هاروارد که رایگان شدند:
Catalog of Courses | Harvard University
https://pll.harvard.edu/catalog?keywords=&subject%5B%5D=84&free%5B1%5D=1&max_price=&start_date_range%5Bmin%5D%5Bdate%5D=&start_date_range%5Bmax%5D%5Bdate%5D=
Catalog of Courses | Harvard University
https://pll.harvard.edu/catalog?keywords=&subject%5B%5D=84&free%5B1%5D=1&max_price=&start_date_range%5Bmin%5D%5Bdate%5D=&start_date_range%5Bmax%5D%5Bdate%5D=
Harvard University
Catalog of Courses
Browse the latest courses from Harvard University
https://pythonspeed.com/articles/docker-cache-pip-downloads/
Faster Docker deployment with PIP-Caching
Faster Docker deployment with PIP-Caching
Python⇒Speed
Speed up pip downloads in Docker with BuildKit’s new caching
Every time you change your Python pip requirements and rebuild your Docker image, you’re going to redownload all your packages. You can fix this with BuildKit.
🤩1
👍1
Forwarded from PyTorch Howsam (Howsam Support)
🔥 خبر داغ 🔥
حتما Andrej Karpathy رو میشناسید! همونی که هد هوش مصنوعی تسلا بود. یک ویدئوی آموزشی توی یوتوب گذاشته و در 5 روز 70 هزار بازدید داشته!
موضوع ویدئو هم آموزشی هست. ساخت میکروگراد! میکروگراد یک کتابخونه کوچیک هست که شامل شبکه عصبی و پروسه پس انتشارش میشه. میکروگراد رو قبلا نوشته بود، اما الان ویدئوی آموزشیش رو تهیه کرده...
هدفش از تهیه این ویدئوی آموزشی، آشنایی افراد با مطالب پایه در شبکه عصبی مثل ساخت یک شبکه عصبی، آموزش شبکه، تسلط بر پس انتشار خطا و البته اندکی آشنایی با بکاند فریمورکهای دیپ لرنینگ مثل پایتورچ هست.
https://www.youtube.com/watch?v=VMj-3S1tku0&t=2563s
@pytorch_howsam
حتما Andrej Karpathy رو میشناسید! همونی که هد هوش مصنوعی تسلا بود. یک ویدئوی آموزشی توی یوتوب گذاشته و در 5 روز 70 هزار بازدید داشته!
موضوع ویدئو هم آموزشی هست. ساخت میکروگراد! میکروگراد یک کتابخونه کوچیک هست که شامل شبکه عصبی و پروسه پس انتشارش میشه. میکروگراد رو قبلا نوشته بود، اما الان ویدئوی آموزشیش رو تهیه کرده...
هدفش از تهیه این ویدئوی آموزشی، آشنایی افراد با مطالب پایه در شبکه عصبی مثل ساخت یک شبکه عصبی، آموزش شبکه، تسلط بر پس انتشار خطا و البته اندکی آشنایی با بکاند فریمورکهای دیپ لرنینگ مثل پایتورچ هست.
https://www.youtube.com/watch?v=VMj-3S1tku0&t=2563s
@pytorch_howsam
🔥1
#Event
بچه ها
همین طور که خودتونم احتمالا میدونین، قراره از فردا رویداد cws از طرف دانشکده علوم کامپیوتر برگزار بشه. نکته جالب توجهش اینه که یکی از موضوعاتی که قراره تو این وبینار بررسی بشه، بحث داغ ml و ai. اگه علاقه مندین که تو این رویداد شرکت کنین، میتونین موضوعات سخنرانی ها رو دنبال کنین. اگه اشتباه نکنم بخش ai میشه تاریخ ۲۶ و ۲۷ آگوست که جمعه و شنبه پیش رو میشه.
اگه تا الان ثبت نام نکردین، امروز روز آخر ثبت نامه. بهتون پیشنهاد میکنم حتما به این سایت سر بزنین:
https://cwsaut.ir/
لینک کانال تلگرام:
@cws_aut
بچه ها
همین طور که خودتونم احتمالا میدونین، قراره از فردا رویداد cws از طرف دانشکده علوم کامپیوتر برگزار بشه. نکته جالب توجهش اینه که یکی از موضوعاتی که قراره تو این وبینار بررسی بشه، بحث داغ ml و ai. اگه علاقه مندین که تو این رویداد شرکت کنین، میتونین موضوعات سخنرانی ها رو دنبال کنین. اگه اشتباه نکنم بخش ai میشه تاریخ ۲۶ و ۲۷ آگوست که جمعه و شنبه پیش رو میشه.
اگه تا الان ثبت نام نکردین، امروز روز آخر ثبت نامه. بهتون پیشنهاد میکنم حتما به این سایت سر بزنین:
https://cwsaut.ir/
لینک کانال تلگرام:
@cws_aut
🔥2
https://www.tensorflow.org/resources/learn-ml?gclid=CjwKCAjwp7eUBhBeEiwAZbHwkQk0mmWUZS-SKNXGZgNohIUUbdSthJa02NHWOijUyq6wG790xBaQkRoCUJgQAvD_BwE
مسیر پیشنهادی google برای تنسورفلو و ماشین لرنینگ
بین کتابهایی که پیشنهاد کرده کتاب Hands-on ML بنظر من خیلی کتاب خوبی هستش که از وبسایتهایی که هستن هم میشه رایگان نسخه دوم و سومش رو دانلود کرد(نسخه سوم هنوز فکر کنم نهایی نشده) توی کتابش از تسکهایی مثل classification, clusterring تا تسکهای مد روز مثل GAN, Deep RL رو پوشش داده و جالبه.
مسیر پیشنهادی google برای تنسورفلو و ماشین لرنینگ
بین کتابهایی که پیشنهاد کرده کتاب Hands-on ML بنظر من خیلی کتاب خوبی هستش که از وبسایتهایی که هستن هم میشه رایگان نسخه دوم و سومش رو دانلود کرد(نسخه سوم هنوز فکر کنم نهایی نشده) توی کتابش از تسکهایی مثل classification, clusterring تا تسکهای مد روز مثل GAN, Deep RL رو پوشش داده و جالبه.
TensorFlow
Machine learning education | TensorFlow
Start your TensorFlow training by building a foundation in four learning areas: coding, math, ML theory, and how to build an ML project from start to finish.
🔥4
یه بلاگ پر از محتوای حق
از مباحث پایه شبکه های عصبی گرفته تا مباحث پیشرفته تر نظری رو میتونین توش پیدا کنین. احتمال زیاد به کارتون میاد.
https://colah.github.io/
از مباحث پایه شبکه های عصبی گرفته تا مباحث پیشرفته تر نظری رو میتونین توش پیدا کنین. احتمال زیاد به کارتون میاد.
https://colah.github.io/
🔥3
Forwarded from 🐍 Python & Raspberry 🐍 (DailyProjects)
✔️ سوال: best practiceها و ابزارات مورد نیاز برای توسعه یه بسته، لایبرری یا نرمافزار پایتونی چیه؟
ابزارهای زیادی واسه اینکارا وجود داره که بر اساس تجربه و چیزی که از 80 درصد پروژه های معروف و بزرگ دیدم، سعی میکنم بهتریناش رو معرفی کنم:
Dependency Management System
برای مدیریت وابستگی های یک پروژه بزرگ (یا نسبتا بزرگ)، پیشنهاد میکنم از
مواردی از جمله
1. آشنایی و شروع به کار با Poetry
https://realpython.com/dependency-management-python-poetry/
2. جزیات عمیق درباره هر قابلیت و نحوه استفاده
https://python-poetry.org/docs
3. نحوه انتشار یک package پایتونی در PyPI به کمک Poetry
https://johnfraney.ca/blog/create-publish-python-package-poetry/
Linting & Type Checking
برای
اگر عادت دارید کدهای خودتون رو
1. داکیومنت Flake8
https://flake8.pycqa.org/en/latest/user/invocation.html
2. داکیومنت MyPy
https://mypy.readthedocs.io/en/stable/getting_started.html
Code Formatting
برای مرتب و
1. داکیومنت isort
https://pycqa.github.io/isort/
2. داکیومنت Black
https://black.readthedocs.io/en/stable/getting_started.html
3. یک ویدیو از PyCon 2019 درباره Black
https://youtu.be/esZLCuWs_2Y
* این ابزارها همگی داکیومنت ساده و خوانایی دارن و به نظرم بهترین منبع همین داکیومنتهاشون هست.
Testing
دو کتابخونه
1. یک مقاله جامع درباره تست نویسی، انواع آن و روشهای مورد استفاده در پایتون
https://realpython.com/python-testing/
2. ویدیو درباره unittest در پایتون
https://m.youtube.com/watch?v=FxSsnHeWQBY
https://www.youtube.com/watch?v=6tNS--WetLI
* همچنین اگر از
وبسایت pre commit:
https://pre-commit.com/
✒️ @Pygrammer
〰️〰️〰️〰️〰️〰️〰️
©️@raspberry_python
ابزارهای زیادی واسه اینکارا وجود داره که بر اساس تجربه و چیزی که از 80 درصد پروژه های معروف و بزرگ دیدم، سعی میکنم بهتریناش رو معرفی کنم:
Dependency Management System
برای مدیریت وابستگی های یک پروژه بزرگ (یا نسبتا بزرگ)، پیشنهاد میکنم از
Poetry
استفاده کنید، چون ابزار بسیار قدرتمندی هست، کار باهاش بسیار راحته (خیلی شبیه به Cargo
در زبان Rust
هست)، کامیونیتی بزرگی داره، به راحتی محیط dev
و prod
رو میتونید مدیریت کنید، مستندات بسیار خوب و روانی داره، در سریع ترین زمان ممکن میتونید پروژه رو در PyPI
منتشر کنید و همچنین پروژههای معروفی از جمله Rich (کتابخونهای که خود pip
هم ازش برای رنگی کردن progress bar
ها استفاده میکنه) از اون استفاده میکنن، که همین نشون میده چقدر کاربردی هست.مواردی از جمله
build
و run
هم کاملا با Poetry
انجام میشن.-
منابع آموزشی:1. آشنایی و شروع به کار با Poetry
https://realpython.com/dependency-management-python-poetry/
2. جزیات عمیق درباره هر قابلیت و نحوه استفاده
https://python-poetry.org/docs
3. نحوه انتشار یک package پایتونی در PyPI به کمک Poetry
https://johnfraney.ca/blog/create-publish-python-package-poetry/
Linting & Type Checking
برای
Linting
ابزارهای flake8
و pylint
از معروف ترینها هستن، هر یک رو میتونید شدت سخت گیریشون رو تنظیم کنید، به راحتی همراه با Poetry
تنظیماتشون در یک فایل قرار میگیره و نیاز به نگه داشتن فایلهای متفاوت برای هر کدوم ندارید. به نظرم خود flake8
به تنهایی نیازتون رو برطرف میکنه. اگر از PyCharm
استفاده کنید یک Linter
به صورت Built-in
در اختیارتون میذاره که خوبه و کارتون رو راه میندازه.اگر عادت دارید کدهای خودتون رو
Annotate
کنید و زیاد از Type Hint
ها استفاده میکنید، استفاده از MyPy
به عنوان یک static type checker
به شما کمک میکنه ایرادات موجود در کلاس ها، توابع و ... رو پیدا کنید و بتونید type
های دقیق تری استفاده کنید. همچنین ابزار Pyright
که توسط مایکروسافت توسعه داده میشه، در VSCode
به صورت integrated
با افزونه Pylance
کار میکنه و اگر از VSCode
استفاده میکنید پیشنهاد میکنم حتما افزونه Pylance
رو نصب کنید. PyCharm
هم یک Type Checker
داره ولی هنوز توانمندی Pylance
و MyPy
رو نداره.-
منابع آموزشی:1. داکیومنت Flake8
https://flake8.pycqa.org/en/latest/user/invocation.html
2. داکیومنت MyPy
https://mypy.readthedocs.io/en/stable/getting_started.html
Code Formatting
برای مرتب و
organize
کردن import
ها از isort
استفاده کنید، هم به صورت CLI
در دسترس هست و هم یک API
داره که میتونید در کد پایتون استفاده کنید. یک code formatter
بسیار معروف که در اکثر پروژهها استفاده میشه Black
هست، زیر نظر PSF
(یا Python Software Foundation
) و برنامه نویسای با تجربه و کار کشته ای همچون آقای Łukasz Langa
(ریلیس منیجر پایتون 3.9) توسعه داده میشه، با دیگر ابزار ها مثل isort
سازگار هست، با PEP8
سازگاره و کلی قابلیت مزیت دیگه داره که حقیقتا اینجا جا نمیشن :)-
منابع آموزشی:1. داکیومنت isort
https://pycqa.github.io/isort/
2. داکیومنت Black
https://black.readthedocs.io/en/stable/getting_started.html
3. یک ویدیو از PyCon 2019 درباره Black
https://youtu.be/esZLCuWs_2Y
* این ابزارها همگی داکیومنت ساده و خوانایی دارن و به نظرم بهترین منبع همین داکیومنتهاشون هست.
Testing
دو کتابخونه
Pytest
و unittest
(در stdlib
موجود هست) در تست نویسی پروژه ها استفاده میشن، برای تست کردن پروژه در environment
های متفاوت از ابزار tox
استفاده میشه و باهاش میتونید در نسخه های متفاوتی از پایتون کدتون رو تست کنید.-
منابع آموزشی:1. یک مقاله جامع درباره تست نویسی، انواع آن و روشهای مورد استفاده در پایتون
https://realpython.com/python-testing/
2. ویدیو درباره unittest در پایتون
-
آقای ned batchelder:https://m.youtube.com/watch?v=FxSsnHeWQBY
-
آقای Corey Schafer:https://www.youtube.com/watch?v=6tNS--WetLI
* همچنین اگر از
Git
در پروژه خودتون استفاده میکنید، پیشنهاد میکنم از pre-commit
حتما استفاده کنید و تمام این ابزارهای گفته شده رو automate
کنید تا در هربار commit
کردن، قبل از اینکه commit
انجام بشه، این ابزارها روی کدتون اجرا بشن و اگر اشکالی در کدتون وجود داره پیدا بشه و اون رو برطرف کنید و دوباره commit کنید.وبسایت pre commit:
https://pre-commit.com/
✒️ @Pygrammer
〰️〰️〰️〰️〰️〰️〰️
©️@raspberry_python