آموزش PyTorch کتابخانه محبوب هوش مصنوعی!
آشنایی کامل با کتابخانه PyTorch: ابزاری قدرتمند برای یادگیری عمیق کافهتدریس
این عملیات هنگامی که با اعداد بزرگ برای یادگیری عمیق انجام شود ، تفاوت زیادی در سرعت ایجاد می کند. PyTorch از تنسور ( Tensor ) به عنوان ساختار داده اصلی خود ، مشابه آرایه Numpy استفاده می کند. با توجه به نمودار، به وضوح مشخص است که این کتابخانه ارزش یادگیری زیادی دارد. در این مطلب، برخی از مولفهها و آنچه برای آغاز کار با این چارچوب مورد نیاز است بیان شدهاند. سپس، چگونگی انجام «بارگذارهای داده» (Data Loaders) مورد بررسی قرار میگیرد.
حالا بریم سراغ یه مثال جذابتر؛ ترجمه ماشینی با استفاده از مدل Seq2Seq. این مدل برای ترجمه متون از یه زبان به زبان دیگه استفاده میشه. مدل ما شامل چند لایه کانولوشن (Conv) و لایههای کامل متصل (Fully Connected) هست. برای مثال، دو تانسور ساخته می شود، یکی با requires_grad تنظیم شده به صورت True، و دیگری با عنوان False. سپس، میتوان از این دو تانسور برای انجام عملیات «sum» و «addition» استفاده کرد.
برای ردگیری همه عملیات در آن، باید .requires_grad را روی True تنظیم کرد. مجموعه آموزشی پی استور، یکی از قدیمیترین وب سایتهای آموزشی ایران است که بیش از یک دهه از فعالیت آن سپری می شود. فعالیت این مجموعه، در قالب ارائه دورههای آموزشی، فیلم آموزش، سورس کد و پاورپوینت آماده به عنوان ابزارهای آموزشی و کمک آموزشی میباشد. پس از دانلود فایل نصبی، بر روی آن دوبار کلیک کنید تا نصب آغاز شود. در صفحه زیر از آموزش نصب PyTorch پایتورچ، مهمترین گزینهای که باید توجه کنید، تیک زدن گزینه Add Python to PATH است (بسیار مهم).
در ادامه، یک برنامه یادگیری احتمالی برای کسانی که به تازگی شروع برنامه نویسی با پایتون را آغاز کردهاند آورده شده است. به یاد داشته باشید، مدت زمان و موضوعات یادگیری به عوامل مختلفی بستگی دارد. ما میخواهیم این برنامه تا حد امکان عملی باشد، به همین دلیل پروژههایی را پیشنهاد کردهایم که میتوانید با پیشرفت خود روی آنها کار کنید. با نوشتن یک برنامه ساده پایتون مانند اسکریپت کلاسیک "Hello, World!" شروع کنید. این فرآیند به شما کمک میکند تا نحوه نوشتن و ساختار کد پایتون را درک کنید.
برای بهینهسازی مدلهات، میتونی از بهینهسازهای مختلفی مثل SGD و Adam استفاده کنی. این بهینهسازها بهت کمک میکنن تا مدلهات سریعتر و دقیقتر آموزش ببینی. اگر طبق تصویر زیر مشخصات کتابخانه torch و محل نصب آن نمایش داده شود، پس نصب PyTorch با موفقیت انجام شده است. همچنین با خدمات متفاوت نسبت به سایر آکادمی ها جزو منحصر به فرد ترین آکادمی برنامه نویسی در ایران و جهان می باشیم. در آخرین قسمت از این دوره با الگوریتم ناحیه بندی نمونه ( Instance Segmentation ) آشنا می شویم و از مدل Mask R-CNN برای ناحیه بندی تصاویر مختلف استفاده می کنیم.
همانطور که در آموزش نصب PyTorch پایتورچ دانستیم، به دو روش میتوان پایتورچ را نصب کرد. اما سوال اینجاست، چرا باید از Anaconda استفاده کنیم؟ آناکوندا نصب PyTorch و سایر کتابخانههای وابسته را سادهتر میکند. با استفاده از conda، میتوانید نسخههای خاصی از PyTorch (مانند نسخههایی که از CUDA پشتیبانی میکنند) را بهسادگی نصب کنید. همچنین با استفاده از محیطهای مجازی، میتوانید PyTorch را در کنار سایر ابزارها و کتابخانهها بدون تداخل مدیریت کنید. با استفاده از گرافهای پویا، میتوان هر مرحله از عملیات را به دقت بررسی کرد و خطاها را به راحتی پیدا و برطرف کرد. این کار مشابه برنامهنویسی معمولی در پایتون است و به همین دلیل برای توسعهدهندگان پایتون بسیار ساده و آشنا است.
علاوه بر این، تیم توسعهدهنده PyTorch در فیسبوک نیز به طور مداوم به بهبود و ارتقای این فریمورک میپردازد و به سوالات و مشکلات کاربران پاسخ میدهد. در گرافهای پویا، محاسبات فقط در صورت نیاز انجام میشوند و حافظه به طور کارآمدتری مدیریت میشود، زیرا فقط دادهها و عملیاتهای مورد نیاز در حافظه نگهداری میشوند. در ماه می ۲۰۱۸، فیسبوک اعلام کرد که PyTorch و Caffe2 را ترکیب کرده و یک فریمورک یکپارچه به نام PyTorch 1.0 را ایجاد خواهد کرد. این ترکیب باعث شد تا کاربران بتوانند از مزایای هر دو فریمورک در یک ابزار واحد بهرهمند شوند. PyTorch 1.0 شامل قابلیتهایی مانند کارایی بالاتر، سازگاری بهتر با سایر ابزارها و پشتیبانی از استقرار مدلها در محیطهای تولیدی بود. پیشنهاد میکنیم برای آشنایی بیشتر با این حوزه، مقاله یادگیری عمیق چیست؟ را مطالعه نمایید.
در آموزش نصب PyTorch پایتورچ نیز از pip برای نصب این کتابخانه استفاده میشود، زیرا به شما امکان میدهد نسخه مناسب PyTorch را به سرعت و بهراحتی دانلود و نصب کنید. با استفاده از pip میتوانید به تمامی کتابخانههای موردنیاز پروژههای خود دسترسی پیدا کنید. در ادامه، به بررسی ویژگیهای کلیدی PyTorch پرداختیم که آن را به ابزاری مناسب برای توسعه مدلهای پیچیده تبدیل میکند. سپس مزایا و معایب این کتابخانه را بررسی کردیم تا شما بتوانید با دیدی بازتر تصمیم بگیرید که آیا PyTorch برای پروژههای شما مناسب است یا خیر. کتابخانه PyTorch با داشتن مجموعهای از مزایا، به عنوان یک ابزار قدرتمند در زمینه یادگیری عمیق شناخته میشود.
پس از بارگذاری دیتاست،پایتورچ از کلاس DataLoader برای پیمایش دیتاست بارگذاری شده در طول آموزش و ارزیابی مدل شما فراهم می کند. تمام مثال های این برنامه آموزشی به خوبی روی یک CPU مدرن کار خواهند کرد. اگر می خواهید پایتورچ را برای GPU خود پیکربندی کنید، می توانید پس از تکمیل این آموزش این کار را انجام دهید. دقت کنید، اگر یک شبکه با 10 لایه هم داشته باشید، به راحتی در بخش init، ابتدا 10 لایه را بسازید. در زیر من یک تنسور با مقدار 1.0 و گرادیان روشن تعریف کردهام. بله، PyTorch به خاطر سادگی و خوانایی کدهاش، برای مبتدیها مناسبه و یادگیری و استفاده ازش رو آسون میکنه.
جامعه PyTorch به صورت فعال در حال توسعه ابزارها و افزونههای جدیدی است که به کاربران امکان میدهد مدلهای پیچیدهتر و کارآمدتری ایجاد کنند. علاوه بر این، معرفی کتابخانه PyTorch به حوزههای جدید مانند یادگیری عمیق بر روی دستگاههای موبایل و اینترنت اشیا، نشاندهنده تلاش برای گسترش دامنه کاربردهای آن در آینده است. این کتابخانه برای محاسبات ماتریسی و برداری بهینه شده است و از پردازندههای گرافیکی (GPU) برای افزایش سرعت محاسبات استفاده میکند. کتابخانه PyTorch از تکنولوژی CUDA برای بهرهگیری از قدرت پردازشی بالای GPUها استفاده میکند که باعث میشود فرآیند آموزش مدلهای بزرگ و پیچیده با سرعت بسیار بیشتری انجام شود. این ویژگی به خصوص برای آموزش مدلهای یادگیری عمیق که نیاز به محاسبات سنگین دارند بسیار حیاتی است. این فریمورک با استقبال گستردهای از سوی جامعه یادگیری عمیق مواجه شد.
با توجه به تاریخچه توسعه، نسخههای مختلف و همکاریهای گسترده با سایر سازمانها، کتابخانه PyTorch توانسته است جایگاه ویژهای در جامعه تحقیقاتی و صنعتی پیدا کند. پایتورچ در بستر خود، یک کتابخانه ریاضی محور است که به شما امکان میدهد به طور کارآمد محاسبات را روی مدلهای مبتنی بر گراف انجام داده و به طور خودکار آنها را تفکیک کنید. تصور کنید که چند سال پیش، زمانی که یادگیری عمیق تازه شروع به رشد کرده بود، محققان و برنامهنویسان با چه چالشهایی مواجه بودند. در آن زمان، ابزارها و کتابخانههای زیادی وجود نداشتند که بتوانند به سادگی و کارآمدی که امروز میشناسیم، مدلهای یادگیری عمیق را پیادهسازی کنند. ساختن و آموزش مدلهای پیچیده به معنای واقعی کلمه، زمانبر و پرزحمت بود. اما از این چالشها، نیازی به وجود آمد که مسیر پژوهش و توسعه را تغییر داد.
ما بارها اشاره کردیم که آرایه های PyTorch Tensors و NumPy کاملاً شبیه به هم هستند. این سوال زمانی ایجاد می شود که امکان تبدیل یک ساختار داده به ساختار دیگر وجود داشته باشد. بعد از اینکه مدل آموزش داده شد ، می توان از آن برای پیش بینی خروجی موارد آزمایشی یا حتی مجموعه داده های جدید استفاده کرد. ارائه یک تصویر مانند WxHx3 که در آن ۳ برای RGB است نیز، یک تانسور محسوب میشود. در هسته کتابخانه پایتورچ، برای ساخت عملیات روی تانسورها و محاسبه گرادیان روی این عملیات (یعنی عملیات تانسور) تلاش میشود.
همچنین، جامعهی پژوهشگران و برنامهنویسان نمیتوانست به سرعت و با انعطافپذیری بالایی مدلهای جدید را توسعه دهد و آزمایش کند. بسیاری از پروژههای نوآورانه، مانند تشخیص تصویر، ترجمهی ماشینی، و بازیهای هوش مصنوعی که امروز میشناسیم، شاید هنوز در مرحلهی توسعه اولیه بودند. کار با دادههای بزرگ نیاز به بارگذاری یکباره کل داده در حافظه را دارد. پایتورچ دو تا ماژول به اسم Datasets و DataLoader برای موازی سازی بارگذاری داده با رویکرد batching خودکار و برای خوانا و مدوله بودن کدها ارائه میدهد. Datasets و DataLoader به کاربران این امکان را می دهند که از داده های خود و همچنین مجموعه داده های از پیش بارگذاری شده استفاده کنند. DataLoader یک کلاس داخلی است که روشی کارآمد و انعطاف پذیر برای بارگذاری داده ها در یک مدل برای آموزش ارائه می دهد.
Keras یه کتابخونه سطح بالای یادگیری عمیقه که برای ساخت و آموزش مدلها به صورت ساده و سریع طراحی شده. در واقع Keras به عنوان یه واسط برای کتابخونههای دیگه مثل TensorFlow و Theano عمل میکنه. سپس نیاز به تعریف forward است که تانسورهای ورودی را دریافت و تانسورهای خروجی را تولید میکنند. چگونگی پیادهسازی یک شبکه دو لایه با استفاده nn.Module در زیر نشان داده شده است. Torch.autograd، کتابخانهای است که از مشتق خودکار در پایتورچ استفاده میکند.
PyCharm یکی از قدرتمندترین و حرفهایترین IDEها برای توسعه پایتون است که توسط شرکت JetBrains ارائه شده است. این IDE با امکاناتی نظیر تکمیل خودکار کد، دیباگینگ پیشرفته، مدیریت محیطهای مجازی (مانند Anaconda)، و ابزارهای داخلی برای تحلیل و نمایش دادهها، کار با PyTorch را آسان میکند. نسخه حرفهای PyCharm پولی است اما نسخه رایگان (Community Edition) برای پروژههای کوچک و متوسط کاملاً مناسب است. این IDE برای توسعهدهندگان حرفهای و افرادی که در پروژههای بزرگ کار میکنند، گزینهای ایدهآل است. به عبارت دیگر، آناکوندا بستری را فراهم میکند که شامل پایتون، ابزارهای مدیریت محیطها و بستهها، و ابزارهای تعاملی (مانند Jupyter Notebook و Spyder) است.
یادگیری پایتون فرصتهای شغلی زیادی را به روی شما باز میکند و نتایج شغلی بهتری را تضمین میکند. این هم یکی دیگر از دلایل برنامه نویسان تازه کار برای شروع برنامه نویسی با پایتون است. به عنوان یکی از محبوبترین زبانهای برنامهنویسی، بسیاری از افراد علاقهمند به شروع برنامه نویسی با پایتون هستند. وقتی معماری شبکه ایجاد شد و داده ها برای تغذیه شبکه آماده شدند ، ما به تکنیک هایی برای به روزرسانی وزن ها و بایاس ها نیاز داریم تا شبکه شروع به یادگیری کند. به همین ترتیب ، برای مشتق گیری خودکار که در هنگام بازگشت به عقب لازم است ، ما از ماژول torch.autograd استفاده می کنیم. به همین ترتیب ، برای مشتق گیری خودکار که در هنگام بازگشت به عقب لازم است ، ما از ماژول torch.autograd استفاده می کنیم.
سپس، با استفاده از دستور to(device) که در آن device معمولاً cuda میباشد، تنسورها و مدلهای خود را به دستگاه GPU انتقال دهید. شروع برنامه نویسی با پایتون یک سفر پربار است که میتواند درهای شغلی بسیاری را به روی شما باز کند. این راهنما نقشه راهی را برای شروع یادگیری پایتون به شما ارائه کرده است، از فهم اصول تا تسلط بر مفاهیم پیشرفته و کار بر روی پروژههای واقعی. به خاطر داشته باشید، کلید یادگیری پایتون (یا هر زبان برنامهنویسی دیگر) تمرین و مداومت است. اکنون نیاز به ساخت چیزی است که امکان یادگیری را برای شبکه فراهم میکند. در PyTorch، این کار با استفاده از یک بهینهساز (optimizer) انجام میشود.
کتابخانه PyTorch با ارائه امکانات گسترده و انعطافپذیری بالا، به یکی از محبوبترین و پرکاربردترین ابزارها در زمینه یادگیری عمیق تبدیل شده است. یکی از ویژگیهای برجسته PyTorch استفاده از گرافهای محاسباتی پویاست که توسعه و پیادهسازی مدلهای یادگیری عمیق را بسیار سادهتر و کارآمدتر میکند. همچنین، این فریمورک با بهرهگیری از پردازندههای گرافیکی (GPU) و تکنولوژی CUDA، امکان آموزش مدلهای بزرگ و پیچیده را با سرعت بالا فراهم میسازد. کتابخانه PyTorch امکان پیادهسازی طیف گستردهای از مدلهای یادگیری عمیق را فراهم میکند. به عنوان مثال، میتوانید یک شبکه عصبی پیچشی (CNN) برای تشخیص تصویر بسازید یا یک مدل پردازش زبان طبیعی برای ترجمه متون ایجاد کنید.
بهگونهای که شرکتهای بزرگی همچون مایکروسافت، OpenAI، تسلا، اوبر و شرکتهای بزرگ دیگر اعلام کردند که تحقیقات خود را با پایتورچ پیش خواهند برد. تنسور همان نامپای (Numpy) است که برای پایتورچ طراحی شده است. به همین خاطر نیاز است که در کار با کتابخانه های یادگیری عمیق همانند پایتورچ به این اصل مهم توجه داشته باشیم. بنابراین ورودی و خروجی مدل های پایتورچ تنسور است، اما به راحتی میتوانیم آن را به فرمت های دیگری تبدیل کنیم. کلاس nn.Module تو PyTorch بهت اجازه میده تا مدلهای یادگیری عمیق رو به راحتی تعریف کنی. این کلاس پایهای برای ساختن همهی شبکههای عصبی تو PyTorch هست.
با این حال، بسته به نیازهای خاص پروژهت، ممکنه معایبی هم داشته باشه که باید در نظر بگیری. اگه دنبال یه ابزار ساده و منعطف برای تحقیق و توسعه هستی، PyTorch انتخاب عالیه. ولی اگه نیاز به ابزارهای پیشرفته برای تولید داری، بهتره گزینههای دیگه رو هم بررسی کنی. در این بخش به بررسی چند مورد از معایب این ابزار میپردازیم. مدل شباهت زیادی به آنچه در بالا ارائه شد دارد، اما تفاوت آنها در این است که در اینجا از torch.nn.Module برای ساخت شبکه عصبی استفاده شده است. دیگر تفاوت آنها، استفاده از «بهینهساز گرادیان کاهشی تصادفی» (stochastic gradient descent optimizer) به جای Adam است.
در این روش، باید از راهکاری برای دریافت اندازه کل مجموعه داده استفاده شود. برای مثال، اگر کاربر یک محموعه از تصاویر را در برخی از دایرکتوریها دارد، باید راهی برای محاسبه کل تعداد فایلهایی که دادهها را میسازند انتخاب و پیادهسازی شود. در مثال مطرح شده در بالا، اندازه دیتافریم به سادگی دریافت شده است. اگرچه، این کار میتواند بسته به اینکه دادهها چگونه ذخیره شدهاند به امری پیچیده مبدل شود. در ادامه، میتوانید با مزایا و محدودیتهای الگوریتمهای مختلف آشنا شوید و برای آشنایی با مراحل یک پروژه یادگیری عمیق، میتوانید آموزشهای زیادی را مطالعه کنید. سینتکس زبان پایتون میتواند شهودی باشد اگر با آن آشنا باشید.
پیش از معرفی کتابخانه PyTorch، فیسبوک از یک فریمورک به نام Torch استفاده میکرد. Torch یک فریمورک یادگیری عمیق بود که به زبان Lua نوشته شده بود و توسط محققان و توسعهدهندگان در پروژههای مختلف استفاده میشد. با وجود قدرت و انعطافپذیری Torch، استفاده از آن برای بسیاری از کاربران دشوار بود زیرا Lua زبان برنامهنویسی محبوبی نبود. برای شروع برنامه نویسی با پایتون باید بدانید که منابع آنلاین میتوانند پایه محکمی برای مهارتهای شما ایجاد کنند و از نظر طول دورهها متنوع هستند. علاوه بر محبوبیت گسترده، پایتون کاربردهای متنوعی در صنایع مختلف، از تکنولوژی گرفته تا مالی، بهداشت و موارد دیگر دارد.
برای این کار از مجموعه داده معروف MNIST استفاده میکنیم که شامل تصاویر دستنوشته اعداد از 0 تا 9 هست. هدف ما اینه که یه مدل بسازیم که بتونه این اعداد رو تشخیص بده. اولین آرگومانی که این بهینهساز دریافت میکند تانسورهایی هستند که باید به روز رسانی شوند. در مسیر رو به جلو، y پیشبینی شده با پاس دادن x به مدل صورت میپذیرد. پیش از اجرای مسیر رو به عقب، همه گرادیانها برای متغیرهایی که با استفاده از بهینهساز به روز رسانی میشوند باید صفر شود.
پایتورچ (PyTorch)، اولین کتابخانه متنباز یادگیری عمیق است که توسط فیسبوک توسعه و پشتیبانی میشود. در فرآیند بالا، مراحل 3 تا 6 باید آنقدر تکرار شود که اتلاف حداقل شود. امیدوارم این مقاله تونسته باشه تو رو با PyTorch و قابلیتهاش آشنا کنه و بهت انگیزه بده تا پروژههای یادگیری عمیق خودتو با استفاده از این کتابخونه شروع کنی. با PyTorch میتونی پروژههای مختلفی مثل تشخیص تصویر، ترجمه ماشینی، تحلیل دادههای صوتی و متنی، و خیلی پروژههای دیگه یادگیری عمیق رو انجام بدی. پی استور با شعار «پیشرو و استوار در مسیر دانش» و با همکاری با افراد و اشخاص برجسته در زمینههای علمی گوناگون برای اعتلای امر خطیر آموزش تلاش میکند.
شکل زیر یک گردش کار معمولی همراه با ماژول های مهم مرتبط با هر مرحله را توصیف می کند. برای دادن ایده اساسی پیرامون چگونگی استفاده از این موارد، در ادامه یک مثال از پیادهسازی شبکهای شامل ۳ لایه خطی ترکیب شده با دو لایه RELU ارائه شده است. توضیح خاصی ندارد، یک لایه Linear ساختهام و در بخش forward به آن ورودی میدهم. اما نسبت به چه مشتق بگیرد؟ ببینید، از نظر backward فرقی بین یک عدد رندوم x با عددی ثابت مانند 2 وجود ندارد. باید با روشی به backward بفهمانیم که این عدد ثابت نیست و یک پارامتر هست. برای این کار کافی است از ویژگی requires_grad استفاده کنید.
اگر در هنگام وارد کردن دستور import torch خطا دریافت کردید، احتمالاً نصب PyTorch به درستی انجام نشده است. پس از انتخاب گزینه مدنظر، کد موجود در قسمت Run this Command را کپی کنید و در CMD وارد نمایید. در نهایت با دستور قبل میتوانید از نصب بودن pip اطمینان حاصل کنید. مجموعه کامل کدهای بالا را میتوانید در این ریپازیتوری از گیتهاب مشاهده نمایید. در این قسمت ابتدا با مفهوم ناحیه بندی معنایی ( Semantic Segmentation ) آشنا شده و کاربرد های آن را می آموزیم.
آموزش پایتون برای مبتدیان ما، شما را با این مبانی آشنا خواهد کرد. اولین قدم این است که انگیزههای خود را برای یادگیری پایتون مشخص کنید. بنابراین، درک دلیل شما برای یادگیری پایتون به شما کمک میکند تا یک برنامه یادگیری شخصیسازیشده ایجاد کنید. PyTorch از تنسور ( Tensor ) به عنوان ساختار داده اصلی خود ، مشابه آرایه Numpy استفاده می کند. ممکن است در مورد این انتخاب خاص از ساختار داده ، تعجب کنید. پاسخ آن در این واقعیت نهفته است که با نرم افزار و سخت افزار مناسب ، تنسورها به عملیات مختلف ریاضی سرعت می بخشند.
این کار همچنین به شما نشان می دهد که چگونه یک اسکریپت پایتون را از خط فرمان اجرا کنید. پس از نصب پایتورچ، لازم است تایید کنید که کتابخانه با موفقیت نصب شده است و می توانید استفاده از آن را آغاز کنید. پس یک ورودی تصادفی x میسازم و به مدل بالا میدهم تا خروجی را مشاهده کنم. یعنی گرادیان اولین بار هنوز پاک نشده و بعد که گرادیان دومین بار را گرفتم، با اولی جمع شد. مثلا برای بار سوم گرادیان بگیرم، مقدار برابر با 9 خواهد شد. به همین دلیل، از zero_grad استفاده میکنیم که گرادیانها را بعد از هربار آپدیت وزنها صفر یا ریست کند.
PyTorch یک کتابخانه مبتنی بر پایتون است که ساخت مدل های یادگیری عمیق و استفاده از آن ها در برنامه های مختلف را تسهیل می کند. اما در واقع ، چیزی فراتر از یک کتابخانه یادگیری عمیق است. PyTorch یک بسته محاسباتی علمی است (همانطور که در اسناد رسمی PyTorch آمده است). پایتورچ (PyTorch) یک کتابخانه یادگیری عمیق متنباز است که در اکتبر 2016 نسخه اولیه آن توسط فیسبوک منتشر شد. از همان ابتدا، پایتورچ به دلیل سادگی و راحتی، توجه بسیاری از محققان حوزه هوش مصنوعی را به خود جلب کرد. طی سالهای بعد، پایتورچ رفته رفته پیشرفت کرد و محبوبیت بسیار بالایی بدست آورد.
برنامه نویسی ذهن ناخودآگاه