คลาสไดรเวอร์เพื่อขับเคลื่อนการอนุมานโมเดลด้วย 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 | คลาสตัวเลือกสำหรับการควบคุมลักษณะการทำงานของอินเตอร์พรีเตอร์รันไทม์ |
บริษัทก่อสร้าง
โหมดล่าม(ตัวเลือก ไฟล์ ของโมเดล, Interpreter.Options)
เริ่มต้น
Interpreter และระบุตัวเลือกสำหรับปรับแต่งลักษณะการทำงานของล่าม |
|
วิธีการสาธารณะ
void |
allocateTensors()
อัปเดตการจัดสรรสำหรับ Tensor ทั้งหมดอย่างชัดเจน หากจำเป็น
|
void |
close()
ปล่อยทรัพยากรที่เชื่อมโยงกับอินสแตนซ์
InterpreterApi |
int | |
Tensor |
getInputTensor(int InputIndex)
รับ Tensor ที่เชื่อมโยงกับดัชนีอินพุตที่ระบุ
|
int |
getInputTensorCount()
ดึงจำนวนของ Tensor อินพุต
|
Tensor |
getInputTensorFromSignature(ชื่ออินพุต String, String signatureKey)
รับ Tensor ที่เชื่อมโยงกับชื่ออินพุตและชื่อเมธอดลายเซ็นที่ระบุ
|
ยาว |
getLastNativeInferenceDurationNanoseconds()
แสดงเวลาการอนุมานดั้งเดิม
|
int | |
Tensor |
getOutputTensor(intเอาต์พุตIndex)
รับ Tensor ที่เชื่อมโยงกับดัชนีเอาต์พุตที่ระบุ
|
int |
getOutputTensorCount()
รับจำนวนของ Tensor เอาต์พุต
|
Tensor |
getOutputTensorFromSignature(เอาต์พุตชื่อ String, String signatureKey)
รับ Tensor ที่เชื่อมโยงกับชื่อเอาต์พุตที่ให้ไว้ในเมธอดลายเซ็นที่เฉพาะเจาะจง
|
สตริง[] | |
สตริง[] |
getSignatureKeys()
รับรายการชื่อเมธอด SignatureDef ที่ส่งออกที่มีอยู่ในโมเดล
|
สตริง[] | |
void |
resetVariableTensors()
ขั้นสูง: รีเซ็ต Tensor ตัวแปรทั้งหมดเป็นค่าเริ่มต้น
|
void |
resizeInput(int idx, int[] dims, boolean strict)
ปรับขนาดอินพุต idx-th ของโมเดลเนทีฟให้เป็นค่าสลัวที่กำหนด
|
void |
resizeInput(int idx, int[] หรี่แสง)
ปรับขนาดอินพุต idx-th ของโมเดลเนทีฟให้เป็นค่าสลัวที่กำหนด
|
void | |
void |
runForMultipleInputsOutputs(อินพุต Object[], แมป<จำนวนเต็ม, Object> เอาต์พุต)
เรียกใช้การอนุมานโมเดล หากโมเดลใช้อินพุตหลายรายการหรือแสดงผลเอาต์พุตหลายรายการ
|
void |
runSignature(อินพุต Map<String, Object>, Map<String, Object> เอาต์พุต)
เหมือนกับ
runSignature(Map, Map, String) แต่ไม่จำเป็นต้องส่ง signatureKey หากโมเดลมี SignatureDef 1 รายการ |
void | |
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 เป็นค่าว่างหรือว่างเปล่า หรือระบุชื่อไม่ถูกต้อง
|
---|
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 TensorIntBuffer
- เข้ากันได้กับ int32 TensorsLongBuffer
- เข้ากันได้กับ 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<Integer, Object>)
เรียกใช้การอนุมานโมเดล หากโมเดลใช้อินพุตหลายรายการหรือแสดงผลเอาต์พุตหลายรายการ
คำเตือน: API จะมีประสิทธิภาพมากขึ้นหากใช้ Buffer
(ควรเป็นแบบตรง แต่ไม่บังคับ) เป็นประเภทข้อมูลอินพุต/เอาต์พุต โปรดพิจารณาใช้ Buffer
เพื่อฟีดและดึงข้อมูลพื้นฐานเพื่อประสิทธิภาพที่ดียิ่งขึ้น รองรับประเภท Buffer
ที่เป็นรูปธรรมต่อไปนี้
ByteBuffer
- เข้ากันได้กับ Tensor ประเภทพื้นฐานทั้งหมดFloatBuffer
- เข้ากันได้กับ Float TensorIntBuffer
- เข้ากันได้กับ int32 TensorsLongBuffer
- เข้ากันได้กับ 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<String, Object>, Map<String, Object> เอาต์พุต)
เหมือนกับ runSignature(Map, Map, String)
แต่ไม่จำเป็นต้องส่ง signatureKey หากโมเดลมี SignatureDef 1 รายการ หากโมเดลมี SignatureDef มากกว่า 1 รายการ ระบบจะแสดงข้อผิดพลาด
คำเตือน: นี่เป็น API ทดลองและอาจมีการเปลี่ยนแปลง
พารามิเตอร์
อินพุต | |
---|---|
เอาต์พุต |
สาธารณะ void runSignature (เอาต์พุต Map<String, Object>, Map<String, Object> เอาต์พุต, ลายเซ็น 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 | ในกรณีที่ล่ามไม่ได้เริ่มต้นด้วยตัวเลือก "ยกเลิกได้" ซึ่งจะปิดอยู่โดยค่าเริ่มต้น |
---|