TensorBuffer

classe abstrata pública TensorBuffer
Subclasses diretas conhecidas

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)
Cria um TensorBuffer com shape e DataType especificados.
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
loadBuffer(buffer ByteBuffer)
Carrega um buffer de bytes neste TensorBuffer.
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 ByteBuffer getBuffer ()

Retorna o buffer de dados.

public abstrato DataType getDataType ()

Retorna o tipo de dados desse buffer.

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.