TensorFlow.js: تبدیل Python SavedModel به قالب TensorFlow.js

1. مقدمه

بنابراین شما اولین گام‌های خود را با TensorFlow.js برداشته‌اید، مدل‌های از پیش ساخته ما را امتحان کرده‌اید، یا شاید حتی خودتان آن را ساخته‌اید - اما دیدید که تحقیقات پیشرفته‌ای در پایتون منتشر شده است و کنجکاو هستید که ببینید آیا آن را اجرا می‌کند یا خیر. مرورگر وب برای اینکه ایده جالبی که شما به روشی مقیاس پذیر برای میلیون ها نفر به واقعیت تبدیل شده بودید را تبدیل کند. آشنا به نظر می رسد؟ اگر چنین است، این CodeLab برای شماست!

تیم TensorFlow.js ابزاری مناسب برای تبدیل مدل‌هایی که در قالب SavedModel هستند به TensorFlow.js از طریق مبدل خط فرمان ساخته‌اند تا بتوانید از استفاده از چنین مدل‌هایی با دسترسی و مقیاس وب لذت ببرید.

چیزی که یاد خواهید گرفت

در این آزمایشگاه کد یاد خواهید گرفت که چگونه از مبدل خط فرمان TensorFlow.js برای پورت SavedModel تولید شده توسط Python به فرمت model.json مورد نیاز برای اجرا در سمت مشتری در مرورگر وب استفاده کنید.

به طور مشخص:

  • نحوه ایجاد یک مدل ساده Python ML و ذخیره آن در فرمت مورد نیاز مبدل TensorFlow.js.
  • نحوه نصب و استفاده از مبدل TensorFlow.js در SavedModel که از پایتون صادر کرده اید.
  • فایل های حاصل از تبدیل را بگیرید و در برنامه وب JS خود استفاده کنید.
  • بدانید وقتی مشکلی پیش می آید چه کاری انجام دهید (همه مدل ها تبدیل نمی شوند) و چه گزینه هایی دارید.

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

آنچه را که تبدیل می کنید با ما به اشتراک بگذارید!

می‌توانید از آنچه امروز یاد می‌گیریم برای تبدیل برخی از مدل‌های مورد علاقه خود از پایتون استفاده کنید. اگر موفق شدید این کار را با موفقیت انجام دهید، و یک وب‌سایت آزمایشی از این مدل در عمل ایجاد کنید، ما را در رسانه‌های اجتماعی با استفاده از هشتگ #MadeWithTFJS تگ کنید تا فرصتی برای نمایش پروژه شما در وبلاگ TensorFlow یا حتی نمایش‌های آینده و بیان رویدادها داشته باشید. . ما دوست داریم که تحقیقات شگفت انگیز بیشتری را به وب منتقل کنیم و تعداد بیشتری از مردم را قادر به استفاده از چنین مدل هایی به روش های خلاقانه یا خلاقانه مانند این مثال عالی کنیم.

2. TensorFlow.js چیست؟

1aee0ede85885520.png

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

کجا میشه ازش استفاده کرد؟

با توجه به قابلیت حمل جاوا اسکریپت، اکنون می توانید به 1 زبان بنویسید و یادگیری ماشینی را در تمامی پلتفرم های زیر به راحتی انجام دهید:

  • سمت کلاینت در مرورگر وب با استفاده از وانیلی جاوا اسکریپت
  • سمت سرور و حتی دستگاه های اینترنت اشیا مانند Raspberry Pi با استفاده از Node.js
  • برنامه های دسکتاپ با استفاده از Electron
  • برنامه های موبایل بومی با استفاده از React Native

TensorFlow.js همچنین از چندین پشتیبان در هر یک از این محیط‌ها پشتیبانی می‌کند (محیط‌های مبتنی بر سخت‌افزار واقعی که می‌تواند در داخل آن مانند CPU یا WebGL اجرا کند. یک "بک‌اند" در این زمینه به معنای یک محیط سمت سرور نیست - پشتیبان برای اجرا. به عنوان مثال می تواند سمت مشتری در WebGL باشد) تا از سازگاری اطمینان حاصل کند و همچنین کارها را سریع نگه دارد. در حال حاضر TensorFlow.js پشتیبانی می کند:

  • اجرای WebGL روی کارت گرافیک دستگاه (GPU) - این سریعترین راه برای اجرای مدلهای بزرگتر (با اندازه بیش از 3 مگابایت) با شتاب GPU است.
  • اجرای Web Assembly (WASM) بر روی CPU - برای بهبود عملکرد CPU در سراسر دستگاه ها از جمله تلفن های همراه نسل قدیمی تر. این برای مدل‌های کوچک‌تر (با حجم کمتر از 3 مگابایت) که در واقع می‌توانند در CPU با WASM سریع‌تر از WebGL اجرا شوند، مناسب‌تر است، زیرا بارگذاری محتوا در یک پردازنده گرافیکی زیاد است.
  • اجرای CPU - نسخه بازگشتی نباید هیچ یک از محیط های دیگر در دسترس باشد. این کندترین از این سه است اما همیشه برای شما آماده است.

توجه: اگر می‌دانید در چه دستگاهی اجرا می‌کنید، می‌توانید یکی از این پشتیبان‌ها را مجبور کنید، یا اگر این مورد را مشخص نکرده‌اید، به سادگی می‌توانید به TensorFlow.js اجازه دهید برای شما تصمیم بگیرد.

قدرت های فوق العاده سمت مشتری

اجرای TensorFlow.js در مرورگر وب روی دستگاه مشتری می تواند به چندین مزیت منجر شود که ارزش در نظر گرفتن دارد.

حریم خصوصی

شما می توانید بدون ارسال داده ها به وب سرور شخص ثالث، هم داده ها را در دستگاه مشتری آموزش دهید و هم طبقه بندی کنید. ممکن است مواقعی برای رعایت قوانین محلی، مانند GDPR، یا هنگام پردازش هرگونه داده ای که کاربر بخواهد در دستگاه خود نگه دارد و به شخص ثالث ارسال نشود، الزامی باشد.

سرعت

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

رسیدن و مقیاس

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

هزینه

بدون سرور به این معنی است که تنها چیزی که باید برای آن هزینه کنید یک CDN برای میزبانی فایل های HTML، CSS، JS و مدل شماست. هزینه CDN بسیار ارزان تر از نگه داشتن سرور (به طور بالقوه با کارت گرافیک متصل) در حال اجرا 24/7 است.

ویژگی های سمت سرور

استفاده از اجرای Node.js از TensorFlow.js ویژگی های زیر را فعال می کند.

پشتیبانی کامل از CUDA

در سمت سرور، برای شتاب کارت گرافیک، باید درایورهای NVIDIA CUDA را نصب کنید تا TensorFlow با کارت گرافیک کار کند (برخلاف مرورگری که از WebGL استفاده می کند - نیازی به نصب نیست). با این حال، با پشتیبانی کامل از CUDA، می‌توانید به طور کامل از توانایی‌های سطح پایین‌تر کارت گرافیک استفاده کنید، که منجر به آموزش سریع‌تر و زمان‌های استنتاج می‌شود. عملکرد با پیاده‌سازی Python TensorFlow برابری می‌کند، زیرا هر دوی آن‌ها از یک باطن ++C به اشتراک می‌گذارند.

سایز مدل

برای مدل های پیشرفته از تحقیقات، ممکن است با مدل های بسیار بزرگ، شاید گیگابایتی کار کنید. این مدل‌ها در حال حاضر به دلیل محدودیت‌های استفاده از حافظه در هر برگه مرورگر نمی‌توانند در مرورگر وب اجرا شوند. برای اجرای این مدل‌های بزرگ‌تر، می‌توانید از Node.js در سرور خود با مشخصات سخت‌افزاری مورد نیاز برای اجرای کارآمد چنین مدلی استفاده کنید.

IOT

Node.js در رایانه های تک بردی محبوب مانند Raspberry Pi پشتیبانی می شود، که به نوبه خود به این معنی است که می توانید مدل های TensorFlow.js را در چنین دستگاه هایی نیز اجرا کنید.

سرعت

Node.js با جاوا اسکریپت نوشته شده است که به این معنی است که از کامپایل به موقع سود می برد. این بدان معنی است که شما اغلب هنگام استفاده از Node.js شاهد افزایش عملکرد خواهید بود، زیرا در زمان اجرا بهینه می شود، به خصوص برای هر پیش پردازشی که ممکن است انجام دهید. یک مثال عالی از این را می توان در این مطالعه موردی مشاهده کرد که نشان می دهد چگونه Hugging Face از Node.js برای افزایش عملکرد 2 برابری برای مدل پردازش زبان طبیعی خود استفاده کرد.

اکنون اصول اولیه TensorFlow.js، جایی که می‌تواند اجرا شود و برخی از مزایای آن را می‌دانید، بیایید شروع کنیم به انجام کارهای مفید با آن!

3. راه اندازی سیستم شما

برای این آموزش ما از اوبونتو استفاده خواهیم کرد - یک توزیع لینوکس محبوب که بسیاری از مردم از آن استفاده می کنند و در موتور محاسبات ابری Google به عنوان تصویر پایه در دسترس است اگر بخواهید در ماشین مجازی مبتنی بر ابر دنبال کنید.

در زمان نوشتن می توانیم تصویر اوبونتو 18.04.4 LTS را هنگام ایجاد یک نمونه موتور محاسباتی وانیلی جدید انتخاب کنیم که همان چیزی است که از آن استفاده خواهیم کرد. البته در صورت تمایل می توانید از دستگاه خود یا حتی از سیستم عامل دیگری استفاده کنید، اما دستورالعمل ها و وابستگی های نصب ممکن است بین سیستم ها متفاوت باشد.

نصب TensorFlow (نسخه پایتون)

اکنون، همانطور که احتمالاً سعی می کنید برخی از مدل های موجود مبتنی بر پایتون را که پیدا کرده اید / یا خواهید نوشت، تبدیل کنید، قبل از اینکه بتوانیم یک فایل "SavedModel" را از پایتون صادر کنیم، باید نسخه Python تنسورفلو را روی نمونه خود داشته باشید، اگر "SavedModel" در حال حاضر برای دانلود در دسترس نیست.

SSH در ماشین ابری خود که در بالا ایجاد کردید و سپس عبارت زیر را در پنجره ترمینال تایپ کنید:

پنجره ترمینال:

sudo apt update
sudo apt-get install python3

این اطمینان حاصل می کند که پایتون 3 روی دستگاه نصب شده است. برای استفاده از TensorFlow باید پایتون 3.4 یا بالاتر نصب شود.

برای اطمینان از نصب صحیح نسخه، عبارت زیر را تایپ کنید:

پنجره ترمینال:

python3 --version

شما باید خروجی هایی را ببینید که شماره نسخه را نشان می دهد مانند Python 3.6.9 . اگر این را به درستی چاپ کردید و از 3.4 بالاتر بود، آماده ادامه کار هستیم.

در مرحله بعد PIP را برای پایتون 3 که مدیر بسته پایتون است نصب می کنیم و سپس آن را به روز می کنیم. نوع:

پنجره ترمینال:

sudo apt install python3-pip
pip3 install --upgrade pip

مجدداً می توانیم نصب pip3 را از طریق:

پنجره ترمینال:

pip3 --version

در زمان نوشتن، pip 20.2.3 می بینیم که پس از اجرای این دستور در ترمینال چاپ شده است.

قبل از اینکه بتوانیم TensorFlow را نصب کنیم، باید بسته Python "setuptools" نسخه 41.0.0 یا بالاتر باشد. این دستور زیر را اجرا کنید تا مطمئن شوید به آخرین نسخه به روز شده است:

پنجره ترمینال:

pip3 install -U setuptools

در نهایت، اکنون می‌توانیم TensorFlow را برای پایتون نصب کنیم:

پنجره ترمینال:

pip3 install tensorflow

ممکن است تکمیل آن کمی طول بکشد، بنابراین لطفاً تا پایان اجرای آن صبر کنید.

بیایید بررسی کنیم TensorFlow به درستی نصب شده است. یک فایل پایتون به نام test.py در فهرست فعلی خود ایجاد کنید:

پنجره ترمینال:

nano test.py

هنگامی که nano باز شد، می‌توانیم تعدادی کد پایتون برای چاپ نسخه نصب شده TensorFlow بنویسیم:

test.py:

import tensorflow as tf
print(tf.__version__)

CTRL + O برای نوشتن تغییرات روی دیسک و سپس CTRL + X برای خروج از ویرایشگر نانو فشار دهید.

اکنون می‌توانیم این فایل پایتون را اجرا کنیم تا نسخه TensorFlow را که روی صفحه چاپ شده است ببینیم:

پنجره ترمینال:

python3 test.py

در زمان نگارش 2.3.1 می بینیم که برای نسخه ما از TensorFlow Python نصب شده در کنسول چاپ شده است.

4. ساخت مدل پایتون

مرحله بعدی این کد لبه ایجاد یک مدل ساده پایتون را نشان می‌دهد تا نشان دهد چگونه می‌توانیم این مدل آموزش‌دیده شده را در قالب «SavedModel» ذخیره کنیم تا با مبدل خط فرمان TensorFlow.js از آن استفاده کنیم. این اصل برای هر مدل پایتونی که می‌خواهید تبدیل کنید مشابه است، اما ما این کد را ساده نگه می‌داریم تا همه بتوانند آن را بفهمند.

بیایید فایل test.py خود را که در بخش اول ایجاد کردیم ویرایش کنیم و کد را به صورت زیر به روز کنیم:

test.py:

import tensorflow as tf
print(tf.__version__)

# Import NumPy - package for working with arrays in Python.
import numpy as np

# Import useful keras functions - this is similar to the
# TensorFlow.js Layers API functionality.
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Dense

# Create a new dense layer with 1 unit, and input shape of [1].
layer0 = Dense(units=1, input_shape=[1])
model = Sequential([layer0])

# Compile the model using stochastic gradient descent as optimiser
# and the mean squared error loss function.
model.compile(optimizer='sgd', loss='mean_absolute_error')

# Provide some training data! Here we are using some fictional data 
# for house square footage and house price (which is simply 1000x the 
# square footage) which our model must learn for itself.
xs = np.array([800.0, 850.0, 900.0, 950.0, 980.0, 1000.0, 1050.0, 1075.0, 1100.0, 1150.0, 1200.0, 1250.0, 1300.0, 1400.0, 1500.0, 1600.0, 1700.0, 1800.0, 1900.0, 2000.0], dtype=float)

ys = np.array([800000.0, 850000.0, 900000.0, 950000.0, 980000.0, 1000000.0, 1050000.0, 1075000.0, 1100000.0, 1150000.0, 1200000.0,  1250000.0, 1300000.0, 1400000.0, 1500000.0, 1600000.0, 1700000.0, 1800000.0, 1900000.0, 2000000.0], dtype=float)

# Train the model for 500 epochs.
model.fit(xs, ys, epochs=500, verbose=0)

# Test the trained model on a test input value
print(model.predict([1200.0]))

# Save the model we just trained to the "SavedModel" format to the
# same directory our test.py file is located.
tf.saved_model.save(model, './')

این کد یک رگرسیون خطی بسیار ساده را آموزش می دهد تا تخمین رابطه بین x (ورودی) و y (خروجی) ارائه شده را بیاموزد. سپس مدل آموزش دیده حاصل را در دیسک ذخیره می کنیم. برای جزئیات بیشتر در مورد آنچه که هر خط انجام می دهد، نظرات درون خطی را بررسی کنید.

اگر پس از اجرای این برنامه دایرکتوری خود را بررسی کنیم (با فراخوانی python3 test.py )، اکنون باید چند فایل و پوشه جدید ایجاد شده در دایرکتوری فعلی خود را ببینیم:

  • test.py
  • saved_model.pb
  • دارایی ها
  • متغیرها

ما اکنون فایل هایی را تولید کرده ایم که باید توسط مبدل TensorFlow.js برای تبدیل این مدل به اجرا در مرورگر استفاده شود!

5. تبدیل SavedModel به فرمت TensorFlow.js

مبدل TensorFlow.js را نصب کنید

برای نصب مبدل دستور زیر را اجرا کنید:

پنجره ترمینال:

pip3 install tensorflowjs

این آسان بود.

با فرض اینکه از مبدل خط فرمان ( tensorflowjs_converter ) استفاده می‌کردیم و نه نسخه جادوگر نشان داده شده در بالا، می‌توانیم دستور زیر را برای تبدیل مدل ذخیره‌شده‌ای که ایجاد کردیم فراخوانی کنیم و به صراحت پارامترها را به مبدل منتقل کنیم:

پنجره ترمینال:

tensorflowjs_converter \
    --input_format=keras_saved_model \
    ./ \
    ./predict_houses_tfjs

اینجا چه خبر است؟ ابتدا tensorflowjs_converter را باینری که به‌تازگی نصب کرده‌ایم فراخوانی می‌کنیم و مشخص می‌کنیم که می‌خواهیم یک مدل ذخیره‌شده keras را تبدیل کنیم.

در کد مثال بالا، متوجه خواهید شد که ما keras را وارد کردیم و از APIهای لایه های سطح بالاتر آن برای ایجاد مدل خود استفاده کردیم. اگر از keras در کد پایتون خود استفاده نکرده اید، ممکن است بخواهید از فرمت ورودی دیگری استفاده کنید:

  • keras - برای بارگیری فرمت keras (نوع فایل HDF5)
  • tf_saved_model - برای بارگذاری مدلی که از APIهای هسته تنسورفلو به جای keras استفاده می کند.
  • tf_frozen_model - برای بارگذاری مدلی که حاوی وزنه های منجمد است.
  • tf_hub - برای بارگذاری یک مدل تولید شده از هاب tensorflow.

در اینجا می توانید در مورد این قالب های دیگر اطلاعات بیشتری کسب کنید .

2 پارامتر بعدی مشخص می کند که مدل ذخیره شده در کدام پوشه قرار دارد - در دموی بالا ما دایرکتوری فعلی را مشخص می کنیم، و سپس در نهایت مشخص می کنیم که تبدیل خود را به کدام دایرکتوری خروجی می دهیم، که در بالا به عنوان پوشه ای به نام " predict_houses_tfjs " در آن مشخص می کنیم. دایرکتوری فعلی

با اجرای دستور بالا یک پوشه جدید در دایرکتوری فعلی به نام predict_houses_tfjs ایجاد می کند که حاوی :

  • model.json
  • Group1-shard1of1.bin

اینها فایل هایی هستند که برای اجرای مدل در مرورگر وب به آن نیاز داریم. این فایل ها را همانطور که در بخش بعدی استفاده خواهیم کرد ذخیره کنید.

6. استفاده از مدل تبدیل شده ما در مرورگر

فایل های تبدیل شده را میزبانی کنید

ابتدا باید model.json و فایل های *.bin خود را که در یک وب سرور ایجاد شده اند قرار دهیم تا بتوانیم از طریق صفحه وب خود به آنها دسترسی داشته باشیم. برای این نسخه ی نمایشی ما از Glitch.com استفاده خواهیم کرد، بنابراین برای شما آسان است که آن را دنبال کنید. با این حال، اگر شما از یک پیشینه مهندسی وب هستید، می توانید برای انجام این کار، یک سرور http ساده را در نمونه سرور فعلی Ubuntu خود راه اندازی کنید. انتخاب با شماست.

آپلود فایل ها در Glitch

  1. به Glitch.com وارد شوید
  2. از این پیوند برای کلون کردن پروژه Boilerplate TensorFlow.js استفاده کنید. این شامل فایل‌های html، css و js است که کتابخانه TensorFlow.js را برای ما آماده می‌کند.
  3. روی پوشه "assets" در پنل سمت چپ کلیک کنید.
  4. روی "upload an asset" کلیک کنید و group1-shard1of1.bin را انتخاب کنید تا در این پوشه آپلود شود. اکنون باید پس از بارگذاری به این شکل باشد: 25a2251c7f165184.png
  5. اگر روی فایل group1-shard1of1.bin که به تازگی آپلود کرده اید کلیک کنید، می توانید URL را در محل آن کپی کنید. اکنون این مسیر را مطابق شکل کپی کنید: 92ded8d46442c404.png
  6. اکنون model.json با استفاده از ویرایشگر متن مورد علاقه خود در دستگاه محلی خود ویرایش کنید و (با استفاده از CTRL+F) فایل group1-shard1of1.bin را که در جایی در آن ذکر خواهد شد جستجو کنید.

این نام فایل را با آدرس اینترنتی که از مرحله 5 کپی کردید جایگزین کنید، اما https://cdn.glitch.com/ اصلی را که اشکال ایجاد شده از مسیر کپی شده حذف کنید.

پس از ویرایش باید چیزی شبیه به این باشد (توجه داشته باشید که چگونه مسیر سرور اصلی حذف شده است بنابراین فقط نام فایل آپلود شده باقی می ماند): d5a338f2dc1f31d4.png 7. اکنون این فایل model.json ویرایش شده را ذخیره و آپلود کنید تا با کلیک بر روی assets مشکل ایجاد کند، سپس روی دکمه "upload an asset" کلیک کنید (مهم) . اگر از دکمه فیزیکی استفاده نکنید و بکشید و رها کنید، به‌عنوان یک فایل قابل ویرایش به‌جای روی CDN آپلود می‌شود که در همان پوشه قرار نمی‌گیرد و زمانی که TensorFlow.js تلاش می‌کند فایل‌های باینری را دانلود کند، مسیر نسبی در نظر گرفته می‌شود. برای یک مدل داده شده اگر این کار را به درستی انجام داده اید، باید 2 فایل را در پوشه assets مشاهده کنید: 51a6dbd5d3097ffc.png

عالیه ما اکنون آماده هستیم تا از فایل های ذخیره شده خود با مقداری کد واقعی در مرورگر استفاده کنیم.

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

اکنون که فایل‌های تبدیل شده خود را میزبانی کرده‌ایم، می‌توانیم یک صفحه وب ساده برای بارگذاری این فایل‌ها بنویسیم و از آنها برای پیش‌بینی استفاده کنیم. script.js را در پوشه پروژه Glitch باز کنید و پس از اینکه const MODEL_URL تغییر دادید تا به پیوند Glitch.com تولید شده برای فایل model.json خود که در Glitch آپلود کرده اید اشاره کنید، محتوای این فایل را با موارد زیر جایگزین کنید:

script.js:

// Grab a reference to our status text element on the web page.
// Initially we print out the loaded version of TFJS.
const status = document.getElementById('status');
status.innerText = 'Loaded TensorFlow.js - version: ' + tf.version.tfjs;

// Specify location of our Model.json file we uploaded to the Glitch.com CDN.
const MODEL_URL = ‘YOUR MODEL.JSON URL HERE! CHANGE THIS!';
// Specify a test value we wish to use in our prediction.
// Here we use 950, so we expect the result to be close to 950,000.
const TEST_VALUE = 950.0

// Create an asynchronous function.
async function run() {
    // Load the model from the CDN.
    const model = await tf.loadLayersModel(MODEL_URL);

    // Print out the architecture of the loaded model.
    // This is useful to see that it matches what we built in Python.
    console.log(model.summary());

    // Create a 1 dimensional tensor with our test value.
    const input = tf.tensor1d([TEST_VALUE]);

    // Actually make the prediction.
    const result = model.predict(input);

    // Grab the result of prediction using dataSync method
    // which ensures we do this synchronously.
    status.innerText = 'Input of ' + TEST_VALUE + 
        'sqft predicted as $' + result.dataSync()[0];
}

// Call our function to start the prediction!
run();

هنگامی که ثابت MODEL_URL برای اشاره به مسیر model.json خود تغییر دادید، کد بالا را اجرا کنید، خروجی نشان داده شده در زیر ایجاد می شود.

c5e8457213058ec3.png

اگر کنسول مرورگر وب را بررسی کنیم (F12 را فشار دهید تا ابزارهای توسعه دهنده در مرورگر ظاهر شود) می توانیم توضیحات مدل را برای مدل بارگذاری شده مشاهده کنیم که چاپ می شود:

35e79d70dbd66f27.png

با مقایسه این کد با کد پایتون در ابتدای این لبه کد، می توانیم تأیید کنیم که این همان شبکه ای است که با 1 ورودی متراکم و یک لایه متراکم با 1 گره ایجاد کردیم.

تبریک می گویم! شما فقط یک مدل آموزش داده شده به پایتون تبدیل شده را در مرورگر وب اجرا کردید!

7. مدل هایی که تبدیل نمی شوند

مواقعی پیش می‌آید که مدل‌های پیچیده‌تر که برای استفاده از عملیات کمتر رایج کامپایل می‌شوند، برای تبدیل پشتیبانی نمی‌شوند. نسخه مبتنی بر مرورگر TensorFlow.js یک بازنویسی کامل از TensorFlow است و به همین دلیل ما در حال حاضر از تمام عملیات های سطح پایینی که TensorFlow C++ API دارد (1000 مورد وجود دارد) پشتیبانی نمی کنیم - اگرچه به مرور زمان با رشد و توسعه موارد بیشتری اضافه می شود. همانطور که عملیات اصلی پایدارتر می شود.

در زمان نوشتن، یکی از این تابع ها در TensorFlow Python که هنگام صادرات به عنوان یک مدل ذخیره شده یک عملیات پشتیبانی نشده تولید می کند linalg.diag است. اگر سعی کنیم یک مدل ذخیره شده را که از آن در پایتون استفاده می‌کند (که از عملیات‌های به‌دست‌آمده تولید می‌کند پشتیبانی می‌کند) تبدیل کنیم، خطای مشابه تصویر زیر را خواهیم دید:

5df94fc652393e00.png

در اینجا می‌توانیم با رنگ قرمز برجسته‌شده را ببینیم که فراخوانی linalg.diag برای تولید عملیاتی به نام MatrixDiagV3 که در زمان نوشتن این کد لبه توسط TensorFlow.js در مرورگر وب پشتیبانی نمی‌شود، کامپایل شده است.

چه باید کرد؟

شما دو گزینه دارید.

  1. این عملیات گمشده را در TensorFlow.js پیاده کنید - ما یک پروژه منبع باز هستیم و از مشارکت در مواردی مانند عملیات جدید استقبال می کنیم. این راهنمای نوشتن عملیات جدید برای TensorFlow.js را بررسی کنید . اگر موفق به انجام این کار شدید، می‌توانید از پرچم Skip_op_check در مبدل خط فرمان ما استفاده کنید تا این خطا را نادیده بگیرید و به هر حال تبدیل را ادامه دهید (فرض می‌کنیم که این عملیات در بیلد جدید TensorFlow.js که ایجاد کرده‌اید موجود است که دارای عملیات گمشده پشتیبانی می شود).
  2. تعیین کنید که کدام قسمت از کد پایتون شما عملیات پشتیبانی نشده را در فایل savedmodel که صادر کرده اید ایجاد کرده است. در مجموعه‌ای از کدهای کوچک ممکن است مکان‌یابی آن آسان باشد، اما در مدل‌های پیچیده‌تر، این می‌تواند به بررسی کامل نیاز داشته باشد، زیرا در حال حاضر هیچ روشی برای شناسایی فراخوانی سطح بالای تابع پایتون وجود ندارد که یک عملیات معین را یک بار در قالب فایل savedmodel تولید می‌کند. با این حال، پس از یافتن مکان، به طور بالقوه می توانید این را تغییر دهید تا از روش دیگری که پشتیبانی می شود استفاده کنید.

8. تبریک می گویم

تبریک می گویم، شما اولین قدم های خود را در استفاده از مدل پایتون از طریق TensorFlow.js در مرورگر وب برداشته اید!

خلاصه

در این آزمایشگاه کد یاد گرفتیم که چگونه:

  1. محیط لینوکس خود را برای نصب TensorFlow مبتنی بر پایتون تنظیم کنید
  2. صادرات یک Python 'SavedModel'
  3. مبدل خط فرمان TensorFlow.js را نصب کنید
  4. از مبدل خط فرمان TensorFlow.js برای ایجاد فایل های سمت سرویس گیرنده مورد نیاز استفاده کنید
  5. از فایل های تولید شده در برنامه واقعی وب استفاده کنید
  6. مدل‌هایی را که تبدیل نمی‌شوند و چه چیزی باید پیاده‌سازی شود تا در آینده امکان تبدیل به آن‌ها را فراهم کند، شناسایی کنید.

بعدش چی؟

به خاطر داشته باشید که ما را در هر چیزی که با استفاده از #MadeWithTFJS ایجاد می کنید برچسب بزنید تا فرصتی برای نمایش در رسانه های اجتماعی یا حتی نمایش در رویدادهای آینده TensorFlow داشته باشید. ما دوست داریم ببینیم چه چیزی را تبدیل می کنید و از سمت مشتری در مرورگر استفاده می کنید!

کدهای TensorFlow.js بیشتر برای عمیق تر شدن

وب سایت هایی برای بررسی