به بخش پرسش و پاسخ یادگیری عمیق خوش آمدید,
این نسخه آزمایشی سایت است.
لطفا به نکات زیر توجه کنید:
  • برای ارتباط با مدیران میتوانید از صفحه مدیران اقدام کنید.
  • سوال و جواب ها باید به زبان فارسی باشند. استفاده از زبان انگلیسی یا فینگلیش برای پاسخ دادن مجاز نیست.
  • لطفا بعد از پرسش سوال لینک سوال خود را در گرو تلگرام (Iran Deep Learning Group) معرفی کنید تا سریعتر به جواب برسید. برای دسترسی به آخرین لینک از منابع یادگیری استفاده کنید
  • لطفا بجای عکس از متن استفاده کنید. اگر متون طولانی هستند از سایت pastebin.com برای اپلود استفاده کرده و لینک حاصل را در سوال خود قرار دهید. برای قرار دادن تصویر ، از بخش ارسال تصویر ادیتور سایت استفاده کنید.
  • بعد از دریافت پاسخ، بهترین پاسخ را از طریق کلیک بر روی علامت تیک انتخاب کنید
  • اگر با خطا و یا مشکلی مواجه شدید از بخش تماس با ما در انتهای صفحه و یا ایمیل Coderx7@gmail.com موضوع را اطلاع دهید.

با تشکر

دسته بندی ها

0 امتیاز

سلام...با تشکر از همه کسانی که این گروه خیلی خوب رو راه اندازی کردند و دوستانی که با حوصله و مهربانی به سوالات پاسخ میدهند....
1-من به تازگی میخواهم که با پایتون با کافه کار کنم و سعی کردم در ویندوز کافه رو بیلد کنم...قبلا با پایتون کار نکردم...قبلش اناکوندا رو نصب کرده بودم... این لینک زیر هم محتویات فایل CommonSettings.props من رو نشان میدهد....

با ویژوال ، کافه رو بیلد کردم و اروری هم نداد ...در پوشه \Build\x64\Release هم فولدر pycaffe ایجاد شده ،
اما حالا اصلا نمیدونم باید چکار کنم یا مثلا یک کد رو توی python anaconda چطوری اجرا کنم؟
من این قسمت از سایت رو هم متوجه نشدم ...
"برای کامپایل کردن ماجول pycaffe , make pycaffe را اجرا کنید. سپس مسیر ماجول را به $PYTHONPATH خود به اینصورت اضافه کنید :

export PYTHONPATH=/path/to/caffe/python:$PYTHONPATH

2-من میخواهم confusion matrix رو برای مدل الکس نت خودم بدست بیارم...لینک زیر رو خوندم ، اما متوجه نشدم که چه کاری باید انجام بدهم...ممنون میشم من رو راهنمایی کنید
http://gcucurull.github.io/caffe/python/deep-learning/2016/06/29/caffe-confusion-matrix/
http://chrischoy.github.io/research/caffe-python-layer/

3- آیا در کافه امکان اینکه kfold cross validation رو انجام بدهیم هست ؟ اگر ممکنه راهنمایی بفرمایید چطوری این کار رو انجام بدهم که کارم ساده تر باشه ؟

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

توسط (215 امتیاز)

1 پاسخ

+1 امتیاز
 
بهترین پاسخ

سلام .
1.تو بخش ابزارهای سایت که توضیح دادم بنظرم . وقتی که pycaffe رو کامپایل کردید تو همون پوشه Release یه پوشه pycaffe پیدا میکنید. توی اون پوشه یه پوشه بنام caffe هست اونو کپی میکنید میبرید در جایی که anaconda رو نصب کردید تو مسیر Lib\site-packages کپیش میکنید .( یعنی پوشه Lib و بعدش پوشه site-packages )
دیگه نیاز به کاردیگه ای ندارید و همه چیز اکی هست .
اگر از شیوه cmake استفاده کنید باید همون پوشه python که در روت هست رو استفاده کنید. (که اینجا شما از ویژوال استودیو استفاده کردید که دیگه قدیمی شده و اموزش cmake هم در همین سایت چندبار گفته شده که سرچ کنید پیداش میکنید)
اون دستوراتی که برای کامپایل pycaffe نوشتید مربوط به لینوکسه و بکار میا تو ویندوز نمیاد . توضیحات برای ویندوز همون چیزی هست که بالا گفتم .
2. برای confusion matrix نیازی به نوشتن لایه جدید ندارید . میتونید از این کد که من قبلا نوشتم استفاده کنید

3.k-fold به کفی ربطی نداره این به شما بستگی داره و براحتی هم میتونید پیاده اش کنید. هم میتونید از پوشه های تصاویر استفاده کنید در کفی برای راحتی کارتون هم میتونید با آموزش ساخت دیتاست که در سایت هست دیتاسته های مختلف مورد نیازتون رو ایجاد کنید.

توسط (4.3k امتیاز)
انتخاب شده توسط
سلام...خیلی متشکرم سید جان از پاسخت...1-ببخشید من هنوز چندتا مشکل دارم...من هنوز نتونستم یک مثال رو با پایتون اجرا کنم و یک شبکه رو ترین و تست بگیرم...من سعی کردم یک کد پایتون رو از jupyther notebook و spyder  اجرا کنم ، اما نشد...ارور میده ImportError: No module named google.protobuf.internal
میشه یه مقدار بیشتر توضیح بدی که چطوری باید یک مثال رو انجام بدم ؟ بیشتر مراحل اجراش مهمه برام نه کدهاش...
2-برای پاسخ دوم ، این کد رو کپی کنم و در پایتون باید پیست کنم؟ فکر کنم باید تغییرش هم بدم چون 10 تا کلاس داره...
3-برای پاسخ سوم: دیتا ست رو خداروشکر از سایت یادگرفتم و به راحتی ساخته میشه.برای kfold  مثلا k=3 باشه ، دیتاستم رو به 3 قسمت تقسیم کنم و 1 قسمت برای تست و 2 قسمت برای ترین ،دیتاست ایجاد کنم و بعدش این کار رو 3 بار انجام بدهم و میانگین بگیرم؟
سلام . خواهش میکنم
سوال اول خطای import error هست لطفا تو یه سوال جداگانه بپرس که جواب خودشو بگیره. اینجا جواب نمیدم که اون قائده یک سوال یک جواب رعایت بشه و سردرگمی ایجاد نکنه برای کسایی که بعدا میان.
برای کدی که بهت دادم بله کد پایتون هست و بخش کلاسها رو بر اساس چیزی که مورد نیاز خودت هست باید تغییر بدی .
برای بخش سوم هم بله طبق همون تعریف k-fold پیش بری میشه همون.
لطفا اگه سوالهای بیشتر هست تحت یک سوال جدید بپرس . هر وقت (مثل الان) که جواب سوالتو گرفتی لطفا اون تیک کنار جواب رو بزن تا تکلیف سوال مشخص بشه.
ممنونم سید جان...چشم...لطف کردی
سلام...سید جان من هر چی سعی میکنم این کد confusion matrix  که شما آماده کرده بودیو ، اجرا بگیرم، ارور میگیرم...میشه نگاه کنی ببینی کجای این قسمت از کد رو اشتباه انجام دادم؟ متشکرم
http://pastebin.com/M3aYUcCX
این ارور رو میده
http://pastebin.com/AF8draer
این هم کل کد هست که برای کار خودم ادیت کردم...
http://pastebin.com/3B3cbh6E
با spyder 2.7 اجرا میگیرم
سلام دیدم خطا رو. باید موقع اجرا آرگومانهای مورد نیاز رو بفرستی. اون args که میبینی اون مقادیری که ست کردی مقدار پیشفرض نیستنا. فقط متن Help هست! من تو همون صفحه githubم مثال زدم چطوری مثلا اجرا بگیری هرچند اگه بدون ارگومان هم اجرا کنی مشخصه چه سویچ هایی داره و چیا رو باید بفرستی .
اها...درسته...متشکرم سید جان...من همین چیزی که فرمودیو انجام دادم و ارگومان رو به صورت زیر فرستادم
 python confusionMatrix_Recall_Precision_F1Scroe_Caffe.py --proto deploy.prototxt --model caffe_alexnet_sinatrain_iter_1606.caffemodel --mean mean_imagetest.binaryproto --db_type lmdb --db_path Mydataset_test_lmdb

، اما باز به خطای زیر برخوردم...
http://pastebin.com/DPNDqF9v
شرمنده ، دیگه روم نمیشه اصلا سوال بپرسم...انقدر سوال پرسیدم و شما جواب دادی...واقعا ممنونم...خدا بهت خیر بده
.سلام . دشمنت شرمنده باشه. مشکلی نیست .
خطایی که میگیری بخاطر فایل deploy یی هست که ساختی.لایه های دیتا (ترین و تست) رو حذف کن و بجاشاینو استفاده کن (یعنی قبل اولین لایه کانولوشنت این باید باشه)
input: "data"
input_dim: 1
input_dim: 3
input_dim: 227
input_dim: 227
force_backward: true
ممنونم سید جان...زنده باشی......کاری  که شما فرمودی، انجام دادم...نتایج نمیدونم چرا اینطوری شده؟! چون من دقت 95 درصد در فاز تست رسیدم..اما اینجا؟!  .confusion matrix در کجا قرار داره؟ مگه نباید 4*4 باشه؟ اخه من 4 تا کلاس دارم...انوجور که فهمیدم به ترتیب ستونها دارن percision , recall , fscore , total رو نشون میدن
http://pastebin.com/Ef31aXvY

2-چرا باید فایل deploy رو تغییر بدهیم؟ و اینکه کجاهاش باید تغییر داده بشه؟ من که فاین تیون کردم ، ایا باید باز هم فایلم رو تغییر بدم؟
سلام . آره من یادم رفت بزارمش! از طرفی استفاده از confusion matrix برای بدست اوردن همین اطلاعات هست که اینجا وارد شده. ولی به هر حال. این خط دستور رو بعد از اخرین خط بنویس و اجرا بگیر :
print( confusion_matrix(y_true=true_labels, y_pred=predicted_lables))
2. فایل دیپلوی با فایلی که برای اموزش یا فاین تونینگ استفاده میشه فرق داره . از اول شبکه لایه دیتا و اخر شبکه لایه SoftmaxwithLoss و Accuracy رو حذف میکنی . یعنی بعد از fc8یی که داری این لایه باشه
layer {
  name: "prob"
  type: "Softmax"
  bottom: "fc8"
  top: "prob"
}
بعد سیوش کن و بده به برنامه ای که دستته . اون برنامه هم کاری که میکنه اینه هر بار یه عکس رو از تست ستی که بهش معرفی کردی میخونه به شبکه میده و شبکه یه پیش بینی میکنه که چیه بعد با لیبلش مقایسه میکنه و بعد لیبل صحیح و لیبل پیش بینی شده توسط شبکه رو بدست میاره و هرکدوم رو تو یه لیست ذخیره میکنه. بعد هم از این اطلاعات برای نمایش اطلاعاتی که میبینی استفاده میکنه.

ورژن جدید رو من بروز کردم میتونی از اون هم استفاده کنی  :
https://gist.github.com/Coderx7/205651853a248a512256aa21f1d3bec0
سلام...خیلی عالی سید جان...ممنونم...خیلی لطف کردی....فک کنم دقیقا باید فایل deploy با تنظیمات فایل train_val.prototxt  الکس نت یکی باشه ، یعنی num_output و نام لایه ها هم یکی باید باشند، در غیر اینصورت جواب صحیح نمیداد...دست گلت درد نکنه...
یه سوالی هم داشتم...من در مرحله تست accuracy=%95 بدست اوردم...اما  confusion matrix مثل شکل زیر شده...دلیلش چی میتونه باشه؟ یعنی نمیتونم به accuracy اتکا کنم؟
http://bayanbox.ir/view/8039801086512303980/figure-2.png
سلام . فایل deploy شما باید از همون فایل train_valیی باشه که شبکه رو اموزش دادید و اون caffemodel رو بدست اوردید . بعد تغییراتی که گفتم رو روی همون باید بدید.
confusionmatrix کاری که میکنه میاد نشون میده چند درصد از اون دسته هایی که شما داری رو شبکه درست و چند درصد رو غلط تشخیص داده . اون خط اریب که میبینی دقت هر کلاس هست . مثلا n 69 درصده .ولی e 1 درصد رو درست تشخیص داده. همینطور کلاس p رو ببینید که 88 درصد درست تشخیص داشته ولی b تنها 2 درصد. به همین صورت میتونی ببینی که بصورت اشتباه 52 درصد اوقات گفته که b یه p هست! یا 19 درصد b رو n تشخیص داده . به همین شکل بقیه دسته ها رو میتونی ببینی که چقدر تشخیص صحیح و چقدر غلط داشتن و چیو با چی قاطی کرده شبکه .
برای درک این چیزا اون F1score و ... اطلاعات دیگه ای که برنامه بهت میده قابل استفاده اس. accuracy که گرفتی درسته اما برای همه کارها این accuracy نیست که بهش اکتفا میشه. precision و recall هم هست که بسته به ماهیت هر کار ارزش هرکدوم بیشتره و ملاک ارزیابی اونا قرار میگیرن .
یکی از چیزایی که باعث این مساله میشه متقارن نبودن نمونه کلاسهاس . یعنی یه کلاس مثلا 100 تا نمونه اموزشی داره یکی 500 تا یکی 1500 تا نمونه داره!
اها...واقعا ممنونم سیدجان که به سوالات ما با حوصله جواب میدی...
یک عالم، برتر از هزار عابد و هزار زاهد است...
سلام.خواهش میکنم . راستی چک کن دقتت با میانگین دقتی که اسکریپت برات حساب میکنه برابر باشه.(یعنی دقت صحیح هر دسته رو با هم جمع کنی تقسیم بر تعداد دسته ها کنی باید اون دقت نهایی که بدست اوردی ، بدست بیاد. یعنی 0.2 با 0.10 با 0.88 با 0.69 وقتی با هم جمع بشن تقسیم بر 4 بشن هرچی میشه این باید همون دقتی باشه که گرفتی اگه نباشه یه جای کارت میلنگه .چک کن که  یک وقت چیزی از قلم نیفتاده باشه.
ممنونم...والا جمع اینها که میشه 1.95 ، تقسیم بر 4 که تعداد دسته هام هست ، میشه 0.48 ، و accuracy که من قبلا بدست آوردم  0.95 بود.... یعنی اشتباه شده ؟
سید منظورت اینه که توی فایل دیپلوی یا اون اسکریپ چیزی رو اشتباه تنظیم کردم که یه جای غلطه یا اینکه توی فرایند تست و ترین و... اشتباهی رخ داده؟
سلام . آره . مثلا اگه mean استفاده کردی موقع ترینینگ اینجا هم باید اون mean رو بدی یا اگه موقع ترینینگ از دیتااگمنتیشن خاصی استفاده میکنی اینجا هم باید لحاظ کنی. اگه این موارد رو چک کردی و نبود. تو بخش دوم تعداد test iter و اندازه بچ خودت رو چک کن که تمام تست ستت رو در بر بگیرن نه کمتر نه بیشتر. تو 90 درصد اوقات این اشتباه در test iter هست که باعث میشه طرف یه دقت بگیره که صحیح نباشه. برای بخش اخر هم چک کن یکوقت اشتباهی دقت training رو بجای validation ثبت نکرده باشی.
...