نوار کناری

ساخت وبلاگ

من نویسنده این وبلاگ هستم. من به عنوان مدیر ارشد فناوری در آدیداس کار می کنم و در آمستردام هلند مستقر هستم.

پستهای اخیر

  • قسمت 4: فراتر از کد و آنچه من آموخته ام - پرداخت اتریوم
  • قسمت 3: پردازش پرداخت - پرداخت اتریوم
  • قسمت 2: مدل های داده محصول - پرداخت اتریوم
  • قسمت 1: تأیید اعتبار و مدیریت کیف پول رمزنگاری - پرداخت اتریوم
  • ساختن یک سیستم پرداخت برای blockchain Ethereum
  • معرفت شناسی خیابانی را برای مقابله با افراد دشوار در محل کار بیاموزید
  • شش الگوی برای بهینه سازی پایه کد یکپارچه شما
  • چگونه می توان 1 بر یک خاموش خود را در مسیر خود قرار داد
  • مهمترین مرحله از هر مکالمه عالی
  • ایجاد تیم ها در کار از راه دور

نحوه اجرای یک الگوریتم از یک مقاله علمی

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

برای دریافت ایمیل اعلان هر بار که مقاله جدیدی در کپسول کد ارسال می شود ، می توانید با پر کردن فرم در گوشه بالا سمت راست وبلاگ ، در خبرنامه مشترک شوید. طبق معمول ، نظرات در انتهای این پست باز است و من همیشه خوشحالم که از سؤالات ، اصلاحات و مشارکت ها استقبال می کنم!

1 - قبل از اینکه وارد شوید

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

1. 1 - برای جلوگیری از کدگذاری آن ، یک منبع باز پیدا کنید

مگر اینکه بخواهید مقاله را به منظور یادگیری بیشتر در مورد این زمینه پیاده سازی کنید ، نیازی به اجرای آن ندارید. در واقع ، آنچه شما می خواهید کدگذاری مقاله نیست ، بلکه فقط کدی است که کاغذ را پیاده سازی می کند. بنابراین قبل از شروع هر کاری ، باید چند روز را صرف تلاش برای یافتن منبع باز در اینترنت کنید. فقط در مورد آن فکر کنید: آیا ترجیح می دهید دو روز به دنبال کد از دست بدهید یا دو ماه با اجرای الگوریتمی که قبلاً در دسترس بود ، هدر دهید؟

1. 2 - راه های ساده تری برای رسیدن به هدف خود پیدا کنید

از خود بپرسید که چه کاری می خواهید انجام دهید ، و اگر راه حل های ساده تر برای آنچه شما نیاز دارید کار می کند. آیا می توانید از تکنیک دیگری استفاده کنید - حتی اگر نتیجه فقط 80 ٪ از آنچه می خواهید باشد - که نیازی به اجرای کاغذ ندارد و می توانید طی دو روز آینده با کتابخانه های منبع باز موجود اجرا کنید؟برای اطلاعات بیشتر در مورد این ، به مقاله من قانون بهره وری 20/50 مراجعه کنید.

1. 3 - از حق ثبت اختراع نرم افزار مراقب باشید

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

1. 4 - در مورد زمینه مقاله بیشتر بدانید

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

1. 5 - با انگیزه بمانید

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

2 - سه نوع مقاله

هرگز ایده خوبی نیست که یک مقاله تصادفی را انتخاب کرده و بلافاصله شروع به اجرای آن کنید. مقالات زیادی در آنجا وجود دارد ، این بدان معنی است که زباله های زیادی وجود دارد. همه انتشارات می توانند در سه دسته قرار بگیرند:

2. 1 - کاغذ پیشگام

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

2. 2 - مقاله copycat

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

2. 3 - کاغذ زباله

برخی از محققان واقعاً نمی دانند چه کاری انجام می دهند و/یا شیطانی هستند. آنها فقط سعی می کنند جایگاه و امتیازات خود را در موسسه دانشگاهی که در آن تدریس می کنند حفظ کنند. بنابراین آنها نیاز به بودجه دارند و برای این کار باید چیزی، هر چیزی را منتشر کنند. صادق‌ها در نتیجه به شما خواهند گفت که شکست خورده‌اند و نتایج فقط N% از مواقع دقیق هستند (که N یک مقدار بد است). اما برخی از شرورها دروغ می گویند و می گویند که تحقیقات آنها موفقیت بزرگی بوده است. پس از مدتی خواندن نشریات، پیدا کردن کاغذهای زباله و حذف آنها آسان می شود.

به لیست ایمیل من بپیوندید

3- نحوه خواندن مقاله علمی

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

3. 1 - کاغذ مناسب را پیدا کنید

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

بنابراین بیایید بگوییم که شما یک مقاله به عنوان نقطه شروع خود دارید. شما باید در محیط اطراف آن تحقیقاتی انجام دهید. برای این کار ، استراتژی این است که به دنبال نشریات مرتبط و نشریات ذکر شده در بخش "منابع" در انتهای مقاله باشد. به Google Scholar بروید و عناوین و نویسندگان را جستجو کنید. آیا هر یک از مقالاتی که پیدا کردید کار بهتری نسبت به مقاله ای که در ابتدا داشتید انجام می دهد؟اگر بله ، پس فقط کاغذی را که در وهله اول به آن نگاه می کردید ، خیس کنید و نسخه جدیدی را که پیدا کردید نگه دارید. یکی دیگر از ویژگی های جالب Google Scholar این است که می توانید مقالاتی را پیدا کنید که یک مقاله خاص را ذکر می کند. این واقعاً عالی است ، زیرا تمام کاری که شما باید انجام دهید این است که زنجیره استناد را از یک مقاله به مقاله دیگر دنبال کنید و جدیدترین مقالات موجود در این زمینه را پیدا خواهید کرد. پیدا کردن مقاله خوب از نقطه شروع همه چیز در جستجوی مقالات استناد شده توسط مقاله فعلی و برای مقالات استناد به مقاله فعلی است. با حرکت به سمت عقب و جلو به موقع باید مقاله ای را پیدا کنید که هم از نظر کیفیت بالا باشد و هم متناسب با نیازهای شما باشد.

نکته مهم: توجه داشته باشید که در این مرحله از اکتشاف ساده و حساب کردن ، نباید مقالات را بخوانید و کاملاً درک کنید. این جستجوی کاغذ مناسب باید فقط با استفاده از مقالات و استفاده از غریزه خود برای تشخیص زباله انجام شود (این با تجربه همراه است).

3. 2 - روی صفحه بخوانید

انتشار را روی کاغذ سخت چاپ کنید و نسخه کاغذ را بخوانید. همچنین ، به منظور چاپ بیشتر در هر صفحه ، اندازه را کاهش ندهید. بله ، شما سه برگ کاغذ را ذخیره خواهید کرد ، اما با خواندن این شخصیت های کوچک ، سریعتر خسته خواهید شد. اندازه قلم خوب برای خواندن بین 11 تا 13 امتیاز است.

3. 3 - زمان بندی و مکان خوب

در وسط شب یک مقاله نخوانید ، این کار را در یک لحظه از روزی که مغز شما هنوز تازه است انجام دهید. همچنین یک منطقه آرام پیدا کنید و از روشنایی خوب استفاده کنید. وقتی خواندم ، یک لامپ میز دارم که مستقیماً به سند اشاره می کند.

3. 4 - نشانگر و یادداشت ها

اطلاعات مهم را با یک نشانگر برجسته کنید و در حاشیه هر ایده ای که در ذهن شما ظاهر می شود ، یادداشت کنید.

3. 5 - تعاریف همه اصطلاحات را بدانید

هنگامی که از شما برای خواندن بیشتر مقالات خبری و داستان ها استفاده می شود ، مغز شما آموزش داده می شود تا با استفاده از زمینه به عنوان یک دستگاه کسر ، معنای کلماتی را که نمی دانید پر کنید. خواندن نشریات علمی یک تمرین متفاوت است و یکی از بزرگترین اشتباه فرض معنای نادرست برای یک کلمه است. به عنوان مثال در این جمله "نتایج این رویکرد تقسیم بندی هنوز هم از تار شدن مصنوعات رنج می برد". در اینجا دو کلمه ، "تقسیم بندی" و "مصنوعات" معنای کلی در انگلیسی دارند ، اما همچنین در حوزه دید رایانه معنای خاصی دارند. اگر نمی دانید که این کلمات در این مقاله معنای خاصی دارند ، پس از خواندن بدون توجه ، مغز شما به معنای کلی پر می شود و ممکن است اطلاعات بسیار مهمی را از دست ندهید. بنابراین شما باید (i) از فرضیات مربوط به کلمات خودداری کنید ، و هر زمان که شک دارید کلمه را در متن دامنه جستجو کنید ، انتشار آن نوشته شده است ، و (ب) یک واژه نامه را روی یک مقاله از تمام مفاهیم و واژگان خاص بنویسیدانتشاراتی که قبلاً نمی دانستید. اگر برای اولین بار با مفاهیم مانند "نقاط faducial" و "قطعه قطعه قطعه قطعه قطعه" روبرو شوید ، باید تعاریف دقیق آنها را جستجو کرده و آنها را در واژه نامه خود بنویسید. مفاهیم میانبرهای مغزی با زبان مجهز به زبان هستند و به شما امکان می دهند تا هدف نویسندگان را سریعتر درک کنید.

3. 6 - در نتیجه به دنبال تجزیه و تحلیل آماری باشید

اگر نویسندگان فقط یک منحنی از الگوریتم خود و یک منحنی از الگوریتم دیگر ارائه می دهند ، و می گویند "نگاه کنید ، 20 ٪ دقیق تر است" ، پس می دانید که در حال خواندن زباله هستید. آنچه شما می خواهید بخوانید این است: "با استفاده از مجموعه آزمایشات N ، الگوریتم ما با استفاده از مقدار P 5 ٪ با استفاده از آزمون t دو نمونه ، پیشرفت قابل توجهی را نشان می دهد."استفاده از تجزیه و تحلیل آماری حداقل رانندگی از نویسنده را نشان می دهد ، و اثبات خوبی است که می توان به نتایج برای تعمیم اعتماد کرد (مگر اینکه نویسندگان دروغ بگویند که نتایج خود را سکسی تر جلوه دهد ، که همیشه می تواند اتفاق بیفتد).

3. 7 - اطمینان حاصل کنید که نتیجه گیری ها نشان می دهد که مقاله آنچه را که شما نیاز دارید انجام می دهد

بیایید بگوییم شما یک الگوریتم می خواهید که می تواند چهره ای را در یک تصویر پیدا کند. نویسندگان این مقاله در این نتیجه می گویند که مدل آنها با استفاده از 10 موقعیت از 80 نفر مختلف (10 80 80 = 800 عکس) آموزش داده شده است ، و این که صحت تشخیص چهره با مجموعه آموزش 98 ٪ بود ، اما تنها 70 ٪ بودبا مجموعه آزمایش (تصویری که در طول آموزش استفاده نمی شود). این یعنی چی؟این بدان معنی است که ظاهراً الگوریتم دارای موضوعاتی برای تعمیم صحیح است. این عملکرد در هنگام استفاده در مجموعه تمرینی (که بی فایده است) عملکرد خوبی دارد و در صورت استفاده در موارد دنیای واقعی بدتر می شود. آنچه در این مرحله باید نتیجه بگیرید این است که شاید ، این مقاله به اندازه کافی برای آنچه شما نیاز دارید خوب نیست.

3. 8 - به داده های ورودی مورد استفاده نویسندگان توجه کنید

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

3. 9 - نویسندگان انسان هستند

نویسندگان انسان هستند و به همین دلیل اشتباه می کنند. فرض نکنید که نویسندگان کاملاً درست هستند ، و در صورتی که یک معادله درک یا پیروی از آن واقعاً سخت باشد ، باید از خود بپرسید که آیا نویسندگان در آنجا اشتباه کرده اند یا خیر. این فقط می تواند یک تایپ در کاغذ یا خطایی در ریاضیات باشد. در هر صورت ، بهترین راه برای پیدا کردن این است که معادلات خود را از بین ببرید و سعی کنید نتایج آنها را تأیید کنید.

3. 10 - متغیرها و اپراتورها را درک کنید

وظیفه اصلی در هنگام اجرای یک انتشار ، ترجمه معادلات ریاضی در مقاله به کد و داده ها است. این بدان معنی است که قبل از پرش به کد ، باید 100 ٪ معادلات و فرآیندهای موجود در این معادلات را درک کنید. به عنوان مثال ، "c = a. ب "می تواند معنای متفاوتی داشته باشد. A و B می توانند اعداد ساده و "" باشند. اپراتور می تواند به سادگی یک محصول باشد. در این حالت ، C محصول دو شماره A و B خواهد بود اما شاید این A و B ماتریس باشد ، و آن "". نمایانگر اپراتور محصول ماتریس است. در این حالت ، C می تواند ماتریس محصول ماتریس های A و B باشد. با این وجود احتمال دیگر این است که A و B ماتریس هستند و آن "". اپراتور محصول مدت به ترم است. در این حالت ، هر عنصر c (i ، j) محصول A (i ، j) و b (i ، j) است. نمادهای مربوط به متغیرها و اپراتورها می توانند از یک کنوانسیون ریاضی به دیگری و از یک گروه تحقیقاتی به گروه دیگر تغییر کنند. اطمینان حاصل کنید که می دانید هر متغیر چیست (مقیاس ، بردار ، ماتریس یا چیز دیگری) و هر اپراتور روی این متغیرها چه کاری انجام می دهد.

3. 11 - جریان داده ها را درک کنید

مقاله جانشینی معادلات است. قبل از شروع برنامه نویسی ، باید بدانید که چگونه خروجی معادله n را به ورودی معادله n+1 وصل می کنید.

4 - نمونه سازی

پس از خواندن و درک مقاله ، وقت آن است که یک نمونه اولیه ایجاد کنید. این یک گام بسیار مهم است و جلوگیری از آن می تواند منجر به هدر رفتن زمان و منابع شود. اجرای یک الگوریتم پیچیده در زبانهایی مانند C ، C ++ یا Java می تواند بسیار وقت گیر باشد. و حتی اگر اعتماد به نفس در مقاله داشته باشید و فکر کنید که الگوریتم کار خواهد کرد ، هنوز هم این احتمال وجود دارد که اصلاً کار نکند. بنابراین شما می خواهید بتوانید آن را در اسرع وقت با کثیف ترین روش کدگذاری کنید ، فقط برای اینکه بررسی کنید که واقعاً کار می کند.

4. 1 - راه حل های نمونه سازی

بهترین راه حل برای آن استفاده از یک زبان یا محیطی همه کاره سطح بالاتر مانند Matlab ، R ، Octave یا Scipy/Numpy است. نمایش یک معادله ریاضی در C ++ آسان نیست و سپس نتایج را چاپ می کند تا به صورت دستی آنها را بررسی کند. در مقابل ، نوشتن معادلات در Matlab ، و سپس چاپ آنها بسیار ساده است. چه چیزی شما را دو تا سه هفته در C ++ طول می کشد ، شما را دو روز در Matlab می برد.

4. 2 - نمونه سازی اولیه به روند اشکال زدایی کمک می کند

مزیت داشتن نمونه اولیه این است که وقتی نسخه C ++ خود را داشته باشید ، می توانید با مقایسه نتایج بین نمونه اولیه MATLAB و اجرای C ++ اشکال زدایی کنید. این در بخش "اشکال زدایی" در زیر ایجاد می شود.

4. 3-مسائل مربوط به اجرای شستشو از قبل

مطمئناً در نمونه اولیه خود اشتباهات طراحی نرم افزار را انجام می دهید ، و این یک چیز خوب است زیرا می توانید با فرآیندها یا داده ها مشکل را مشخص کنید. هنگامی که نسخه C ++ را کدگذاری می کنید ، می دانید که چگونه نرم افزار را بهتر معمار کنید ، و بدون استفاده از مرحله نمونه سازی ، کد پاک تر و پایدارتر را تولید خواهید کرد (این ایده "سیستم پرتاب" است که توسط فردریک ارائه شده استبروکس در مرد اسطوره ای).

4. 4 - نتایج ارائه شده در مقاله را تأیید کنید

بخش "آزمایش" مقاله را با دقت بخوانید و سعی کنید با استفاده از داده های آزمون تا حد امکان مشابه با مواردی که نویسندگان استفاده می کنند ، شرایط آزمایشی را تا حد امکان تولید مثل کنید. این باعث افزایش شانس شما برای تولید مثل نتایج به دست آمده توسط نویسندگان می شود. استفاده نکردن از شرایط مشابه می تواند شما را به سمت رفتار اجرای خود سوق دهد که ممکن است به عنوان یک خطا در نظر بگیرید ، در حالی که شما فقط با داده های صحیح آن را تغذیه نمی کنید. به محض اینکه می توانید نتایج را بر اساس داده های مشابه بازتولید کنید ، می توانید آزمایش آن را بر روی انواع مختلف داده ها شروع کنید.

به لیست ایمیل من بپیوندید

5 - زبان و کتابخانه های مناسب را انتخاب کنید

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

5. 1-سیستم های از قبل موجود

بسیاری اوقات ، زبان تولید و کتابخانه ها توسط سیستم های از قبل موجود دیکته می شوند. به عنوان مثال ، شما مجموعه ای از الگوریتم برای عادی سازی روشنایی را در یک تصویر ، در یک کتابخانه کدگذاری شده در جاوا دارید و می خواهید یک الگوریتم جدید از یک نشریه اضافه کنید. در این حالت ، بدیهی است ، شما نمی خواهید این الگوریتم جدید را در C ++ ، بلکه در جاوا کدگذاری کنید.

5. 2 - پیش بینی کاربردهای آینده از اجرای

در این مورد ، هیچ سیستم از قبل موجود وجود ندارد که شما را به یک زبان تحمیل کند ، پس باید انتخاب زبان بر اساس کاربردهای پیش بینی شده الگوریتم انجام شود. به عنوان مثال ، اگر اعتقاد دارید که طی چهار تا شش ماه ، یک درگاه ممکن از برنامه شما به آیفون انجام می شود ، پس باید C/C ++ را از طریق جاوا انتخاب کنید زیرا این تنها راه برای ادغام آسان کد در یک هدف است.-C برنامه بدون نیاز به شروع همه چیز از ابتدا.

5. 3 - کتابخانه های موجود که به طور کامل یا جزئی الگوریتم را حل می کنند

کتابخانه های موجود به زبانهای مختلف همچنین می توانند انتخاب زبان تولید را گرایش دهند. بیایید تصور کنیم که الگوریتمی که مایل به اجرای آن هستید ، از تکنیک های جبر مشهور مانند تجزیه و تحلیل مؤلفه اصلی (PCA) و تجزیه ارزش یکسان (SVD) استفاده می کند. سپس می توانید PCA و SVD را از ابتدا کد کنید ، و اگر یک اشکال وجود دارد می تواند به مدت یک هفته اشکال زدایی کند ، یا می توانید از کتابخانه ای استفاده کنید که قبلاً این تکنیک ها را پیاده سازی کرده و کد اجرای خود را با استفاده از کنوانسیون و ماتریس بنویسیدکلاس این کتابخانه. در حالت ایده آل ، شما باید بتوانید اجرای خود را در کارهای فرعی تجزیه کنید ، و سعی کنید کتابخانه هایی را پیدا کنید که قبلاً بسیاری از این موارد زیر را اجرا کنند. اگر مجموعه کاملی از کتابخانه ها را پیدا کردید که فقط برای یک زبان معین در دسترس هستند ، پس باید آن زبان را انتخاب کنید. همچنین ، توجه داشته باشید که انتخاب کتابخانه ها باید یک تجارت بین استفاده مجدد از کد موجود و به حداقل رساندن وابستگی ها باشد. بله ، خوب است که برای هر کار فرعی مورد نیاز برای اجرای خود کد داشته باشید ، اما اگر این امر نیاز به ایجاد وابستگی بیش از 20 کتابخانه مختلف داشته باشد ، ممکن است خیلی عملی نباشد و حتی می تواند ثبات آینده اجرای شما را به خطر بیندازد.

6 - اجرای

در اینجا چند نکته از تجربه من در اجرای نشریات آورده شده است

6. 1 - دقت مناسب را انتخاب کنید

نوع مورد استفاده برای محاسبات خود باید با دقت انتخاب شود. به طور کلی بهتر است به جای شناور از دو برابر استفاده کنید. استفاده از حافظه می تواند بزرگتر باشد ، اما دقت در محاسبه تا حد زیادی بهبود می یابد و به طور کلی ارزش آن را دارد. همچنین ، شما باید از تفاوت های بین سیستم های 32 بیتی و 64 بیتی آگاه باشید. هر زمان که می توانید ، نوع خود را برای محصور کردن نوع زیرین (شناور یا دو برابر ، 32 بیتی یا 64 بیتی) ایجاد کنید و از این نوع در کد خود استفاده کنید. این می تواند با یک تعریف C/C ++ یا یک کلاس در جاوا انجام شود.

6. 2 - همه چیز را مستند کنید

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

6. 3 - در کد خود به مقاله اضافه کنید

برای هر معادله ای که از مقاله ای که اجرا می کنید ، باید نظر خود را با استناد به مقاله (نویسندگان و سال) و یا شماره پاراگراف یا شماره معادله اضافه کنید. به این ترتیب ، هنگامی که بعداً کد را دوباره بخوانید ، می توانید مستقیماً کد را به مکانهای دقیق در مقاله وصل کنید. این نظرات باید شبیه این باشد:

// به Cootes و همکاران ، 2001 ، معادله 2. 3 // مراجعه کنید به Matthews and Baker ، 2004 ، بخش 4. 1. 2

6. 4 - از نمادهای ریاضی در نام های متغیر خود خودداری کنید

بیایید بگوییم که مقداری در الگوریتم یک ماتریس است که با مشخصات A. مشخص شده است. بعداً ، الگوریتم به شیب ماتریس در دو بعد نیاز دارد ، مشخصه DA = (DA/DX ، DA/DY). سپس نام متغیرها نباید "DA_DX" و "DA_DY" باشد ، بلکه "Gradient_x" و "Gradient_y" است. به طور مشابه ، اگر یک سیستم معادله نیاز به تست همگرایی داشته باشد ، متغیرها نباید "prev_da_dx" و "da_dx" باشند ، بلکه "error_previous" و "error_current" هستند. همیشه مواردی را برای چه مقدار فیزیکی نامگذاری کنید ، نه هرگونه یادداشت نامه نویسندگان مقاله مورد استفاده (به عنوان مثال "Gradient_x" و نه "DA_DX") ، و همیشه از نظر کمتر از چپ به راست خاص تر را بیان می کنند (به عنوان مثال "Gradient_X"و نه" x_gradient ").

6. 5 - در اولین پاس بهینه سازی نکنید

بعداً تمام بهینه سازی ها را بگذارید. همانطور که هرگز نمی توانید کاملاً مطمئن باشید که کدام قسمت از کد شما به بهینه سازی نیاز دارد. هر بار که بهینه سازی احتمالی را مشاهده می کنید ، نظر خود را اضافه کنید و در چند خط توضیح دهید که چگونه بهینه سازی باید اجرا شود ، مانند:

// بهینه سازی در اینجا: محاسبه ستون ماتریس یک در یک زمان // و ضرب آنها به طور مستقیم می تواند حافظه را ذخیره کند

به این ترتیب ، بعداً می توانید تمام مکان های موجود در کد خود را پیدا کنید که در آن بهینه سازی ها امکان پذیر است و نکات تازه ای در مورد نحوه بهینه سازی دریافت می کنید. پس از انجام اجرای شما ، می توانید با اجرای یک پروفایل مانند Valgrind یا هر آنچه که در زبان برنامه نویسی مورد استفاده شما در دسترس است ، بهینه سازی کنید.

6. 6 - برنامه ریزی برای ایجاد API؟

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

7 - اشکال زدایی

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

7. 1 - نتایج را با سایر پیاده سازی ها مقایسه کنید

یک راه خوب برای شستشوی اشکالات ، مقایسه نتایج کد شما با نتایج اجرای موجود در همان الگوریتم است. همانطور که فرض می کنم که شما تمام وظایف موجود در بخش "اما قبل از پرش" را که در بالا ارائه شده بود به درستی انجام داده اید ، هیچ اجرای در دسترس الگوریتم را پیدا نکردید (وگرنه دیگر به جای اجرای مقاله از آن استفاده می کردید!). در نتیجه ، تنها اجرای دیگری که در این مرحله دارید نمونه اولیه ای است که قبلاً برنامه ریزی کرده اید.

بنابراین ایده مقایسه نتایج نمونه اولیه و اجرای تولید در هر مرحله از الگوریتم است. اگر نتایج متفاوت است ، یکی از این دو پیاده سازی کار اشتباهی انجام می دهد ، و شما باید پیدا کنید که کدام و چرا. دقت می تواند تغییر کند (نمونه اولیه می تواند x = 1. 8966 و کد تولید x = 1. 8965) را به شما بدهد ، و البته این مقایسه باید این را در نظر بگیرد.

7. 2 - با افرادی که مقاله را خوانده اند صحبت کنید

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

7. 3 - متغیرهای خود را تجسم کنید

در حالی که در حال توسعه است ، همیشه خوب است که به محتوای متغیرهای مورد استفاده الگوریتم توجه کنید. من در مورد چاپ صرفاً تمام مقادیر موجود در ماتریس ها و داده های شما صحبت نمی کنم ، بلکه پیدا کردن ترفند تجسم سازگار با هر متغیر در اجرای شما. به عنوان مثال ، اگر یک ماتریس تصور می شود شیب یک تصویر را نشان می دهد ، در طول برنامه نویسی و اشکال زدایی ، باید یک پنجره ظاهر شود و نشان دهید که تصویر شیب ، نه فقط مقادیر تعداد موجود در ماتریس تصویر. به این ترتیب ، شما یک تصویر واقعی را با داده هایی که در دست دارید ، مرتبط خواهید کرد و در صورت بروز مشکلی در یکی از متغیرها ، قادر خواهید بود که تشخیص دهید ، که به نوبه خود یک اشکال احتمالی را نشان می دهد. ترفندهای تجسم مبتکرانه شامل تصاویر ، توطئه های پراکندگی ، نمودارها یا هر چیز دیگری است که فقط یک لیست احمقانه از 1000 شماره نیست و می توانید یک تصویر ذهنی را مرتبط کنید.

7. 4 - مجموعه داده های آزمایش

تولید داده ها برای آزمایش با اجرای شما می تواند بسیار وقت گیر باشد. هر زمان که می توانید ، سعی کنید پایگاه داده (پایگاه داده Face ، پایگاه داده های عصاره متن و غیره) یا ابزاری برای تولید چنین داده هایی پیدا کنید. اگر هیچ کدام وجود ندارد ، پس از آن زمان تولید 1000 نمونه را به صورت دستی از دست ندهید. یک ژنراتور سریع داده را در 20 خط کدگذاری کنید و با آن کار کنید.

نتیجه

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

استراتژی برای تحلیل فاندمنتال...
ما را در سایت استراتژی برای تحلیل فاندمنتال دنبال می کنید

برچسب : نویسنده : سعید شیخ‌زاده بازدید : 41 تاريخ : دوشنبه 8 خرداد 1402 ساعت: 23:25