تبدیل مدل

TensorFlow.js همراه با انواع مدل های از پیش آموزش دیده که آماده استفاده در مرورگر - آنها را می توان یافت در ما مدل مخزن . با این حال ممکن است یک مدل TensorFlow را در جای دیگری پیدا کرده باشید یا نوشته باشید که می خواهید در برنامه وب خود از آن استفاده کنید. TensorFlow.js یک مدل فراهم می کند تبدیل برای این منظور. مبدل TensorFlow.js دو جزء دارد:

  1. یک ابزار خط فرمان که مدل‌های Keras و TensorFlow را برای استفاده در TensorFlow.js تبدیل می‌کند.
  2. یک API برای بارگیری و اجرای مدل در مرورگر با TensorFlow.js.

مدل خود را تبدیل کنید

مبدل TensorFlow.js با چندین قالب مدل مختلف کار می کند:

SavedModel: این فرمت پیش فرض که در آن مدل TensorFlow ذخیره شده است. فرمت SavedModel است مستند در اینجا .

مدل Keras: مدل های Keras به طور کلی به عنوان یک فایل HDF5 را نجات داد. اطلاعات بیشتر در مورد صرفه جویی در مدل های Keras را می توان یافت در اینجا .

ماژول TensorFlow توپی: این مدل که برای توزیع در TensorFlow توپی، یک پلت فرم برای به اشتراک گذاری و کشف مدل های بسته بندی شده اند. کتابخانه مدل را می توان یافت در اینجا .

بسته به نوع مدلی که می خواهید تبدیل کنید، باید آرگومان های مختلفی را به مبدل ارسال کنید. به عنوان مثال، فرض کنیم شما یک مدل Keras به نام نجات داد model.h5 به خود tmp/ دایرکتوری. برای تبدیل مدل خود با استفاده از مبدل TensorFlow.js، می توانید دستور زیر را اجرا کنید:

$ tensorflowjs_converter --input_format=keras /tmp/model.h5 /tmp/tfjs_model

این مدل در تبدیل /tmp/model.h5 a و خروجی model.json فایل همراه با فایل های باینری به وزن خود را tmp/tfjs_model/ دایرکتوری.

جزئیات بیشتر در مورد آرگومان های خط فرمان مربوطه را به فرمت های مدل های مختلف را می توان در TensorFlow.js مبدل یافت README .

در طول فرآیند تبدیل، نمودار مدل را طی می کنیم و بررسی می کنیم که هر عملیات توسط TensorFlow.js پشتیبانی می شود. اگر چنین است، نمودار را در قالبی می نویسیم که مرورگر بتواند آن را مصرف کند. ما سعی می کنیم با تقسیم وزن ها در فایل های 4 مگابایتی، مدل را برای ارائه در وب بهینه سازی کنیم - به این ترتیب می توان آنها را توسط مرورگرها کش کرد. ما همچنین تلاش برای ساده سازی نمودار مدل خود را با استفاده از منبع باز Grappler پروژه. ساده‌سازی نمودار شامل تا کردن عملیات مجاور، حذف زیرگراف‌های رایج و غیره است. این تغییرات تأثیری بر خروجی مدل ندارد. برای بهینه‌سازی بیشتر، کاربران می‌توانند آرگومان‌هایی را ارسال کنند که به مبدل دستور می‌دهد مدل را به یک اندازه بایت مشخص کوانتیزه کند. کوانتیزاسیون تکنیکی برای کاهش اندازه مدل با نمایش وزن با بیت های کمتر است. کاربران باید مراقب باشند تا مطمئن شوند که مدل آنها پس از کوانتیزاسیون، دقت قابل قبولی را حفظ می کند.

اگر در حین تبدیل با عملیات پشتیبانی نشده مواجه شویم، فرآیند با شکست مواجه می شود و نام عملیات را برای کاربر چاپ می کنیم. احساس رایگان برای ارسال یک موضوع در ما گیتهاب به ما در مورد آن اطلاع دهید - ما سعی می کنیم برای اجرای عملیات جدید در پاسخ به تقاضای کاربران.

بهترین شیوه ها

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

مدل خود را اجرا کنید

پس از تبدیل موفقیت آمیز مدل خود، در نهایت با مجموعه ای از فایل های وزن و یک فایل توپولوژی مدل مواجه خواهید شد. TensorFlow.js API های بارگیری مدل را ارائه می دهد که می توانید از آنها برای واکشی این دارایی های مدل و اجرای استنتاج در مرورگر استفاده کنید.

در اینجا API برای یک ماژول TensorFlow SavedModel یا TensorFlow Hub تبدیل شده به نظر می رسد:

const model = await tf.loadGraphModel(‘path/to/model.json’);

و در اینجا چیزی است که برای یک مدل Keras تبدیل شده به نظر می رسد:

const model = await tf.loadLayersModel(‘path/to/model.json’);

tf.loadGraphModel API گرداند tf.FrozenModel ، که بدان معنی است که پارامترهای ثابت می شود و شما قادر نخواهد بود به لحن خوب مدل خود را با داده های جدید. tf.loadLayersModel API گرداند tf.Model، که می تواند آموزش داده است. برای کسب اطلاعات در چگونه برای آموزش tf.Model، به مراجعه راهنمای مدل قطار .

پس از تبدیل، ایده خوبی است که استنتاج را چند بار اجرا کنید و سرعت مدل خود را محک بزنید. ما یک معیار صفحه مستقل است که می توان برای این منظور استفاده می شود: https://tensorflow.github.io/tfjs/e2e/benchmarks/local-benchmark/index.html شما ممکن است متوجه است که ما اندازه گیری از یک دست گرمی اجرای اولیه را دور بیندازید - این به این دلیل است که (به طور کلی) استنتاج اول مدل شما چندین برابر کندتر از استنتاج های بعدی به دلیل سربار ایجاد بافت ها و کامپایل کردن سایه بان ها خواهد بود.