Interpreter

ล่าม สาธารณะชั้นสุดท้าย

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

หมายเหตุ: หากคุณไม่ต้องการเข้าถึงฟีเจอร์ API "ทดลอง" ใดๆ ด้านล่าง แนะนำให้ใช้ InterpreterApi และ InterpreterFactory แทนที่จะใช้ Interpreter โดยตรง

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 ซึ่งมีให้ผ่าน getInputTensor(int) และ getOutputTensor(int)

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

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

คลาสที่ซ้อนกัน

ระดับ ล่ามตัวเลือก คลาสตัวเลือกสำหรับควบคุมพฤติกรรมล่ามรันไทม์

คอนสตรัคชั่นสาธารณะ

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

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

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

วิธีการสืบทอด

คอนสตรัคชั่นสาธารณะ

ล่าม สาธารณะ ( File modelFile)

เริ่มต้น Interpreter

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

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

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

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

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

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

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

พารามิเตอร์
ไบต์บัฟเฟอร์
ขว้าง
ข้อยกเว้นอาร์กิวเมนต์ที่ผิดกฎหมาย ถ้า byteBuffer ไม่ใช่ MappedByteBuffer หรือ ByteBuffer โดยตรงของ NativeOrder

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

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

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

พารามิเตอร์
ไบต์บัฟเฟอร์
ตัวเลือก
ขว้าง
ข้อยกเว้นอาร์กิวเมนต์ที่ผิดกฎหมาย ถ้า byteBuffer ไม่ใช่ MappedByteBuffer หรือ ByteBuffer โดยตรงของ NativeOrder

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

โมฆะสาธารณะจัดสรร เทนเซอร์ ()

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

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

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

 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)

รับดัชนีของอินพุตที่กำหนดชื่อ op ของอินพุต

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

เทนเซอร์ สาธารณะ getInputTensor (int inputIndex)

รับเทนเซอร์ที่เกี่ยวข้องกับดัชนีอินพุตที่ให้มา

พารามิเตอร์
ดัชนีอินพุต

int สาธารณะ getInputTensorCount ()

รับจำนวนเทนเซอร์อินพุต

สาธารณะ Tensor getInputTensorFromSignature ( สตริง ชื่ออินพุต, สตริงลาย เซ็นคีย์)

รับเทนเซอร์ที่เกี่ยวข้องกับชื่ออินพุตที่ให้มาและชื่อวิธีลายเซ็น

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

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

สาธารณะ Long getLastNativeInferenceDurationNanoseconds ()

ส่งกลับระยะเวลาการอนุมานดั้งเดิม

int สาธารณะ getOutputIndex ( สตริง opName)

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

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

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

รับค่าเทนเซอร์ที่เกี่ยวข้องกับดัชนีเอาต์พุตที่ระบุ

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

พารามิเตอร์
ดัชนีเอาท์พุท

int สาธารณะ getOutputTensorCount ()

รับจำนวนเทนเซอร์เอาท์พุต

สาธารณะ Tensor getOutputTensorFromSignature ( ชื่อ เอาต์พุตสตริง, String SignatureKey)

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

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

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

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

สาธารณะ String[] getSignatureInputs ( String SignatureKey)

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

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

พารามิเตอร์
ลายเซ็นคีย์

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

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

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

สาธารณะ String[] getSignatureOutputs ( String SignatureKey)

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

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

พารามิเตอร์
ลายเซ็นคีย์

โมฆะสาธารณะ รีเซ็ตVariableTensors ()

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

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

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

โมฆะสาธารณะ resizeInput (int idx, int[] dims, บูลีนเข้มงวด)

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

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

พารามิเตอร์
รหัสประจำตัว
สลัว
เข้มงวด

โมฆะสาธารณะ resizeInput (int idx, int[] dims)

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

พารามิเตอร์
รหัสประจำตัว
สลัว

การรัน โมฆะสาธารณะ (อินพุต วัตถุ , เอาต์พุต วัตถุ )

รันการอนุมานโมเดลหากโมเดลรับเพียงหนึ่งอินพุต และจัดเตรียมเอาต์พุตเพียงอันเดียว

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

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

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

โมฆะสาธารณะ runForMultipleInputsOutputs (อินพุต Object[] , แผนที่ < Integer , Object > เอาต์พุต)

รันการอนุมานโมเดลหากโมเดลรับอินพุตหลายอินพุต หรือส่งคืนเอาต์พุตหลายเอาต์พุต

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

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

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

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

โมฆะสาธารณะ runSignature ( แมป < สตริง , วัตถุ > อินพุต, แมป < สตริง , วัตถุ > เอาต์พุต)

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

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

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

โมฆะสาธารณะ runSignature ( แมป < สตริง , วัตถุ > อินพุต, แมป < สตริง , วัตถุ > เอาต์พุต สตริง SignatureKey)

รันการอนุมานโมเดลตาม SignatureDef ที่ให้มาผ่าน signatureKey

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

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

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

โมฆะสาธารณะ setCancelled (ยกเลิกบูลีน)

ขั้นสูง: ขัดจังหวะการอนุมานระหว่างการเรียก run(Object, Object)

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

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

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