คลาสไดรเวอร์เพื่อขับเคลื่อนการอนุมานโมเดลด้วย TensorFlow Lite
หมายเหตุ: หากคุณไม่ต้องการเข้าถึงส่วน "ทดลอง" ฟีเจอร์ API ด้านล่าง ต้องการใช้ InterpreterApi และ Interpreterโรงงาน แทนการใช้ล่ามโดยตรง
Interpreter
สรุปโมเดล TensorFlow Lite ที่ฝึกล่วงหน้าไว้ในการทำงาน
จะดำเนินการสำหรับการอนุมานโมเดล
ตัวอย่างเช่น หากโมเดลรับอินพุตเพียง 1 อินพุตและแสดงผลเพียง 1 เอาต์พุต
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 โดยอาจใช้งานได้สำหรับ Android API ระดับต่ำกว่า 19 แต่ไม่มีการรับประกัน
ชั้นเรียนที่ซ้อนกัน
คลาส | Interpreter.Options | คลาสตัวเลือกสำหรับการควบคุมลักษณะการทำงานของล่ามรันไทม์ |
ผู้รับเหมาก่อสร้าง
ล่าม(ตัวเลือก File modelFile, Interpreter.Options)
เริ่มต้น
Interpreter และระบุตัวเลือกสำหรับปรับแต่งลักษณะการทำงานของล่าม |
|
วิธีการสาธารณะ
เป็นโมฆะ |
allocateTensors()
อัปเดตการจัดสรรสำหรับ Tensor ทั้งหมดอย่างชัดแจ้ง หากจำเป็น
|
เป็นโมฆะ |
close()
ปล่อยทรัพยากรที่เชื่อมโยงกับอินสแตนซ์
InterpreterApi |
int | |
Tensor |
getInputTensor(int InputIndex)
รับ Tensor ที่เชื่อมโยงกับดัชนีอินพุตที่ระบุ
|
int |
getInputTensorCount()
รับจำนวน Tensor อินพุต
|
Tensor |
getInputTensorFromSignature(String InputName, String signatureKey)
รับ Tensor ที่เชื่อมโยงกับชื่ออินพุตและชื่อเมธอดลายเซ็นที่ระบุ
|
ยาว |
getLastNativeInferenceDurationNanoseconds()
แสดงผลเวลาการอนุมานดั้งเดิม
|
int | |
Tensor |
getOutputTensor(int exitIndex)
รับ Tensor ที่เชื่อมโยงกับดัชนีเอาต์พุตที่ระบุ
|
int |
getOutputTensorCount()
รับจำนวน Tensor เอาต์พุต
|
Tensor |
getOutputTensorFromSignature(Stringการแสดงผลโฆษณา, String signatureKey)
รับ Tensor ที่เชื่อมโยงกับชื่อเอาต์พุตที่ให้ไว้ในเมธอดลายเซ็นที่เฉพาะเจาะจง
|
String[] | |
String[] |
getSignatureKeys()
รับรายการชื่อวิธีการที่ส่งออกของ SignatureDef ที่มีอยู่ในโมเดล
|
String[] | |
เป็นโมฆะ |
resetVariableTensors()
ขั้นสูง: รีเซ็ต Tensor ตัวแปรทั้งหมดเป็นค่าเริ่มต้น
|
เป็นโมฆะ |
resizeInput(int idx, int[] dims, boolean strict)
ปรับขนาดอินพุต idx-th ของโมเดลดั้งเดิมตามความสว่างที่กำหนด
|
เป็นโมฆะ |
resizeInput(int idx, int[] หรี่แสง)
ปรับขนาดอินพุต idx-th ของโมเดลดั้งเดิมตามความสว่างที่กำหนด
|
เป็นโมฆะ | |
เป็นโมฆะ |
runForMultipleInputsOutputs(อินพุต Object[], แมป<จำนวนเต็ม, Object> เอาต์พุต)
เรียกใช้การอนุมานโมเดลหากโมเดลรับอินพุตหลายรายการหรือแสดงผลหลายเอาต์พุต
|
เป็นโมฆะ |
runSignature(อินพุต Map<String, Object>, Map<String, Object> เอาต์พุต)
เหมือนกับ
runSignature(Map, Map, String) แต่ไม่ต้องส่งผ่าน signatureKey
สมมติว่าโมเดลมี SignatureDef 1 รายการ |
เป็นโมฆะ | |
เป็นโมฆะ |
setCancelled(บูลีนถูกยกเลิก)
ขั้นสูง: รบกวนการอนุมานระหว่างการโทรถึง
run(Object, Object) |
เมธอดที่รับมา
ผู้รับเหมาก่อสร้าง
สาธารณะ ล่าม (ไฟล์ modelFile)
เริ่มต้น Interpreter
พารามิเตอร์
modelFile | ไฟล์ของโมเดล TF Lite ที่ฝึกไว้แล้วล่วงหน้า |
---|
การขว้าง
IllegalArgumentException | หาก modelFile ไม่ได้เข้ารหัส TensorFlow Lite ที่ถูกต้อง
โมเดล
|
---|
สาธารณะ ล่าม (ตัวเลือก File modelFile, Interpreter.Options)
เริ่มต้น Interpreter
และระบุตัวเลือกสำหรับปรับแต่งลักษณะการทำงานของล่าม
พารามิเตอร์
modelFile | ไฟล์ของโมเดล TF Lite ที่ฝึกไว้แล้ว |
---|---|
ตัวเลือก | ชุดตัวเลือกสำหรับปรับแต่งลักษณะการทำงานของล่าม |
การขว้าง
IllegalArgumentException | หาก modelFile ไม่ได้เข้ารหัส TensorFlow Lite ที่ถูกต้อง
โมเดล
|
---|
สาธารณะ ล่าม (ByteBuffer ไบต์Buffer)
เริ่มต้น 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
|
---|
วิธีการสาธารณะ
สาธารณะ เป็นโมฆะ 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
สาธารณะ Int getInputIndex (สตริง opName)
รับดัชนีของอินพุตโดยใช้ชื่อการดำเนินการของอินพุต
พารามิเตอร์
opName |
---|
สาธารณะ Tensor getInputTensor (int InputIndex)
รับ Tensor ที่เชื่อมโยงกับดัชนีอินพุตที่ระบุ
พารามิเตอร์
inputIndex |
---|
สาธารณะ Int getInputTensorCount ()
รับจำนวน Tensor อินพุต
สาธารณะ Tensor getInputTensorFromSignature (String InputName, String signatureKey)
รับ Tensor ที่เชื่อมโยงกับชื่ออินพุตและชื่อเมธอดลายเซ็นที่ระบุ
คำเตือน: นี่เป็น API ทดลองและอาจมีการเปลี่ยนแปลง
พารามิเตอร์
inputName | ป้อนชื่อในลายเซ็น |
---|---|
signatureKey | คีย์ลายเซ็นที่ระบุ SignatureDef อาจเป็นค่าว่างได้หากโมเดลมี 1 ลายเซ็น |
การขว้าง
IllegalArgumentException | หาก inputName หรือ signatureKey เป็นค่าว่างหรือว่างเปล่า
หรือระบุชื่อไม่ถูกต้อง
|
---|
สาธารณะ Int getOutputIndex (สตริง opName)
รับดัชนีของเอาต์พุตโดยใช้ชื่อการดำเนินการของเอาต์พุต
พารามิเตอร์
opName |
---|
สาธารณะ Tensor getOutputTensor (int outputIndex)
รับ Tensor ที่เชื่อมโยงกับดัชนีเอาต์พุตที่ระบุ
หมายเหตุ: รายละเอียด Tensor เอาต์พุต (เช่น รูปร่าง) อาจไม่มีการป้อนข้อมูลอย่างสมบูรณ์จนกว่าจะเสร็จสิ้นการอนุมาน
จะถูกดำเนินการ หากคุณต้องการรายละเอียดที่อัปเดต *ก่อน* ใช้การอนุมาน (เช่น หลังจากปรับขนาด
Tensor อินพุต ซึ่งอาจทำให้รูปร่าง Tensor เอาต์พุตไม่ถูกต้อง) ให้ใช้ allocateTensors()
เพื่อ
ทริกเกอร์การจัดสรรและการเผยแพร่รูปร่างอย่างชัดเจน โปรดทราบว่าสำหรับกราฟที่มีรูปร่างเอาต์พุต
ที่ขึ้นอยู่กับ *ค่า*อินพุต รูปร่างเอาต์พุตอาจไม่ได้รับการกำหนดโดยสมบูรณ์จนกว่า
การอนุมานการทำงาน
พารามิเตอร์
outputIndex |
---|
สาธารณะ Int getOutputTensorCount ()
รับจำนวน Tensor เอาต์พุต
สาธารณะ Tensor getOutputTensorFromSignature (สตริงเอาต์พุตName, สตริง SignatureKey)
รับ Tensor ที่เชื่อมโยงกับชื่อเอาต์พุตที่ให้ไว้ในเมธอดลายเซ็นที่เฉพาะเจาะจง
หมายเหตุ: รายละเอียด Tensor เอาต์พุต (เช่น รูปร่าง) อาจไม่มีการป้อนข้อมูลอย่างสมบูรณ์จนกว่าจะเสร็จสิ้นการอนุมาน
จะถูกดำเนินการ หากคุณต้องการรายละเอียดที่อัปเดต *ก่อน* ใช้การอนุมาน (เช่น หลังจากปรับขนาด
Tensor อินพุต ซึ่งอาจทำให้รูปร่าง Tensor เอาต์พุตไม่ถูกต้อง) ให้ใช้ allocateTensors()
เพื่อ
ทริกเกอร์การจัดสรรและการเผยแพร่รูปร่างอย่างชัดเจน โปรดทราบว่าสำหรับกราฟที่มีรูปร่างเอาต์พุต
ที่ขึ้นอยู่กับ *ค่า*อินพุต รูปร่างเอาต์พุตอาจไม่ได้รับการกำหนดโดยสมบูรณ์จนกว่า
การอนุมานการทำงาน
คำเตือน: นี่เป็น API ทดลองและอาจมีการเปลี่ยนแปลง
พารามิเตอร์
outputName | ชื่อเอาต์พุตในลายเซ็น |
---|---|
signatureKey | คีย์ลายเซ็นที่ระบุ SignatureDef อาจเป็นค่าว่างได้หากโมเดลมี 1 ลายเซ็น |
การขว้าง
IllegalArgumentException | หาก outputName หรือ signatureKey เป็นค่าว่าง หรือ
ชื่อว่างเปล่าหรือไม่ถูกต้อง
|
---|
สาธารณะ String[] getSignatureInputs (สตริง SignatureKey)
รับรายการอินพุต SignatureDefs สำหรับเมธอด signatureKey
คำเตือน: นี่เป็น API ทดลองและอาจมีการเปลี่ยนแปลง
พารามิเตอร์
signatureKey |
---|
สาธารณะ String[] getSignatureKeys ()
รับรายการชื่อวิธีการที่ส่งออกของ SignatureDef ที่มีอยู่ในโมเดล
คำเตือน: นี่เป็น API ทดลองและอาจมีการเปลี่ยนแปลง
สาธารณะ String[] getSignatureOutputs (สตริง SignatureKey)
รับรายการเอาต์พุต SignatureDefs สำหรับเมธอด signatureKey
คำเตือน: นี่เป็น API ทดลองและอาจมีการเปลี่ยนแปลง
พารามิเตอร์
signatureKey |
---|
สาธารณะ เป็นโมฆะ resetVariableTensors ()
ขั้นสูง: รีเซ็ต Tensor ตัวแปรทั้งหมดเป็นค่าเริ่มต้น
หาก Tensor ตัวแปรไม่มีบัฟเฟอร์ที่เชื่อมโยง ระบบจะรีเซ็ตค่าเป็น 0
คำเตือน: นี่เป็น API ทดลองและอาจมีการเปลี่ยนแปลง
สาธารณะ เป็นโมฆะ resizeInput (int idx, int[] ดิม, บูลีน strict)
ปรับขนาดอินพุต idx-th ของโมเดลดั้งเดิมตามความสว่างที่กำหนด
เมื่อ "เข้มงวด" เป็น "จริง" ระบบจะปรับขนาดได้เฉพาะมิติข้อมูลที่ไม่รู้จักเท่านั้น มิติข้อมูลที่ไม่รู้จักคือ ระบุเป็น "-1" ในอาร์เรย์ที่แสดงผลโดย "Tensor.shapeSignature()"
พารามิเตอร์
IDX | |
---|---|
หรี่แสง | |
เข้มงวด |
สาธารณะ เป็นโมฆะ resizeInput (int idx, int[] หรี่แสง)
ปรับขนาดอินพุต idx-th ของโมเดลดั้งเดิมตามความสว่างที่กำหนด
พารามิเตอร์
IDX | |
---|---|
หรี่แสง |
สาธารณะ เป็นโมฆะ เรียกใช้ (อินพุตออบเจ็กต์, เอาต์พุต ออบเจ็กต์)
เรียกใช้การอนุมานโมเดลหากโมเดลรับเพียงอินพุตเดียวและมีเอาต์พุตเพียง 1 รายการ
คำเตือน: API จะมีประสิทธิภาพมากขึ้นหาก Buffer
(แนะนำโดยตรง แต่ไม่บังคับ)
ใช้เป็นประเภทข้อมูลอินพุต/เอาต์พุต โปรดพิจารณาใช้ Buffer
เพื่อป้อนและดึงข้อมูล
ข้อมูลขั้นพื้นฐานเพื่อประสิทธิภาพที่ดีขึ้น Buffer
ประเภทที่เป็นรูปธรรมต่อไปนี้
รองรับ
ByteBuffer
- ใช้ได้กับ Tensor ประเภทพื้นฐานใดๆ ที่สำคัญFloatBuffer
- ใช้งานได้กับ Tensor แบบลอยIntBuffer
- ใช้งานได้กับ int32 TensorsLongBuffer
- ใช้งานได้กับ int64 Tensors
Buffer
หรือเป็นอินพุตสเกลาร์พารามิเตอร์
อินพุต | อาร์เรย์หรืออาร์เรย์หลายมิติ หรือ Buffer ของประเภทพื้นฐาน
เช่น int, Flo, Long และ Byte Buffer เป็นทางผ่าน
อินพุตสำหรับประเภทพื้นฐาน ในขณะที่ประเภทสตริงต้องใช้ฟังก์ชัน (หลายมิติข้อมูล)
ของอินพุตของอาร์เรย์ เมื่อใช้ Buffer เนื้อหาจะไม่เปลี่ยนแปลงจนกว่า
การอนุมานโมเดลเสร็จสมบูรณ์แล้ว และผู้โทรต้องตรวจสอบว่า Buffer อยู่ที่
ตำแหน่งการอ่านที่เหมาะสม ค่า null จะใช้ได้ก็ต่อเมื่อผู้โทรใช้
Delegate ที่ช่วยให้จัดการบัฟเฟอร์ได้ และบัฟเฟอร์ดังกล่าวยังเชื่อมโยงกับ
ป้อน Tensor |
---|---|
เอาต์พุต | อาร์เรย์หลายมิติของข้อมูลเอาต์พุต หรือ Buffer ของประเภทพื้นฐาน
เช่น int, Flo, Long และ Byte เมื่อใช้ Buffer ผู้โทรจะต้องตรวจสอบว่า
มีการกำหนดตำแหน่งการเขียนที่เหมาะสม สามารถใช้ค่า Null ได้ ซึ่งมีประโยชน์สำหรับ
ในบางกรณี เช่น หากผู้โทรใช้ Delegate ที่รองรับการบัฟเฟอร์
การทำงานร่วมกัน และบัฟเฟอร์ดังกล่าวยังถูกเชื่อมโยงกับเอาต์พุต Tensor (ดู Interpreter.Options#setAllowBufferHandleOutput(boolean))
หรือถ้ากราฟมีเอาต์พุตที่มีการกำหนดรูปทรงแบบไดนามิก และผู้โทรจะต้องสืบค้นรูปร่างเอาต์พุต Tensor หลังจากที่เรียกใช้การอนุมานแล้ว โดยจะดึงข้อมูลจากเอาต์พุตโดยตรง
tensor (ผ่าน Tensor.asReadOnlyBuffer() ) |
สาธารณะ เป็นโมฆะ runForMultipleInputsOutputs (อินพุต Object[], แมป<Integer, Object> เอาต์พุต)
เรียกใช้การอนุมานโมเดลหากโมเดลรับอินพุตหลายรายการหรือแสดงผลหลายเอาต์พุต
คำเตือน: API จะมีประสิทธิภาพมากกว่าหาก Buffer
(แนะนำโดยตรง แต่ไม่บังคับ)
จะใช้เป็นประเภทข้อมูลอินพุต/เอาต์พุต โปรดพิจารณาใช้ Buffer
เพื่อป้อนและดึงข้อมูล
ข้อมูลขั้นพื้นฐานเพื่อประสิทธิภาพที่ดีขึ้น Buffer
ประเภทที่เป็นรูปธรรมต่อไปนี้
รองรับ
ByteBuffer
- ใช้ได้กับ Tensor ประเภทพื้นฐานใดๆ ที่สำคัญFloatBuffer
- ใช้งานได้กับ Tensor แบบลอยIntBuffer
- ใช้งานได้กับ int32 TensorsLongBuffer
- ใช้งานได้กับ int64 Tensors
Buffer
หรือเป็นอินพุตสเกลาร์
หมายเหตุ: ค่า null
สำหรับองค์ประกอบภายในของ inputs
และ outputs
คือ
อนุญาตเฉพาะเมื่อผู้โทรใช้ Delegate
ที่อนุญาตการทำงานร่วมกันของบัฟเฟอร์ และ
มีการเชื่อมโยงบัฟเฟอร์กับอินพุตหรือเอาต์พุตที่เกี่ยวข้อง Tensor
พารามิเตอร์
อินพุต | อาร์เรย์ของข้อมูลอินพุต อินพุตควรอยู่ในลำดับเดียวกับอินพุตของ
โมเดล อินพุตแต่ละรายการอาจเป็นอาร์เรย์หรืออาร์เรย์หลายมิติ หรือ Buffer ของ
ประเภทพื้นฐาน ได้แก่ int, ทศนิยม, ยาว และไบต์ แนะนำให้ใช้ Buffer
เพื่อส่งข้อมูลอินพุตขนาดใหญ่ ในขณะที่ประเภทสตริงต้องใช้อาร์เรย์ (หลายมิติข้อมูล)
เส้นทางอินพุต เมื่อใช้ Buffer เนื้อหาไม่ควรเปลี่ยนแปลงจนกว่าโมเดล
ได้ดำเนินการอนุมานแล้ว และผู้โทรต้องตรวจสอบว่า Buffer เป็นไปตาม
ตำแหน่งการอ่าน |
---|---|
เอาต์พุต | ดัชนีเอาต์พุตการแมปแผนที่เป็นอาร์เรย์แบบหลายมิติของข้อมูลเอาต์พุตหรือ Buffer ประเภทพื้นฐาน ได้แก่ int, ทศนิยม, ยาว และไบต์ เพียงแต่ต้องเก็บไว้
รายการสำหรับเอาต์พุตที่จะใช้ เมื่อใช้ Buffer ผู้โทรจะต้องตรวจสอบว่า
มีการกำหนดตำแหน่งการเขียนที่เหมาะสม แผนที่อาจว่างเปล่าในกรณีที่
แฮนเดิลบัฟเฟอร์จะใช้สำหรับข้อมูล Tensor เอาต์พุต หรือในกรณีที่มีเอาต์พุตแบบไดนามิก
และผู้โทรจะต้องค้นหารูปร่าง Tensor หลังการอนุมาน
เรียกใช้ โดยดึงข้อมูลจาก tensor เอาต์พุตโดยตรง (ผ่าน Tensor.asReadOnlyBuffer() ) |
สาธารณะ เป็นโมฆะ runSignature (อินพุต Map<String, Object>, Map<String, Object> เอาต์พุต)
เหมือนกับ runSignature(Map, Map, String)
แต่ไม่ต้องส่งผ่าน signatureKey
สมมติว่าโมเดลมี SignatureDef 1 รายการ หากโมเดลมี SignatureDef มากกว่า 1 รายการ ระบบจะ
ส่งข้อยกเว้น
คำเตือน: นี่เป็น API ทดลองและอาจมีการเปลี่ยนแปลง
พารามิเตอร์
อินพุต | |
---|---|
เอาต์พุต |
สาธารณะ เป็นโมฆะ runSignature (แมป<สตริง, ออบเจ็กต์>อินพุต, แผนที่<สตริง, ออบเจ็กต์>เอาต์พุต, สตริง ลายเซ็นคีย์)
เรียกใช้การอนุมานโมเดลตาม SignatureDef ที่ให้ไว้ผ่าน signatureKey
ดูรายละเอียดเพิ่มเติมเกี่ยวกับอินพุตและเอาต์พุตที่อนุญาตได้ที่ run(Object, Object)
ประเภทต่างๆ
คำเตือน: นี่เป็น API ทดลองและอาจมีการเปลี่ยนแปลง
พารามิเตอร์
อินพุต | แผนที่จากชื่ออินพุตใน SignatureDef ไปยังออบเจ็กต์อินพุต |
---|---|
เอาต์พุต | การแมปจากชื่อเอาต์พุตใน SignatureDef ไปยังข้อมูลเอาต์พุต ส่วนนี้อาจว่างเปล่าหาก
ผู้โทรต้องการค้นหาข้อมูล Tensor โดยตรงหลังการอนุมาน (เช่น หาก
รูปร่างเอาต์พุตเป็นแบบไดนามิก หรือใช้แฮนเดิลบัฟเฟอร์เอาต์พุต) |
signatureKey | คีย์ลายเซ็นที่ระบุ SignatureDef |
การขว้าง
IllegalArgumentException | หาก inputs เป็นค่าว่างหรือว่างเปล่า หากเป็น outputs หรือ
signatureKey เป็นค่าว่าง หรือหากมีข้อผิดพลาดเกิดขึ้นขณะเรียกใช้การอนุมาน
|
---|
สาธารณะ เป็นโมฆะ setCancelled (ยกเลิกบูลีนแล้ว)
ขั้นสูง: รบกวนการอนุมานระหว่างการโทรถึง run(Object, Object)
ธงการยกเลิกจะตั้งค่าเป็น "จริง" เมื่อมีการเรียกใช้ฟังก์ชันนี้ ล่ามจะ
ตรวจสอบ Flag ระหว่างการเรียกใช้ Op และหากเป็น true
ล่ามจะหยุด
ล่ามจะยังคงสถานะยกเลิกจนกว่าจะมีการ "ยกเลิกการยกเลิก" อย่างชัดเจน โดย
setCancelled(false)
คำเตือน: นี่เป็น API ทดลองและอาจมีการเปลี่ยนแปลง
พารามิเตอร์
ยกเลิก | true เพื่อยกเลิกการอนุมานโดยใช้ความพยายามอย่างเต็มที่ false ถึง
ให้กลับมาเริ่มอีกครั้ง |
---|
การขว้าง
IllegalStateException | หากอินเตอร์พรีเตอร์ไม่ได้เริ่มต้นด้วย cancellable ซึ่งจะปิดอยู่โดยค่าเริ่มต้น |
---|