InterpreterApi

อินเทอร์เฟซสาธารณะ InterpreterApi
คลาสย่อยทางอ้อมที่รู้จัก

อินเทอร์เฟซกับล่ามโมเดล TensorFlow Lite ไม่รวมวิธีการทดลอง

อินสแตนซ์ InterpreterApi สรุปโมเดล TensorFlow Lite ที่ได้รับการฝึกล่วงหน้า ซึ่งมีการดำเนินการสำหรับการอนุมานโมเดล

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

try (InterpreterApi interpreter =
     new InterpreterApi.create(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 (InterpreterApi interpreter =
     new InterpreterApi.create(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 (InterpreterApi interpreter =
     new InterpreterApi.create(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)

คำเตือน: อินสแตนซ์ InterpreterApi ไม่ ปลอดภัยสำหรับเธรด

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

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

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

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

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

ความว่างเปล่าที่เป็นนามธรรม
จัดสรรเทนเซอร์ ()
อัปเดตการจัดสรรอย่างชัดเจนสำหรับเทนเซอร์ทั้งหมด หากจำเป็น
ความว่างเปล่าที่เป็นนามธรรม
ปิด ()
เผยแพร่ทรัพยากรที่เกี่ยวข้องกับอินสแตนซ์ InterpreterApi
InterpreterApi แบบคงที่
สร้าง (ตัวเลือก ไฟล์ modelFile, InterpreterApi.Options )
สร้างอินสแตนซ์ InterpreterApi โดยใช้โมเดลและตัวเลือกที่ระบุ
InterpreterApi แบบคงที่
สร้าง (ตัวเลือก ByteBuffer byteBuffer, InterpreterApi.Options )
สร้างอินสแตนซ์ InterpreterApi โดยใช้โมเดลและตัวเลือกที่ระบุ
บทคัดย่อ
getInputIndex ( สตริง opName)
รับดัชนีของอินพุตที่กำหนดชื่อ op ของอินพุต
เทนเซอร์ ที่เป็นนามธรรม
getInputTensor (int inputIndex)
รับเทนเซอร์ที่เกี่ยวข้องกับดัชนีอินพุตที่ให้มา
บทคัดย่อ
getInputTensorCount ()
รับจำนวนเทนเซอร์อินพุต
นามธรรม ยาว
getLastNativeInferenceDurationNanoseconds ()
ส่งกลับระยะเวลาการอนุมานดั้งเดิม
บทคัดย่อ
getOutputIndex ( สตริง opName)
รับดัชนีของเอาต์พุตที่กำหนดชื่อ op ของเอาต์พุต
เทนเซอร์ ที่เป็นนามธรรม
getOutputTensor (int เอาท์พุทดัชนี)
รับค่าเทนเซอร์ที่เกี่ยวข้องกับดัชนีเอาต์พุตที่ระบุ
บทคัดย่อ
getOutputTensorCount ()
รับจำนวนเทนเซอร์เอาท์พุต
ความว่างเปล่าที่เป็นนามธรรม
resizeInput (int idx, int[] dims, บูลีนเข้มงวด)
ปรับขนาดอินพุต idx-th ของโมเดลเนทิฟให้เป็นค่า dims ที่กำหนด
ความว่างเปล่าที่เป็นนามธรรม
resizeInput (int idx, int[] สลัว)
ปรับขนาดอินพุต idx-th ของโมเดลเนทิฟให้เป็นค่า dims ที่กำหนด
ความว่างเปล่าที่เป็นนามธรรม
วิ่ง ( อินพุตวัตถุ , เอาต์พุต วัตถุ )
รันการอนุมานโมเดลหากโมเดลรับเพียงหนึ่งอินพุต และจัดเตรียมเอาต์พุตเพียงอันเดียว
ความว่างเปล่าที่เป็นนามธรรม
runForMultipleInputsOutputs (อินพุต Object[] , แผนที่ < Integer , Object > เอาต์พุต)
รันการอนุมานโมเดลหากโมเดลรับอินพุตหลายอินพุต หรือส่งคืนเอาต์พุตหลายเอาต์พุต

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

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

โมฆะนามธรรมสาธารณะจัดสรร Tensors ()

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

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

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

 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...

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

ขว้าง
IllegalStateException หากไม่สามารถจัดสรรเทนเซอร์ของกราฟได้สำเร็จ

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

เผยแพร่ทรัพยากรที่เกี่ยวข้องกับอินสแตนซ์ InterpreterApi

การสร้าง InterpreterApi แบบคงที่สาธารณะ (ตัวเลือก ไฟล์ modelFile, InterpreterApi.Options )

สร้างอินสแตนซ์ InterpreterApi โดยใช้โมเดลและตัวเลือกที่ระบุ โมเดลจะถูกโหลดจากไฟล์

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

การสร้าง InterpreterApi แบบคงที่สาธารณะ (ตัวเลือก ByteBuffer byteBuffer, InterpreterApi.Options )

สร้างอินสแตนซ์ InterpreterApi โดยใช้โมเดลและตัวเลือกที่ระบุ โมเดลจะถูกอ่านจาก ByteBuffer

พารามิเตอร์
ไบต์บัฟเฟอร์ โมเดล TF Lite ที่ได้รับการฝึกอบรมล่วงหน้า ในรูปแบบซีเรียลไลซ์แบบไบนารี ไม่ควรแก้ไข ByteBuffer หลังจากการสร้างอินสแตนซ์ InterpreterApi ByteBuffer อาจเป็นได้ทั้ง MappedByteBuffer ที่หน่วยความจำแมปไฟล์โมเดล หรือ ByteBuffer โดยตรงของ NativeOrder() ที่มีเนื้อหาไบต์ของโมเดล
ตัวเลือก ชุดตัวเลือกสำหรับปรับแต่งพฤติกรรมของล่าม
ขว้าง
ข้อยกเว้นอาร์กิวเมนต์ที่ผิดกฎหมาย ถ้า byteBuffer ไม่ใช่ MappedByteBuffer หรือ ByteBuffer โดยตรงของ NativeOrder

บทคัดย่อสาธารณะ int getInputIndex ( สตริง opName)

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

พารามิเตอร์
opName
ขว้าง
ข้อยกเว้นอาร์กิวเมนต์ที่ผิดกฎหมาย หาก opName ไม่ตรงกับอินพุตใด ๆ ในโมเดลที่ใช้ในการเริ่มต้นล่าม

บทคัดย่อสาธารณะ Tensor getInputTensor (int inputIndex)

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

พารามิเตอร์
ดัชนีอินพุต
ขว้าง
ข้อยกเว้นอาร์กิวเมนต์ที่ผิดกฎหมาย ถ้า inputIndex เป็นลบหรือไม่เล็กกว่าจำนวนอินพุตโมเดล

นามธรรมสาธารณะ int getInputTensorCount ()

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

นามธรรมสาธารณะ Long getLastNativeInferenceDurationNanoseconds ()

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

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

บทคัดย่อสาธารณะ int getOutputIndex ( สตริง opName)

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

พารามิเตอร์
opName
ขว้าง
ข้อยกเว้นอาร์กิวเมนต์ที่ผิดกฎหมาย หาก opName ไม่ตรงกับเอาต์พุตใด ๆ ในโมเดลที่ใช้ในการเริ่มต้นล่าม

บทคัดย่อสาธารณะ Tensor getOutputTensor (int outputIndex)

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

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

พารามิเตอร์
ดัชนีเอาท์พุท
ขว้าง
ข้อยกเว้นอาร์กิวเมนต์ที่ผิดกฎหมาย ถ้า outputIndex เป็นลบหรือไม่เล็กกว่าจำนวนเอาต์พุตของโมเดล

บทคัดย่อสาธารณะ int getOutputTensorCount ()

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

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

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

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

พารามิเตอร์
รหัสประจำตัว
สลัว
เข้มงวด
ขว้าง
ข้อยกเว้นอาร์กิวเมนต์ที่ผิดกฎหมาย ถ้า idx เป็นลบหรือไม่เล็กกว่าจำนวนอินพุตโมเดล หรือหากเกิดข้อผิดพลาดขณะปรับขนาดอินพุต idx-th นอกจากนี้ ข้อผิดพลาดยังเกิดขึ้นเมื่อพยายามปรับขนาดเทนเซอร์ด้วยขนาดคงที่เมื่อ "เข้มงวด" เป็นจริง

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

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

พารามิเตอร์
รหัสประจำตัว
สลัว
ขว้าง
ข้อยกเว้นอาร์กิวเมนต์ที่ผิดกฎหมาย ถ้า idx เป็นลบหรือไม่เล็กกว่าจำนวนอินพุตโมเดล หรือหากเกิดข้อผิดพลาดขณะปรับขนาดอินพุต idx-th

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

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

คำเตือน: 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() )
ขว้าง
ข้อยกเว้นอาร์กิวเมนต์ที่ผิดกฎหมาย หาก input เป็นโมฆะหรือว่างเปล่า หรือหากมีข้อผิดพลาดเกิดขึ้นเมื่อรันการอนุมาน
ข้อยกเว้นอาร์กิวเมนต์ที่ผิดกฎหมาย (ทดลอง อาจมีการเปลี่ยนแปลง) หากการอนุมานถูกขัดจังหวะโดย setCancelled(true)

โมฆะสาธารณะนามธรรม 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() )
ขว้าง
ข้อยกเว้นอาร์กิวเมนต์ที่ผิดกฎหมาย หาก inputs เป็นโมฆะหรือว่างเปล่า หาก outputs เป็นโมฆะ หรือหากเกิดข้อผิดพลาดขณะรันการอนุมาน