InterpreterApi

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

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

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

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

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

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

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] มีความแตกต่าง สำหรับ 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)

คำเตือน:InterpreterApi อินสแตนซ์ไม่ปลอดภัยของชุดข้อความ

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

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

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

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

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

นามธรรม เป็นโมฆะ
allocateTensors()
อัปเดตการจัดสรรสำหรับ Tensor ทั้งหมดอย่างชัดแจ้ง หากจำเป็น
นามธรรม เป็นโมฆะ
close()
ปล่อยทรัพยากรที่เชื่อมโยงกับอินสแตนซ์ InterpreterApi
คงที่ InterpreterApi
create(ตัวเลือก File modelFile, InterpreterApi.Options)
สร้างอินสแตนซ์ InterpreterApi โดยใช้โมเดลและตัวเลือกที่ระบุ
คงที่ InterpreterApi
create(ตัวเลือก ByteBuffer bytesBuffer, InterpreterApi.Options)
สร้างอินสแตนซ์ InterpreterApi โดยใช้โมเดลและตัวเลือกที่ระบุ
นามธรรม Int
getInputIndex(สตริง opName)
รับดัชนีของอินพุตโดยใช้ชื่อการดำเนินการของอินพุต
นามธรรม Tensor
getInputTensor(int InputIndex)
รับ Tensor ที่เชื่อมโยงกับดัชนีอินพุตที่ระบุ
นามธรรม Int
getInputTensorCount()
รับจำนวน Tensor อินพุต
นามธรรม ยาว
getLastNativeInferenceDurationNanoseconds()
แสดงผลเวลาการอนุมานดั้งเดิม
นามธรรม Int
getOutputIndex(สตริง opName)
รับดัชนีของเอาต์พุตโดยใช้ชื่อการดำเนินการของเอาต์พุต
นามธรรม Tensor
getOutputTensor(int exitIndex)
รับ Tensor ที่เชื่อมโยงกับดัชนีเอาต์พุตที่ระบุ
นามธรรม Int
getOutputTensorCount()
รับจำนวน Tensor เอาต์พุต
นามธรรม เป็นโมฆะ
resizeInput(int idx, int[] dims, boolean strict)
ปรับขนาดอินพุต idx-th ของโมเดลดั้งเดิมตามความสว่างที่กำหนด
นามธรรม เป็นโมฆะ
resizeInput(int idx, int[] หรี่แสง)
ปรับขนาดอินพุต idx-th ของโมเดลดั้งเดิมตามความสว่างที่กำหนด
นามธรรม เป็นโมฆะ
run(อินพุต Object, เอาต์พุต Object)
เรียกใช้การอนุมานโมเดลหากโมเดลรับเพียงอินพุตเดียวและมีเอาต์พุตเพียง 1 รายการ
นามธรรม เป็นโมฆะ
runForMultipleInputsOutputs(อินพุต Object[], แมป<จำนวนเต็มObject> เอาต์พุต)
เรียกใช้การอนุมานโมเดลหากโมเดลรับอินพุตหลายรายการหรือแสดงผลหลายเอาต์พุต

เมธอดที่รับมา

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

สาธารณะ นามธรรม เป็นโมฆะ 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...

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

การขว้าง
IllegalStateException หากจัดสรร Tensor ของกราฟไม่สำเร็จ

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

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

สาธารณะ คงที่ InterpreterApi สร้าง (ไฟล์ modelFile, InterpreterApi.Options)

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

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

สาธารณะ คงที่ InterpreterApi สร้าง (ByteBuffer ไบต์Buffer, InterpreterApi.Options)

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

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

สาธารณะ นามธรรม Int getInputIndex (สตริง opName)

รับดัชนีของอินพุตโดยใช้ชื่อการดำเนินการของอินพุต

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

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

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

พารามิเตอร์
inputIndex
การขว้าง
IllegalArgumentException หาก inputIndex เป็นค่าลบหรือไม่น้อยกว่าค่า จำนวนอินพุตโมเดล

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

รับจำนวน Tensor อินพุต

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

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

การขว้าง
IllegalArgumentException หากโมเดลไม่ได้เริ่มต้นโดยล่าม

สาธารณะ นามธรรม Int getOutputIndex (สตริง opName)

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

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

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

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

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

พารามิเตอร์
outputIndex
การขว้าง
IllegalArgumentException หาก outputIndex เป็นค่าลบหรือไม่น้อยกว่าค่า จำนวนเอาต์พุตโมเดล

สาธารณะ นามธรรม Int getOutputTensorCount ()

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

สาธารณะ นามธรรม เป็นโมฆะ resizeInput (int idx, int[] ดิม, บูลีน strict)

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

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

พารามิเตอร์
IDX
หรี่แสง
เข้มงวด
การขว้าง
IllegalArgumentException หาก idx เป็นค่าลบหรือไม่น้อยกว่าจำนวนดังกล่าว อินพุตโมเดล หรือหากเกิดข้อผิดพลาดเมื่อปรับขนาดอินพุต idx-th นอกจากนี้ ข้อผิดพลาด เกิดขึ้นเมื่อพยายามปรับขนาด tensor ที่มีขนาดคงที่เมื่อ "strict" เป็น True

สาธารณะ นามธรรม เป็นโมฆะ resizeInput (int idx, int[] หรี่แสง)

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

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

สาธารณะ นามธรรม เป็นโมฆะ เรียกใช้ (อินพุตออบเจ็กต์, เอาต์พุต ออบเจ็กต์)

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

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

  • ByteBuffer - ใช้ได้กับ Tensor ประเภทพื้นฐานใดๆ ที่สำคัญ
  • FloatBuffer - ใช้งานได้กับ Tensor แบบลอย
  • IntBuffer - ใช้งานได้กับ int32 Tensors
  • LongBuffer - ใช้งานได้กับ 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())
การขว้าง
IllegalArgumentException หาก input เป็นค่าว่างหรือว่างเปล่า หรือหากเกิดข้อผิดพลาดเมื่อ การอนุมานการทำงาน
IllegalArgumentException (เวอร์ชันทดลอง อาจมีการเปลี่ยนแปลง) ถ้าการอนุมานคือ ถูกขัดจังหวะโดย setCancelled(true)

สาธารณะ นามธรรม เป็นโมฆะ runForMultipleInputsOutputs (อินพุต Object[], แมป<IntegerObject> เอาต์พุต)

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

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

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

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

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