رفتن به نوشته‌ها

دیباگ در تنسورفلو

اگر با تنسورفلو یا به طور کلی با مدل‌های یادگیری عمیق کار کرده باشید میدونید که وقتی مدلتون همگرا نشه پیدا کردنش بسیار سخت است. یافتن اینکه مشکل چیه و از کجاست بسیار زمان میگیره و از اونجایی که تنسورفلو static computation graph استفاده میکنه دیباگ معمولی با کمک ابزاری مثل GDB یا PDB کمک زیادی بهتون نخواهد کرد. از طرفی چاپ تنسورها هم کمکی بهتون نمیکنه:

به طور کلی و با دانش من (to the best by my knowledge)!!! کاری که اغلب برای دیباگ در تنسورفلو انجام میشه یکی از موارد زیر است:

۱) بازیابی (fetch) مقادیر و چاپ آنها در sess.run (گاهی اوقات استفاده از eval()):

۲) استفاده از عملگر  tf.Print:

همانطور که در شکل زیر ملاحظه میکنید tf.Print به گراف محاسباتی شما اضافه میشود و هنگامی که مقدار آن محاسبه شود نتیجه در کنسول (به صورت هشدار-warning) برای شما چاپ میشود. خب این مورد اندکی شاید از حالت قبلی بهتر باشه ولی باز همون مشکل sess.run رو داره و تا وقتی sess.run رو صدا نزنید نمیدونید چه اتفاقی داره میافته و مقدار تنسور شما چیست. این اپراتور خیلی شبیه ماژول logger  در پایتون میمونه!

۳) استفاده از  Eager execution:

یکی از ویژگیهای خوبی که به تنسورفلو (۱.۷) اضافه شده است Eager execution است. این ویژگی به شما امکان میدهد که کدهاتون به صورت خط به خط اجرا شود. دقیقا همان چیزی که ما اغلب در برنامه نویسی انتظار داریم. این مورد گراف محاسباتی را به نحو دیگری اجرا میکند و مثلا وقتی شما عبارت زیر رو اجرا میکنید:

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

استفاده از eager execution باعث میشه کد شما اندکی کندتر اجرا بشه و لازم باشه یک تغییراتی در کدتون اعمال کنید که برای کارهای بزرگ یکم دردسرساز میشه. ولی برای برنامه‌های کوچیک و یا تست کردن خیلی خوبه و من خودم خیلی ازش استفاده میکنم.

 

۴) استفاده از Tensorboard برای نمایش هیستوگرام و اسکالرها و فهمیدن ناهنجاری‌ها: راه‌حل دیگری که وجود داره و احتمالا خودتون هم ازش استفاده کردید استفاده از تنسوربورد و نمایش تنسورها است.

این مورد برای مواردی که مثلا گرادیان (خطا) تون خیلی افزایش پیدا کرده یا خیلی به صفر نزدیک شده میتونه کمک بسیاری کنه و کار پیدا کردن خطا را راحت کند. مثلا به راحتی میتونید تشخیص بدید مدلتون overfit یا underfit شده است یا محو گرادیان یا انفجار گرادیان رخ داده است.

۵) استفاده از پلاگین Tensorflow debugger یا به طور خلاصه tfdbg

یکی از ابزارهای خیلی خوبی که میتونه بسیار چاره‌ساز باشه پلاگین Tensorflow Debug است. این ابزار هنوز در فاز آلفا است ولی میتونه در یافتن برخی مشکلات کمک کنه. ویدئوی زیر و صفحه گیتهاب رسمی تنسورفلو  توضیحات نسبتا کاملی را درباره این پلاگین ارائه میدهد و تقریبا تمام اون چیزی که لازم است بدونید رو در اختیارتون قرار میدهد:

 

اگر شما هم روش دیگری برای دیباگ میشناسید خوشحال میشم اون رو به با من به اشتراک بزارید. 🙂

منتشر شده در آموزشتنسورفلومتفرقه

اولین باشید که نظر می دهید

دیدگاهتان را بنویسید

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