حسین خسروی

وبلاگ دانشگاهی حسین خسروی، عضو هیات علمی دانشگاه صنعتی شاهرود

حسین خسروی

وبلاگ دانشگاهی حسین خسروی، عضو هیات علمی دانشگاه صنعتی شاهرود

حسین خسروی

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

پیوندهای روزانه
  • ۰
  • ۰

بسم الله الرحمن الرحیم

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

  • به منظور یافتن مواد آموزشی و تمرینهای مربوط به هر درس از منوی سایت (بالا) روی درس مورد نظر کلیک کنید.

  • برای درسهایی که استاد حل تمرین دارند، تمرینهای کامپیوتری را فقط به ایمیل استاد حل تمرین ارسال کنید و تمرینهای کاغذی را هم به ایشان تحویل دهید. اگر درسی حل تمرین ندارد به ایمیل خودم ارسال کنید.

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

برنامه درسی ترم پاییز 97-98 دکتر حسین خسروی

  • حسین خسروی
  • ۰
  • ۰

سلام و درود

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

پیام رسان سروش

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


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

sapp.ir/khosravi_edu


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

sapp.ir/khosravi


دانلود پیام رسان سروش

📌نسخه اندروید:

http://android.sapp.ir


📌نسخه ویندوز:

http://windows.sapp.ir


📌نسخه iOS:

http://ios.sapp.ir


📌نسخه لینوکس:

http://linux.sapp.ir

  • حسین خسروی
  • ۰
  • ۰

ترکیب در سطح طبقه بند

1.    برای مجموعه ارقام دستنویس یا تصاویر چهره ORL، ویژگی هیستوگرام گرادیان را پیاده سازی کرده و یک شبکه MLP یا RBF را با آن آموزش دهید. سپس این شبکه را با شبکه ای که قبلا در تمرین دوم آموزش داده اید، ترکیب کنید و نتیجه حاصل را گزارش کنید. برای ترکیب از میانگین گیری استفاده کنید، یعنی مقادیر نرونهای خروجی را میانگین گیری کنید و سپس تصمیم گیری کنید. (در مورد مجموعه ارقام، می‌توانید به جای هیستوگرام گرادیان از مکان مشخصه استفاده کنید.)

ترکیب در سطح ویژگیها

2.    این بار ویژگیها را بعد از نرمال سازی با هم ترکیب کنید و یک شبکه جدید آموزش دهید. نتیجه ترکیب در سطح ویژگی را با نتیجه ترکیب در سطح طبقه بندها که در قسمت 1 انجام دادید، مقایسه کنید.

استفاده از SVM

3.    با استفاده از توابع آماده متلب همین مسئله را با یکی از ویژگیهای قبلی توسط SVM انجام دهید.

پیاده سازی الگوریتم AdaBoost (اختیاری)

4.    (اختیاری 0.5 نمره اضافه) الگوریتم AdaBoost M2 را با استفاده از MLP پیاده سازی کرده و 3 طبقه بند MLP روی مجموعه ارقام آموزش دهید.

موعد تحویل 24 آذر

  • حسین خسروی
  • ۰
  • ۰

1-4 ماشین حساب با استفاده از switch-case

ماشین حساب ساده

می خواهیم شبیه تمرین سری اول، یک ماشین حساب بسازیم به این ترتیب که کاربر یک عملگر ( + - * / %) و دو عدد اعشاری وارد می کند و شما باید با switch-case نتیجه عملیات را نشان دهید. اگر عملگر اشتباه وارد شد، پیام مناسب داده و دوباره داده ها را دریافت کنید. برای شروع، می توانید از تکه کد زیر استفاده کنید:

    char operator;
    printf("Enter an operator (+, -, *, /, %): ");
    scanf("%c", &operator);

-------------------------------------------------------------------------------

2-4 کار با عملگرهای بیتی

bitwise operators - عملگرهای بیتی

برنامه ای بنویسید که یک عدد صحیح 16 بیتی (short) دریافت کرده و عملیات زیر را روی آن انجام دهد:

الف) آن را با اعداد (0x00FF و 0xFF00) AND کند. (عملگر AND بیتی & است)

ب) آن را با اعداد (0x00FF و 0xFF00) OR کند. (عملگر OR بیتی | است)

ج) آن را به اندازه هشت بیت به سمت راست شیفت دهد. (عملگر شیفت به راست << است. البته این عملگر را از اینجا کپی نکنید چون برعکس تایپ شده تا در وبلاگ درست دیده شود!) مثلا برای شیفت عدد y به اندازه 8 بیت به یکی از دو صورت زیر عمل می کنیم:

y = y >> 8;

y >>= 8;

د) آن را به اندازه هشت بیت به سمت چپ شیفت دهد. (عملگر شیفت به چپ >> است.)

ه) در انتها نیبل پایین و نیبل بالای عدد ورودی را به کمک چهار بخش قبلی حساب کرده و نمایش دهید. منظور از نیبل پایین و بالا یعنی 8 بیت کم ارزش و باارزش؛ مثلا برای عدد 0x64E5 نیبل پایین برابر است با E5 و نیبل بالا برابر است با 64


تمام نتایج را ترجیحا در قالب جدول نشان دهید.

موعد تحویل: 6 آذر

  • حسین خسروی
  • ۰
  • ۰

تخمین تابع با استفاده از RBF و SOM

تابعی شامل ترکیب چهار گاوسی با پارامترهای مختلف ایجاد کنید (چیزی شبیه شکل زیر البته با 4 قله!). تعداد 100 زوج (x,y) از این فضا (در بازه 5- تا 5+) به عنوان نقاط آموزش انتخاب کنید. دقت کنید که توزیع نمونه‌ها متناسب با توابع گاوسی باشد (برای این کار می‌توانید از randn کمک بگیرید).

  • الف) با استفاده از توابع آماده متلب شبکه som را برای 4 نرون، 12 نرون و 40 نرون روی این نمونه‌ها (مختصات x و y نمونه‌های آموزش) اجرا کنید و بردارهای مراکز به دست آمده را برای استفاده در مرحله بعد ذخیره کنید (در فایل گزارش، موقعیت وزنهای نهایی نمایش داده شود).

  • ب) با استفاده از شبکه RBF با روش یادگیری ماتریس شبه‌معکوس تابعی از این نقاط عبور دهید (از newrb استفاده نکنید و روابط آن را پیاده سازی کنید). تعداد نرونهای لایه‌ی مخفی را 12 نرون انتخاب کنید و برای مقدار دهی اولیه بردارهای مراکز، یکبار به صورت تصادفی از فضای ورودی و یک بار از خوشه‌یابی (نتایج قسمت الف) استفاده کنید. برای پارامتر پراکندگی خودتان تصمیم گیری کنید.

  • ج) قسمت ب) را با استفاده از newrb پیاده سازی کنید و نتایجتان را مقایسه کنید.

  • د) قسمت ب را برای 3 نرون و 40 نرون مخفی هم تکرار کنید و خطای مجموع (روی 100 نمونه آموزش) را در یک جدول با هم مقایسه کنید.

  • ه) تابع تخمین زده شده را در تمام حالتها با استفاده از توابع meshgrid و surf در بازه بین 5- تا 5+ رسم کنید.

radial basis function radial basis function

 

زمان و نحوه ارسال برنامه

موعد ارسال تمرین:  10 آذر
نحوه ارسال: فایلهای متلب یا C به علاوه یک فایل word شامل اطلاعات نویسندگان، کد نوشته شده و نتایج به دست آمده.

  • حسین خسروی
  • ۰
  • ۰

1. کار با توابع

1. برنامه‌ای شامل سه تابع به شرح زیر بنویسید:
‌أ.    تابع اول با نام ReverseNumber که یک عدد صحیح با تعداد ارقام نامعلوم دریافت کرده و معکوس آن را برگرداند مثلا به ازای 123456 باید عدد 654321 را برگرداند. (دقت کنید که عدد دریافت کند نه رشته. ضمنا تابع باشد نه اینکه داخل main یک برنامه بنویسید)

‌ب.    تابع دوم با نام ToUpper که یک رشته (char *) دریافت کرده و رشته متناظر آن با حروف بزرگ را برگرداند. مثلا اگر عبارت Peace Upon You O Aba-Abdellah  را بدهیم باید عبارت PEACE UPON YOU O ABA-ABDELLAH را تحویل دهد.

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

void Sort(double* data, int length);
void Sort(double data[], int length);


(نکته: این سه تابع را باید قبل از main تعریف کنید یا اینکه امضای آنها را قبل از main و بدنه آنها را بعد از main تعریف کنید)
در قسمت main برنامه ای بنویسید که ابتدا یک عدد گرفته و به کمک تابع اول، معکوس آن را برگرداند، سپس یک رشته دریافت کرده و به کمک تابع دوم آن را به حروف بزرگ تبدیل کرده و نمایش دهد و در انتها یک آرایه‌ی 5 تایی گرفته و آن را مرتب کرده و نمایش دهد.

2. پیاده سازی تابع میانگین متحرک (Moving Average)

تابعی با نام smooth بنویسید که یک آرایه و طول آن را به عنوان ورودی بگیرد و عناصر آرایه را با تغییر دهد به این ترتیب که به جای عنصر k ام، میانگین سه عنصر (k-1, k, k+1) را جایگزین کند. این تابع هم خروجی ندارد و در واقع داده های خود آرایه ورودی را عوض می کند:

void Sort(double* data, int length);
void Sort(double data[], int length);
به عنوان مثال اگر آرایه ورودی به صورت زیر باشد:
{10, 15, 11, 9, 8}
خروجی زیر حاصل می شود (عنصر اول و آخر تغییر نمی کند):

{10, (10+15+11)/3, (15+11+9)/3, (11+9+8)/3, 8}


تابع میانگین متحرک Moving Average Function

تابع میانگین متحرک Moving Average Function


حالا برنامه ای بنویسید که آرایه عددی A را از فایل (data.txt) بخواند و تابع smooth راروی آنها اجرا کند و در نهایت در فایل دیگری (output.txt) آرایه های تغییر یافته را ذخیره کند.
اگر با متلب یا اکسل می توانید کار کنید، این دو آرایه را قبل و بعد از اعمال smoothing ترسیم کنید (در متلب با دستور plot).

موعد تحویل 1 آذر ماه

  • حسین خسروی
  • ۰
  • ۰

#CPP_or_Python ?

تجربه یک برنامه نویس خبره در سایت StackOverFlow در مورد پایتون و سی پلاس پلاس


https://stackoverflow.com/questions/801657/is-python-faster-and-lighter-than-c


1. My experiences with Python show the same definite trend that Python is on the order of between 10 and 100 times #slower than C++ when doing any serious #number_crunching. There are many reasons for this, the major ones being: 

a) Python is #interpreted, while C++ is #compiled; 

b) Python has no #primitives, everything including the builtin types (int, float, etc.) are #objects; 

c) a Python list can hold objects of #different type, so each entry has to store additional data about its type. These all severely hinder both runtime and #memory consumption.


This is no reason to ignore Python though. A lot of software doesn't require much time or memory even with the 100 time slowness factor. #Development_cost is where #Python #wins with the simple and concise style. This improvement on development cost often outweighs the cost of additional cpu and memory resources. When it doesn't, however, then C++ wins.


پاسخ یک پایتون کار به این تجربه:

2. All the slowest (>100x) usages of Python on the shootout are scientific operations that require high GFlop/s count. You #should_NOT use python for those anyways. The correct way to use python is to #import a #module that does those calculations, and then go have a relaxing afternoon with your family. That is the pythonic way :)


خلاصه کلام اینکه، در پایتون فرایند توسعه برنامه، خیلی سریعتر است، اما سرعت اجرا برنامه بسیار کمتر از برنامه C++ است (10 برابر کندتر) . البته سرعت کمتر را با نوشتن ماژولهای محاسباتی در C++ و import کردن آنها در پایتون می شود جبران کرد!


http://sapp.ir/khosravi


پی نوشت (26 اسفند 96): تجربه عملی خودم را در مورد مقایسه این دو زبان ببینید: C++ یا پایتون

  • حسین خسروی
  • ۰
  • ۰

 الف) شناسایی چهره

تمرین سری دوم را روی شناسایی چهره از مجموعه ORL تکرار کنید. برای استخراج ویژگی حتما از ویژگیهایی غیر از میانگین بلوکی استفاده کنید، مثلا هیستوگرام گرادیان یا PCA یا Harr-like یا تبدیل فوریه یا ... (کد استخراج ویژگی را می توانید از وب تهیه کنید). 50% داده ها برای آموزش، 50% برای آزمایش. برای دانلود مجموعه ORL اینجا را کلیک کنید.

ب) تخمین تابع

1.    شبکه‌ی MLP که قبلا پیاده سازی کرده‌اید را به گونه‌ای تغییر دهید که تابع فعالسازی لایه‌ی خروجی آن خطی باشد.
2.    تعدادی نقطه از یک منحنی نویزی استخراج کنید و به عنوان نمونه‌های آموزش استفاده کنید؛ به یک تابع مرتبه 4 یا بالاتر مقداری نویز اضافه کرده و سپس چند نقطه (مثلا 40 نقطه) از آن را به عنوان نمونه‌های آموزش به شبکه MLP بدهید (مثل نقاط آبی رنگ در منحنی زیر).

3.    تابع تخمین زده شده را نمایش دهید (مثل منحنی قرمز رنگ در شکل)

تخمین تابع - Function Approximation

مواردی که باید رعایت کنید:

‌    استفاده از تابع newff متلب یا کتابخانه‌های آماده مثل opencv مجاز نیست و شبکه‌ی MLP را به طور کامل باید خودتان پیاده سازی کنید.
•    الزامی نیست که تابع مورد نظر الگوی مشخصی داشته باشد؛ مثلا می تواند تعداد نقاط مشخص شده توسط کاربر باشد که البته پیچیدگی کافی داشته باشد.
•    این تمرین را می‌‌توانید یک یا دو نفره انجام دهید.

زمان و نحوه ارسال برنامه

موعد ارسال تمرین: 20 آبان ماه

نحوه ارسال: فایلهای متلب یا C به علاوه یک فایل word شامل اطلاعات نویسندگان، کد نوشته شده و تابع به دست آمده.

khosravi.blog.ir

  • حسین خسروی
  • ۰
  • ۰
تمرین سری دوم را از این آدرس دانلود کنید. موضوع این تمرین شناسایی الگو به کمک شبکه MLP است.

موعد تحویل 10 آبان

  • حسین خسروی
  • ۰
  • ۰

Classification by Perceptron or Adaline

Write a program for classification of samples of two classes using single layer perceptron:

  • Samples are in 2D space
  • Sample preparation
  • Randomly around a line
  • From 2 Gaussian distributions with different μ and σ
  • Show the results in each iteration visually
  • Use C++, MATLAB or other languages
  • Optional: User can produce samples interactively
  • Repeat the problem with 5 classes
  • Due date: 25 Mehr

Sample output:

It is not necessary that your output is exactly like this!

طبقه بندی با پرسپترون

  • حسین خسروی
  • ۰
  • ۰
با سلام و احترام، به اطلاع می رساند انجمن ماشین بینایی و پردازش تصویر ایران در نظر دارد در حاشیه برگزاری دهمین کنفرانس بینایی ماشین و پردازش تصویر ایران (MVIP2017) که در روزهای 30 آبان لغایت 2 آذرماه 96 به میزبانی دانشگاه صنعتی اصفهان برگزار می شود، از پایان نامه های کارشناسی ارشد و دکتری برتر (تاریخ دفاع بعد از 94/07/20) که در زمینه های مرتبط با موضوعات کنفرانس باشند تقدیر به عمل آورد.

روال بررسی و امتیاز دهی: 

پایان نامه ها بر اساس آیین نامه انتخاب پایان نامه برتر مصوب انجمن ماشین بینایی و پردازش تصویر ایران (به پیوست) توسط گروه ارزیابان بررسی و امتیازدهی خواهند شد.
مدارک مورد نیاز جهت ارسال: با توجه به موفقیتهایی که متقاضی در راستای انجام پایان نامه کسب نموده و طبق ماده 4 آیین نامه انتخاب پایان نامه برتر شامل موارد زیر است:
  •      فرم معرفی پایان نامه که به طور کامل تکمیل شده است.
  •      تصویرگواهی دفاع از پایان نامه از مراجع مربوطه همراه با نمره ی اخذ شده.
  •      نسخه ی الکترونیکی و کامل تمام مقالات، که حاوی اطلاعات مجله و یا همایش مربوطه است.
  •      گواهی مقاله برتر.
  •      نسخه الکترونیکی و کامل پایان نامه.
  •      گواهی ثبت اختراع همراه با تائیدیه ی سازمان پژوهشهای علمی و صنعتی.
  •      تصویر قرارداد و گواهی خاتمه پایان نامه یا رساله از صنعت حمایت کننده.
  •      گواهی کسب رتبه اول تا سوم در جشنواره علمی-پژوهشی خوارزمی.
  •      توصیه نامه از استاد/اساتید راهنما.
  •      تکمیل فرم نامزدی (انتهای همین مطلب)
مهلت ارسال تا تاریخ 96/07/20 است و ارسال مدارک تنها به صورت الکترونیکی است.
جهت ارسال مدارک، می بایست فرم درخواست دانشجو به همراه امضای استاد راهنما (فرم 1) توسط متقاضی تکمیل و به انضمام دیگر مستندات در قالب یک فایل زیپ شده مطابق ساختار اشاره شده در آیین نامه به آدرس الکترونیکی info@ismvip.ir ارسال گردد.
قابل ذکر است که طبق بند 2-3 آیین نامه، از هر دانشگاه، حداکثر دو پایان نامه در هر مقطع ارزیابی خواهد شد. اگر از یک دانشگاه، بیش از سقف موردنظر ارسال شود، گروه ارزیابان با توجه به بررسی اولیه، تنها دو مورد از برترین پایان نامه ها را به منظور قرار گرفتن در ارزیابی نهایی، انتخاب خواهد نمود.

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

فرم 1 مربوط به اخذ تأییدیه از استاد راهنما از اینجا قابل دانلود است. تکمیل و ارسال این فرم به همراه سایر مدارک الزامی است. به مدارکی که بدون فرم 1 ارسال شوند، ترتیب اثر داده نخواهد شد.
به مدارکی که به صورت ناقص ارسال گردند، ترتیب اثر داده نخواهد شد.

فایلهای مورد نیاز

فرم 1

فرم نامزدی

اطلاعات بیشتر


  • حسین خسروی
  • ۰
  • ۰
متلب، از مهمترین نرم افزارهای مهندسی است که فرایند تحقیق و توسعه را تسریع می کند. لیکن دو مشکل بزرگ دارد، یکی اینکه رایگان نیست و دوم اینکه حجم آن خیلی زیاد است و بیش از 10 گیگابایت هنگام نصب فضا اشغال می کند. 

سه نرم افزار متن باز جایگزین برای متلب وجود دارد که در این آدرس معرفی شده اند. نرم افزارهای GNU Octave، Scilab و Sage که بهترین آنها GNU Octave است با حجمی حدود 200 مگابایت. 

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

دانلود نسخه 4.2.1 اکتاو (64 بیتی)


برای دیدن آخرین نسخه ها این آدرس را ببینید:


Octave-4.0.0 - گنو اکتاو - اکتیو جایگزین متلب
  • حسین خسروی