שיעור הנהג להסקת מסקנות מהמודל באמצעות 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.Options)
מופעלת
Interpreter ומציינת אפשרויות להתאמה אישית של התנהגות המתורגמן. |
|
שיטות ציבוריות
ריק |
allocateTensors()
מעדכן באופן מפורש את ההקצאות לכל הפרמטרים של Tensor, אם יש צורך.
|
ריק |
Close()
שחרור משאבים שמשויכים למכונה
InterpreterApi . |
int | |
Tensor |
getInputTensor(int inputIndex)
הפונקציה מקבלת את ה-Tensor שמשויך לאינדקס הקלט שסופק.
|