Interpreter

คลาสสุดท้ายสาธารณะ ล่าม

คลาสไดรเวอร์เพื่อขับเคลื่อนการอนุมานโมเดลด้วย TensorFlow Lite

หมายเหตุ: หากคุณไม่ต้องการเข้าถึงฟีเจอร์ API "รุ่นทดลอง" ใดๆ ด้านล่าง ให้ใช้ TranslationerApi และ ก่อนจะตีความ "เพื่อที่จะทำงาน" แทนการใช้ Mediation (อินเทอร์พรีเตอร์)

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);
 }
 

หากโมเดลใช้หรือสร้าง Tensor สตริง ให้ทำดังนี้

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] มีความแตกต่างกัน สำหรับเอาต์พุต Tensor สตริงสเกลาร์:

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 เช่นเดียวกับรูปร่างเริ่มต้นของอินพุต

เมื่อระบุอินพุตเป็นอาร์เรย์ (หลายมิติ) tensor ของอินพุตที่เกี่ยวข้องจะได้รับการปรับขนาดโดยปริยายตามรูปร่างของอาร์เรย์ เมื่อระบุอินพุตเป็นประเภท Buffer จะไม่มีการปรับขนาดโดยนัย ผู้เรียกใช้ต้องตรวจสอบว่าขนาดไบต์ Buffer ตรงกับของ tensor ที่เกี่ยวข้อง หรือปรับขนาด Tensor ผ่าน resizeInput(int, int[]) ก่อน คุณจะรับข้อมูลรูปร่างและประเภทของ Tensor ได้ผ่านคลาส Tensor ซึ่งเข้าถึงได้ผ่าน getInputTensor(int) และ getOutputTensor(int)

คำเตือน: อินสแตนซ์ Interpreter รายการไม่มีความปลอดภัยสำหรับชุดข้อความ Interpreter เป็นเจ้าของทรัพยากรที่ต้องทำให้เป็นอิสระอย่างชัดเจนด้วยการเรียกใช้ close()

ไลบรารี TFLite สร้างขึ้นโดยใช้ NDK API 19 ซึ่งอาจใช้ได้กับ API ของ Android ระดับที่ต่ำกว่า 19 แต่จะไม่รับประกัน

ชั้นเรียนที่ซ้อนกัน

คลาส Interpreter.Options คลาสตัวเลือกสำหรับการควบคุมลักษณะการทำงานของอินเตอร์พรีเตอร์รันไทม์

บริษัทก่อสร้าง

ล่าม(ไฟล์ ModelFile)
เริ่มต้น Interpreter
โหมดล่าม(ตัวเลือก ไฟล์ ของโมเดล, Interpreter.Options)
เริ่มต้น Interpreter และระบุตัวเลือกสำหรับปรับแต่งลักษณะการทำงานของล่าม
อินเตอร์พรีเตอร์(ByteBuffer ไบต์บัฟเฟอร์)
เริ่มต้น Interpreter ด้วย ByteBuffer ของไฟล์โมเดล
โหมดล่าม(ตัวเลือก bytesBuffer ของ ByteBuffer, ตัวเลือกInterpreter.Options)
เริ่มต้น Interpreter ด้วย ByteBuffer ของไฟล์โมเดลและชุด Interpreter.Options ที่กำหนดเอง

วิธีการสาธารณะ

void
allocateTensors()
อัปเดตการจัดสรรสำหรับ Tensor ทั้งหมดอย่างชัดเจน หากจำเป็น
void
close()
ปล่อยทรัพยากรที่เชื่อมโยงกับอินสแตนซ์ InterpreterApi
int
getInputIndex(String opName)
รับดัชนีของอินพุตโดยระบุชื่อตัวเลือกของอินพุต
Tensor
getInputTensor(int InputIndex)
รับ Tensor ที่เชื่อมโยงกับดัชนีอินพุตที่ระบุ
int
getInputTensorCount()
ดึงจำนวนของ Tensor อินพุต
Tensor
getInputTensorFromSignature(ชื่ออินพุต String, String signatureKey)
รับ Tensor ที่เชื่อมโยงกับชื่ออินพุตและชื่อเมธอดลายเซ็นที่ระบุ
ยาว
getLastNativeInferenceDurationNanoseconds()
แสดงเวลาการอนุมานดั้งเดิม
int
getOutputIndex(opName สตริง)
รับดัชนีของเอาต์พุตตามชื่อการดำเนินการของเอาต์พุต
Tensor
getOutputTensor(intเอาต์พุตIndex)
รับ Tensor ที่เชื่อมโยงกับดัชนีเอาต์พุตที่ระบุ
int
getOutputTensorCount()
รับจำนวนของ Tensor เอาต์พุต
Tensor
getOutputTensorFromSignature(เอาต์พุตชื่อ String, String signatureKey)
รับ Tensor ที่เชื่อมโยงกับชื่อเอาต์พุตที่ให้ไว้ในเมธอดลายเซ็นที่เฉพาะเจาะจง
สตริง[]
getSignatureInputs(String signatureKey)
รับรายการอินพุต SignatureDef สำหรับเมธอด signatureKey
สตริง[]
getSignatureKeys()
รับรายการชื่อเมธอด SignatureDef ที่ส่งออกที่มีอยู่ในโมเดล
สตริง[]
getSignatureOutputs(String signatureKey)
รับรายการเอาต์พุต SignatureDefs สำหรับเมธอด signatureKey
void
resetVariableTensors()
ขั้นสูง: รีเซ็ต Tensor ตัวแปรทั้งหมดเป็นค่าเริ่มต้น
void
resizeInput(int idx, int[] dims, boolean strict)
ปรับขนาดอินพุต idx-th ของโมเดลเนทีฟให้เป็นค่าสลัวที่กำหนด
void
resizeInput(int idx, int[] หรี่แสง)
ปรับขนาดอินพุต idx-th ของโมเดลเนทีฟให้เป็นค่าสลัวที่กำหนด
void
run(อินพุตออบเจ็กต์ เอาต์พุต ออบเจ็กต์)
เรียกใช้การอนุมานโมเดล หากโมเดลใช้เพียงอินพุตเดียว และให้เอาต์พุตเพียง 1 รายการ
void
runForMultipleInputsOutputs(อินพุต Object[], แมป<จำนวนเต็มObject> เอาต์พุต)
เรียกใช้การอนุมานโมเดล หากโมเดลใช้อินพุตหลายรายการหรือแสดงผลเอาต์พุตหลายรายการ
void
runSignature(อินพุต Map<StringObject>, Map<StringObject> เอาต์พุต)
เหมือนกับ runSignature(Map, Map, String) แต่ไม่จำเป็นต้องส่ง signatureKey หากโมเดลมี SignatureDef 1 รายการ
void
runSignature(อินพุต Map<StringObject>, Map<StringObject> เอาต์พุต, String signatureKey)
เรียกใช้การอนุมานโมเดลโดยอิงตาม SignatureDef ที่ให้ไว้ผ่าน signatureKey
void
setCancelled(บูลีนถูกยกเลิก)
ขั้นสูง: รบกวนการอนุมานขณะเรียกไปยัง run(Object, Object)

วิธีการที่รับช่วงมา

บริษัทก่อสร้าง

สาธารณะ ล่าม (ไฟล์โมเดลไฟล์)

เริ่มต้น Interpreter

พารามิเตอร์
modelFile ไฟล์ของโมเดล TF Lite ที่ฝึกล่วงหน้า
การขว้าง
IllegalArgumentException หาก modelFile ไม่ได้เข้ารหัสโมเดล TensorFlow Lite ที่ถูกต้อง

สาธารณะ ล่าม (ตัวเลือกไฟล์โมเดลไฟล์, Interpreter.Options)

เริ่มต้น Interpreter และระบุตัวเลือกสำหรับปรับแต่งลักษณะการทำงานของล่าม

พารามิเตอร์
modelFile ไฟล์ของโมเดล TF Lite ที่ฝึกล่วงหน้า
ตัวเลือก ชุดตัวเลือกสำหรับปรับแต่งลักษณะการทำงานของล่าม
การขว้าง
IllegalArgumentException หาก modelFile ไม่ได้เข้ารหัสโมเดล TensorFlow Lite ที่ถูกต้อง

สาธารณะ ล่าม (ByteBuffer bytesBuffer)

เริ่มต้น Interpreter ด้วย ByteBuffer ของไฟล์โมเดล

ไม่ควรแก้ไข ByteBuffer หลังการสร้าง Interpreter ByteBuffer อาจเป็น MappedByteBuffer ที่แมปไฟล์โมเดลในหน่วยความจำ หรือ ByteBuffer โดยตรงของ NativeOrder() ที่มีเนื้อหาไบต์ของโมเดล

พารามิเตอร์
byteBuffer
การขว้าง
IllegalArgumentException หาก byteBuffer ไม่ใช่ MappedByteBuffer หรือ ByteBuffer โดยตรงของ NativeOrder

สาธารณะ ล่าม (ตัวเลือก ByteBuffer bytesBuffer, Interpreter.Options)

เริ่มต้น Interpreter ด้วย ByteBuffer ของไฟล์โมเดลและชุด Interpreter.Options ที่กำหนดเอง

ไม่ควรแก้ไข ByteBuffer หลังจากสร้าง Interpreter ByteBuffer อาจเป็น MappedByteBuffer ที่แมปไฟล์โมเดลในหน่วยความจำ หรือ ByteBuffer โดยตรงของ NativeOrder() ที่มีเนื้อหาไบต์ของโมเดล

พารามิเตอร์
byteBuffer
ตัวเลือก
การขว้าง
IllegalArgumentException หาก byteBuffer ไม่ใช่ MappedByteBuffer หรือ ByteBuffer โดยตรงของ NativeOrder

วิธีการสาธารณะ

สาธารณะ void allocateTensors ()

อัปเดตการจัดสรรสำหรับ Tensor ทั้งหมดอย่างชัดเจน หากจำเป็น

การดำเนินการนี้จะเผยแพร่รูปร่างและการจัดสรรหน่วยความจำสำหรับ tensor แบบอ้างอิงโดยใช้รูปร่าง tensor ของอินพุตตามที่กำหนด

หมายเหตุ: การโทรนี้ *ไม่บังคับเท่านั้น* การจัดสรร Tensor จะเกิดขึ้นโดยอัตโนมัติระหว่างการดำเนินการหากมีการปรับขนาด Tensor อินพุต การเรียกใช้นี้มีประโยชน์มากที่สุดในการกำหนดรูปร่างสำหรับ Tensor เอาต์พุตก่อนเรียกใช้กราฟ เช่น

 interpreter.resizeInput(0, new int[]{1, 4, 4, 3}));
 interpreter.allocateTensors();
 FloatBuffer input = FloatBuffer.allocate(interpreter.getInputTensor(0).numElements());
 // Populate inputs...
 FloatBuffer output = FloatBuffer.allocate(interpreter.getOutputTensor(0).numElements());
 interpreter.run(input, output)
 // Process outputs...

หมายเหตุ: กราฟบางรายการมีเอาต์พุตที่มีรูปร่างแบบไดนามิก ซึ่งในกรณีนี้รูปร่างเอาต์พุตอาจไม่ได้เผยแพร่อย่างสมบูรณ์จนกว่าจะเรียกใช้การอนุมาน

สาธารณะ โมฆะ ปิด ()

ปล่อยทรัพยากรที่เชื่อมโยงกับอินสแตนซ์ InterpreterApi

public int getInputIndex (String opName)

รับดัชนีของอินพุตโดยระบุชื่อตัวเลือกของอินพุต

พารามิเตอร์
opName

สาธารณะ Tensor getInputTensor (int InputIndex)

รับ Tensor ที่เชื่อมโยงกับดัชนีอินพุตที่ระบุ

พารามิเตอร์
inputIndex

สาธารณะ int getInputTensorCount ()

ดึงจำนวนของ Tensor อินพุต

สาธารณะ Tensor getInputTensorFromSignature (String InputName, String signatureKey)

รับ Tensor ที่เชื่อมโยงกับชื่ออินพุตและชื่อเมธอดลายเซ็นที่ระบุ

คำเตือน: นี่เป็น API ทดลองและอาจมีการเปลี่ยนแปลง

พารามิเตอร์
inputName ป้อนชื่อในลายเซ็น
signatureKey คีย์ลายเซ็นที่ระบุ SignatureDef จะเป็นค่าว่างได้หากโมเดลมีลายเซ็นเดียว
การขว้าง
IllegalArgumentException หาก inputName หรือ signatureKey เป็นค่าว่างหรือว่างเปล่า หรือระบุชื่อไม่ถูกต้อง

สาธารณะ ยาว getLastNativeInferenceDurationNanoseconds ()

แสดงเวลาการอนุมานดั้งเดิม

Public int getOutputIndex (String opName)

รับดัชนีของเอาต์พุตตามชื่อการดำเนินการของเอาต์พุต

พารามิเตอร์
opName

สาธารณะ Tensor getOutputTensor (int exportIndex)

รับ Tensor ที่เชื่อมโยงกับดัชนีเอาต์พุตที่ระบุ

หมายเหตุ: รายละเอียด Tensor เอาต์พุต (เช่น รูปร่าง) อาจไม่แสดงโดยสมบูรณ์จนกว่าจะทำการอนุมาน หากคุณต้องการอัปเดตรายละเอียด *ก่อน* เรียกใช้การอนุมาน (เช่น หลังจากปรับขนาด Tensor อินพุต ซึ่งอาจทำให้รูปร่าง Tensor เอาต์พุตไม่ถูกต้อง) ให้ใช้ allocateTensors() เพื่อทริกเกอร์การจัดสรรและการเผยแพร่รูปร่างอย่างชัดแจ้ง โปรดทราบว่าสำหรับกราฟที่มีรูปร่างเอาต์พุตที่อาศัย *ค่า* ของอินพุต ระบบอาจกำหนดรูปร่างเอาต์พุตไม่สมบูรณ์จนกว่าจะเรียกใช้การอนุมาน

พารามิเตอร์
outputIndex

public int getOutputTensorCount ()

รับจำนวนของ Tensor เอาต์พุต

สาธารณะ Tensor getOutputTensorFromSignature (String exportName, String signatureKey)

รับ Tensor ที่เชื่อมโยงกับชื่อเอาต์พุตที่ให้ไว้ในเมธอดลายเซ็นที่เฉพาะเจาะจง

หมายเหตุ: รายละเอียด Tensor เอาต์พุต (เช่น รูปร่าง) อาจไม่แสดงโดยสมบูรณ์จนกว่าจะทำการอนุมาน หากคุณต้องการอัปเดตรายละเอียด *ก่อน* เรียกใช้การอนุมาน (เช่น หลังจากปรับขนาด Tensor อินพุต ซึ่งอาจทำให้รูปร่าง Tensor เอาต์พุตไม่ถูกต้อง) ให้ใช้ allocateTensors() เพื่อทริกเกอร์การจัดสรรและการเผยแพร่รูปร่างอย่างชัดแจ้ง โปรดทราบว่าสำหรับกราฟที่มีรูปร่างเอาต์พุตที่อาศัย *ค่า* ของอินพุต ระบบอาจกำหนดรูปร่างเอาต์พุตไม่สมบูรณ์จนกว่าจะเรียกใช้การอนุมาน

คำเตือน: นี่เป็น API ทดลองและอาจมีการเปลี่ยนแปลง

พารามิเตอร์
outputName ชื่อเอาต์พุตในลายเซ็น
signatureKey คีย์ลายเซ็นที่ระบุ SignatureDef จะเป็นค่าว่างได้หากโมเดลมีลายเซ็นเดียว
การขว้าง
IllegalArgumentException หาก outputName หรือ signatureKey เป็นค่าว่างหรือว่างเปล่า หรือระบุชื่อไม่ถูกต้อง

สาธารณะ สตริง[] getSignatureInputs (String signatureKey)

รับรายการอินพุต SignatureDef สำหรับเมธอด signatureKey

คำเตือน: นี่เป็น API ทดลองและอาจมีการเปลี่ยนแปลง

พารามิเตอร์
signatureKey

สาธารณะ สตริง[] getSignatureKeys ()

รับรายการชื่อเมธอด SignatureDef ที่ส่งออกที่มีอยู่ในโมเดล

คำเตือน: นี่เป็น API ทดลองและอาจมีการเปลี่ยนแปลง

สาธารณะ สตริง[] getSignatureOutputs (String signatureKey)

รับรายการเอาต์พุต SignatureDefs สำหรับเมธอด signatureKey

คำเตือน: นี่เป็น API ทดลองและอาจมีการเปลี่ยนแปลง

พารามิเตอร์
signatureKey

สาธารณะ void resetVariableTensors ()

ขั้นสูง: รีเซ็ต Tensor ตัวแปรทั้งหมดเป็นค่าเริ่มต้น

หาก tensor ของตัวแปรไม่มีบัฟเฟอร์ที่เกี่ยวข้อง ระบบจะรีเซ็ตเป็น 0

คำเตือน: นี่เป็น API ทดลองและอาจมีการเปลี่ยนแปลง

สาธารณะ void resizeInput (int idx, int[] dims, boolean strict)

ปรับขนาดอินพุต idx-th ของโมเดลเนทีฟให้เป็นค่าสลัวที่กำหนด

เมื่อ "เข้มงวด" เป็น "จริง" คุณจะปรับขนาดได้เฉพาะขนาดที่ไม่รู้จักเท่านั้น มิติข้อมูลที่ไม่รู้จักจะระบุเป็น "-1" ในอาร์เรย์ที่แสดงผลโดย "Tensor.shapeSignature()"

พารามิเตอร์
idx
dims
เข้มงวด

สาธารณะ void resizeInput (int idx, int[] dims)

ปรับขนาดอินพุต idx-th ของโมเดลเนทีฟให้เป็นค่าสลัวที่กำหนด

พารามิเตอร์
idx
dims

สาธารณะ void run (อินพุตออบเจ็กต์, เอาต์พุต Object)

เรียกใช้การอนุมานโมเดล หากโมเดลใช้เพียงอินพุตเดียว และให้เอาต์พุตเพียง 1 รายการ

คำเตือน: API จะมีประสิทธิภาพมากขึ้นหากใช้ Buffer (ควรเป็นแบบตรง แต่ไม่บังคับ) เป็นประเภทข้อมูลอินพุต/เอาต์พุต โปรดพิจารณาใช้ Buffer เพื่อฟีดและดึงข้อมูลพื้นฐานเพื่อประสิทธิภาพที่ดียิ่งขึ้น รองรับประเภท Buffer ที่เป็นรูปธรรมต่อไปนี้

  • ByteBuffer - เข้ากันได้กับ Tensor ประเภทพื้นฐานทั้งหมด
  • FloatBuffer - เข้ากันได้กับ Float Tensor
  • IntBuffer - เข้ากันได้กับ int32 Tensors
  • LongBuffer - เข้ากันได้กับ int64 Tensors
โปรดทราบว่าระบบจะรองรับประเภทบูลีนเป็นอาร์เรย์เท่านั้น ไม่ใช่ Buffer หรืออินพุตแบบสเกลาร์

พารามิเตอร์
อินพุต อาร์เรย์หรืออาร์เรย์หลายมิติ หรือ Buffer ของประเภทดั้งเดิม ซึ่งรวมถึง int, Float, Long และ Byte Buffer เป็นวิธีที่แนะนำในการส่งข้อมูลอินพุตขนาดใหญ่สำหรับประเภทพื้นฐาน ส่วนประเภทสตริงจำเป็นต้องใช้เส้นทางอินพุตอาร์เรย์ (หลายมิติข้อมูล) เมื่อใช้ Buffer เนื้อหาจะไม่มีการเปลี่ยนแปลงจนกว่าจะการอนุมานโมเดลเสร็จสิ้น และผู้โทรจะต้องตรวจสอบว่า Buffer อยู่ในตำแหน่งอ่านที่เหมาะสม ค่า null จะได้รับอนุญาตก็ต่อเมื่อผู้โทรใช้ Delegate ที่อนุญาตให้ทำงานร่วมกันของการจัดการบัฟเฟอร์ และบัฟเฟอร์ดังกล่าวเชื่อมโยงกับอินพุต Tensor
เอาต์พุต อาร์เรย์หลายมิติของข้อมูลเอาต์พุต หรือ Buffer ของประเภทดั้งเดิม ซึ่งรวมถึง int, Float, Long และ Byte เมื่อใช้ Buffer ผู้โทรจะต้องตรวจสอบว่าได้กำหนดตำแหน่งการเขียนที่เหมาะสมแล้ว อนุญาตให้ใช้ค่า Null ได้และมีประโยชน์ในบางกรณี เช่น หากผู้เรียกใช้ใช้ Delegate ที่อนุญาตให้ทำงานร่วมกันของการจัดการบัฟเฟอร์ และบัฟเฟอร์ดังกล่าวมีการเชื่อมโยงกับเอาต์พุต Tensor (ดู Interpreter.Options#setAllowBufferHandleOutput(boolean)) หรือหากกราฟมีเอาต์พุตที่มีรูปร่างแบบไดนามิกและผู้โทรต้องค้นหาเอาต์พุต Tensor เอาต์พุตหลังจากการอนุมานโดยตรง ระบบจะดึงข้อมูลเอาต์พุต Tensor โดยตรง Tensor.asReadOnlyBuffer()

สาธารณะ void runForMultipleInputsOutputs (อินพุต Object[], เอาต์พุต Map<IntegerObject>)

เรียกใช้การอนุมานโมเดล หากโมเดลใช้อินพุตหลายรายการหรือแสดงผลเอาต์พุตหลายรายการ

คำเตือน: API จะมีประสิทธิภาพมากขึ้นหากใช้ Buffer (ควรเป็นแบบตรง แต่ไม่บังคับ) เป็นประเภทข้อมูลอินพุต/เอาต์พุต โปรดพิจารณาใช้ Buffer เพื่อฟีดและดึงข้อมูลพื้นฐานเพื่อประสิทธิภาพที่ดียิ่งขึ้น รองรับประเภท Buffer ที่เป็นรูปธรรมต่อไปนี้

  • ByteBuffer - เข้ากันได้กับ Tensor ประเภทพื้นฐานทั้งหมด
  • FloatBuffer - เข้ากันได้กับ Float Tensor
  • IntBuffer - เข้ากันได้กับ int32 Tensors
  • LongBuffer - เข้ากันได้กับ int64 Tensors
โปรดทราบว่าระบบจะรองรับประเภทบูลีนเป็นอาร์เรย์เท่านั้น ไม่ใช่ Buffer หรืออินพุตแบบสเกลาร์

หมายเหตุ: อนุญาตให้ใช้ค่า null สำหรับองค์ประกอบโดยเจาะจงของ inputs และ outputs ก็ต่อเมื่อผู้เรียกใช้ใช้ Delegate ที่อนุญาตให้ทำงานร่วมกันของการจัดการบัฟเฟอร์ได้ และบัฟเฟอร์ดังกล่าวมีการเชื่อมโยงกับอินพุตหรือเอาต์พุตที่เกี่ยวข้อง Tensor

พารามิเตอร์
อินพุต อาร์เรย์ของข้อมูลอินพุต อินพุตควรอยู่ในลำดับเดียวกับอินพุตของโมเดล อินพุตแต่ละรายการอาจเป็นอาร์เรย์หรืออาร์เรย์หลายมิติ หรือ Buffer ของประเภทดั้งเดิม ซึ่งรวมถึง int, Float, Long และ Byte Buffer เป็นวิธีที่แนะนำในการส่งข้อมูลอินพุตขนาดใหญ่ ในขณะที่ประเภทสตริงจำเป็นต้องใช้เส้นทางอินพุตอาร์เรย์ (หลายมิติข้อมูล) เมื่อใช้ Buffer เนื้อหาจะไม่มีการเปลี่ยนแปลงจนกว่าจะมีการอนุมานโมเดล และผู้โทรจะต้องตรวจสอบว่า Buffer อยู่ในตำแหน่งอ่านที่เหมาะสม
เอาต์พุต ดัชนีเอาต์พุตการแมปแผนที่ไปยังอาร์เรย์หลายมิติของข้อมูลเอาต์พุต หรือ Buffer ของประเภทดั้งเดิม ซึ่งรวมถึง int, Float, Long และ Byte เพียงแต่ต้องเก็บรายการไว้สำหรับเอาต์พุตที่จะนำมาใช้ เมื่อใช้ Buffer ผู้โทรจะต้องตรวจสอบว่าได้กำหนดตำแหน่งการเขียนที่เหมาะสมแล้ว แผนที่อาจว่างเปล่าในกรณีที่ใช้แฮนเดิลบัฟเฟอร์สำหรับข้อมูล Tensor เอาต์พุต หรือกรณีที่เอาต์พุตมีรูปร่างแบบไดนามิกและผู้โทรต้องค้นหารูปร่าง Tensor เอาต์พุตหลังจากเรียกใช้การอนุมานแล้ว โดยดึงข้อมูลจาก Tensor เอาต์พุตโดยตรง (ผ่าน Tensor.asReadOnlyBuffer())

สาธารณะ void runSignature (เอาต์พุต Map<StringObject>, Map<StringObject> เอาต์พุต)

เหมือนกับ runSignature(Map, Map, String) แต่ไม่จำเป็นต้องส่ง signatureKey หากโมเดลมี SignatureDef 1 รายการ หากโมเดลมี SignatureDef มากกว่า 1 รายการ ระบบจะแสดงข้อผิดพลาด

คำเตือน: นี่เป็น API ทดลองและอาจมีการเปลี่ยนแปลง

พารามิเตอร์
อินพุต
เอาต์พุต

สาธารณะ void runSignature (เอาต์พุต Map<StringObject>, Map<StringObject> เอาต์พุต, ลายเซ็น StringKey)

เรียกใช้การอนุมานโมเดลโดยอิงตาม SignatureDef ที่ให้ไว้ผ่าน signatureKey

ดูรายละเอียดเพิ่มเติมเกี่ยวกับประเภทข้อมูลอินพุตและเอาต์พุตที่อนุญาตได้ที่ run(Object, Object)

คำเตือน: นี่เป็น API ทดลองและอาจมีการเปลี่ยนแปลง

พารามิเตอร์
อินพุต แผนที่จากชื่ออินพุตใน SignatureDef ไปยังออบเจ็กต์อินพุต
เอาต์พุต แผนที่จากชื่อเอาต์พุตใน SignatureDef ไปยังข้อมูลเอาต์พุต ค่านี้อาจว่างเปล่าหากผู้โทรต้องการค้นหาข้อมูล Tensor โดยตรงหลังจากการอนุมาน (เช่น หากรูปร่างเอาต์พุตเป็นแบบไดนามิก หรือใช้แฮนเดิลบัฟเฟอร์เอาต์พุต)
signatureKey คีย์ลายเซ็นที่ใช้ระบุ SignatureDef
การขว้าง
IllegalArgumentException หาก inputs เป็นค่าว่างหรือว่างเปล่า หาก outputs หรือ signatureKey เป็นค่าว่าง หรือเมื่อเกิดข้อผิดพลาดขณะเรียกใช้การอนุมาน

สาธารณะ โมฆะ setCancelled (boolean cancelled)

ขั้นสูง: รบกวนการอนุมานขณะเรียกไปยัง run(Object, Object)

ระบบจะตั้งค่าสถานะการยกเลิกเป็น "จริง" เมื่อมีการเรียกใช้ฟังก์ชันนี้ ล่ามจะตรวจสอบแฟล็กระหว่างการเรียกใช้ Op และหากเป็น true ล่ามจะหยุดการดำเนินการ ล่ามจะยังคงมีสถานะเป็นยกเลิกจนกว่า setCancelled(false) จะ "ยกเลิก" อย่างชัดเจน

คำเตือน: นี่เป็น API ทดลองและอาจมีการเปลี่ยนแปลง

พารามิเตอร์
ยกเลิก true เพื่อยกเลิกการอนุมานด้วยวิธีที่เหมาะสมที่สุด false เพื่อดำเนินการต่อ
การขว้าง
IllegalStateException ในกรณีที่ล่ามไม่ได้เริ่มต้นด้วยตัวเลือก "ยกเลิกได้" ซึ่งจะปิดอยู่โดยค่าเริ่มต้น
ดูเพิ่มเติม