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

با تشکر

دسته بندی ها

+1 امتیاز

بعد از اینکه شبکه به طور کامل با داده های val, train با دقت ۹۸٪ اموزش دید در مرحله تست دقت 0 شد که خیلی به نظرم عجیبه و متوجه نمیشم چرا؟!
احتمال overfitشدن را هم بررسی کردم داده همگی شافل شده هستند و روی کلاس خاصی بایاس نیست
خروجی تابع زیر را هم دیدم همگی با هم برابر و 0 میباشد بنا بر این چون حتمال همه کلاس ها مساوی بوده و همگی برابر با 0 میاشد همه سمپل ها را لیبل کلاس 0 میزند!

 prediction = net.predict([input_image])
  

تعدا کلاس:20
train: 660
itr_train=2000
bachsize=256
validation: 160  تعداد
bachsize=50
test:160  تعداد
data base:   lmdb

نوع شبکه :alexnet
تنظیمات solver:

net: "****/train_val.prototxt"
test_iter: 4
test_interval: 500
base_lr: 0.001
lr_policy: "step"
gamma: 0.1
stepsize: 100000
display: 40
max_iter: 450000
momentum: 0.9
weight_decay: 0.0005
snapshot: 100
snapshot_prefix: "****_train"
solver_mode: GPU

پارامتر های مربوط به تست:

 MEAN_FILE = CAFFE_ROOT+'/python/caffe/imagenet/ilsvrc_2012_mean.npy'
 TEST_FILE = CAFFE_ROOT +'/data/test1/test.txt' TEST_FOLDER =
 CAFFE_ROOT+'/data/test1/pic/' LABLE_FILE = CAFFE_ROOT+
 '/data/test1/labels.txt' MODEL_FILE = CAFFE_ROOT+
 '/models/test1/deploy.prototxt' PRETRAINED = CAFFE_ROOT +
 '/model/test1/snapshout/test1_train_iter_2000.caffemodel'

آپدیت :
در این قطعه کد من داده خودم را که تا حالا شبکه ندیده تست میکنم
اما خروجی net.predictتماما 0 هست
test _code
اصلاحیه کد :
غلط :TEST_FILE = CAFFE_ROOT +'/data/test1/val.txt'
صحیح:TEST_FILE = CAFFE_ROOT +'/data/test1/test.txt'
روی این کد حتی داده های valو train هم نتیجه مشابه دارند

کد تولید «‌lmdb

توسط (136 امتیاز)
ویرایش شده توسط
شما فاین تون کردید ؟ یا نه؟
از mean که دارید استفاده میکنید مربوط به تصاویر شما هست یا نه mean  مربوط به دیتاست ایمیج نت؟
تصاویرتون یکی هست که از یک مین استفاده کردین ؟
تو تست این مین رو دخالت میدید؟
ضمنا بچ سایز رو برای ترین و تست طوری انتخاب کنید که بخش پذیر باشن. الان تست شما هر بار وسط یک ایپاک اتفاق می افته نه انتهای اون و پارامترها تنظیم نیستن. برای اینکه دقیق جواب بگیرید باید سعی کنید حدالامقدور در انتهای هر ایپاک این کار صورت بگیره(یا ضریبی از اون).
مثلا با بچ سایز 33 شما هر 20 تکرار یک ایپاک دارید. و اینطور تست شبکه رو میتونید هر 20 بار حداقل انجام بدید و یا هر 500 بار (که میشه 25 ایپاک در میون) اینجام بدید. برای تست هم میتونید بچ سایز رو برابر 40قرار بدید و test_iter هم مساوی 4 بشه. و اینطور دقت شما صحیح محاسبه بشه.
من فکر کنم نتونستم خوب توضیح بدهم . من انچه را که شما میگید تست بهش میگم validation . من کدی نوشتم که دیتام از روز اول ۳ بخش میکنه
 train
.validation  
test
تمام پارامتر هایی که ازش حرف زدید مربوط به  validation من هست .

meanمن مربوط به imagnet هست من دیدم از مین هم دیگه استفاده کردن خیلی تصاویر من رنگی نیست.
به هر حال اگر اشکال از این mean  بود میبایست  در همون مرحله ؛تست همراه با اموزش؛( انجام شده روی داده های validation) دقت پایینی بدست می امد.

در تست من تنها ازتابع  deploy.prototxtو اسنپشات itrاخر استفاده میکنم.
نه من متوجه هستم . من اشتباه کردم منظورم همون validation شما بود. در caffe این زیاد مرسوم نیست و بصورت پیشفرض تست همون ولیدیشن هست و ما جداش نمیکنیم برای همین اینطور عرض کردم.
به هرحال چون محاسبه دقت ولیدیشن ست شما و همینطور ترینینگ ست شما الان دقیق نیست باید بر اساسی که عرض کردم اقدام کنید.
دوتا نکته هست که باید بهش بپردازید یکی همین اندازه بچ و ایپاک و... هست. و نکته بعدی همین مین. تا مطمئن بشید گیر از اینها نباشه.
در مورد مین باید بگم که استفاده یا عدم استفاده اون تغییرات زیادی رو دقت شما میتونه داشته باشه. شما بدون استفاده از مین سعی کنید ترین کنید تست کنید بعد ببینید آیا تغییری مشاهده میکنید یا نه.
در فایل دیپلوی هم ببینید همین مین وجود داره؟ اگر اره حذفش کنید و نتیجه رو بفرمایید لطفا
mean را نمیتونم بردارم حتی وقتی scale=      0.00390625
دارم باز خطا دارم (تصاویر سیاه و سفید میباشد)
بعد اگر اون دقتی که معمولا گزارش می کنند همینی باشه که من توی validation میگیرم که خوبه
من پارامتر ها را به شرح زیر تغییر دادم.
test_iter=۴
test bach=40(منظور همون ولیدیشن میباشد)
trainbach=33
چون میخواستم زودتر نتیحه را گزارش کنم روی 1000 itrگذاشتم و دقت فرق چندانی نکرد(97٪)
خطا رو باید بگید چه خطایی میگیرید . این دقت صحیح هست. خصوصا این قضیه تو مقالات و گزارشات بشدت مهم هست چون قبل از این شما دقت کاذب میگرفتید حتی اگر 2 دهم درصد هم تفاوت کنه باز مساله مهمی هست . شما مین رو برای تصاویر خودتون محاسبه کنید و از اون استفاده کنید نه مین ایمیج نت. برای تست هم سعی کنید از مثالهای ipython استفاده کنید و بعد ببنید با توجه به پیشنهاد آقا محسن نتیجه چی میشه.
من از مین داده های خودم استفاده کردم دقتم ۳ درصد افت داشت البته دقت میانی نتونسام دقت اخر را ببینم. اما همجنان توی تست ۰ دقت میگیرم.
 منظورتون را از مثالهای ipythonمتوجه نشدم  پیشنهاد آقا محسن تعیری در دقت ولیدیشن نداد. ولی متاسفانه من نمیتونم محتوای فایل lmdbام را بخونم نه با اکسسز نه باlmdb viwer شما پیشنهادی ندارید؟
مگه lmdb رو خودتون ایجاد نکردید ؟برای lmdb اینجا رو ببینید و سعی کنید بخونید مقادیر رو ببینید چطور وارد کردید.:http://deepdish.io/2015/04/28/creating-lmdb-in-python
در مورد Ipython هم نمونه مثالهایی هستن که تو پوشه examples میتونید ببینید و اونها رو با jupiter notebook که همراه اناکوندا هم نصب میشه میتونید اجرا کنید.
چرا من خودم lmdbرا تولید کردم کد  تولیدش را هم توی صورت سوال اوردم  از روی  var و trainکه توی فایل تکس بهش دادم برای من تولید میکنه توی لینوکس که کاملا محتواش خالیه!توی ویندوز( اکسسز) میگه فرمتش اشتباهه(این همون کدیه که imagenetاستفاده میکنه). حتی نتونستم lmdb که برای mnistاز روی کد گیت درست کرده بودم  را ببینم. اگر لازمه اون کد راهم ضمیمه کنم.اگر واقغا دیتا بیس من خالیه پس داره از روی چی ترین میکنه؟
خب این خیلی راحت داره از همون convert_imageset استفاده میکنه. و مشکلی این برنامه نداره.باز برای اطمینان خودتون با پارامترها convert_imageset رو اجرا کنید و resize و... رو فعلا درنظر نگیرید(گفتید اندازه تصاویرتون 256 هست پس نیازی به ریسایز ندارید). فقط شما مسیر ولیدیشن و تستون چرا یکیه؟!.برای دیدن محتوای lmdb از آدرسی که دادم استفاده کنید و چک کنید.
به این دلیل  ادرس ترین و ولیدیشن توی کد ال ام دی بی یکی هست چون باید روت عکس را داد و روت عکس برای هر دو یکی هست.
محتوای ال ام دی بی را با کد دیگه ای دیدم مشکلی نداره.
 من میدونم اشتباهم اینه که درست پردیکشن را انجام نمیدوم اما نمیدونم درستش چیه

2 پاسخ

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

من این مشکل را بلاخره حل کردم
همون طور که حدس میزدم اشتباه در کد تست بود. فایل deploy من اشتباه داشت که با تغیرات زیرکه در فایل train.prototxtانجام دادم و deploy جدید ساختم ودقتم درست شد.

Remove input datalayer and insert a description of input data dimension
Remove “loss” and “accuracy” layer and insert “prob” layer at the end
توسط (136 امتیاز)
+2 امتیاز

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

توسط (535 امتیاز)
من برای شافل کردن از toolsخود کفی استفاده کردم که اونحا یک فلک shuffle اما برای اینکه هر ابهامی رفع بشه وردی کد تبدیل lmdbرا هم  شافل کردم باز نتیجه تغیری نکرد . من حرفم اینه اگر اشتباهی توی ترین من هست که باید  داده ولیدیشن دقت اش پایین باشه من حس میکنم این اشتباه از کد تست میباشد اما نمیدونم کجاش.داده های من به این صورته:
شماره سمپل ـ(شماره کلاس).پسوندفایل      شماره لیبل
همگیinteger
خب شما داده های val رو هم دارید در مرحله آموزش بررسی می‌کنید. اگر این بحث برچسبهای اشتباه پیش اومده باشه موقع بررسی val هم این اشتباه پیش میاد و دقت اشتباها بالا می ره.
فرمت بر چسپ ها را ارادیه کردم به نظرم اشکالی درش نیست نظر شما چیه ...
...