پیاده سازی مسئله Regression با استفاده از Caffe

0 1,244

به نام خدا

توجه : در این پست فرض شده شما آشنایی کافی را با ابزار caffe دارید. در غیر اینصورت به آموزش ابزار caffe در همین سایت مراجعه کنید و سپس مطالب این پست را مطالعه فرمایید.

ممکن است این سوال در ذهن شما به وجود آمده باشد که چگونه می توان از ابراز Caffe برای پیاده سازی مسائل رگرسیون استفاده کرد.

ابزار Caffe به طور خاص برای classification طراحی شده و از طرفی نوع داده ی LMDB نیز برای داده های با لیبل صحیح (integer) مورد استفاده قرار می گیرد. لذا در صورتی که بخواهیم از داده ها با برچسب های اعشاری استفاده کنیم، دو راه وجود دارد :

  1. استفاده از فرمت HDF5
  2. تغییر فایل های Caffe، به نحوی که فرمت LMDB ، برچسب اعشاری را نیز بپذیرد.

با توجه به مزیت هایی که فرمت LMDB دادر لذا در این پست قصد داریم به شما نحوه تغییر ابزار caffe را بدین منظور آموزش دهیم. لازم به ذکر است در صورتی که بدون هیچ تغییری داده های با برچسب اعشاری را به فرمت LMDB تبدیل کنید تمام برچسب های شما صفرخواهند شد. فرض کنید داده هایی دارید که دارای برچسب هایی بین صفر و یک هستند، در این صورت بعد از تبدیل داده، شما داده ها با دوکلاس صفر و یک (اگر برخی از داده های شما برچسب یک داشته باشند) خواهید داشت و بعد از آموزش، شبکه ی شما به کلاس صفر overfit خواهد شد و این ممکن است شما را به اشتباه بیاندازد.

بنابراین تعدادی از فایل ها را به شرح زیر تغییر می دهیم:

در تمام خط های مشخص شده در فایلهای زیر نوع داده ای int را به float تغییر دهید.

  • فایل convert_imageset.cpp در مسیر caffe-root/tools :
  • فایل caffe.proto در مسیر caffe-root/src/caffe/proto :
  • io.hpp در مسیر caffe-root/include/caffe/util :
    • تمام متغیرهای label  در این فایل از نوع int هستند که به float تغییر دهید.
  • فایل io.cpp در مسیر caffe-root/src/caffe/util
بعد از اعمال تمام تغییرات مذکور لازم است تا دوباره caffe کامپایل شود . دقت کنید که هنگام Caffe نباید با هیچ خطایی مواجه شوید. در انتها شما نسخه ای از caffe خواهید داشت که برچسب های با نوع اعشاری را در فرمت LMDB نیز می پذیرد.

در ادامه توضیح کوتاهی در خصوص اینکه اگر بخواهید شبکه ای را برای مسئله رگرسیون finetune کنید به چه صورت می باشد خواهم داد.

مراحل به شرح زیر می باشد:

  1. از نسخه ی Caffe ای که تغییر داده اید به منظور تبدیل داده های خود استفاده کنید .
  2. تغییرات زیر را در فایل train_val.prototxx (فایل ساختار شبکه) مربوط به شبکه ی مورد نظر که قصد تنظیم دقیق آن را داریم را اعمال می کنیم :
    • پارامتر name : نام دلخواه خود را برای شبکه انتخاب کنید.
    • در لایه Data  هم در فاز train و هم در فاز test پارامترهای mean_file  و source را با آدرس داده های خود مقداردهی کنید.
    • batch_size را با توجه به نیاز خودمان در فاز test  و train تغییر می دهیم.
    • num_output لایه خروجی را با توجه به مسئله به ۱ تغییر می دهیم. (فرض می کنیم شبکه قرار است یک مقدار بین صفرو یک را پیش بینی کند)
    • نوع لایه ی loss را به Euclideanloss تغییر می دهیم.
  3. تغییرات زیر را در فایل solver.prototxt اعمال می کنیم :
    • پارامتر net با آدرس شبکه ی مورد نظر مقداردهی شود.
    • نرخ یادگیری تقسیم بر ۱۰۰ شود.
    • با توجه به batch_size ممکن است لازم باشد max_iter  نیز تغییر داده شود.
    • snapshot و snapshot_prefix  را به دلخواه خود تغییر دهید.

 

 

ارسال یک پاسخ

آدرس ایمیل شما منتشر نخواهد شد.

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