TensorBuffer

公開抽象類別 TensorBuffer
已知的直接子類別

代表模型輸入或輸出的資料緩衝區。

公用方法

靜態 TensorBuffer
createDynamic(DataType dataType)
建立具有指定 DataType 的空白動態 TensorBuffer
靜態 TensorBuffer
createFixedSize(int[] 形狀, DataType dataType)
建立具有指定 shapeDataTypeTensorBuffer
靜態 TensorBuffer
createFrom(TensorBuffer 緩衝區、DataType dataType)
以指定 DataType 從另一個網域建立 TensorBuffer 深複製資料。
ByteBuffer
getBuffer()
傳回資料緩衝區。
抽象 DataType
getDataType()
傳回這個緩衝區的資料類型。
int
getFlatSize()
取得緩衝區的 FlatSize。
抽象 浮點值 []
getFloatArray()
傳回儲存在此緩衝區中的值的浮點陣列。
抽象 浮點值
getFloatValue(int absIndex)
傳回指定索引的浮點值。
抽象 int[]
getIntArray()
傳回此緩衝區中儲存的值 int 陣列。
抽象 int
getIntValue(int absIndex)
傳回指定索引的 int 值。
int[]
getShape()
取得目前的形狀。
抽象 int
getTypeSize()
傳回陣列中單一元素的位元組數。
布林值
isDynamic()
如果 TensorBuffer 為動態大小 (可以任意調整大小),則傳回 。
抽象 void
loadArray(int[] src, int[] 形狀)
以特定形狀將 int 陣列載入這個緩衝區。
抽象 void
loadArray(float[] src, int[] 形狀)
以特定形狀將浮點陣列載入此緩衝區。
void
loadArray(float[] src)
將浮點陣列載入這個緩衝區。
void
loadArray(int[] src)
將 int 陣列載入這個緩衝區。
void
loadBuffer(ByteBuffer 緩衝區)
將位元組緩衝區載入這個 TensorBuffer
void
loadBuffer(ByteBuffer 緩衝區, int[] 形狀)
以特定形狀將位元組緩衝區載入這個 TensorBuffer

繼承的方法

公用方法

public static TensorBuffer createDynamic (DataType dataType)

建立具有指定 DataType 的空白動態 TensorBuffer。建立的 TensorBuffer 形狀為 {0}。

載入不同緩衝區大小的陣列或資料緩衝區時,動態 TensorBuffers 會重新分配記憶體。相關範例如下:

 // 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[] 形狀、DataType dataType)

建立具有指定 shapeDataTypeTensorBuffer。相關範例如下:

 // 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 大小在建立後即無法變更。

參數
shape 要建立的 TensorBuffer 形狀。
dataType 要建立 TensorBuffer 的資料類型。
擲回
NullPointerException 如果 shape 為空值。
IllegalArgumentException 如果 shape 含有非正面元素。

公開 靜態 TensorBuffer createFrom (TensorBuffer 緩衝區、DataType dataType)

以指定 DataType 從另一個網域建立 TensorBuffer 深複製資料。

參數
緩衝區 來源 TensorBuffer
dataType 新建的TensorBuffer預期DataType
擲回
NullPointerException 如果 buffer 為空值。

public ByteBuffer getBuffer ()

傳回資料緩衝區。

public 抽象DataType getDataType ()

傳回這個緩衝區的資料類型。

public int getFlatSize ()

取得緩衝區的 FlatSize。

擲回
IllegalStateException 表示基礎資料損毀

public 抽象浮點值 float[] getFloatArray ()

傳回儲存在此緩衝區中的值的浮點陣列。如果緩衝區的類型與浮點值不同,系統會將值轉換為浮點值。舉例來說,TensorBufferUint8 中的值會從 uint8 轉換為浮點值。

public 抽象浮點值 浮點值 getFloatValue (int absIndex)

傳回指定索引的浮點值。如果緩衝區的類型與浮點值不同,系統會將其值轉換為浮點值。舉例來說,讀取 TensorBufferUint8 中的值時,系統會先讀出值為 uint8,然後再從 uint8 轉換為浮點值。

 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 要讀取值的絕對索引。

public 抽象 int[] getIntArray ()

傳回此緩衝區中儲存的值 int 陣列。如果緩衝區的類型與 int 不同,系統會將值轉換為 int 值,並可能會失去精確度。舉例來說,從值為 {400.32f, 23.04f} 的 TensorBufferFloat 取得 int 陣列,輸出為 {400, 23}。

public 抽象化 int getIntValue (int absIndex)

傳回指定索引的 int 值。如果緩衝區的類型與 int 不同,系統會將值轉換為 int。舉例來說,從 TensorBufferFloat 讀取值時,系統會先將值讀出為浮點值,然後再從浮點值轉換為 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 要讀取值的絕對索引。

public int[] getShape ()

取得目前的形狀。(在此傳回副本,以免發生非預期的修改行為)。

擲回
IllegalStateException 表示基礎資料損毀

public 抽象 int getTypeSize ()

傳回陣列中單一元素的位元組數。舉例來說,一個浮點緩衝區會傳回 4,位元組緩衝區會傳回 1。

public 布林值 isDynamic ()

如果 TensorBuffer 為動態大小 (可以任意調整大小),則傳回 。

public 抽象 void loadArray (int[] src, int[] 形狀)

以特定形狀將 int 陣列載入這個緩衝區。如果緩衝區的類型與 int 不同,值會先轉換為緩衝區的類型,然後再載入緩衝區,並可能會失去精確度。例如,將值為 {400, -23} 的 int 陣列載入 TensorBufferUint8,其值會限制為 [0, 255],接著轉換為 uint8 x {255, 0}。

參數
src 要載入的來源陣列。
shape src 所代表的張量形狀。
擲回
NullPointerException 如果 src 為空值。
NullPointerException 如果 shape 為空值。
IllegalArgumentException 表示要載入的陣列大小與指定的形狀不符。

public 抽象 void loadArray (float[] src, int[] 形狀)

以特定形狀將浮點陣列載入此緩衝區。如果緩衝區的類型與浮點值不同,系統會將值先轉換為緩衝區的類型,然後再載入緩衝區,並可能會失去精確度。舉例來說,將浮點陣列載入值為 {400.32f, -23.04f} 的 TensorBufferUint8,值會限制為 [0, 255],然後轉換為 uint8 x {255, 0}。

參數
src 要載入的來源陣列。
shape src 所代表的張量形狀。
擲回
NullPointerException 如果 src 為空值。
NullPointerException 如果 shape 為空值。
IllegalArgumentException 表示要載入的陣列大小與指定的形狀不符。

public void loadArray (float[] src)

將浮點陣列載入這個緩衝區。如果緩衝區的類型與浮點值不同,系統會將值先轉換為緩衝區的類型,然後再載入緩衝區,並可能會失去精確度。舉例來說,將浮點陣列載入值為 {400.32f, -23.04f} 的 TensorBufferUint8,值會限制為 [0, 255],然後轉換為 uint8 x {255, 0}。

使用這個方法假設 src 的形狀與此 TensorBuffer 的形狀相同。因此,無論是固定大小還是動態 TensorBufferbuffer 的大小 (src.length) 一律應與這個 TensorBuffer 的固定大小相符。如果 src 有其他形狀,請使用 loadArray(float[], int[])

參數
src 要載入的來源陣列。

public void loadArray (int[] src)

將 int 陣列載入這個緩衝區。如果緩衝區的類型與 int 不同,這些值會先轉換為緩衝區的類型,然後再載入緩衝區,並可能會失去精確度。例如,將值為 {400, -23} 的 int 陣列載入 TensorBufferUint8,其值會限制為 [0, 255],然後由 {255, 0} 轉換為 uint8。

使用這個方法假設 src 的形狀與此 TensorBuffer 的形狀相同。因此,無論是固定大小還是動態 TensorBufferbuffer 的大小 (src.length) 一律應與這個 TensorBuffer 的固定大小相符。如果 src 有其他形狀,請使用 loadArray(int[], int[])

參數
src 要載入的來源陣列。

public void loadBuffer (ByteBuffer 緩衝區)

將位元組緩衝區載入這個 TensorBuffer。緩衝區大小必須與這個 TensorBuffer 的固定大小相符。

使用這個方法假設 buffer 的形狀與此 TensorBuffer 的形狀相同。因此,無論是固定大小還是動態 TensorBufferbuffer 的大小 (buffer.limit()) 應一律與這個 TensorBuffer 的固定大小相符。如果 buffer 有其他形狀,請使用 loadBuffer(ByteBuffer, int[])

重要事項:載入的緩衝區是參照項目。請勿修改。我們不會在這裡建立副本以提升成效,但如果需要修改,請建立副本。

為獲得最佳效能,請一律載入直接由陣列支援的 ByteBufferByteBuffer

如果 buffer 為唯讀狀態,我們會採用寫入複製策略來提高成效。

參數
緩衝區 要載入的位元組緩衝區。

public void loadBuffer (ByteBuffer buffer, int[] 形狀)

以特定形狀將位元組緩衝區載入這個 TensorBuffer

重要事項:載入的緩衝區是參照項目。請勿修改。我們不會在這裡建立副本以提升成效,但如果需要修改,請建立副本。

為獲得最佳效能,請一律載入直接由陣列支援的 ByteBufferByteBuffer

參數
緩衝區 要載入的位元組緩衝區。
shape
擲回
NullPointerException 如果 buffer 為空值。
IllegalArgumentException 如果 buffertypeSize 的大小不相符,或是 bufferflatSize 的大小不符。