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

با تشکر

دسته بندی ها

0 امتیاز

با سلام و خسته نباشید
ضمن تشکر از سایت خوبتون
من مطالب سایتتونو خوندم ومی خواهم یه نمونه دسته بندی پیاده سازی کنم.باتوجه به مقاله شما و همچنین قسمت آموزش سایت Caffe مراحل زیر رو اجرا کردم ولی جاهایی مشکل دارم
دوتا فولدر درست کردم : یکی برای Train و دیگری به نام Test که هر کلاس تقریبا 200 تصویر دارم.
enter image description here

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

 convert_imageset.exe --resize_height=32 --resize_width=32 --shuffle
 .\models\mymodel\Train .\models\train\train.txt
 .\models\mymodel\mydataset_train_lmdb

مرحله دوم فایل باینریمو ساختم :

 compute_image_mean .\models\mymodel\mydataset_train_lmdb
 .\models\mymodel\mean_image.binaryproto

مرحله سوم که می خواهم کار TrainوTest را انجام دهم چندتا سوال داشتم :

caffe train --solver .models\mymodel\solver.prototxt

1.آیا اندازه تصویر 32 * 32 از دقت شناسایی کم نمی کند؟ چه اندازه ای مناسب می باشد؟

2.آیا می توانم از معماری bvlc_googlenet استفاده کنم؟

3.پارامتر های مناسب برای Solver من چی هست؟

net: "models/bvlc_googlenet/train_val.prototxt"
test_iter: ؟
test_interval: ؟
test_initialization: false
display: 40
average_loss: 40
base_lr: 0.01
lr_policy: "step"
stepsize: 320000
gamma: 0.96
max_iter: ؟
momentum: 0.9
weight_decay: 0.0002
snapshot: ؟
snapshot_prefix: "models/bvlc_googlenet/bvlc_googlenet"
solver_mode: GPU

4.پارامتر batch_size در train_val.prototxt برابر با تعداد دسته هایی که پردازش می شوند با توجه به اینکه من 1000 تصویر دارم عدد 200 مناسب می باشد یا خیر؟

5.با توجه به ایجاد دیتابیس وتغییر اندازه تصاویر به 32*32 آیا crop_size نیاز می باشد؟

6.در لایه "loss3/classifier" پارامتر num_output باید برابر تعداد کلاس ها باشد یعنی num_output = 5 ؟

7.آیا باید جای دیگر تغییراتی اعمال کنم؟

با تشکر فراوان از زحمات شما.

توسط (100 امتیاز)
ویرایش شده توسط

1 پاسخ

0 امتیاز

سلام
اندازه تصویر ورودی شما بیشتر تابع امکانات سخت افزاری شما و معماری شماست . اگه شما اندازه تصاویرتون بزرگ باشه قطعا دقت بهتری میگیرید خصوصا اگر لایه های بیشتری رو داده های بیشتری بتونن کار کنن .
اما اگر مشکل دارید میتونید سایز رو کاهش بدید . 32 در 32 هم بد نیست (بعضی از دیتاست های استاندارد مثل CIFAR10/10,SVHN,STL اینا همه 32 در 32 هستن . و باز جالبه بدونید تصاویر ایمیج نت که اول به 256 ریسایز میشن و بعد با کراپ 227 در 227 به شبکه فرستاده میشن تو همون دو لایه اول تبدیل به سایز 56 در 56 و مثل این میشن و شبکه در ادامه با این اندازه شروع به کار میکنه و هر بار بعد چند لایه اونو کاهش میده . اینو گفتم تا یک ایده داشته باشید از بقیه دیتاها)

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

اندازه بچ سایز شما اگه کم باشه گرادیان غیر پایدارتری درست میکنه و دیرتر به همرگایی میرسید . معمولا سایز بین 32 تا 256 و بعضا 512 سایز مناسبیه (من خودم همیشه بین 50 تا 100 رو استفاده میکنم ) . نکته دیگه اینه که اندازه بچ بیشتر باعث میشه اموزش سریعتر انجام بشه و تعداد تکرار های کمتری برای رسیدن به یک ایپاک مورد نیاز باشه .

میتونید کراپ نکنید اما اگر خواستید بکنید سعی کنید تصویر ورودی رو zero pad کنید با چند پیکسل تا وقتی کراپ میکنید با اندازه 32 کراپ کنید . (هرچند بعضی ها ممکنه با اندازه کمتر هم کراپ کنن اما من شخصا در عمل نتیجه بدتری گرفتم )

معماری رو که من ندیدم اما اگر قبل از لایه سافتمکس هست بله باید اندازه تعداد دسته های شما باشه
تست ایتر و تست اینتروال رو هم مقادیرش رو ست کنید . در این مورد تو سایت توضیح دادم چطور باید عمل کنید .

توسط (4.3k امتیاز)
سلام . اولا تعداد تصاویر شما خیلی کمه باید بیشترش کنید . حتی اگه از فاین تونینگ هم میخوایید استفاده کنید باز این اندازه تصاویر کافی نیستند بنظر من و فکر نمیکنم نتیجه مناسب رو بتونید بگیرید.
در مورد ست کردن نرخ یادگیری و تعداد تکرارهای کلی هم این یه مساله مرتبط با دیتاسته شماس .وی جی جی نت روی ایمیج نت اموزش دیده که یک و نیم میلیون تصویر داره! و تنظیماتش با شما قطعا متفاوته و بهینه برای شما نیست.
بنظرم شما سعی کنید از معماری سبک تری مثل squeezenet استفاده کنید شاید نتیجه بهتری بگیرید (البته با فاین تون و افزایش دیتاست )
دوما حجم مدل عادی هست چون وی جی جی نت تعداد پارامترهای خیلی زیادی داره (بیش از 140 میلیون ) و این ربطی به اندازه تصویر و اندازه دیتاست شما نداره.مدل حاصل فقط وزنهای اموزش دیده اس و چون تعداد زیادی از اونها وجود داره حجم اونم زیاده .

اگرخطایی هم میگیرید میتونید در یک سوال دیگه اونو مطرح کنید. اینجا اگه جوابتون رو گرفتید لطفا جواب رو با زدن تیک مشخص کنید که تکلیف این سوال مشخصه بشه.
سلام و خسته نباشید
من بر روی یک نمونه کار کردم که معماری آن  1000CaffeNet تصویر برای train و 200 تصویر  برای val در 10 دسته بندی دارد مقادیر test_iter : 4, batch_size test : 50 ست شده است که 4 * 50 برابر با 200 می شود کل دیتا تست ما را پوشش می دهد و همچنین  test_interval : 1000 می باشد  batch_size در مرحله train :256 می باشد یه مقدار گیج شدم.آیا این مقادیر درست می باشد؟
سلام . درسته . ببینید در درجه اول چیزی که مهم هست تعداد test iter و اندازه بچ تست ست هست تا وقتی در هم ضرب میشن تمام تست ست ما رو در بر بگیره . در مرحله بعدی تنظیم test interval با اندازه بچ ترینینگ ست هست تا بتونیم بر اساس epoch (یا یک دور اموزش کامل روی ترینینگ ست ) تنظیم کنیمو بعد بر اساس اون تصمیم بگیریم max iter چقدر باشه که مثلا با توجه به این interval مشخص کننده تعداد epoch یی باشه که میخواییم شبکه ما اموزش ببینه.
اینکه حتما تست ها بعد از هر ایپاک یا هر n ایپاک انجام بشن این ضروری نیست.یعنی اگر دیدید یه اندازه بچی انتخاب کردید که نمیشه یه ضریبی براش پیدا کرد تا یه ایپاک کامل بدست بیاد (مثلا کمتر از ایپاک یا بیشتر از یک ایپاک میشه) مهم نیست. مثلا اگه شما تعداد نمونه اموزیشیتون مثلا 1373 تا باشه و اندازه بچ ترینینگ رو برابر 100 قرار داده باشید هر کار کنید میبینید نمیشه درست و حسابی یه عدد غیراعشاری بدست اورد که برای test interval استفاده اش کنیم. مثلا بگیم هر 13 تکرار یعنی 1 ایپاک اتفاق افتاد.(همیشه یه عدد اعشاری مثل 13.73 و.. میشه)
اینجا دیگه بر میگرده به انتخاب خودتون میتونید کلا قضیه ایپاک رو بیخیال بشید و همینطوری یه test interval مشخص کنید مثلا 5 یا مثلا 30 یا ... که بعد هر 5 تکرار یا 30 تکرار تست انجام بشه روی شبکه.
میتونید هم سعی کنید تا جایی که ممکنه یه عدد نزدیک به یک ایپاک کامل رو انتخاب کنید تا بتونید حدودی تقریب بزنید که به ازای هر ایپاک شبکه چطور داره کار میکنه مثلا. (مثلا 1373 بر 100 میشه 13.73 ما میتونیم interval رو بزاریم 14 مثلا) .
نکته ای که اینجاست اینه که دقت کنید تو زمانی که مثلا ما 1373 تا نمونه داریم و وقتی test interval رو برابر یه عددی مثل،  مثلا 5 قرار میدیم این اتفاق می افته . هر 5 تکرار شبکه تست میشه . یعنی بار اول 500 عکس از 1373 تا به شبکه ارائه شده و شبکه با اینها تنظیم شده و ما یه تست میگیریم . بعد تو تکرار 10 ام 500 تصویر دیگه به شبکه ارائه شده(یعنی تا الان 1000 تصویر رو شبکه دیده و تنظیم شده به ازای اونها.) در تکرار 15 ام 500 تصویر جدید و یعنی همه تصاویر یکبار به شبکه ارائه شدن + یکسری تصاویر بیشتر.
همین قضیه بعضا ممکنه باعث ایجاد تفاوتهایی در دقت بدست اومده داشته باشه ولی اگه دیتاست نرمال باشه و تعداد تکرار هم طوری باشه که چندین بار کل تصاویر دیتاست به شبکه ارائه بشه مشکل خاصی نیست.
...