رستگاری تنسورها با einops
آیا در کد زدن در یادگیری عمیق تنبلید؟ آیا در استفاده از متدهایی مثل reshape و transpose و repeat و reduce گرگیجه میگیرید؟ آیا کدهای یادگیری عمیقیتان بعد از نوشتن غیرقابل فهم میشوند؟ ما به شما کتابخانه einops را پیشنهاد میکنیم!
ماجرای این کتابخونه از نمادگذاری انیشتین آغاز میشه. انیشتین در سال ۱۹۱۶ این نمادگذاری رو برای راحتتر نشون دادن محاسبات تنسوری معرفی کرد و از اونجا که واقعا نسبت به فرمولنویسیهای قدیم سهولت و فهم بیشتری داشت، این نمادگذاری رایج شد. حالا با الهامگیری از همین نمادگذاری، کتابخونه einops برای سهولت در نوشتن عملیاتهای تنسوری ارائه شده. حالا با یک مثال کوتاه خودتون ببنید که چطوری با einops میشه کد خط اول ذیل رو خیلی راحت تر و قابل خوندن تر به صورت کد خط دوم نوشت.
y = x.transpose(0, 2, 3, 1)
y = einops.rearrange(x, 'b c h w -> b h w c')
این کد اومده تنسوری که ابعادش b c h w بوده (مثل بچ b از تصویرها که c کانال دارند و ابعاد هر تصویر هم h و w هستند) رو به b h w c تغییر داده، این کد رو اگه با پایتورچ خالص بخواهید بنویسید، اون کد خیلی زشت و ناخوانا میشه چون توش ابعاد رو با صفر و یک و ... باید مشخص کنید که اولا هم ریسک باگ زدن رو بالا میبره و بعدا که میخواید کدتون رو بخونید به توبه میفتید)
به طور خیلی اجمالی، کتابخونه einops سه متد پایه rearrange و repeat و reduce داره که باهاش میشه عملیاتهای تنسوری مختلف رو در جنبههای تغییر و تکرار و خردکردن ابعاد انجام داد. این کتابخونه رو از دست ندید اگر اهل خوندن کد هم باشید میبینید که بسیاری از دولوپرهای مطرح دیپ لرنینگی از این کتابخونه برای کدهاشون استفاده میکنند. نکته آخر هم این که این کتابخونه برای فریمورکهای مختلف نظیر پایتورچ و تنسورفلو و نامپای و جکس قابل استفاده است.
برای آشنایی بیشتر با einops میتونید لینکهای زیر رو بببنید:
لینک رپوی einops:
https://github.com/arogozhnikov/einops
لینکهای مفید برای آشنایی با einops:
https://cgarciae.github.io/einops/
https://openreview.net/pdf?id=oapKSVM2bcj
پ.ن.: هر چه قدر شما بیشتر شیر کردید انرژی بیشتری برای ادامه و درستکردن پستهای بهتر میگیریم. مرسی که تا همینجا هم خیلی بهمون لطف داشتید.
#tool
@nlp_stuff
Post #304
3.61K