1. מבוא
אז עשיתם את הצעדים הראשונים עם TensorFlow.js, ניסיתם את המודלים המוכנים מראש שלנו, או שאולי אפילו יצרתם מודל משלכם – אבל ראיתם מחקר חדשני שפורסם ב-Python ואתם רוצים לדעת אם הוא יפעל בדפדפן האינטרנט כדי להפוך את הרעיון המגניב שהיה לכם למציאות עבור מיליוני אנשים בצורה שניתנת להרחבה. נשמע מוכר? אם כן, ה-CodeLab הזה הוא בשבילכם!
צוות TensorFlow.js יצר כלי נוח להמרת מודלים בפורמט SavedModel ל-TensorFlow.js באמצעות כלי להמרה בשורת הפקודה, כדי שתוכלו להשתמש במודלים כאלה עם היתרונות של האינטרנט מבחינת היקף ונגישות.
מה תלמדו
בשיעור ה-Lab הזה תלמדו איך להשתמש בכלי להמרה משורת הפקודה של TensorFlow.js כדי להעביר SavedModel שנוצר ב-Python לפורמט model.json שנדרש להרצה בצד הלקוח בדפדפן אינטרנט.
באופן ספציפי:
- איך יוצרים מודל פשוט של למידת מכונה ב-Python ושומרים אותו בפורמט הנדרש על ידי הממיר של TensorFlow.js.
- איך להתקין את הכלי להמרת TensorFlow.js ולהשתמש בו ב-SavedModel שייצאתם מ-Python.
- לוקחים את הקבצים שנוצרו מההמרה ומשתמשים בהם באפליקציית האינטרנט של JS.
- להבין מה לעשות אם משהו משתבש (לא כל המודלים יומרו) ואילו אפשרויות עומדות לרשותכם.
תארו לעצמכם שאתם יכולים לקחת מחקר שפורסם לאחרונה ולהפוך את המודל הזה לזמין למיליוני מפתחי JS ברחבי העולם. או אולי תשתמשו בזה בעצמכם ביצירה שלכם, שכל אחד בעולם יוכל לחוות אם היא תפעל בדפדפן האינטרנט, כי לא נדרשים יחסי תלות מורכבים או הגדרת סביבה. מוכנים להתחיל לפרוץ? קדימה
נשמח לדעת מה המרתם!
אתם יכולים להשתמש במה שנלמד היום כדי לנסות להמיר חלק מהמודלים המועדפים שלכם מ-Python. אם תצליחו לעשות את זה ותיצרו אתר הדגמה פעיל של המודל בפעולה, תוכלו לתייג אותנו ברשתות החברתיות באמצעות ההאשטאג #MadeWithTFJS. כך תהיה לכם הזדמנות שהפרויקט שלכם יוצג בבלוג של TensorFlow או אפילו באירועי הצגת פרויקטים עתידיים. נשמח לראות עוד מחקרים מדהימים שמועברים לאינטרנט, כדי לאפשר למספר גדול יותר של אנשים להשתמש במודלים כאלה בדרכים חדשניות או יצירתיות, כמו בדוגמה הנהדרת הזו.
2. מה זה TensorFlow.js?

TensorFlow.js היא ספרייה של למידת מכונה בקוד פתוח שאפשר להריץ בכל מקום שבו אפשר להריץ JavaScript. הוא מבוסס על ספריית TensorFlow המקורית שנכתבה ב-Python ומטרתו לשחזר את חוויית המפתחים הזו ואת קבוצת ממשקי ה-API הזו עבור המערכת האקולוגית של JavaScript.
איפה אפשר להשתמש בו?
בגלל הניידות של JavaScript, עכשיו אפשר לכתוב בשפה אחת ולבצע למידת מכונה בקלות בכל הפלטפורמות הבאות:
- בצד הלקוח בדפדפן האינטרנט באמצעות JavaScript רגיל
- בצד השרת ואפילו במכשירי IoT כמו Raspberry Pi באמצעות Node.js
- אפליקציות למחשב שמשתמשות ב-Electron
- אפליקציות שמותאמות לניידים באמצעות React Native
TensorFlow.js תומכת גם במספר קצוות עורפיים בכל אחת מהסביבות האלה (הסביבות שמבוססות על חומרה בפועל, שבהן היא יכולה לפעול, כמו CPU או WebGL). המונח 'בק-אנד' בהקשר הזה לא מתייחס לסביבת צד שרת – הבק-אנד להרצה יכול להיות צד לקוח ב-WebGL, למשל) כדי להבטיח תאימות וגם כדי שהפעולה תתבצע במהירות. כרגע יש תמיכה ב-TensorFlow.js ב:
- הפעלת WebGL בכרטיס המסך (GPU) של המכשיר – זו הדרך המהירה ביותר להפעיל מודלים גדולים יותר (בגודל של יותר מ-3MB) עם האצת GPU.
- הרצת Web Assembly (WASM) במעבד (CPU) – כדי לשפר את ביצועי המעבד במכשירים, כולל טלפונים ניידים מדורות קודמים. האפשרות הזו מתאימה יותר למודלים קטנים (בגודל של פחות מ-3MB) שיכולים לפעול מהר יותר במעבד עם WASM מאשר עם WebGL, בגלל התקורה של העלאת תוכן למעבד גרפי.
- ביצוע CPU – הגיבוי צריך להיות זמין אם אף אחת מהסביבות האחרות לא זמינה. היא הכי איטית מבין השלוש, אבל היא תמיד זמינה.
הערה: אם אתם יודעים באיזה מכשיר תבצעו את ההפעלה, אתם יכולים לכפות שימוש באחד מהקצוות העורפיים האלה. אם לא תציינו זאת, TensorFlow.js יבחר בשבילכם.
יכולות מתקדמות בצד הלקוח
הפעלת TensorFlow.js בדפדפן האינטרנט במחשב הלקוח יכולה להניב כמה יתרונות שכדאי לקחת בחשבון.
פרטיות
אתם יכולים לאמן את המודל ולסווג את הנתונים במחשב הלקוח בלי לשלוח את הנתונים לשרת אינטרנט של צד שלישי. יכול להיות שיהיו מקרים שבהם תהיה דרישה כזו כדי לעמוד בדרישות של חוקים מקומיים, כמו GDPR למשל, או כשמעבדים נתונים שהמשתמש רוצה לשמור במחשב שלו ולא לשלוח לצד שלישי.
מהירות
מכיוון שלא צריך לשלוח נתונים לשרת מרוחק, ההסקה (הפעולה של סיווג הנתונים) יכולה להיות מהירה יותר. יתרון נוסף הוא שיש לכם גישה ישירה לחיישנים של המכשיר, כמו מצלמה, מיקרופון, GPS, מד תאוצה ועוד, אם המשתמש מעניק לכם גישה.
היקף החשיפה והתאמה לעומס
בלחיצה אחת, כל אחד בעולם יכול ללחוץ על קישור ששלחתם לו, לפתוח את דף האינטרנט בדפדפן ולהשתמש במה שיצרתם. אין צורך בהגדרה מורכבת של Linux בצד השרת עם מנהלי התקנים של CUDA ועוד הרבה דברים אחרים רק כדי להשתמש במערכת למידת המכונה.
עלות
בלי שרתים, הדבר היחיד שצריך לשלם עליו הוא CDN לאירוח קובצי ה-HTML, ה-CSS, ה-JS והמודל. העלות של CDN נמוכה בהרבה מהעלות של הפעלת שרת (יכול להיות עם כרטיס גרפי מצורף) מסביב לשעון.
תכונות בצד השרת
השימוש בהטמעה של TensorFlow.js ב-Node.js מאפשר את התכונות הבאות.
תמיכה מלאה ב-CUDA
בצד השרת, כדי להאיץ את כרטיס המסך, צריך להתקין את הדרייברים של NVIDIA CUDA כדי לאפשר ל-TensorFlow לעבוד עם כרטיס המסך (בניגוד לדפדפן שמשתמש ב-WebGL – לא נדרשת התקנה). עם זאת, תמיכה מלאה ב-CUDA מאפשרת לכם לנצל באופן מלא את היכולות של הכרטיס הגרפי ברמה נמוכה יותר, וכך לקצר את זמני האימון וההסקה. הביצועים זהים לאלה של הטמעת Python TensorFlow, כי שתיהן משתמשות באותו קצה עורפי של C++.
גודל המודל
כדי לעבוד עם מודלים מתקדמים ממחקר, יכול להיות שתצטרכו לעבוד עם מודלים גדולים מאוד, אולי בגודל של גיגה-בייט. בשל מגבלות השימוש בזיכרון לכל כרטיסייה בדפדפן, אי אפשר להריץ את המודלים האלה בדפדפן אינטרנט. כדי להריץ את המודלים הגדולים האלה, אפשר להשתמש ב-Node.js בשרת שלכם עם מפרטי החומרה שנדרשים להרצה יעילה של מודל כזה.
IOT
Node.js נתמך במחשבים פופולריים עם לוח יחיד כמו Raspberry Pi, מה שאומר שאפשר להריץ מודלים של TensorFlow.js גם במכשירים כאלה.
מהירות
Node.js כתוב ב-JavaScript, ולכן הוא נהנה מקומפילציה בזמן אמת (JIT). המשמעות היא שלעתים קרובות תראו שיפורים בביצועים כשמשתמשים ב-Node.js, כי הוא יעבור אופטימיזציה בזמן הריצה, במיוחד אם אתם מבצעים עיבוד מקדים. דוגמה מצוינת לכך אפשר לראות במקרה לדוגמה הזה, שבו מוסבר איך Hugging Face השתמשו ב-Node.js כדי לשפר פי 2 את הביצועים של המודל לעיבוד שפה טבעית שלהם.
עכשיו, אחרי שהבנתם את היסודות של TensorFlow.js, איפה אפשר להריץ אותו ומה היתרונות שלו, אפשר להתחיל לעשות איתו דברים שימושיים.
3. הגדרת המערכת
במדריך הזה נשתמש ב-Ubuntu – הפצת לינוקס פופולרית שמשתמשים בה אנשים רבים, והיא זמינה ב-Compute Engine ב-Google Cloud כתמונת בסיס, אם תבחרו לפעול במכונה וירטואלית מבוססת-ענן.
בזמן כתיבת המאמר הזה, אפשר לבחור את התמונה של Ubuntu 18.04.4 LTS כשיוצרים מכונה וירטואלית חדשה של Compute Engine, וזה מה שנשתמש בו. כמובן שאפשר להשתמש במחשב שלכם, או אפילו במערכת הפעלה אחרת אם תבחרו לעשות זאת, אבל יכול להיות שיהיו הבדלים בין המערכות בהוראות ההתקנה ובתלות.
התקנת TensorFlow (גרסת Python)
עכשיו, כנראה שאתם מנסים להמיר מודל קיים שמבוסס על Python שמצאתם או שתכתבו. כדי לייצא קובץ SavedModel מ-Python, תצטרכו להגדיר את גרסת Python של TensorFlow במופע שלכם אם קובץ SavedModel לא זמין להורדה.
מתחברים באמצעות SSH למכונת הענן שיצרתם למעלה, ואז מקלידים את הפקודה הבאה בחלון הטרמינל:
חלון הטרמינל:
sudo apt update
sudo apt-get install python3
כך מוודאים ש-Python 3 מותקן במחשב. כדי להשתמש ב-TensorFlow, צריך להתקין Python בגרסה 3.4 ומעלה.
כדי לוודא שהגרסה הנכונה מותקנת, מקלידים את הפקודה הבאה:
חלון הטרמינל:
python3 --version
אמור להופיע פלט שמציין את מספר הגרסה, כמו Python 3.6.9. אם הערך מודפס בצורה נכונה והוא גבוה מ-3.4, אפשר להמשיך.
בשלב הבא נתקין את PIP ל-Python 3, שהוא מנהל החבילות של Python, ואז נעדכן אותו. סוג:
חלון הטרמינל:
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 ל-Python:
חלון הטרמינל:
pip3 install tensorflow
השלמת הפעולה תימשך זמן מה, לכן צריך להמתין עד שהיא תסתיים.
בואו נבדוק שהתקנתם את TensorFlow בצורה נכונה. יוצרים קובץ Python בשם test.py בספרייה הנוכחית:
חלון הטרמינל:
nano test.py
אחרי ש-nano נפתח, אפשר לכתוב קוד Python כדי להדפיס את הגרסה של TensorFlow שהותקנה:
test.py:
import tensorflow as tf
print(tf.__version__)
מקישים על CTRL + O כדי לכתוב את השינויים בדיסק ואז על CTRL + X כדי לצאת מעורך nano.
עכשיו אפשר להריץ את קובץ ה-Python הזה כדי לראות את הגרסה של TensorFlow שמוצגת במסך:
חלון הטרמינל:
python3 test.py
בזמן כתיבת המאמר הזה, אנחנו רואים את הערך 2.3.1 מודפס במסוף עבור הגרסה המותקנת של TensorFlow Python.
4. יצירת מודל Python
בשלב הבא ב-Codelab הזה נסביר איך ליצור מודל פשוט של Python כדי להראות איך אפשר לשמור את המודל המאומן שמתקבל בפורמט SavedModel, ואז להשתמש בו עם כלי ההמרה של TensorFlow.js בשורת הפקודה. העיקרון יהיה דומה לכל מודל Python שתנסו להמיר, אבל אנחנו נשמור על פשטות הקוד כדי שכולם יוכלו להבין.
עכשיו נעדכן את הקוד בקובץ 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 בקוד Python, כדאי להשתמש בפורמט קלט אחר:
- keras – לטעינת פורמט keras (סוג קובץ HDF5)
- tf_saved_model – לטעינת מודל שמשתמש בממשקי TensorFlow Core API במקום ב-Keras.
- tf_frozen_model – לטעינת מודל שמכיל משקלים קפואים.
- tf_hub – לטעינת מודל שנוצר מ-Tensorflow Hub.
שני הפרמטרים הבאים מציינים באיזו תיקייה נמצא המודל השמור. בהדגמה שלמעלה אנחנו מציינים את הספרייה הנוכחית, ולבסוף אנחנו מציינים לאיזו ספרייה אנחנו רוצים להוציא את ההמרה. בדוגמה שלמעלה אנחנו מציינים תיקייה בשם predict_houses_tfjs בספרייה הנוכחית.
הפעלת הפקודה שלמעלה יוצרת תיקייה חדשה בספרייה הנוכחית בשם predict_houses_tfjs שמכילה:
- model.json
- Group1-shard1of1.bin
אלה הקבצים שדרושים להפעלת המודל בדפדפן האינטרנט. שומרים את הקבצים האלה כי נשתמש בהם בקטע הבא.
6. שימוש במודל שהומר בדפדפן
אירוח הקבצים שהומרו
קודם צריך למקם את הקבצים model.json ו-*.bin שנוצרו בשרת אינטרנט כדי שנוכל לגשת אליהם דרך דף האינטרנט שלנו. בדמו הזה נשתמש ב-Glitch.com כדי שיהיה לכם קל לעקוב אחרי ההוראות. אבל אם יש לכם ניסיון בהנדסת אתרים, אתם יכולים להפעיל שרת HTTP פשוט במופע השרת הנוכחי שלכם ב-Ubuntu כדי לעשות את זה. הבחירה היא שלך.
העלאת קבצים ל-Glitch
- נכנסים ל-Glitch.com.
- אפשר להשתמש בקישור הזה כדי לשכפל את פרויקט ה-boilerplate של TensorFlow.js. הוא מכיל קובצי HTML, CSS ו-JS שלד שמייבאים את ספריית TensorFlow.js כדי שנוכל להשתמש בהם.
- לוחצים על התיקייה 'נכסים' בחלונית הימנית.
- לוחצים על 'העלאת נכס' ובוחרים ב-
group1-shard1of1.binכדי להעלות אותו לתיקייה הזו. אחרי ההעלאה, הוא אמור להיראות כך:
- אם לוחצים על הקובץ
group1-shard1of1.binשהועלה, אפשר להעתיק את כתובת ה-URL למיקום שלו. מעתיקים את הנתיב הזה כמו שמופיע כאן:
- עכשיו עורכים את
model.jsonבאמצעות כלי לעריכת טקסט שמועדף עליכם במחשב המקומי ומחפשים (באמצעות CTRL+F) את הקובץgroup1-shard1of1.binשיופיע איפשהו בתוכו.
מחליפים את שם הקובץ בכתובת ה-URL שהעתקתם משלב 5, אבל מוחקים את התו https://cdn.glitch.com/ שנוצר בגלל תקלה בנתיב המועתק.
אחרי העריכה, הקובץ צריך להיראות בערך כך (שימו לב שהנתיב לשרת הוסר, כך שרק שם הקובץ שהועלה נשאר):
7. עכשיו שומרים ומעלים את קובץ model.json הערוך אל Glitch. לשם כך לוחצים על 'נכסים' ואז על הלחצן 'העלאת נכס' (חשוב). אם לא משתמשים בלחצן הפיזי וגוררים ושומטים, הקובץ יעלה כקובץ שאפשר לערוך במקום ב-CDN, והוא לא יהיה באותה תיקייה. מערכת TensorFlow.js מניחה נתיב יחסי כשהיא מנסה להוריד את הקבצים הבינאריים של מודל נתון. אם עשיתם את זה נכון, אמורים להופיע 2 קבצים בתיקייה assets, כמו בדוגמה הבאה: 
מצוין! עכשיו אנחנו מוכנים להשתמש בקבצים השמורים עם קוד בפועל בדפדפן.
טעינת המודל
אחרי שאירחנו את הקבצים שהומרו, אפשר לכתוב דף אינטרנט פשוט כדי לטעון את הקבצים האלה ולהשתמש בהם כדי ליצור תחזית. פותחים את 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, תניב את הפלט שמוצג למטה.

אם בודקים את המסוף של דפדפן האינטרנט (מקישים על F12 כדי להציג את כלי הפיתוח בדפדפן), אפשר לראות גם את תיאור המודל של המודל שנטען, שמופיע כך:

אם נשווה את זה לקוד Python בתחילת ה-codelab הזה, נוכל לאשר שזו אותה רשת שיצרנו עם קלט דחוס אחד ושכבה דחוסה אחת עם צומת אחד.
מעולה! הרצתם עכשיו מודל Python שעבר המרה בדפדפן האינטרנט.
7. מודלים שלא מומרים
יהיו מקרים שבהם לא תהיה תמיכה בהמרות של מודלים מורכבים יותר שמתבססים על פעולות פחות נפוצות. הגרסה של TensorFlow.js שמבוססת על דפדפן היא שכתוב מלא של TensorFlow, ולכן אנחנו לא תומכים כרגע בכל הפעולות ברמה הנמוכה שיש ל-TensorFlow C++ API (יש אלפי פעולות כאלה). עם זאת, אנחנו מוסיפים עוד פעולות עם הזמן ככל שהפלטפורמה מתפתחת והפעולות הבסיסיות הופכות ליציבות יותר.
בזמן כתיבת המאמר הזה, אחת מהפונקציות ב-TensorFlow Python שמייצרת אופרטור לא נתמך כשמייצאים אותה כ-savedmodel היא linalg.diag. אם ננסה להמיר savedmodel שמשתמש בזה ב-Python (שכן תומך בפעולות שנוצרות), תופיע שגיאה דומה לזו שמוצגת למטה:

אפשר לראות כאן שהקריאה linalg.diag קומפלה ליצירת פעולה בשם MatrixDiagV3, שלא נתמכת על ידי TensorFlow.js בדפדפן האינטרנט בזמן כתיבת ה-Codelab הזה.
מה צריך לעשות?
לרשותך שתי אפשרויות.
- הטמעה של פעולה חסרה ב-TensorFlow.js – אנחנו פרויקט קוד פתוח ונשמח לקבל תרומות כמו פעולות חדשות. במדריך הזה מוסבר איך לכתוב פעולות חדשות ב-TensorFlow.js. אם בכל זאת תצליחו לעשות את זה, תוכלו להשתמש בדגל
Skip_op_checkבכלי להמרה משורת הפקודה כדי להתעלם מהשגיאה הזו ולהמשיך בהמרה (הכלי יניח שהפעולה הזו זמינה בגרסה החדשה של TensorFlow.js שיצרתם, שכוללת תמיכה בפעולה החסרה). - קובעים איזה חלק בקוד Python יצר את הפעולה שלא נתמכת בקובץ
savedmodelשייצאתם. במערך קטן של קוד, יכול להיות שיהיה קל לאתר את זה, אבל במודלים מורכבים יותר יכול להיות שיידרש מחקר מעמיק, כי כרגע אין שיטה לזיהוי בקשה להפעלת פונקציית Python ברמה גבוהה שיצרה פעולה מסוימת אחרי שהיא הוגדרה בפורמט הקובץsavedmodel. אחרי שתאתרו את המיקום, תוכלו לשנות אותו כדי להשתמש בשיטה אחרת שנתמכת.
8. מזל טוב
מזל טוב, עשית את הצעדים הראשונים בשימוש במודל Python דרך TensorFlow.js בדפדפן האינטרנט!
סיכום
בשיעור ה-Lab הזה למדנו איך:
- הגדרה של סביבת Linux להתקנה של TensorFlow מבוסס Python
- ייצוא של Python 'SavedModel'
- התקנה של כלי ההמרה של שורת הפקודה TensorFlow.js
- משתמשים בכלי להמרת שורת הפקודה של TensorFlow.js כדי ליצור את הקבצים הנדרשים בצד הלקוח
- שימוש בקבצים שנוצרו באפליקציית אינטרנט אמיתית
- מזהים את המודלים שלא יומרו ומסבירים מה צריך לעשות כדי לאפשר את ההמרה שלהם בעתיד.
מה השלב הבא?
אל תשכחו לתייג אותנו בכל תוכן שאתם יוצרים באמצעות #MadeWithTFJS כדי לקבל הזדמנות להופיע ברשתות החברתיות או אפילו להיות מוצגים באירועי TensorFlow עתידיים. נשמח לראות מה אתם ממירים ומשתמשים בצד הלקוח בדפדפן.
עוד Codelabs של TensorFlow.js ללימוד מעמיק
- כתיבת רשת נוירונים מאפס ב-TensorFlow.js
- איך יוצרים מצלמת אינטרנט חכמה שיכולה לזהות אובייקטים
- סיווג תמונות בהתאמה אישית באמצעות למידת העברה ב-TensorFlow.js