توابع Callback
آموزش‌های پایه‌ای هوش مصنوعیآموزش‌های پیشرفته هوش مصنوعیپایتون و ابزارهای یادگیری عمیقپردازش گفتارکتابخانه‌ های یادگیری عمیق

کاربرد توابع Callback در کتابخانه تنسورفلو

    0
    مدت زمان مطالعه: ۵ دقیقه

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

    به بیان دیگر، توابع Callback همچون صفحه کیلومترشمار خودرو می‌مانند. با استفاده از صفحه کیلومترشمار می‌توانید از میزان سوخت، سرعت، فشار لاسیتک‌ها و موارد دیگر مطلع شوید، به صورت ایمن و با کنترل کامل رانندگی کنید و دچار حادثه نشوید. توابع Callback شبیه به نسخه‌ای از این صفحات هستند که قابلیت‌های خودرانی را هم به اطلاعات قبلی اضافه می‌کنند؛ این توابع کاربردهای زیادی دارند؛ برای مثال، با استفاده از آن‌ها می‌توانید بر تابع زیان نظارت داشته باشید و در صورتی که مدل به مشکلی برخورد به سرعت آن را متوقف کنید.

    توابع Callback

    انواع توابع Callback

    در تنسورفلو ۲.۰ توابع Callback زیادی وجود دارند. در این قسمت در مورد هرکدام از این توابع، وظایف و پیاده‌سازی آن‌ها صحبت خواهیم کرد.

    BaseLogger

    تابع BaseLogger به صورت پیش‌فرض روی مدل شما اجرا خواهد شد و نیازی به فراخوانی مستقیم ندارد. زمانی که دستور ()history = model.fit . را می‌نویسید، متغیر  history به یک شیء tf.keras.callbacks.History   منتسب می‌شود. مقدار محاسبه‌شده‌  history  برای این شیء یک دیکشنری است که اطلاعات مربوط به میانگین دقت و میانگین تابع زیان هر دوره آموزشی را دربردارد. مقدار محاسبه‌شده‌ params  نیز یک دیکشنری شامل پارامترهایی است که برای برازش مدل استفاده می‌شوند.

     

    CSVLogger

    تابع CSVLogger یک فایل CSV روی دیسک می‌نویسد؛ این فایل اطلاعاتی را در مورد دورهای آموزشی، صحت و تابع زیان در برمی‌گیرد که بعداً می‌توان مورد بررسی قرار داد. در صورتی که می‌خواهید نمودارهای خود را رسم یا روند آموزش مدل‌تان را در طی زمان ثبت کنید، این تابع می‌تواند بسیار مفید باشد. برای فراخوانی و استفاده از تابع CVSLogger این کد را در فایل آموزشی خود اجرا کنید:

     

    EarlyStopping

    زمانی که معیارهای تحت نظارت (همچون تابع زیان یا صحت) بعد از چندین دور بهبود نیابند، تابع EarlyStopping فرآیند آموزش را متوقف می‌کند. با استفاده از این تابع می‌توان آموزش غیرضروری مدل را (وقتی که بهبودی اتفاق نمی‌افتد) کاهش داد.

     

    ModelCheckpoint

    تابع ModelCheckpoint بعد از یک یا چند دور آموزشی موفقیت‌آمیز (این تعداد را خودتان، برای مثال، بر اساس میزان دقت یا تابع زیان تعیین می‌کنید) مدل را به صورت یک فایل checkpoint، در فرمت hdf5، روی دیسک ذخیره می‌کند. نام فایل‌های خروجی می‌تواند به صورت پویا براساس شماره دور مشخص شود و همچنین می­‌توان در کنار آن معیار موردنظر خود را به عنوان بخشی از نام فایل وارد کنید. این تابع Callback در شرایطی که اجرای یک دور آموزشی زمان زیادی می‌برد (در شبکه‌های عمیق) و نمی‌خواهید در صورت اختلال در سیستم، اطلاعات آموزشی مهم را از دست بدهید، بسیار مفید خواهد بود. یکی دیگر از کاربردهای این تابع هنگام استفاده از فضای AWS AWS spot instances برای آموزش مدل است که نمی‌­خواهید منابع مورد استفاده از مقدار ماکزیمم فراتر بروید.

    LearningRateScheduler

    یکی از مهم‌ترین مواردی که در فرآیند بهینه‌سازی آموزش مدل با آن روبرو خواهید شد، تنظیم یک مقدار بهینه برای نرخ یادگیری است؛ این نرخ یادگیری بهینه در نهایت اندازه‌ گام‌ها در طی فرآیند گرادیان کاهشی را تعیین می‌کند. مسئله اینجاست که تنظیم یک مقدار ثابت برای نرخ یادگیری باعث می‌شود تابع هزینه/هدف Cost/objective function شبکه‌ شما همگرایی ایده‌آلی نداشته باشد؛ به همین دلیل بهترین کار استفاده از نرخ یادگیری متغیر است.

    بدین منظور می‌توانید با یک مقدار نسبتاً بزرگ شروع کرده و طی دورهای آموزشی آن را کاهش دهید. برای تنظیم نرخ یادگیری، باید یک تابع ساده بنویسید که خروجی آن نرخ یادگیری دلخواه بر اساس دور آموزش جاری است و این خروجی را به عنوان پارامتر schedule وارد تابع LearningRateScheduler کنید.

    RemoteMonitor

    RemoteMonitor یک تابع Callback مفید است که هنگام آموزش استفاده می‌شود. این تابع برای ارسال  وقایع events به سرور مورد استفاده قرار می‌گیرد. وقایع شامل اطلاعاتی همچون گزارش آموزش، رویه‌های طولانی Verbose procedures و سایر اطلاعات می‌شوند. این تابع به کتابخانه‌ requests   نیاز دارد. وقایع به صورت پیش‌فرض به root + '/publish/epoch/end/'  فرستاده می‌شوند. این تابع یک روش POST HTTP است به همراه آرگومانی که دیکشنری از داده‌های وقایع به فرمت JSON می‌باشد. اگر send_as_json روی True تنظیم شده باشد، محتوای درخواست از نوع  application/JSON خواهد بود. در غیر این صورت، JSON موازی‌سازی شده Serialized JSON درون یک فرم فرستاده خواهد شد.

    TensorBoard

    احتمالا با کتابخانه های یادگیری عمیق آشنایی دارید. اما اگر تا به حال با کتابخانه تنسورفلو کار کرده باشید احتمالاً با کاربردهای جالب تابع TensorBoard آشنایی دارید. این ابزار با مصورسازی آنچه طی آموزش رخ می‌دهد به توسعه‌دهندگان کمک‌های زیادی ارائه داده است. یکی از راه‌های فعالسازی این ویژگی‌ها برای مدلی که در دست دارید، به کاربردن تابع TensorBoard است. با استفاده از این تابع، وقایع داخل یک مسیر نوشته می‌شوند که بعداً می‌توانید آن را با کمک ابزار TensorBoard مورد بررسی قرار دهید.

    با این دستور می‌توانید TensorBoard را روی سیستم خود آغاز کنید:

     

    ReduceLROnPlateau

    وقتی معیار خاصی که طی آموزش تعیین کرده‌اید (مثل صحت یا خطا) دیگر بهبود پیدا نکند، تابع ResuceLROnPlateau نرخ یادگیری را کاهش می‌دهد. بعد از ایستا بودن یادگیری مدل، کاهش نرخ یادگیری با ضریبی بین ۲-۱۰ به سود مدل خواهد بود. به بیان دیگر، این تابع بر یک مقدار کمی نظارت دارد و زمانی که بعد از  طی چند دور آموزشی هیچ بهبودی رخ ندهد، نرخ یادگیری را کاهش می‌دهد.

     

    LambdaCallback

    در صورتی که هیچ یک از توابع بالا نیازهای شما را برآورده نکردند، با استفاده از تابع LambdaCallback می‌توانید تابع Callback سفارشی خود را بسازید.

    با کدهایی که در این قسمت نوشته شده می‌توانید به چندین مورد از کاربردهای LambdaCallback پی ببرید.

    با استفاده از این کد نیز می‌توانید تابع خطا دور آموزشی را وارد فایلی با فرمت JSON کنید. محتوای فایل دقیقاً شکل فرمت JSON را نخواهد داشت، اما در هرخط خروجی شبیه JSON به دست می‌دهد.

    سپس بعد از اتمام آموزش مدل، بدین شکل چندین فرآیند را خاتمه دهید.

     

    علاوه بر این موارد می‌توانید از توابع Callback سفارشی Keras نیز استفاده کنید. تابع Callback سفارشی ابزاری قدرتمند است که با استفاده از آن می‌توان رفتار مدل Keras را طی آموزش، ارزیابی یا استنتاج تعیین کرد، این تعیین رفتار شامل خواندن/تغییر مدل نیز می‌شود.

    حال قصد داریم یک تابع Callback سفارشی vanilla بسازیم. با انتقال تنسورفلو و تعریف یک مدل ساده‌ متوالی Keras کار را شروع می‌کنیم:

    سپس داده‌های MNIST را برای آموزش و آزمایش از رابط‌های کاربری Keras دریافت می‌کنیم:

    حال، یک تابع Callback سفارشی ساده را برای پیگیری شروع و انتهای هر بسته‌داده تعریف می‌کنیم. این تابع هربار، شماره دوره‌­ها را چاپ می‌­کند.

    استفاده از توابع Callback برای مدل‌سازی روش‌هایی همچون ()tf.keras.Model.fit  باعث می‌شود بدانیم که حتماً در آن مراحل فراخوانی (اجرا) می‌شوند:

    بدین ترتیب می‌توانید تابع Callback سفارشی خود را در کتابخانه تنسورفلو بسازید.

    با کمک آموخته‌های این مقاله با یکی از ویژگی‌های مهم کتابخانه تنسورفلو آشنا شدید که به شما کمک می‌کند علاوه بر ساخت محصولاتی شگفت‌انگیز، از اتفاقاتی که هنگام آموزش درون مدل‌تان رخ می‌دهد آگاه باشید.

     

    این مطلب چه میزان برای شما مفید بوده است؟
    [کل: ۰ میانگین: ۰]

    تفاوت استانداردسازی و نرمال‌سازی در چیست؟

    مقاله قبلی

    دستورالعمل سازمان بهداشت جهانی پیرامون استفاده از هوش مصنوعی در حوزه بهداشت و درمان

    مقاله بعدی

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

    نظرات

    پاسخ دهید

    نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *