PDA

View Full Version : حرفه ای: شناسایی سبک موزیک به وسیله هوش مصنوعی



hamedsoft
جمعه 08 مهر 1390, 13:47 عصر
با سلام
من ویژگی هایی از موزیک را با استفاده از کاموپوننت MIR Toolbox بدست آورده ام (شش ویژگی)
حال می خواهم راه حلی به همراه راهنمایی به من پیشنهاد دهید تا بتوانم موزیکی را که به عنوان ورودی دریافت می کند سبک آن را شناسایی کند.

من خودم راه حلی را که انتخاب کرده بودم شبکه های عصبی پرسپترون بود. حال اگر شما نیز همین نظر را دارید کمی مرا راهنمایی کنید.

فایل ویژگی ها را برای شما پیوست می کنم

با تشکر از اینکه مرا در انجام این پروژه یاری می نمایید.

مصطفی ساتکی
دوشنبه 11 مهر 1390, 08:40 صبح
شما در هر حال به یک classifier نیاز دارید و از آنجا که مدلتون غیر خطی انتخاب mlp هم گزینه خوبیه فقط می مونه train که اون هم باید دقیق صورت بگیره اگر data تون همینه که در بالا قرار دادید به راحتی قابل train ولی تجربه به من میگه این میزان داده برای یک classifier مناسب نیست .حالا نکته ای که وجود داره داده های ورودیتون یه جوری در نظر بگیرید که بتونید تو بازه [0.5,-0.5] scale کنید . در ضمن داده های نویز و داده های negative رو هم فراموش نکنید نویز از روی داده های ورودی تولید میشه داده های negative هم یک کلاس مجزاست یعنی هر آنچه که جز اون 18 کلاسی که قرار دادین نباشه در ضمن تعداد داده هاتون رو برای هر کلاس افزایش بدین تا شبکه بتون قابلیت تعمیم پذیری خوبی داشته باشه در انتخاب توپولوژی و استراتژی آموزش هم مقداری تحقیق کنید
در ضمن از SVM هم می تونید استفاده کنید

hamedsoft
سه شنبه 12 مهر 1390, 14:35 عصر
تشکر می کنم از جواب کاملتون.

من خودم تو این زمینه کار نکردم فقط قبلا چند پروژه به وسیله Cellular Automata انجام دادم. این پروژه با این روش قابل پیاده سازی نیست؟

حال در مورد جوابتون چند تا سوال دیگه دارم:

حالا نکته ای که وجود داره داده های ورودیتون یه جوری در نظر بگیرید که بتونید تو بازه [0.5,-0.5] scale کنید
منظورتون اینه که این داده هایی که دارم رو باید تو این رنج در نظر بگیرم؟


در ضمن داده های نویز و داده های negative رو هم فراموش نکنید
باید این داده ها رو هم استخراج کنم؟
در این مورد این تصویری رو که پیوست می کنم مربوط به کامپوننتی هست که دارم باهاش ویژگی ها رو استخراج می کنم. می تونید بگید کدوم ویژگی ها بهترن که باشند و اگه لطف کردید نام فارسی شون رو هم بگید.


در ضمن از SVM هم می تونید استفاده کنید
بیشتر توضیح نمی دید؟

در مورد دیتابیس داده ها هم باشه. بیشترش می کنم.

مصطفی ساتکی
پنج شنبه 14 مهر 1390, 10:49 صبح
یعنی اینکه مقادیری رو میخاید به لایه ورودی اعمال کنید ممکنه اعداد اعشاری تو هر بازه ای باشه شما اونا رو تو بازه ذکر شده نرمال کنید برای
نرمال سازی می کنید بدین صورت

void normalize(const vector<float>srcData, vector<float>& dstData, double a, double b,
int norm_type, int rtype)
{
double scale = 1, shift = 0;

double smin = 0, smax = 0;
double dmin = MIN( a, b ), dmax = MAX( a, b );
getMinMax( src, &smin, &smax);
scale = (dmax - dmin)*(smax - smin > DBL_EPSILON ? 1./(smax - smin) : 0);
shift = dmin - smin*scale;

for (int i=0; i < srcData.size() ; i++)
dstData[i] = srcData[i] * scale + shift;
}



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

svm یا support vector machine که داده ها رو بر روی hyper plane مبرن و داده های را به دو بخش مجزا می کنند همانند شبکه های ocon با 2 خروجی

hamedsoft
پنج شنبه 14 مهر 1390, 11:34 صبح
ممنون برم ببینم چکار می تونم بکنم

torisoft
پنج شنبه 14 مهر 1390, 20:41 عصر
برای اینکه داده های بهتری از لحاظ طبقه بندی داشته باشید اکیدا پیشنهاد می کنم از خوشه بندی Hard c-means یا Fuzzy c-means استفاده کنید.
اطلاعات مفید در این رابطه رو میتونید در نرم افزار مطلب پیدا کنید.