Subclasses diretas conhecidas
TensorBufferFloat, TensorBufferUint8 (link em inglês)
|
Representa o buffer de dados para a entrada ou saída de um modelo.
Métodos públicos
TensorBuffer estático |
createDynamic(tipo de dados DataType)
Cria um
TensorBuffer dinâmico vazio com o DataType especificado. |
TensorBuffer estático |
createFixedSize(int[] forma, tipo de dados DataType)
|
TensorBuffer estático |
createFrom(buffer TensorBuffer, tipo de dados DataType)
Cria dados de cópia profunda
TensorBuffer de outro, com DataType especificado. |
ByteBuffer |
Função getBuffer()
Retorna o buffer de dados.
|
abstrato DataType |
Função getDataType()
Retorna o tipo de dados desse buffer.
|
int |
getFlatSize()
Recebe o flatSize do buffer.
|
abstrato float[] |
getFloatArray()
Retorna uma matriz flutuante dos valores armazenados nesse buffer.
|
ponto flutuante abstrato |
getFloatValue(int absIndex)
Retorna um valor flutuante em um determinado índice.
|
abstrato int[] |
getIntArray()
Retorna uma matriz int dos valores armazenados nesse buffer.
|
abstrato int |
getIntValue(int absIndex)
Retorna um valor int em um determinado índice.
|
int[] |
getShape()
Recebe o formato atual.
|
abstrato int |
Função getTypeSize()
Retorna o número de bytes de um único elemento na matriz.
|
boolean |
Função isDynamic()
Retorna se o
TensorBuffer tiver tamanho dinâmico (pode ser redimensionado arbitrariamente). |
abstrato nulo |
loadArray(int[] src, int[])
Carrega uma matriz int neste buffer com uma forma específica.
|
abstrato nulo |
loadArray(float[] src, int[])
Carrega uma matriz flutuante nesse buffer com uma forma específica.
|
void |
loadArray(float[] src)
Carrega uma matriz flutuante nesse buffer.
|
void |
loadArray(int[] src)
Carrega uma matriz int neste buffer.
|
void | |
void |
loadBuffer(buffer ByteBuffer, forma int[])
Carrega um buffer de bytes neste
TensorBuffer com uma forma específica. |
Métodos herdados
Métodos públicos
público estático TensorBuffer createDynamic (DataType dataType)
Cria um TensorBuffer
dinâmico vazio com o DataType
especificado. O formato do TensorBuffer
criado é {0}.
Os TensorBuffers dinâmicos realocam a memória ao carregar matrizes ou buffers de dados de diferentes tamanhos. Veja alguns exemplos:
// 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.
Parâmetros
dataType | O dataType do TensorBuffer a ser criado.
|
---|
público estático TensorBuffer createFixedSize (int[] shape, DataType dataType)
Cria um TensorBuffer
com shape
e DataType
especificados. Confira alguns
exemplos:
// 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);
Não é possível alterar o tamanho de um TensorBuffer de tamanho fixo depois de criado.
Parâmetros
shape | O formato do TensorBuffer que será criado. |
---|---|
dataType | O dataType do TensorBuffer a ser criado. |
Gera
NullPointerException | se shape for nulo. |
---|---|
IllegalArgumentException | se shape tiver elementos não positivos.
|
público estático TensorBuffer createFrom (TensorBuffer, DataType dataType)
Cria dados de cópia profunda TensorBuffer
de outro, com DataType
especificado.
Parâmetros
buffer | o TensorBuffer de origem para copiar. |
---|---|
dataType | a DataType esperada de TensorBuffer recém-criadas. |
Gera
NullPointerException | se buffer for nulo.
|
---|
public int getFlatSize ()
Recebe o flatSize do buffer.
Gera
IllegalStateException | se os dados estiverem corrompidos |
---|
public float[] getFloatArray ()
Retorna uma matriz flutuante dos valores armazenados nesse buffer. Se o buffer for de tipos diferentes do ponto flutuante, os valores serão convertidos em flutuantes. Por exemplo, os valores em TensorBufferUint8
serão convertidos de uint8 para float.
public float getFloatValue (int absIndex)
Retorna um valor flutuante em um determinado índice. Se o buffer for de tipos diferentes do ponto flutuante, o
valor será convertido em flutuante. Por exemplo, ao ler um valor de TensorBufferUint8
, o valor será lido primeiro como uint8 e depois convertido de uint8 para 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);
Parâmetros
absIndex | O índice absoluto do valor a ser lido. |
---|
public abstrata int[] getIntArray ()
Retorna uma matriz int dos valores armazenados nesse buffer. Se o tipo do buffer for diferente de int, os valores serão convertidos em int e a perda de precisão poderá ser aplicada. Por exemplo,
obtendo uma matriz int de TensorBufferFloat
com valores {400.32f, 23.04f}, a saída
será {400, 23}.
public int getIntValue (int absIndex)
Retorna um valor int em um determinado índice. Se o buffer for de tipos diferentes de int, o valor será convertido em int. Por exemplo, ao ler um valor de TensorBufferFloat
, o valor será lido primeiro como flutuante e depois convertido de flutuante para int. Pode haver perda de precisão.
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.
Parâmetros
absIndex | O índice absoluto do valor a ser lido. |
---|
public int[] getShape ()
Recebe o formato atual. (retornando uma cópia aqui para evitar modificações inesperadas.)
Gera
IllegalStateException | se os dados estiverem corrompidos |
---|
public abstrata int getTypeSize ()
Retorna o número de bytes de um único elemento na matriz. Por exemplo, um buffer flutuante retorna 4 e um buffer de byte retorna 1.
public booleano isDynamic ()
Retorna se o TensorBuffer
tiver tamanho dinâmico (pode ser redimensionado arbitrariamente).
public void loadArray (int[] src, int[])
Carrega uma matriz int neste buffer com uma forma específica. Se o buffer for de tipos diferentes de int, os valores serão convertidos no tipo do buffer antes de serem carregados nele e pode haver uma perda de precisão. Por exemplo, ao carregar uma matriz de int com valores {400,
-23} em um TensorBufferUint8
, os valores serão fixados em [0, 255] e, em seguida,
convertidos em uint8 por {255, 0}.
Parâmetros
src | A matriz de origem a ser carregada. |
---|---|
shape | Forma do tensor que src representa. |
Gera
NullPointerException | se src for nulo. |
---|---|
NullPointerException | se shape for nulo. |
IllegalArgumentException | se o tamanho da matriz a ser carregada não corresponder ao formato especificado. |
public void loadArray (float[] src, int[] shape)
Carrega uma matriz flutuante nesse buffer com uma forma específica. Se o buffer for de tipos diferentes do ponto flutuante, os valores serão convertidos no tipo do buffer antes de serem carregados nele e pode haver uma perda de precisão. Por exemplo, ao carregar uma matriz flutuante em um TensorBufferUint8
com valores {400.32f, -23.04f}, os valores serão fixados em [0, 255] e, em seguida, convertidos em uint8 por {255, 0}.
Parâmetros
src | A matriz de origem a ser carregada. |
---|---|
shape | Forma do tensor que src representa. |
Gera
NullPointerException | se src for nulo. |
---|---|
NullPointerException | se shape for nulo. |
IllegalArgumentException | se o tamanho da matriz a ser carregada não corresponder ao formato especificado. |
public void loadArray (float[] src)
Carrega uma matriz flutuante nesse buffer. Se o buffer for de tipos diferentes do ponto flutuante, os valores serão convertidos no tipo do buffer antes de serem carregados e pode haver perda de precisão. Por exemplo, ao carregar uma matriz flutuante em uma TensorBufferUint8
com valores {400.32f, -23.04f}, os valores serão fixados em [0, 255] e, em seguida, serão convertidos em uint8 por {255, 0}.
O uso desse método pressupõe que a forma de src
é a mesma da
TensorBuffer
. Assim, o tamanho de buffer
(src.length
) precisa sempre corresponder ao tamanho simples desse TensorBuffer
, tanto para o tamanho fixo quanto para o TensorBuffer
dinâmico. Use loadArray(float[], int[])
se src
tiver uma forma diferente.
Parâmetros
src | A matriz de origem a ser carregada. |
---|
public void loadArray (int[] src)
Carrega uma matriz int neste buffer. Se o buffer for de tipos diferentes de int, os valores serão convertidos no tipo do buffer antes de serem carregados nele e pode haver perda de precisão. Por exemplo, ao carregar uma matriz de int com valores {400, -23} em um TensorBufferUint8
, os valores serão fixados em [0, 255] e, em seguida, serão convertidos em uint8 por {255, 0}.
O uso desse método pressupõe que a forma de src
é a mesma da
TensorBuffer
. Assim, o tamanho de buffer
(src.length
) precisa sempre corresponder ao tamanho simples desse TensorBuffer
, tanto para o tamanho fixo quanto para o TensorBuffer
dinâmico. Use loadArray(int[], int[])
se src
tiver uma forma diferente.
Parâmetros
src | A matriz de origem a ser carregada. |
---|
public void loadBuffer (buffer ByteBuffer)
Carrega um buffer de bytes neste TensorBuffer
. O tamanho do buffer precisa corresponder ao tamanho simples
deste TensorBuffer
.
O uso desse método pressupõe que a forma de buffer
é a mesma da
TensorBuffer
. Assim, o tamanho de buffer
(buffer.limit()
) precisa sempre corresponder ao tamanho simples desse TensorBuffer
, tanto para o tamanho fixo quanto para o TensorBuffer
dinâmico. Use loadBuffer(ByteBuffer, int[])
se buffer
tiver uma forma diferente.
Importante: o buffer carregado é uma referência. NÃO MODIFICAR. Não criaremos uma cópia aqui para questão de desempenho. No entanto, se a modificação for necessária, faça uma cópia.
Para ter o melhor desempenho, carregue sempre um ByteBuffer
direto ou um ByteBuffer
apoiado por uma matriz.
Se o buffer
for somente leitura, vamos adotar uma estratégia de copy-on-write para melhorar o desempenho.
Parâmetros
buffer | O buffer de bytes a ser carregado. |
---|
public void loadBuffer (buffer ByteBuffer, forma int[])
Carrega um buffer de bytes neste TensorBuffer
com uma forma específica.
Importante: o buffer carregado é uma referência. NÃO MODIFICAR. Não criaremos uma cópia aqui para questão de desempenho. No entanto, se a modificação for necessária, faça uma cópia.
Para ter o melhor desempenho, carregue sempre um ByteBuffer
direto ou um ByteBuffer
apoiado por uma matriz.
Parâmetros
buffer | O buffer de bytes a ser carregado. |
---|---|
shape |
Gera
NullPointerException | se buffer for nulo. |
---|---|
IllegalArgumentException | se o tamanho de buffer e typeSize ou o tamanho de buffer e flatSize não forem iguais.
|