مدلها را ذخیره و بارگذاری کنید

TensorFlow.js برای ذخیره و بارگذاری مدل که با آنها تشکر کرده است فراهم می کند قابلیت Layers API یا تبدیل شده از مدل های TensorFlow موجود است. اینها ممکن است مدل هایی باشند که خودتان آموزش داده اید یا آنهایی که دیگران آموزش داده اند. یکی از مزیت های کلیدی استفاده از Layers api این است که مدل های ایجاد شده با آن سریال سازی هستند و این چیزی است که در این آموزش بررسی خواهیم کرد.

این آموزش بر روی ذخیره و بارگیری مدل های TensorFlow.js (قابل شناسایی با فایل های JSON) تمرکز دارد. همچنین می‌توانیم مدل‌های تنسورفلو پایتون را وارد کنیم. بارگذاری این مدل ها در دو آموزش زیر پوشش داده شده است:

یک tf.Model را ذخیره کنید

tf.Model و tf.Sequential هر دو ارائه یک تابع model.save که به شما اجازه ذخیره توپولوژی و وزن یک مدل.

  • توپولوژی: این فایلی است که معماری یک مدل را توصیف می کند (یعنی از چه عملیاتی استفاده می کند). این شامل ارجاعاتی به وزن مدل ها است که در خارج ذخیره می شوند.

  • وزن ها: فایل های باینری هستند که وزن های یک مدل معین را در قالبی کارآمد ذخیره می کنند. آنها معمولاً در همان پوشه توپولوژی ذخیره می شوند.

بیایید نگاهی بیندازیم که کد ذخیره یک مدل چگونه است

const saveResult = await model.save('localstorage://my-model-1');

چند نکته قابل توجه:

  • save روش استدلال رشته URL مانند طول می کشد که با یک طرح شروع می شود. این نوع مقصدی را که می‌خواهیم یک مدل را در آن ذخیره کنیم، توصیف می‌کند. در مثال بالا این طرح localstorage://
  • این طرح توسط یک مسیر است. در مثال بالا در راه است my-model-1 .
  • save روش ناهمزمان است.
  • مقدار بازگشتی model.save یک شی JSON که حامل اطلاعات مانند اندازه بایت از توپولوژی و وزن مدل است.
  • محیطی که برای ذخیره مدل استفاده می شود تأثیری ندارد که کدام محیط ها می توانند مدل را بارگذاری کنند. ذخیره یک مدل در node.js مانع از بارگذاری آن در مرورگر نمی شود.

در زیر به بررسی طرح های مختلف موجود می پردازیم.

فضای ذخیره‌سازی محلی (فقط مرورگر)

طرح: localstorage://

await model.save('localstorage://my-model');

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

IndexedDB (فقط مرورگر)

طرح: indexeddb://

await model.save('indexeddb://my-model');

این موجب صرفه جویی یک مدل به مرورگر IndexedDB از ذخیره سازی. مانند ذخیره‌سازی محلی که بین تازه‌سازی‌ها باقی می‌ماند، همچنین تمایل دارد محدودیت‌های بزرگ‌تری در اندازه اشیاء ذخیره‌شده داشته باشد.

دانلود فایل (فقط مرورگر)

طرح: downloads://

await model.save('downloads://my-model');

این باعث می شود مرورگر فایل های مدل را در دستگاه کاربر دانلود کند. دو فایل تولید خواهد شد:

  1. یک فایل JSON متنی به نام [my-model].json ، که حامل توپولوژی و ارجاع به فایل وزن شرح زیر است.
  2. یک فایل باینری حمل مقادیر وزن به نام [my-model].weights.bin .

شما می توانید تغییر نام [my-model] برای دریافت فایل های با نام های مختلف.

از آنجا که .json نقاط فایل به .bin با استفاده از یک مسیر نسبی، دو فایل باید در یک پوشه باشند.

درخواست HTTP(S).

طرح: http:// یا https://

await model.save('http://model-server.domain/upload')

این یک درخواست وب برای ذخیره یک مدل در یک سرور راه دور ایجاد می کند. شما باید آن سرور راه دور را کنترل کنید تا بتوانید اطمینان حاصل کنید که قادر به رسیدگی به درخواست است.

مدل خواهد شد به سرور HTTP مشخص از طریق یک ارسال POST درخواست. بدن از POST است در multipart/form-data فرمت شده و متشکل از دو فایل

  1. یک فایل JSON متنی به نام model.json ، که حامل توپولوژی و مرجع به وزن فایل شرح زیر است.
  2. یک فایل باینری حمل مقادیر وزن به نام model.weights.bin .

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

اغلب باید آرگومان های بیشتری ارسال کنید یا سرصفحه های درخواستی را به سرور HTTP خود ارسال کنید (مثلاً برای احراز هویت یا اگر می خواهید پوشه ای را مشخص کنید که مدل باید در آن ذخیره شود). شما می توانید کنترل ریز بیش از این جنبه از درخواست از به دست آوردن save با جایگزین استدلال URL رشته در tf.io.browserHTTPRequest . این API انعطاف پذیری بیشتری را در کنترل درخواست های HTTP فراهم می کند.

مثلا:

await model.save(tf.io.browserHTTPRequest(
    'http://model-server.domain/upload',
    {method: 'PUT', headers: {'header_key_1': 'header_value_1'} }));

سیستم فایل بومی (فقط Node.js)

طرح: file://

await model.save('file:///path/to/my-model');

هنگام اجرا در Node.js ما همچنین به سیستم فایل دسترسی مستقیم داریم و می توانیم مدل ها را در آنجا ذخیره کنیم. دستور فوق، دو فایل به صرفه جویی در path مشخص شده Afer در scheme .

  1. یک فایل JSON متنی به نام [model].json ، که حامل توپولوژی و ارجاع به فایل وزن شرح زیر است.
  2. یک فایل باینری حمل مقادیر وزن به نام [model].weights.bin .

توجه داشته باشید که نام دو فایل همیشه دقیقاً همانطور که در بالا مشخص شده است خواهد بود (نام در تابع تعبیه شده است).

در حال بارگیری مدل tf

با توجه به یک مدل است که با استفاده از یکی از روش های فوق ذخیره شده است، ما می توانیم آن را با استفاده از بار tf.loadLayersModel API.

بیایید نگاهی به کد بارگذاری یک مدل بیندازیم

const model = await tf.loadLayersModel('localstorage://my-model-1');

چند نکته قابل توجه:

  • مانند model.save() از loadLayersModel تابع یک آدرس اینترنتی مانند رشته استدلال طول می کشد که با یک طرح شروع می شود. این نوع مقصدی را که می‌خواهیم مدلی را از آن بارگیری کنیم، توصیف می‌کند.
  • این طرح توسط یک مسیر است. در مثال بالا در راه است my-model-1 .
  • رشته url مانند را می توان با یک شی که با رابط IOHandler مطابقت دارد جایگزین کرد.
  • tf.loadLayersModel() تابع ناهمزمان است.
  • مقدار بازگشتی tf.loadLayersModel است tf.Model

در زیر به بررسی طرح های مختلف موجود می پردازیم.

فضای ذخیره‌سازی محلی (فقط مرورگر)

طرح: localstorage://

const model = await tf.loadLayersModel('localstorage://my-model');

این بارهای یک مدل به نام my-model از مرورگر ذخیره سازی محلی .

IndexedDB (فقط مرورگر)

طرح: indexeddb://

const model = await tf.loadLayersModel('indexeddb://my-model');

این یک مدل از مرورگر بارهای IndexedDB از ذخیره سازی.

HTTP(S)

طرح: http:// یا https://

const model = await tf.loadLayersModel('http://model-server.domain/download/model.json');

این یک مدل را از یک نقطه پایانی http بارگیری می کند. پس از بارگذاری json فایل تابع تقاضای مربوطه را .bin فایل های که json فایل های مرجع.

سیستم فایل بومی (فقط Node.js)

طرح: file://

const model = await tf.loadLayersModel('file://path/to/my-model/model.json');

هنگام اجرا در Node.js ما همچنین به سیستم فایل دسترسی مستقیم داریم و می توانیم مدل ها را از آنجا بارگیری کنیم. توجه داشته باشید که در فراخوانی تابع بالا به خود فایل model.json اشاره می کنیم (در حالی که هنگام ذخیره یک پوشه را مشخص می کنیم). مربوط .bin فایل (ها) باید در همان پوشه به عنوان می شود json فایل.

بارگیری مدل ها با IOHhandlers

اگر طرح های بالا برای نیازهای شما کافی نیست شما می توانید رفتار بارگذاری سفارشی با اجرای IOHandler . یکی IOHandler که TensorFlow.js فراهم می کند tf.io.browserFiles که اجازه می دهد تا کاربران مرورگر برای آپلود فایل های مدل در مرورگر. را ببینید مستندات برای اطلاعات بیشتر.

ذخیره و بارگیری مدل ها با IOHhandler های سفارشی

اگر طرح های بالا هستند برای بارگذاری خود و یا نیازهای صرفه جویی کافی نیست شما می توانید رفتار ترتیب سفارشی توسط اجرای یک پیاده سازی IOHandler .

IOHandler یک شی با یک است save و load روش.

save تابع یک پارامتر است که مطابقت طول می کشد ModelArtifacts رابط و باید یک وعده بازگشت است که حل به یک SaveResult شی.

load تابع بدون پارامتر طول می کشد و باید یک وعده است که به برطرف بازگشت ModelArtifacts اعتراض کند. این همان جسم است که به تصویب رسید به است save .

مشاهده BrowserHTTPRequest برای یک مثال از چگونگی پیاده سازی یک IOHandler.