شناسایی دست خط با رگرسیون لجستیک در پایتون – راهنمای کاربردی


در این مطلب، روش شناسایی دست خط با رگرسیون لجستیک در پایتون مورد بررسی قرار گرفته است. «رگرسیون لجستیک» (Logistic Regression) یکی از روشهای آماری متداول است که امکان پیشبینی یک خروجی دودویی را از یک مجموعه از متغیرهای مستقل فراهم میکند. خصوصیات مختلف رگرسیون لجستیک و پیادهسازی «پایتون» (Python Programming Language) آن، پیش از این در مطالب دیگری به طور کامل تشریح شد. در این مطلب، به چگونگی پیادهسازی الگوریتم رگرسیون لجستیک در پایتون و با استفاده از کتابخانه PyTorch پرداخته شده است. اکنون، چگونگی دستهبندی ارقام دستنویس در مجموعه داده MNIST با استفاده از الگوریتم رگرسیون لجستیک در کتابخانه Pythorch پایتون آموزش داده شده است. در واقع، در اینجا یک مسئله شناسایی دست خط بررسی و تحلیل شده است.
شناسایی دست خط با رگرسیون لجستیک در پایتون
در این راستا، ابتدا نیاز به نصب Pytorch است. سادهترین راه برای انجام این کار، استفاده از pip یا «کوندا» (Conda) است. کاربران باید برای نصب نسخه مفسر پایتون و مدیر بستهای که قصد استفاده از آن را دارند، به وبسایت پایتورچ [+] مراجعه کنند.
پس از نصب پایتورچ، بررسی روی کد انجام میشود. سه خط کدی که در ادامه آورده شده است، برای وارد کردن توابع و اشیای کتابخانهای مورد نیاز استفاده میشود.
در اینجا، ماژول torch.nn حاوی کد لازم برای مدل است، torchvision.datasets حاوی مجموعه داده MNIST است. این ماژول، حاوی کتابخانه ارقام دستنویس است که در اینجا مورد استفاده قرار گرفته است. ماژول torchvision.transforms حاوی متدهای متعددی برای تبدیل اشیا به اشیای دیگر است. در اینجا، از این ماژول برای تبدیل تصاویر به تانسورهای PyTorch استفاده شده است. همچنین، ماژول orch.autograd حاوی کلاس Variable است که هنگام تعریف «تانسورها» (Tensors) مورد استفاده قرار میگیرد. در ادامه، باید مجموعه داده در حافظه دانلود و بارگذاری شود.
اکنون، باید هایپرپارامترها را تعریف کرد.
در این مجموعه داده، اندازه تصویر 28*28 است. بنابراین، اندازه خروجی ۷۸۴ است. همچنین، ۱۰ رقم در اینجا نمایش داده شده است و در نتیجه، میتوان ۱۰ خروجی متفاوت داشت. بنابراین، num_classes روی ۱۰ تنظیم میشود. همچنین، باید برای ۱۰ بار، روی کل مجموعه داده آموزش داد. در نهایت، در دستههای کوچک ۱۰۰ تصویری آموزش داده میشود. بنابراین، بدین شکل از سرریز حافظه جلوگیری میشود.
سپس، باید مدل را به صورت زیر تعریف کرد. در اینجا، باید مدل به عنوان زیرکلاسی از ماژول torch.nn.Module آموزش داده شود و سپس، حرکت رو به جلو تعریف شود (Forward Pass). در کد نوشته شده، softmax به طور داخلی در طول هر مسیر رو به جلو محاسبه میشود و بنابراین، نیازی به تعیین آن درون تابع ()forward نیست.
اکنون، کلاس تعریف شده و یک شی به طور مشابه نمونهسازی میشود.
سپس، تابع زیان و بهینهسازی تنظیم میشود. در اینجا، باید از «زیان کراس آنتروپی» (Cross Entropy Loss) و برای بهینهساز، باید از الگوریتم «گرادیان کاهشی تصادفی» (Stochastic Gradient Descent) با نرخ یادگیری ۰.۰۰۱ به صورتی که در هایپرپاارمتر بالا تعریف شده است، استفاده کرد.
اکنون، باید آموزش دادن آغاز شود. در اینجا باید وظایف زیر انجام شوند.
- بازنشانی همه گرادیانها به صفر
- ایجاد یک پاس رو به جلو
- محاسبه زیان
- انجام پسانتشار
- به روز رسانی همه وزنها
فرض میشود که همه مراحل به طور درستی انجام شدهاند؛ بنابراین، صحت ۸۲٪ حاصل میشود که از صحت مدلهای لبه علم امروزی که از نوع خاصی از معماریهای «شبکه عصبی مصنوعی» (Artificial Neural Networks) استفاده میکنند، به دور است.
کد کامل این پروژه در ادامه آمده است.
اگر نوشته بالا برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای برنامهنویسی پایتون
- آموزش تکمیلی برنامهنویسی پایتون
- مجموعه آموزشهای دادهکاوی و یادگیری ماشین
- زبان برنامهنویسی پایتون (Python) — از صفر تا صد
- یادگیری علم داده (Data Science) با پایتون — از صفر تا صد
- آموزش پایتون (Python) — مجموعه مقالات جامع وبلاگ فرادرس
^^
سلام
اگر عدد فارسی رو بخوام شناسایی کنه، چطوری کتابخانه رو درست کنم؟ یا از کجا بیارم که از اون دیتاست استفاده کنم
سلام
ممنون از مطلبتون
ديتاست mnist رو بايد از کجا دانلود کرد؟ و کدوم ديتاستش رو بايد دان کرد؟
با سلام؛
از همراهی شما با مجله فرادرس سپاس گزاریم. همانطور که در متن نیز ذکر شده، این مجموعه داده از طریق کتابخانه PyTorCh و با استفاده از torchvision.datasets در دسترس است. برای دانلود این کتابخانه بدون نیاز به نصب PyTorch، مطالعه مطلب زیر پیشنهاد میشود.
مجموعه داده های عمومی برای داده کاوی و هوش مصنوعی — راهنمای کاربردی