TensorBuffer

คลาสนามธรรมสาธารณะ TensorBuffer
คลาสย่อยโดยตรงที่รู้จัก

แสดงบัฟเฟอร์ข้อมูลสำหรับอินพุตของโมเดลหรือเอาต์พุตของโมเดล

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

TensorBuffer แบบคงที่
createDynamic(ประเภทข้อมูล DataType)
สร้าง TensorBuffer แบบไดนามิกที่ว่างเปล่าซึ่งมี DataType ที่ระบุ
TensorBuffer แบบคงที่
createFixedSize(int[] รูปร่าง DataType dataType)
สร้าง TensorBuffer พร้อม shape และ DataType ที่ระบุ
TensorBuffer แบบคงที่
createFrom(บัฟเฟอร์ TensorBuffer, ประเภทข้อมูล DataType)
สร้างข้อมูลTensorBufferแบบคัดลอกเชิงลึกจากอีกข้อมูลหนึ่งที่ระบุ DataType
ByteBuffer
getBuffer()
แสดงผลบัฟเฟอร์ข้อมูล
นามธรรม DataType
getDataType()
แสดงผลประเภทข้อมูลของบัฟเฟอร์นี้
int
getFlatSize()
รับขนาด FlatSize ของบัฟเฟอร์
นามธรรม ลอย[]
getFloatArray()
แสดงผลอาร์เรย์ Float ของค่าที่จัดเก็บไว้ในบัฟเฟอร์นี้
นามธรรม ลอย
getFloatValue(int absIndex)
แสดงผลค่าลอยตัวในดัชนีที่ระบุ
นามธรรม int[]
getIntArray()
แสดงผลอาร์เรย์ int ของค่าที่จัดเก็บไว้ในบัฟเฟอร์นี้
นามธรรม int
getIntValue(int absIndex)
แสดงผลค่า int ที่ดัชนีที่กำหนด
int[]
getShape()
รับรูปร่างปัจจุบัน
นามธรรม int
getTypeSize()
แสดงผลจำนวนไบต์ขององค์ประกอบเดี่ยวในอาร์เรย์
boolean
isDynamic()
แสดงผลหาก TensorBuffer มีขนาดแบบไดนามิก (สามารถปรับขนาดได้ตามต้องการ)
นามธรรม โมฆะ
loadArray(int[] src, รูปร่าง int[])
โหลดอาร์เรย์ int ลงในบัฟเฟอร์นี้ด้วยรูปร่างที่ระบุ
นามธรรม โมฆะ
loadArray(Float[] src, int[])
โหลดอาร์เรย์แบบลอยลงในบัฟเฟอร์นี้ด้วยรูปร่างที่เฉพาะเจาะจง
void
loadArray(Float[] src)
โหลดอาร์เรย์ Float ลงในบัฟเฟอร์นี้
void
loadArray(int[] src)
โหลดอาร์เรย์ Int ลงในบัฟเฟอร์นี้
void
loadBuffer(บัฟเฟอร์ ByteBuffer)
โหลดบัฟเฟอร์ไบต์ลงใน TensorBuffer นี้
void
loadBuffer(บัฟเฟอร์ ByteBuffer, รูปร่าง int[])
โหลดบัฟเฟอร์ไบต์ลงใน TensorBuffer นี้ด้วยรูปร่างที่เฉพาะเจาะจง

วิธีการที่รับช่วงมา

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

สาธารณะ คงที่ TensorBuffer createDynamic (DataType dataType)

สร้าง TensorBuffer แบบไดนามิกที่ว่างเปล่าซึ่งมี DataType ที่ระบุ รูปร่างของ TensorBuffer ที่สร้างขึ้นคือ {0}

TensorBuffer แบบไดนามิกจะจัดสรรหน่วยความจำใหม่เมื่อโหลดอาร์เรย์หรือบัฟเฟอร์ข้อมูลขนาดบัฟเฟอร์ที่แตกต่างกัน ลองดูตัวอย่างต่อไปนี้

 // Creating a float dynamic TensorBuffer:
 TensorBuffer tensorBuffer = TensorBuffer.createDynamic(DataType.FLOAT32);
 // Loading a float array:
 float[] arr1 = new float[] {1, 2, 3};
 tensorBuffer.loadArray(arr, new int[] {arr1.length});
 // loading another float array:
 float[] arr2 = new float[] {1, 2, 3, 4, 5};
 tensorBuffer.loadArray(arr, new int[] {arr2.length});
 // loading a third float array with the same size as arr2, assuming shape doesn't change:
 float[] arr3 = new float[] {5, 4, 3, 2, 1};
 tensorBuffer.loadArray(arr);
 // loading a forth float array with different size as arr3 and omitting the shape will result
 // in error:
 float[] arr4 = new float[] {3, 2, 1};
 tensorBuffer.loadArray(arr); // Error: The size of byte buffer and the shape do not match.
 

พารามิเตอร์
dataType ประเภทข้อมูลของ TensorBuffer ที่จะสร้าง

สาธารณะ คงที่ TensorBuffer createFixedSize (int[] Shape, DataType dataType)

สร้าง TensorBuffer พร้อม shape และ DataType ที่ระบุ ตัวอย่างเช่น

 // Creating a float TensorBuffer with shape {2, 3}:
 int[] shape = new int[] {2, 3};
 TensorBuffer tensorBuffer = TensorBuffer.createFixedSize(shape, DataType.FLOAT32);
 
 // Creating an uint8 TensorBuffer of a scalar:
 int[] shape = new int[] {};
 TensorBuffer tensorBuffer = TensorBuffer.createFixedSize(shape, DataType.UINT8);
 
 // Creating an empty uint8 TensorBuffer:
 int[] shape = new int[] {0};
 TensorBuffer tensorBuffer = TensorBuffer.createFixedSize(shape, DataType.UINT8);
 

เมื่อสร้างแล้วจะเปลี่ยนแปลงขนาดของ TensorBuffer ที่มีขนาดคงที่ไม่ได้

พารามิเตอร์
รูปร่าง รูปร่างของ TensorBuffer ที่จะสร้าง
dataType ประเภทข้อมูลของ TensorBuffer ที่จะสร้าง
การขว้าง
NullPointerException หาก shape เป็นค่าว่าง
IllegalArgumentException หาก shape มีองค์ประกอบที่ไม่เป็นบวก

ภาพนิ่งสาธารณะ TensorBuffer createFrom (บัฟเฟอร์ TensorBuffer, DataType dataType)

สร้างข้อมูลTensorBufferแบบคัดลอกเชิงลึกจากอีกข้อมูลหนึ่งที่ระบุ DataType

พารามิเตอร์
บัฟเฟอร์ แหล่งที่มา TensorBuffer ที่จะคัดลอก
dataType DataType ที่คาดไว้ของ TensorBuffer ที่สร้างขึ้นใหม่
การขว้าง
NullPointerException หาก buffer เป็นค่าว่าง

สาธารณะ ByteBuffer getBuffer ()

แสดงผลบัฟเฟอร์ข้อมูล

สาธารณะ นามธรรม DataType getDataType ()

แสดงผลประเภทข้อมูลของบัฟเฟอร์นี้

สาธารณะ int getFlatSize ()

รับขนาด FlatSize ของบัฟเฟอร์

การขว้าง
IllegalStateException หากข้อมูลสำคัญเสียหาย

สาธารณะ นามธรรม Float[] getFloatArray ()

แสดงผลอาร์เรย์ Float ของค่าที่จัดเก็บไว้ในบัฟเฟอร์นี้ หากบัฟเฟอร์เป็นคนละประเภทกับแบบลอย ระบบจะแปลงค่าเป็นแบบลอย เช่น ค่าใน TensorBufferUint8 จะแปลงจาก uint8 เป็น Float

สาธารณะ นามธรรม ทศนิยม getFloatValue (int absIndex)

แสดงผลค่าลอยตัวในดัชนีที่ระบุ หากบัฟเฟอร์เป็นคนละประเภทกับทศนิยม ระบบจะแปลงค่าเป็นแบบลอย เช่น เมื่ออ่านค่าจาก TensorBufferUint8 ระบบจะอ่านค่าเป็น uint8 ก่อน จากนั้นจะแปลงจาก uint8 เป็น Float

 For example, a TensorBuffer with shape {2, 3} that represents the following array,
 [[0.0f, 1.0f, 2.0f], [3.0f, 4.0f, 5.0f]].

 The fourth element (whose value is 3.0f) in the TensorBuffer can be retrieved by:
 float v = tensorBuffer.getFloatValue(3);
 

พารามิเตอร์
absIndex ดัชนีสัมบูรณ์ของค่าที่จะอ่าน

สาธารณะ นามธรรม int[] getIntArray ()

แสดงผลอาร์เรย์ int ของค่าที่จัดเก็บไว้ในบัฟเฟอร์นี้ หากบัฟเฟอร์เป็นชนิดอื่นที่ไม่ใช่ int ระบบจะแปลงค่าเป็น int และอาจต้องสูญเสียความแม่นยำ ตัวอย่างเช่น หากรับอาร์เรย์ int จาก TensorBufferFloat ที่มีค่า {400.32f, 23.04f} เอาต์พุตจะเป็น {400, 23}

Public abstract int getIntValue (int absIndex)

แสดงผลค่า int ที่ดัชนีที่กำหนด หากบัฟเฟอร์มีประเภทต่างจาก int ระบบจะแปลงค่าเป็น int เช่น เมื่ออ่านค่าจาก TensorBufferFloat ระบบจะอ่านค่าเป็น Float ก่อน จากนั้นจะแปลงค่าจาก Float เป็น int อาจมีการสูญเสียความแม่นยํา

 For example, a TensorBuffer with shape {2, 3} that represents the following array,
 [[0.0f, 1.0f, 2.0f], [3.0f, 4.0f, 5.0f]].

 The fourth element (whose value is 3.0f) in the TensorBuffer can be retrieved by:
 int v = tensorBuffer.getIntValue(3);
 Note that v is converted from 3.0f to 3 as a result of type conversion.
 

พารามิเตอร์
absIndex ดัชนีสัมบูรณ์ของค่าที่จะอ่าน

สาธารณะ int[] getShape ()

รับรูปร่างปัจจุบัน (แสดงผลสำเนาที่นี่เพื่อหลีกเลี่ยงการแก้ไขที่ไม่คาดคิด)

การขว้าง
IllegalStateException หากข้อมูลสำคัญเสียหาย

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

แสดงผลจำนวนไบต์ขององค์ประกอบเดี่ยวในอาร์เรย์ เช่น บัฟเฟอร์แบบลอยจะแสดงผล 4 และบัฟเฟอร์แบบไบต์จะแสดงผล 1

สาธารณะ บูลีน isDynamic ()

แสดงผลหาก TensorBuffer มีขนาดแบบไดนามิก (สามารถปรับขนาดได้ตามต้องการ)

สาธารณะ นามธรรม โมฆะ loadArray (int[] src, int[] Shape)

โหลดอาร์เรย์ int ลงในบัฟเฟอร์นี้ด้วยรูปร่างที่ระบุ หากบัฟเฟอร์เป็นชนิดอื่นที่ไม่ใช่ int ระบบจะแปลงค่าเป็นประเภทของบัฟเฟอร์ก่อนที่จะโหลดลงในบัฟเฟอร์ และอาจสูญเสียความแม่นยำ เช่น เมื่อโหลดอาร์เรย์ int ที่มีค่า {400, -23} ลงใน TensorBufferUint8 ค่าจะถูกบีบเป็น [0, 255] จากนั้นจะแคสต์ไปยัง uint8 ภายในวันที่ {255, 0}

พารามิเตอร์
src อาร์เรย์ต้นทางที่จะโหลด
รูปร่าง รูปร่างของ Tensor ที่ src แสดง
การขว้าง
NullPointerException หาก src เป็นค่าว่าง
NullPointerException หาก shape เป็นค่าว่าง
IllegalArgumentException หากขนาดของอาร์เรย์ที่โหลดไม่ตรงกับรูปร่างที่ระบุ

สาธารณะ นามธรรม โมฆะ loadArray (Float[] src, int[] Shape)

โหลดอาร์เรย์แบบลอยลงในบัฟเฟอร์นี้ด้วยรูปร่างที่เฉพาะเจาะจง หากบัฟเฟอร์เป็นชนิดอื่นที่ไม่ใช่แบบลอย ระบบจะแปลงค่าเป็นประเภทของบัฟเฟอร์ก่อนที่จะโหลดลงในบัฟเฟอร์ และอาจสูญเสียความแม่นยำ เช่น การโหลดอาร์เรย์ Float ลงใน TensorBufferUint8 ที่มีค่า {400.32f, -23.04f} ค่าจะถูกปรับให้เป็น [0, 255] จากนั้นจะแคสต์ไปยัง uint8 ภายในวันที่ {255, 0}

พารามิเตอร์
src อาร์เรย์ต้นทางที่จะโหลด
รูปร่าง รูปร่างของ Tensor ที่ src แสดง
การขว้าง
NullPointerException หาก src เป็นค่าว่าง
NullPointerException หาก shape เป็นค่าว่าง
IllegalArgumentException หากขนาดของอาร์เรย์ที่โหลดไม่ตรงกับรูปร่างที่ระบุ

สาธารณะ void loadArray (Float[] src)

โหลดอาร์เรย์ Float ลงในบัฟเฟอร์นี้ หากบัฟเฟอร์เป็นคนละประเภทกับแบบลอย ระบบจะแปลงค่าเป็นประเภทของบัฟเฟอร์ก่อนที่จะโหลดลงในบัฟเฟอร์ และอาจสูญเสียความแม่นยำ เช่น การโหลดอาร์เรย์ Float ลงใน TensorBufferUint8 ที่มีค่า {400.32f, -23.04f} ค่าจะถูกปรับให้เป็น [0, 255] จากนั้นจะแคสต์ไปยัง uint8 ภายในวันที่ {255, 0}

การใช้เมธอดนี้จะถือว่ารูปร่างของ src เหมือนกับรูปร่างของ TensorBuffer นี้ ดังนั้นขนาดของ buffer (src.length) ควรตรงกับขนาดคงที่ของ TensorBuffer นี้เสมอ สำหรับทั้งขนาดคงที่และ TensorBuffer แบบไดนามิก ใช้ loadArray(float[], int[]) หาก src มีรูปทรงอื่น

พารามิเตอร์
src อาร์เรย์ต้นทางที่จะโหลด

สาธารณะ void loadArray (int[] src)

โหลดอาร์เรย์ Int ลงในบัฟเฟอร์นี้ หากบัฟเฟอร์เป็นชนิดอื่นที่ไม่ใช่ int ระบบจะแปลงค่าเป็นประเภทของบัฟเฟอร์ก่อนที่จะโหลดลงในบัฟเฟอร์ และอาจสูญเสียความแม่นยำ เช่น เมื่อโหลดอาร์เรย์ int ที่มีค่า {400, -23} ลงใน TensorBufferUint8 ค่าจะถูกบีบเป็น [0, 255] จากนั้นจะแคสต์ไปยัง uint8 โดย {255, 0}

การใช้เมธอดนี้จะถือว่ารูปร่างของ src เหมือนกับรูปร่างของ TensorBuffer นี้ ดังนั้นขนาดของ buffer (src.length) ควรตรงกับขนาดคงที่ของ TensorBuffer นี้เสมอ สำหรับทั้งขนาดคงที่และ TensorBuffer แบบไดนามิก ใช้ loadArray(int[], int[]) หาก src มีรูปทรงอื่น

พารามิเตอร์
src อาร์เรย์ต้นทางที่จะโหลด

สาธารณะ void loadBuffer (บัฟเฟอร์ ByteBuffer)

โหลดบัฟเฟอร์ไบต์ลงใน TensorBuffer นี้ ขนาดบัฟเฟอร์ต้องตรงกับขนาดคงที่ของ TensorBuffer นี้

การใช้เมธอดนี้จะถือว่ารูปร่างของ buffer เหมือนกับรูปร่างของ TensorBuffer นี้ ดังนั้นขนาดของ buffer (buffer.limit()) ควรตรงกับขนาดคงที่ของ TensorBuffer นี้เสมอ สำหรับทั้งขนาดคงที่และ TensorBuffer แบบไดนามิก ใช้ loadBuffer(ByteBuffer, int[]) หาก buffer มีรูปทรงอื่น

สำคัญ: บัฟเฟอร์ที่โหลดคือการอ้างอิง โปรดอย่าแก้ไข เราไม่สร้างสำเนาที่นี่เนื่องจากข้อกังวลด้านประสิทธิภาพ แต่หากจำเป็นต้องแก้ไข โปรดทำสำเนาไว้

โหลด ByteBuffer โดยตรงหรือ ByteBuffer ที่มาจากอาร์เรย์เสมอเพื่อประสิทธิภาพที่ดีที่สุด

หาก buffer เป็นแบบอ่านอย่างเดียว เราจะใช้กลยุทธ์คัดลอกเขียนเพื่อเพิ่มประสิทธิภาพ

พารามิเตอร์
บัฟเฟอร์ บัฟเฟอร์ไบต์ที่จะโหลด

สาธารณะ void loadBuffer (บัฟเฟอร์ ByteBuffer, รูปร่าง int[])

โหลดบัฟเฟอร์ไบต์ลงใน TensorBuffer นี้ด้วยรูปร่างที่เฉพาะเจาะจง

สำคัญ: บัฟเฟอร์ที่โหลดคือการอ้างอิง โปรดอย่าแก้ไข เราไม่สร้างสำเนาที่นี่เนื่องจากข้อกังวลด้านประสิทธิภาพ แต่หากจำเป็นต้องแก้ไข โปรดทำสำเนาไว้

โหลด ByteBuffer โดยตรงหรือ ByteBuffer ที่มาจากอาร์เรย์เสมอเพื่อประสิทธิภาพที่ดีที่สุด

พารามิเตอร์
บัฟเฟอร์ บัฟเฟอร์ไบต์ที่จะโหลด
รูปร่าง
การขว้าง
NullPointerException หาก buffer เป็นค่าว่าง
IllegalArgumentException หากขนาดของ buffer และ typeSize ไม่ตรงกัน หรือขนาดของ buffer และ flatSize ไม่ตรงกัน