אם הבעיה שלך לא מופיעה כאן, אנא חפש בבעיות github לפני מילוי אחת חדשה.
TypeError: אובייקט 'ניתן למעקב אוטומטי' אינו ניתן להתקשרות
# BAD: Raises error
embed = hub.load('https://tfhub.dev/google/nnlm-en-dim128/1')
embed(['my text', 'batch'])
שגיאה זו מתעוררת לעתים קרובות בעת טעינת מודלים בפורמט TF1 Hub עם ה-API hub.load()
ב-TF2. הוספת החתימה הנכונה אמורה לפתור בעיה זו. עיין במדריך ההעברה של TF-Hub עבור TF2 לפרטים נוספים על מעבר ל-TF2 ועל השימוש בדגמים בפורמט TF1 Hub ב-TF2.
embed = hub.load('https://tfhub.dev/google/nnlm-en-dim128/1')
embed.signatures['default'](['my text', 'batch'])
לא ניתן להוריד מודול
בתהליך השימוש במודול מ-URL ישנן שגיאות רבות שיכולות להופיע עקב מחסנית הרשת. לעתים קרובות זו בעיה ספציפית למכונה שמריצה את הקוד ולא בעיה עם הספרייה. להלן רשימה של הנפוצים:
"EOF התרחש תוך הפרה של הפרוטוקול" - סביר להניח שבעיה זו תיווצר אם גרסת הפיתון המותקנת אינה תומכת בדרישות ה-TLS של השרת המארח את המודול. יש לציין כי ידוע כי Python 2.7.5 נכשל בפתרון מודולים מתחום tfhub.dev. תיקון : אנא עדכן לגרסת פיתון חדשה יותר.
"יכול לאמת את האישור של tfhub.dev" - סביר להניח שבעיה זו תיווצר אם משהו ברשת מנסה לפעול כ-gTLD של dev. לפני השימוש ב-.dev כ-gTLD, מפתחים ומסגרות השתמשו לפעמים בשמות .dev כדי לסייע בבדיקת קוד. תיקון: זהה והגדר מחדש את התוכנה שיירטת את רזולוציית השמות בדומיין ".dev".
כשלים בכתיבה לספריית המטמון
/tmp/tfhub_modules
(או דומה): ראה מטמון עבור מה זה וכיצד לשנות את מיקומו.
אם השגיאות והתיקונים שלעיל לא עובדים, אפשר לנסות להוריד מודול באופן ידני על ידי הדמיית הפרוטוקול של צירוף ?tf-hub-format=compressed
לכתובת ה-URL כדי להוריד קובץ דחוס tar שיש לפרק אותו באופן ידני לתוך מקומי קוֹבֶץ. לאחר מכן ניתן להשתמש בנתיב לקובץ המקומי במקום בכתובת האתר. הנה דוגמה מהירה:
# Create a folder for the TF hub module.
$ mkdir /tmp/moduleA
# Download the module, and uncompress it to the destination folder. You might want to do this manually.
$ curl -L "https://tfhub.dev/google/universal-sentence-encoder/2?tf-hub-format=compressed" | tar -zxvC /tmp/moduleA
# Test to make sure it works.
$ python
> import tensorflow_hub as hub
> hub.Module("/tmp/moduleA")
הפעלת מסקנות על מודול מראש אתחול
אם אתה כותב תוכנית Python שמחילה מודול פעמים רבות על נתוני קלט, אתה יכול ליישם את המתכונים הבאים. (הערה: להגשת בקשות בשירותי ייצור, שקול את TensorFlow Serving או פתרונות מדרגיים אחרים ללא Python.)
בהנחה שמודל השימוש שלך הוא אתחול ובקשות עוקבות (לדוגמה Django, Flask, שרת HTTP מותאם אישית וכו'), אתה יכול להגדיר את ההגשה באופן הבא:
TF2 SavedModels
- בחלק האתחול:
- טען את דגם TF2.0.
import tensorflow_hub as hub
embedding_fn = hub.load("https://tfhub.dev/google/universal-sentence-encoder/4")
- בחלק הבקשה:
- השתמש בפונקציית ההטמעה כדי להפעיל הסקה.
embedding_fn(["Hello world"])
קריאה זו של tf.function מותאמת לביצועים, ראה מדריך tf.function .
מודולי TF1 Hub
- בחלק האתחול:
- בנה את הגרף עם מציין מיקום - נקודת כניסה לתוך הגרף.
- אתחול הפגישה.
import tensorflow as tf
import tensorflow_hub as hub
# Create graph and finalize (finalizing optional but recommended).
g = tf.Graph()
with g.as_default():
# We will be feeding 1D tensors of text into the graph.
text_input = tf.placeholder(dtype=tf.string, shape=[None])
embed = hub.Module("https://tfhub.dev/google/universal-sentence-encoder/2")
embedded_text = embed(text_input)
init_op = tf.group([tf.global_variables_initializer(), tf.tables_initializer()])
g.finalize()
# Create session and initialize.
session = tf.Session(graph=g)
session.run(init_op)
- בחלק הבקשה:
- השתמש בהפעלה כדי להזין נתונים לתוך הגרף דרך מציין המיקום.
result = session.run(embedded_text, feed_dict={text_input: ["Hello world"]})
לא ניתן לשנות את ה-dtype של דגם (למשל, float32 ל-bfloat16)
SavedModels של TensorFlow (המשותף ב-TF Hub או אחר) מכילים פעולות שעובדות על סוגי נתונים קבועים (לעיתים קרובות, float32 עבור המשקולות והפעלות הביניים של רשתות עצביות). לא ניתן לשנות אותם לאחר מעשה בעת טעינת ה- SavedModel (אך מפרסמי מודלים יכולים לבחור לפרסם מודלים שונים עם סוגי נתונים שונים).
עדכן גרסת דגם
ניתן לעדכן את המטא-נתונים של התיעוד של גרסאות המודל. עם זאת, נכסי הגרסה (קובצי הדגם) אינם ניתנים לשינוי. אם ברצונך לשנות את נכסי המודל, תוכל לפרסם גרסה חדשה יותר של המודל. מומלץ להרחיב את התיעוד ביומן שינויים שמתאר מה השתנה בין גרסאות.