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

۱. مقدمه

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

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

آنچه یاد خواهید گرفت

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

به طور خاص:

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

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

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

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

۲. TensorFlow.js چیست؟

1aee0ede85885520.png

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

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

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

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

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

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

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

قدرت‌های فوق‌العاده سمت کلاینت

اجرای TensorFlow.js در مرورگر وب روی دستگاه کلاینت می‌تواند مزایای متعددی داشته باشد که ارزش بررسی دارند.

حریم خصوصی

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

سرعت

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

دسترسی و مقیاس

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

هزینه

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

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

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

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

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

اندازه مدل

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

اینترنت اشیا

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

سرعت

Node.js با جاوا اسکریپت نوشته شده است، به این معنی که از کامپایل درجا (just in time compilation) بهره می‌برد. این بدان معناست که هنگام استفاده از Node.js اغلب شاهد افزایش عملکرد خواهید بود، زیرا در زمان اجرا بهینه می‌شود، به خصوص برای هرگونه پیش‌پردازشی که ممکن است انجام دهید. یک مثال عالی از این مورد را می‌توان در این مطالعه موردی مشاهده کرد که نشان می‌دهد چگونه Hugging Face از Node.js برای افزایش دو برابری عملکرد مدل پردازش زبان طبیعی خود استفاده کرده است.

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

۳. راه‌اندازی سیستم

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

در زمان نگارش این مطلب، می‌توانیم هنگام ایجاد یک نمونه موتور محاسباتی جدید، ایمیج اوبونتو ۱۸.۰۴.۴ LTS را انتخاب کنیم که همان چیزی است که ما از آن استفاده خواهیم کرد. البته می‌توانید از دستگاه خودتان یا حتی یک سیستم عامل متفاوت در صورت تمایل استفاده کنید، اما دستورالعمل‌های نصب و وابستگی‌ها ممکن است بین سیستم‌ها متفاوت باشد.

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

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

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

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

sudo apt update
sudo apt-get install python3

این کار تضمین می‌کند که پایتون ۳ روی دستگاه نصب شده است. برای استفاده از TensorFlow باید پایتون ۳.۴ یا بالاتر نصب شود.

برای تأیید نصب نسخه صحیح، دستور زیر را تایپ کنید:

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

python3 --version

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

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

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

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

دوباره می‌توانیم نصب pip3 را از طریق زیر تأیید کنیم:

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

pip3 --version

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

قبل از اینکه بتوانیم TensorFlow را نصب کنیم، لازم است که بسته پایتون "setuptools" نسخه ۴۱.۰.۰ یا بالاتر باشد. برای اطمینان از به‌روزرسانی به آخرین نسخه، دستور زیر را اجرا کنید:

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

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

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

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

مرحله بعدی این آزمایشگاه کد، ایجاد یک مدل ساده پایتون خواهد بود تا نشان دهد چگونه می‌توانیم این مدل آموزش‌دیده حاصل را در قالب "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 جهت تبدیل این مدل برای اجرا در مرورگر نیاز داریم، ایجاد کرده‌ایم!

۵. تبدیل 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 - برای بارگذاری مدلی که به جای keras از APIهای هسته تنسورفلو استفاده می‌کند.
  • tf_frozen_model - برای بارگذاری مدلی که حاوی وزن‌های منجمد است.
  • tf_hub - برای بارگذاری مدلی که از tensorflow hub تولید شده است.

می‌توانید در اینجا درباره این فرمت‌های دیگر بیشتر بدانید .

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

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

  • مدل.json
  • Group1-shard1of1.bin

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

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

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

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

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

  1. وارد Glitch.com شوید
  2. از این لینک برای کپی کردن پروژه‌ی قالب‌بندی‌شده‌ی 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 را که در جایی از آن ذکر خواهد شد، جستجو کنید.

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

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

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

بارگذاری مدل

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

اسکریپت.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

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

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

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

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

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

5df94fc652393e00.png

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

چه باید کرد؟

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

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

۸. تبریک

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

خلاصه

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

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

بعدش چی؟

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

آزمایشگاه‌های کد TensorFlow.js بیشتر برای بررسی عمیق‌تر

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