TensorBuffer

lớp trừu tượng công khai TensorBuffer
Lớp con trực tiếp đã biết

Biểu thị vùng đệm dữ liệu cho đầu vào hoặc đầu ra của mô hình.

Phương thức công khai

TensorBuffer
createDynamic(DataType dataType)
Tạo một TensorBuffer động trống với DataType được chỉ định.
TensorBuffer
createFixedSize(int[] shape, DataType dataType)
Tạo TensorBuffer với shapeDataType được chỉ định.
TensorBuffer
createFrom(vùng đệm TensorBuffer, DataType dataType)
Tạo một TensorBuffer sao chép sâu dữ liệu từ một đối tượng khác với DataType được chỉ định.
ByteBuffer
Hàm getBuffer()
Trả về vùng đệm dữ liệu.
trừu tượng DataType
Hàm getDataType()
Trả về loại dữ liệu của vùng đệm này.
int
getFlatSize()
Lấy flatSize của vùng đệm.
trừu tượng độ chính xác đơn[]
Hàm getFloatArray()
Trả về một mảng dấu phẩy động của các giá trị được lưu trữ trong vùng đệm này.
trừu tượng số thực có độ chính xác
getFloatValue(int absIndex)
Trả về một giá trị số thực tại một chỉ mục đã cho.
trừu tượng int[]
Hàm getIntArray()
Trả về một mảng int của các giá trị được lưu trữ trong vùng đệm này.
trừu tượng int
getIntValue(int absIndex)
Trả về giá trị int tại một chỉ mục đã cho.
int[]
Hàm getShape()
Lấy hình dạng hiện tại.
trừu tượng int
getTypeSize()
Trả về số lượng byte của một phần tử trong mảng.
boolean
Hàm isDynamic()
Trả về nếu TensorBuffer có kích thước động (có thể đổi kích thước tuỳ ý).
trừu tượng trống
loadArray(int[] src, int[] shape)
Tải một mảng int vào vùng đệm này kèm theo hình dạng cụ thể.
trừu tượng trống
loadArray(float[] src, int[] hình dạng)
Tải một mảng nổi vào vùng đệm này kèm theo hình dạng cụ thể.
void
loadArray(float[] src)
Tải một mảng nổi vào vùng đệm này.
void
loadArray(int[] src)
Tải một mảng int vào vùng đệm này.
void
loadBuffer(vùng đệm ByteBuffer)
Tải một vùng đệm byte vào TensorBuffer này.
void
loadBuffer(vùng đệm ByteBuffer, hình dạng int[])
Tải một vùng đệm byte vào TensorBuffer này với hình dạng cụ thể.

Các phương thức kế thừa

Phương thức công khai

công khai tĩnh TensorBuffer createDynamic (DataType dataType)

Tạo một TensorBuffer động trống với DataType được chỉ định. Hình dạng của TensorBuffer được tạo là {0}.

Dynamic TensorBuffers sẽ phân bổ lại bộ nhớ khi tải các mảng hoặc vùng đệm dữ liệu có nhiều kích thước bộ nhớ đệm. Dưới đây là một số ví dụ:

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

Thông số
dataType Loại dữ liệu của TensorBuffer sẽ được tạo.

công khai tĩnh TensorBuffer createFixedSize (int[] shape, DataType dataType)

Tạo TensorBuffer với shapeDataType được chỉ định. Sau đây là một số ví dụ:

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

Sau khi tạo, bạn không thể thay đổi kích thước của TensorBuffer có kích thước cố định.

Thông số
hình dạng Hình dạng của TensorBuffer sẽ được tạo.
dataType Loại dữ liệu của TensorBuffer sẽ được tạo.
Gửi
NullPointerException nếu shape rỗng.
IllegalArgumentException nếu shape có các phần tử không phải là số dương.

công khai tĩnh TensorBuffer createFrom (TensorBuffer vùng đệm, DataType dataType)

Tạo một TensorBuffer sao chép sâu dữ liệu từ một đối tượng khác với DataType được chỉ định.

Thông số
bộ đệm nguồn TensorBuffer để sao chép.
dataType DataType dự kiến của TensorBuffer mới được tạo.
Gửi
NullPointerException nếu buffer rỗng.

công khai ByteBuffer getBuffer ()

Trả về vùng đệm dữ liệu.

công khai bản tóm tắt DataType getDataType ()

Trả về loại dữ liệu của vùng đệm này.

công khai int getFlatSize ()

Lấy flatSize của vùng đệm.

Gửi
IllegalStateException nếu dữ liệu cơ bản bị hỏng

công khai trừu tượng float[] getFloatArray ()

Trả về một mảng dấu phẩy động của các giá trị được lưu trữ trong vùng đệm này. Nếu vùng đệm thuộc các loại độ chính xác đơn khác với độ chính xác đơn, các giá trị sẽ được chuyển đổi thành độ chính xác đơn. Ví dụ: các giá trị trong TensorBufferUint8 sẽ được chuyển đổi từ uint8 sang float.

công khai trừu tượng float getFloatValue (int absIndex)

Trả về một giá trị số thực tại một chỉ mục đã cho. Nếu vùng đệm thuộc các loại độ chính xác đơn khác với độ chính xác đơn, giá trị sẽ được chuyển đổi thành độ chính xác đơn. Ví dụ: khi đọc một giá trị từ TensorBufferUint8, giá trị đó sẽ được đọc thành tiếng trước tiên là uint8, sau đó sẽ được chuyển đổi từ uint8 sang độ chính xác đơn.

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

Thông số
absIndex Chỉ mục tuyệt đối của giá trị cần đọc.

public abstract int[] getIntArray ()

Trả về một mảng int của các giá trị được lưu trữ trong vùng đệm này. Nếu vùng đệm thuộc kiểu khác với int, các giá trị sẽ được chuyển đổi thành int và có thể mất độ chính xác. Ví dụ: nhận một mảng int từ TensorBufferFloat có giá trị {400.32f, 23.04f}, kết quả sẽ là {400, 23}.

công khai trừu tượng int getIntValue (int absIndex)

Trả về giá trị int tại một chỉ mục đã cho. Nếu vùng đệm thuộc loại khác với số nguyên, thì giá trị sẽ được chuyển đổi thành số nguyên. Ví dụ: khi đọc một giá trị từ TensorBufferFloat, giá trị sẽ được đọc trước dưới dạng số thực, sau đó sẽ được chuyển đổi từ số thực có độ chính xác đơn sang số nguyên. Có thể mất độ chính xác.

 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.
 

Thông số
absIndex Chỉ mục tuyệt đối của giá trị cần đọc.

công khai int[] getShape ()

Lấy hình dạng hiện tại. (trả lại bản sao ở đây để tránh sửa đổi không mong muốn.)

Gửi
IllegalStateException nếu dữ liệu cơ bản bị hỏng

public abstract int getTypeSize ()

Trả về số lượng byte của một phần tử trong mảng. Ví dụ: vùng đệm nổi sẽ trả về 4 và vùng đệm byte sẽ trả về 1.

công khai boolean isDynamic ()

Trả về nếu TensorBuffer có kích thước động (có thể đổi kích thước tuỳ ý).

công khai trừu tượng void loadArray (int[] src, int[] shape)

Tải một mảng int vào vùng đệm này kèm theo hình dạng cụ thể. Nếu vùng đệm thuộc loại khác với số nguyên, thì các giá trị sẽ được chuyển đổi thành loại của vùng đệm trước khi được tải vào vùng đệm và có thể mất độ chính xác. Ví dụ: tải một mảng int có giá trị {400, -23} vào TensorBufferUint8, các giá trị sẽ được gắn với [0, 255] và sau đó được chuyển thành uint8 bằng {255, 0}.

Thông số
src Mảng nguồn sẽ được tải.
hình dạng Hình dạng của tensor mà src biểu thị.
Gửi
NullPointerException nếu src rỗng.
NullPointerException nếu shape rỗng.
IllegalArgumentException nếu kích thước của mảng cần tải không khớp với hình dạng đã chỉ định.

công khai trừu tượng void loadArray (float[] src, int[] shape)

Tải một mảng nổi vào vùng đệm này kèm theo hình dạng cụ thể. Nếu vùng đệm thuộc loại khác với kiểu dữ liệu độ chính xác đơn, các giá trị sẽ được chuyển đổi thành loại của vùng đệm trước khi được tải vào vùng đệm và việc mất độ chính xác có thể xảy ra. Ví dụ: tải một mảng float vào TensorBufferUint8 có giá trị {400.32f, -23.04f}, thì các giá trị sẽ được gắn với [0, 255] và sau đó được chuyển thành uint8 bằng {255, 0}.

Thông số
src Mảng nguồn sẽ được tải.
hình dạng Hình dạng của tensor mà src biểu thị.
Gửi
NullPointerException nếu src rỗng.
NullPointerException nếu shape rỗng.
IllegalArgumentException nếu kích thước của mảng cần tải không khớp với hình dạng đã chỉ định.

công khai void loadArray (float[] src)

Tải một mảng nổi vào vùng đệm này. Nếu vùng đệm thuộc loại khác với độ chính xác đơn, các giá trị sẽ được chuyển đổi thành loại của vùng đệm trước khi được tải vào vùng đệm và việc mất độ chính xác có thể xảy ra. Ví dụ: tải một mảng float vào TensorBufferUint8 có giá trị {400.32f, -23.04f}, thì các giá trị sẽ được gắn với [0, 255] và sau đó được chuyển thành uint8 bằng {255, 0}.

Sử dụng phương thức này giả định rằng hình dạng của src giống với hình dạng của TensorBuffer này. Do đó, kích thước của buffer (src.length) phải luôn khớp với kích thước phẳng của TensorBuffer này, cho cả kích thước cố định và kích thước động TensorBuffer. Sử dụng loadArray(float[], int[]) nếu src có hình dạng khác.

Thông số
src Mảng nguồn sẽ được tải.

công khai void loadArray (int[] src)

Tải một mảng int vào vùng đệm này. Nếu vùng đệm thuộc loại khác với số nguyên, thì các giá trị sẽ được chuyển đổi thành loại của vùng đệm trước khi được tải vào vùng đệm và việc này có thể bị mất độ chính xác. Ví dụ: tải một mảng int có các giá trị {400, -23} vào TensorBufferUint8, các giá trị sẽ được gắn với [0, 255] và sau đó được chuyển thành uint8 bằng {255, 0}.

Sử dụng phương thức này giả định rằng hình dạng của src giống với hình dạng của TensorBuffer này. Do đó, kích thước của buffer (src.length) phải luôn khớp với kích thước phẳng của TensorBuffer này, cho cả kích thước cố định và kích thước động TensorBuffer. Sử dụng loadArray(int[], int[]) nếu src có hình dạng khác.

Thông số
src Mảng nguồn sẽ được tải.

công khai void loadBuffer (ByteBuffer vùng đệm)

Tải một vùng đệm byte vào TensorBuffer này. Dung lượng bộ nhớ đệm phải khớp với kích thước phẳng của TensorBuffer này.

Sử dụng phương thức này giả định rằng hình dạng của buffer giống với hình dạng của TensorBuffer này. Do đó, kích thước của buffer (buffer.limit()) phải luôn khớp với kích thước phẳng của TensorBuffer này, cho cả kích thước cố định và kích thước động TensorBuffer. Sử dụng loadBuffer(ByteBuffer, int[]) nếu buffer có hình dạng khác.

Lưu ý quan trọng: Bộ đệm đã tải là một tệp tham chiếu. KHÔNG CHỈNH SỬA. Chúng tôi không tạo bản sao ở đây vì lý do liên quan đến hiệu suất, nhưng nếu cần sửa đổi, vui lòng tạo một bản sao.

Để có hiệu suất tốt nhất, hãy luôn tải ByteBuffer trực tiếp hoặc ByteBuffer được hỗ trợ bởi một mảng.

Nếu buffer ở chế độ chỉ đọc, chúng ta sẽ áp dụng chiến lược sao chép khi ghi để đạt hiệu suất.

Thông số
bộ đệm Vùng đệm byte cần tải.

công khai void loadBuffer (ByteBuffer vùng đệm, int[] shape)

Tải một vùng đệm byte vào TensorBuffer này với hình dạng cụ thể.

Lưu ý quan trọng: Bộ đệm đã tải là một tệp tham chiếu. KHÔNG CHỈNH SỬA. Chúng tôi không tạo bản sao ở đây vì lý do liên quan đến hiệu suất, nhưng nếu cần sửa đổi, vui lòng tạo một bản sao.

Để có hiệu suất tốt nhất, hãy luôn tải ByteBuffer trực tiếp hoặc ByteBuffer được hỗ trợ bởi một mảng.

Thông số
bộ đệm Vùng đệm byte cần tải.
hình dạng
Gửi
NullPointerException nếu buffer rỗng.
IllegalArgumentException nếu kích thước của buffertypeSize không khớp hoặc kích thước của bufferflatSize không khớp.