已知的直接子类 |
表示模型输入或其输出的数据缓冲区。
公共方法
静态 TensorBuffer | |
静态 TensorBuffer | |
静态 TensorBuffer | |
ByteBuffer |
getBuffer()
返回数据缓冲区。
|
abstract DataType |
getDataType()
返回该缓冲区的数据类型。
|
整型 |
getFlatSize()
获取缓冲区的 FlatSize。
|
abstract float[] |
getFloatArray()
返回此缓冲区中存储的值的浮点数组。
|
抽象 浮点数 |
getFloatValue(int absIndex)
返回指定索引处的浮点值。
|
abstract int[] |
getIntArray()
返回此缓冲区中存储的值的 int 数组。
|
abstract int |
getIntValue(int absIndex)
返回指定索引处的 int 值。
|
整型 [] |
getShape()
获取当前形状。
|
abstract int |
getTypeSize()
返回数组中单个元素的字节数。
|
布尔值 |
isDynamic()
如果
TensorBuffer 是动态大小(可以任意调整大小),则返回 。 |
抽象 void |
loadArray(int[] src, int[] shape)
将一个 int 数组加载到具有特定形状的缓冲区中。
|
抽象 void |
loadArray(float[] src, int[] shape)
将一个具有特定形状的浮点数数组加载到此缓冲区中。
|
void |
loadArray(float[] src)
将浮点数组加载到此缓冲区。
|
void |
loadArray(int[] src)
将 int 数组加载到此缓冲区。
|
void | |
void |
继承的方法
公共方法
public static TensorBuffer createDynamic (DataType dataType)
使用指定的 DataType
创建空的动态 TensorBuffer
。所创建的 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 的数据类型。
|
---|
public static TensorBuffer createFixedSize (int[] shape, DataType dataType)
使用指定的 shape
和 DataType
创建 TensorBuffer
。下面是一些示例:
// 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 为 null。 |
---|---|
IllegalArgumentException | 如果 shape 包含非正元素。
|
public static TensorBuffer createFrom (TensorBuffer 缓冲区,DataType dataType)
使用指定的 DataType
从另一个数据创建深层复制数据的 TensorBuffer
。
参数
缓存空间 | 源TensorBuffer 复制来源。 |
---|---|
dataType | 新创建的TensorBuffer 的预期DataType 。 |
抛出
NullPointerException | 如果 buffer 为 null。
|
---|
public abstract float[] getFloatArray ()
返回此缓冲区中存储的值的浮点数组。如果缓冲区的类型与浮点数不同,这些值将转换为浮点数。例如,TensorBufferUint8
中的值将从 uint8 转换为 float。
public abstract 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 | 要读取的值的绝对索引。 |
---|
public abstract int[] getIntArray ()
返回此缓冲区中存储的值的 int 数组。如果缓冲区的类型与 int 不同,值将被转换为 int,并且可能会失去精度。例如,从值为 {400.32f, 23.04f} 的 TensorBufferFloat
获取 int 数组,输出结果为 {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 | 要读取的值的绝对索引。 |
---|
public abstract int getTypeSize ()
返回数组中单个元素的字节数。例如,浮点缓冲区将返回 4,字节缓冲区将返回 1。
public abstract void loadArray (int[] src, int[] shape)
将一个 int 数组加载到具有特定形状的缓冲区中。如果缓冲区的类型与 int 不同,这些值会先转换为缓冲区的类型,然后再加载到缓冲区中,并且可能会丢失精度。例如,将值为 {400, -23} 的 int 数组加载到 TensorBufferUint8
中时,值将被限制为 [0, 255],然后由 {255, 0} 转换为 uint8。
参数
src | 要加载的源数组。 |
---|---|
shape | src 表示的张量的形状。 |
抛出
NullPointerException | 如果 src 为 null。 |
---|---|
NullPointerException | 如果 shape 为 null。 |
IllegalArgumentException | 如果要加载的数组的大小与指定形状不匹配。 |
public abstract void loadArray (float[] src, int[] shape)
将一个具有特定形状的浮点数数组加载到此缓冲区中。如果缓冲区的类型与浮点数不同,则值会在加载到缓冲区之前转换为缓冲区的类型,并且可能会丢失精度。例如,将一个浮点型数组加载到值为 {400.32f, -23.04f} 的 TensorBufferUint8
中,值将被限制为 [0, 255],然后由 {255, 0} 转换为 uint8。
参数
src | 要加载的源数组。 |
---|---|
shape | src 表示的张量的形状。 |
抛出
NullPointerException | 如果 src 为 null。 |
---|---|
NullPointerException | 如果 shape 为 null。 |
IllegalArgumentException | 如果要加载的数组的大小与指定形状不匹配。 |
public void loadArray (float[] src)
将浮点数组加载到此缓冲区。如果缓冲区的类型与浮点数不同,则值会在加载到缓冲区之前转换为缓冲区的类型,并且可能会丢失精度。例如,将一个浮点型数组加载到值为 {400.32f, -23.04f} 的 TensorBufferUint8
中,这些值将会被限制为 [0, 255],然后由 {255, 0} 转换为 uint8。
使用此方法时,假设 src
的形状与此 TensorBuffer
的形状相同。因此,对于固定尺寸和动态 TensorBuffer
,buffer
(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
的形状相同。因此,对于固定尺寸和动态 TensorBuffer
,buffer
(src.length
) 的尺寸应始终与此 TensorBuffer
的平面尺寸保持一致。如果 src
的形状不同,请使用 loadArray(int[], int[])
。
参数
src | 要加载的源数组。 |
---|
public void loadBuffer (ByteBuffer 缓冲区)
将字节缓冲区加载到此 TensorBuffer
。缓冲区大小必须与此 TensorBuffer
的平面大小一致。
使用此方法时,假设 buffer
的形状与此 TensorBuffer
的形状相同。因此,对于固定尺寸和动态 TensorBuffer
,buffer
(buffer.limit()
) 的尺寸应始终与此 TensorBuffer
的平面尺寸保持一致。如果 buffer
的形状不同,请使用 loadBuffer(ByteBuffer, int[])
。
重要提示:加载的缓冲区是一个引用。请勿修改。出于性能方面的考虑,我们不会在此处创建副本,但如果需要修改,请创建副本。
为获得最佳性能,请始终加载直接的 ByteBuffer
或由数组支持的 ByteBuffer
。
如果 buffer
为只读,我们会采用写入时复制策略来提高性能。
参数
缓存空间 | 要加载的字节缓冲区。 |
---|
public void loadBuffer (ByteBuffer buffer, int[] shape)
将一个字节缓冲区加载到此 TensorBuffer
中(具有特定形状)。
重要提示:加载的缓冲区是一个引用。请勿修改。出于性能方面的考虑,我们不会在此处创建副本,但如果需要修改,请创建副本。
为了获得最佳性能,请始终加载直接 ByteBuffer
或由数组支持的 ByteBuffer
。
参数
缓存空间 | 要加载的字节缓冲区。 |
---|---|
shape |
抛出
NullPointerException | 如果 buffer 为 null。 |
---|---|
IllegalArgumentException | 如果 buffer 和 typeSize 的大小不一致或 buffer 和 flatSize 的大小不一致。
|