چطور یک مقاله تخصصی را در سریع‌ترین زمان ممکن پیاده‌سازی کنیم!


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

مقالات مختلفی وجود دارد که برخی از آنها بیشتر پروژه محور هستند و الگوریتم‌هایی که در مقاله ارائه شده، در محیط‌های برنامه‌نویسی مثل متلب و پایتون تولباکس‌هایی برای آنها وجود دارد و ما می‌توانیم با شناخت مناسب به این تولباکس‌ها، و شناخت خوب از مسئله، با کمک این ابزارها مقاله را پیاده‎‌سازی کنیم. برخی مقالات هم هستند  که یک روشی را بهبود داده‌اند و به احتمال بسیار زیاد در محیط‌های برنامه‌نویسی برای آنها ابزاری وجود ندارد و دانشجو برای پیاده‌سازی چنین مقالاتی نیاز دارد که تمام بخش‌های کدنویسی را خودش انجام دهد. فعلا در این بخش هدفمان پیاده‌سازی مقالات پروژه محوری هست که الگوریتم‌های استفاده شده در مقاله را میتوان در محیط‌های برنامه نویسی مثل متلب یا پایتون پیدا کرد و یا در سایتهایی مثل github  و mathwork که یک سری افراد کدهای الگوریتمها را قرار داده‌اند و میتوان از آن کدها استفاده کرد.

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

برای اینکه توضیحات قابل لمس باشند از یک مقاله پردازش سیگنالی به عنوان مثال استفاده می‌کنیم . همین روال در سایر حوزه ها هم یکی هست و فرق چندانی از لحاظ ساختاری ندارد.

پیش بینی ایست قلبی از روی سیگنال ecg

همان ابتدا سراغ کدنویسی نروید!

خیلی مواقع پیش میاد که ما وقت کمی برای مطالعه روش مقاله صرف می‌کنیم و سریع میرویم سراغ کدنویسی و متاسفانه در اکثر مواقع دچار سردرگمی شده و نمیتوانیم مقاله را پیاده‌سازی کنیم. دلیلش اینه که ما شناخت خوبی به روش ارائه شده در مقاله پیدا نکرده‌ایم و قطعا نمی‌توانیم کاری رو پیش ببریم. اول مقاله رو خوب مطالعه می‌کنیم و بعد سراغ کدنویسی میرویم.

نحوه پیاده سازی مقاله

 

 مطالعه دقیق بخش متد مقاله

در پیاده‌سازی مقاله تنها بخشی که برای ما مهم است بخش method مقاله هست. باید این بخش را دقیق مطالعه کنیم و ریز به ریز موارد را بررسی کنیم. در پیاده‌سازی مقالات تخصصی باید بیشترین وقت را صرف مطالعه مقاله بکنیم و دقیق متوجه شویم که مقاله هدفش چی هست؟ چه الگوریتمی را استفاده کرده و یا ارائه داده؟ نوآوریش چی هست و این جور موارد… همه اینها باید دقیق مشخص شوند.

آبراهام لینکلن

به قول معروف اول تبرّ رو تیز کن بعد درخت رو ببرّ!

 

سخت نگیریم!

واقعیت این است که پیاده سازی مقالات تخصصی آن طور که جا افتاده است سخت نیست و خیلی از موارد شاید بیشتر از یک ساعت هم وقت برای پیاده‌سازی یک مقاله وقت لازم نباشد. در مرحله قبل توضیح دادیم که ” برای پیاده سازی مقاله به چه چیزهایی نیاز داریم“،  حال اگر شما مهارت‌های لازم را کسب کرده باشید مطمئن باشید خیلی راحت می‌تونید یک مقاله تخصصی را پیاده‌سازی کنید.

 یک نکته ای رو هم ذکر کنم، وقتی یک مقاله‌ای می‌بینید که کلی از روابط هست اصلا نگران نباشید، در 90 درصد موارد رابطه‌ی آخری که ارائه شده است مهم است، یعنی فقط قرار است یک رابطه را پیاده‌سازی کنیم،همین! اکثر روابط بیشتر سیاهی لشگر حساب می‌شوند و نویسنده‌ها از آنها استفاده می‌کنند که نشون بدن بله مقاله ما خیلی خفنه و کلی روابط داره! یا این روابط بیشتر مربوط به اثبات یک تئوری ارائه شده است و در پیاده‌سازی ما اصلا به آنها نیاز نداریم. پس حتی یک مقاله‌ای که روابط زیاد داشت نگران نباشید و سعی کنید تا آخر بخش روابط را مطالعه کنید. حالا در مورد پیاده‌سازی روابط که بیشتر برمی‌گردد به ارائه یک الگوریتم جدید، در پست بعدی صحبت خواهیم کرد.

بررسی دقیق پایگاه داده و تعریف صورت مسئله

وقتی صحبت از مقالات پروژه محور و کاربردی می‌شود، پای یک پایگاه داده در میان است و تمامی پردازش‌ها روی یک پایگاه داده‌ای انجام می‌شود. پس ما باید اطلاعات مناسبی از پایگاه داده داشته باشیم و دقیق بدونیم که با چه هدفی ثبت شده و در این مقاله با چه هدفی استفاده شده است!

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

سیگنال برای مسئله چندکلاسه طراحی شده است؟

  • از هر کلاس چند نمونه ثبت شده است؟
  • سیگنال چندکاناله هست؟ (از چند الکترود برای ثبت سیگنال استفاده کرده است)
  • فرکانس نمونه‌برداری سیگنال چقدر هست(برای طراحی فیلترها لازم است)؟
  • طول ترایال (مدت زمان ثبت سیگنال برای نمونه) چقدر هست؟  
  • فرمت داده چی هست؟ (تا ابزار لازم برای خوندن پایگاه داده در یک محیط برنامه‌نویسی را یاد بگیریم و ازشون برای خوندن پایگاه داده استفاده کنیم)

سوالاتی مشابه اینها باید ابتدای کار از خودمان بپرسیم تا یک شناخت مناسبی از پایگاه داده و صورت مسئله پیدا کنیم. در همه کارها به طور کلی چنین سوالاتی میپرسیم که میتونه بسته به اینکه با چه داده و مسئله‌ای روبرو هستیم تعداد سوالات کم یا زیاد شوند.

 

تعریف یک چارچوب جامع برای حل مسئله

منظور از چارچوب، طراحی یک فلوچارت کلی از رویکرد ارائه شده توسط مقاله هست تا یک دید مناسبی به مسئله داشته باشیم و در مراحل بعدی به صورت گام به گام تک تک مراحل را پیاده‌سازی کنیم.

معمولا در خود مقاله یک فلوچارت مناسب برای رویکرد ارائه شده طراحی می‌کنند که میتونیم از آن استفاده کنیم. اگر مقاله چنین فلوچارتی رو نداشت بهتر است خودمان برای مسئله مورد نظر یک فلوچارت مناسب طراحی کنیم. این فلوچارت در بخشهای بعدی خیلی میتونه به ما در پیاده سازی مقاله کمک بکند.

اگر مقاله مورد نظر در حوزه یادگیری ماشین و شناسایی الگو هست بهتر است برای آن یک فلوچارتی شبیه زیر رسم کنیم و بعد تک تک مراحل را بررسی کنیم تا بدونیم برای انجام هر بخش از چه ابزاری مقاله استفاده کرده است.

پیش بینی ایست قلبی از روی سیگنال ecg

 

نوشتن یک شبه کد یا الگوریتم خلاصه شده برای روش ارائه شده مقاله

بهتر است یک شبه کد یا الگوریتم خلاصه شده برای روش ارائه شده در مقاله بنویسیم. قرار نیست در شبه کد یک چیز پیچیده‌ای بنویسید. مراحل لازم برای پیاده سازی مقاله را براساس برداشتی که از مطالعه مقاله بدست آورده‌اید را به زبان ساده بنویسید. هدف این بخش اینه که شما متوجه بشوید که داستان از چه قرار هست و بعد به ترتیب تک تک مراحل را پیاده سازی کنید. این کار شمارو هدفمند میکنه و موقع پیاده سازی مقاله دقیقا میدونید که باید چیکار کنید.

اگر قرار باشد من برای این مقاله یک شبه کد یا الگوریتم خلاصه شده بنویسیم به این صورت خواهم نوشت:

  • خوندن پایگاه داده و قرار دادن نمونه‌های هر کلاس در یک متغیر دو بعدی یا سه بعدی
  • پیش پردازش سیگنال قلبی افراد (کاهش نویز با کمک تبدیل ویولت )
  • استخراج ویژگی‌های غیرخطی از سیگنال قلبی تمیز شده‌ی هر نمونه (سیگنال قلبی هر فرد)
  • انتخاب ویژگی‌های مناسب از بین ویژگی‌های استخراج شده با کمک T-test
  • طبقه بندی با کمک یکی از طبقه‌بندهای SVM-KNN-TREE
  • ارزیابی مدلها با روش K-fold cross validation

 

بررسی ابزار موجود برای حل مسئله

اگر یک مقاله‌ای را مطالعه کنید متوجه می‌شوید که در هر مرحله از چه ابزاری برای بخش مورد نظر استفاده کرده است. حال باید در این مرحله برویم سراغ محیط برنامه‌نویسی و ببینیم که تولباکس کدام یک از این ابزار وجود دارد و نحوه فراخوانی تولباکس را یاد بگیریم.

اگر از متلب استفاده می‌کنید، حتما مثالهای بخش help را نگاه کنید. اینطوری راحت متوجه می‌شوید که چطور میتوان از یک تولباکس استفاده کرد. مثلا در این مقاله برای کاهش نویز از تبدیل ویولت استفاده کرده است، خب متلب یا پایتون چنین ابزاری را دارد، راحت متیوانید از آن برای کاهش نویز استفاده کنید. قرار نیست شما کل تئوری ویولت رو بخونید و خودتون الگوریتم ویولت را پیاده‌سازی کنید. اینجا بخش کاربردی ویولت مدنظر هست. پس اگر یک شناخت کلی از ویولت داشته باشید کافیه. و خیلی راحت از ابزار موجود در محیط‌های برنامه نویسی استفاده میکنیم و این بخش را پیاده سازی میکنیم.

برای انتخاب ویژگی مقاله از ttest  و برای طبق‌ بندی از طبقه‌بندهایی مثل svm-knn-tree استفاده کرده است که متلب یا پایتون برای اینها تولباکس مناسبی دارند. کافیه که با نحوه فراخوانی آنها آشنا شویم.

یا در بخش بعدی برای استخراج ویژگی از روشهای غیرخطی استفاده کرده است که در محیط‌های برنامه نویسی ابزار آماده اینها وجود ندارد. باز هم سراغ پیاده‌سازی این روشها نمیرویم. سایت github یا mathwork رو سرچ کنید. معمولا میشه از اونجا برای ابزار مختلف کد پیدا کرد.

سایت github

 یک سری افراد کدهای برخی الگوریتم‌ها را پیاده‌سازی کرده اند و در چنین وبسایت‌هایی به اشتراک گذاشته‌‎اند که بقیه هم استفاده کنند.

شروع کدنویسی

الان آماده هستیم که کدنویسی را شروع بکنیم. که البته این کدنویسی بیشتر شبیه ادغام روشها هست. همه ابزار موجود هست و شما طبق فلوچارت و شبه کدی که نوشته‌اید شروع به پیاده‌سازی مقاله می‌کنید یا به عبارتی ابزارها را برای حل یک مسئله طبق شبه کد کنار هم قرار میدهید که خود این موضوع هم یک مقدار مهارت می‌خواهد. به ترتیب جلو میروید و در هر مرحله برای انجام هر بخش از ابزار موجود در محیط برنامه‌نویسی استفاده می‌کنید.

پیاده سازی مقاله

یک نکته : بعد از انجام هر بخش حتما یک بار debugging را انجام دهید و مطمئن شوید که کد رو درست نوشته‌اید. بعد بروید سراغ مراحل بعدی.  اگر کل کد رو بنویسید و در آخر شروع به بررسی کنید با چالش اساسی روبرو خواهید شد و اگر جایی سوتی داده باشید پیدا کردنش بسیار سخت و زمان بر خواهد بود. پس هر بخش رو که پیاده‌سازی کردید، از درست بودن کد مطمئن شوید و سپس بروید سراغ مراحل بعدی.

برای مقاله پیاده‌سازی شده گزارش مناسبی بنویسید

حتما بعد از اتمام کار یک گزارش خوب بنویسید و در آرشیو خود ذخیره کنید که بعدا در پیاده‌سازی سایر مقالات خیلی میتونه بهتون کمک کند.

در گزارش هم تا جایی که میتونید جزئیات کاری که انجام دادید رو شرح بدهید. انگار دارید برای یک شخص دیگری توضیح میدهید. بعد از یکی دو ماه یا یک سال حتما جزئیات کار یادتون بره. و اگر گزارش مناسبی داشته باشید در عرض چند دقیقه متوجه می‌شوید که چیکار کرده بودید و از کدها و کارهای انجام شده به راحتی می‌تونید برای کار جدید استفاده کنید.

گزارش میتونه به شکل زیر باشد، در یک بخش کد نوشته شده و در یک بخش توضیحات لازم برای کد قرار دهید. در ادامه هم اگر کد خروجی دارد، نتیجه را قرار دهید….

نحوه گزارش نوشتن برای یک پروژه

ما در دوره‌ها همیشه سعی می‌کنیم، مقالات مختلفی را پیاده‌سازی کنیم تا دوستان بعد اتمام دوره، علاوه بر یادگیری مباحث آموزشی، با روال پیاده‎‌سازی مقالات تخصصی نیز آشنا شوند. از اونجا که در دوره‌ها ابزار پیاده‌سازی می‌شوند، طبق روال گفته شده مباحث آموزشی را پیش می‌بریم، در ابتدا تئوری الگوریتم مورد نظر را طبق مراجع معتبر آموزش می‌دهیم، سپس برای اینکه روال پیاده‌سازی برای دانشجو ساده باشد، یک فلوچارت رسم کرده و یک الگوریتم خلاصه شده می‌نویسیم . سپس مرحله به مرحله الگوریتم مورد نظر را پیاده‌سازی می‌کنیم، در ابتدا روی مثال‌های ساده پیاده‌سازی را انجام می‌دهیم تا همراه با کدنویسی یک سری شکل‌هایی هم رسم کنیم تا دانشجو درک بهتری از فرایند کار داشته باشد، سپس چندین پروژه عملی انجام مدهیم تا با چالش‌های واقعی در عمل آشنا شود. دانشجو در طی دوره علاوه بر یادگیری مباحث تخصصی، با روال پیاده‌سازی مرحله به مرحله الگوریتم‌ها و مقالات آشنا می‌شود.

موفق باشید…


دیدگاه ها

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

*

code