Interpreter

שיעור סיום ציבורי תרגום שיחה פעילה

שיעור הנהג להסקת מסקנות מהמודל באמצעות TensorFlow Lite.

הערה: אם אינך זקוק לגישה לאף אחת מהאפשרויות ה"ניסיוניות" תכונות ה-API שמפורטות בהמשך, מעדיפים להשתמש בהן במקום להשתמש ב-TranslateerApi וב-TranslateerFact , במקום להשתמש ישירות ב'תרגום שיחה פעילה'.

Interpreter כולל מודל TensorFlow Lite שעבר אימון מקדים, שבו פעולות מופעלות לצורך הסקת מסקנות מהמודל.

לדוגמה, אם המודל מקבל רק קלט אחד ומחזיר רק פלט אחד:

try (Interpreter interpreter = new Interpreter(file_of_a_tensorflowlite_model)) {
   interpreter.run(input, output);
 }
 

אם המודל מקבל כמה קלטים או פלטים:

Object[] inputs = {input0, input1, ...};
 Map<Integer, Object> map_of_indices_to_outputs = new HashMap<>();
 FloatBuffer ith_output = FloatBuffer.allocateDirect(3 * 2 * 4);  // Float tensor, shape 3x2x4.
 ith_output.order(ByteOrder.nativeOrder());
 map_of_indices_to_outputs.put(i, ith_output);
 try (Interpreter interpreter = new Interpreter(file_of_a_tensorflowlite_model)) {
   interpreter.runForMultipleInputsOutputs(inputs, map_of_indices_to_outputs);
 }
 

אם המודל לוקח או מפיק מעבדי מחרוזות:

String[] input = {"foo", "bar"};  // Input tensor shape is [2].
 String[][] output = new String[3][2];  // Output tensor shape is [3, 2].
 try (Interpreter interpreter = new Interpreter(file_of_a_tensorflowlite_model)) {
   interpreter.runForMultipleInputsOutputs(input, output);
 }
 

שימו לב שיש הבחנה בין צורה [] לצורה[1]. לטנזין של מחרוזת סקלרית פלט:

String[] input = {"foo"};  // Input tensor shape is [1].
 ByteBuffer outputBuffer = ByteBuffer.allocate(OUTPUT_BYTES_SIZE);  // Output tensor shape is [].
 try (Interpreter interpreter = new Interpreter(file_of_a_tensorflowlite_model)) {
   interpreter.runForMultipleInputsOutputs(input, outputBuffer);
 }
 byte[] outputBytes = new byte[outputBuffer.remaining()];
 outputBuffer.get(outputBytes);
 // Below, the `charset` can be StandardCharsets.UTF_8.
 String output = new String(outputBytes, charset);
 

הסדר של נתוני הקלט והפלט נקבעים בהמרה של מודל TensorFlow ל-TensorFlowLite ב-Toco, וכך גם צורות ברירת המחדל של הקלט.

כאשר ערכי הקלט מוצגים כמערכים (רב-מימדיים), רכיבי הקלט המתאימים לשנות את גודלן במרומז בהתאם לצורת המערך. כשמזינים ערכי קלט בתור Buffer ללא שינוי גודל מרומז, המתקשר חייב לוודא שגודל הבייטים של Buffer תואם לזה של הטנזור התואם, או שקודם הוא משנה את הגודל של הטנזור דרך resizeInput(int, int[]). מידע על הצורה והסוגים של Tensor אפשר לקבל דרך המחלקה Tensor, שזמינה דרך getInputTensor(int) ו-getOutputTensor(int).

אזהרה: מכונות Interpreter לא בטוחות לשרשורים. Interpreter הוא הבעלים של משאבים שחייבים לפנות במפורש על ידי הפעלה של close()

ספריית TFLite מבוססת על NDK API 19. יכול להיות שהתכונה תפעל גם ברמות API של Android מתחת ל-19, אבל הדבר לא מובטח.

מחלקות מקוננות

מחלקה Interpreter.Options סיווג אפשרויות לשליטה בהתנהגות של המתורגמן בסביבת זמן הריצה.

בנייה ציבורית

תרגום(קובץ modelFile)
מתבצע אתחול של Interpreter.
תרגום(קובץ modelFile, אפשרויות של Interpreter.Options)
מופעלת Interpreter ומציינת אפשרויות להתאמה אישית של התנהגות המתורגמן.
תרגום(ByteBuffer byteBuffer)
מאתחלת Interpreter עם ByteBuffer של קובץ מודל.
תרגום שיחה פעילה(ByteBuffer byteBuffer, Interpreter.Options)
הפעלת Interpreter עם ByteBuffer של קובץ מודל וקבוצה של Interpreter.Options בהתאמה אישית.

שיטות ציבוריות

ריק
allocateTensors()
מעדכן באופן מפורש את ההקצאות לכל הפרמטרים של Tensor, אם יש צורך.
ריק
Close()
שחרור משאבים שמשויכים למכונה InterpreterApi.
int