- Suporte a ONNX
- Conversão de formatos
- Autoconversão de dados
- Criação de modelo
- Inicialização do modelo
- Verificação no testador
- OnnxCreate
- OnnxCreateFromBuffer
- OnnxRelease
- OnnxRun
- OnnxGetInputCount
- OnnxGetOutputCount
- OnnxGetInputName
- OnnxGetOutputName
- OnnxGetInputTypeInfo
- OnnxGetOutputTypeInfo
- OnnxSetInputShape
- OnnxSetOutputShape
- Estruturas de dados
Estruturas de dados
As seguintes estruturas de dados são usadas para trabalhar com modelos ONNX:
OnnxTypeInfo #
A estrutura descreve o tipo de parâmetro de entrada ou saída do modelo ONNX
struct OnnxTypeInfo
|
Somente o tensor (ONNX_TYPE_TENSOR) pode ser usado como parâmetro de entrada; nesse caso, somente o campo OnnxTypeInfo::tensor é preenchido com valores; os outros campos (mapa e sequência) permanecem indefinidos.
Apenas um dos três tipos OnnxTypeInfo (ONNX_TYPE_TENSOR, ONNX_TYPE_MAP ou ONNX_TYPE_SEQUENCE) pode ser usado como parâmetro de saída, dependendo do tipo, será preenchida a subestrutura apropriada (OnnxTypeInfo::tensor, OnnxTypeInfo::map ou OnnxTypeInfo::sequence).
A estrutura descreve o tensor no parâmetro de entrada ou saída do modelo ONNX
struct OnnxTensorTypeInfo
|
OnnxMapTypeInfo #
A estrutura descreve o mapa que é obtido no parâmetro de saída do modelo ONNX
struct OnnxMapTypeInfo
|
OnnxSequenceTypeInfo #
A estrutura descreve a sequência que resulta no parâmetro de saída do modelo ONNX
struct OnnxSequenceTypeInfo
|
ENUM_ONNX_TYPE #
A enumeração ENUM_ONNX_TYPE descreve o tipo de parâmetro do modelo
Identificador |
Descrição |
---|---|
ONNX_TYPE_UNKNOWN |
Desconhecido |
ONNX_TYPE_TENSOR |
Tensor |
ONNX_TYPE_SEQUENCE |
Sequência |
ONNX_TYPE_MAP |
Mapa |
ONNX_TYPE_OPAQUE |
Abstrato |
ONNX_TYPE_SPARSETENSOR |
Tensor esparso |
ENUM_ONNX_DATA_TYPE #
A enumeração ENUM_ONNX_DATA_TYPE descreve o tipo de dados usados
Identificador |
Descrição |
---|---|
ONNX_DATA_TYPE_UNDEFINED |
Não definido |
ONNX_DATA_TYPE_FLOAT |
float |
ONNX_DATA_TYPE_INT8 |
int de 8 bits |
ONNX_DATA_TYPE_UINT16 |
uint de 16 bits |
ONNX_DATA_TYPE_INT16 |
int de 16 bits |
ONNX_DATA_TYPE_INT32 |
int de 32 bits |
ONNX_DATA_TYPE_INT64 |
int de 64 bits |
ONNX_DATA_TYPE_STRING |
string |
ONNX_DATA_TYPE_BOOL |
bool |
ONNX_DATA_TYPE_FLOAT16 |
float de 16 bits |
ONNX_DATA_TYPE_DOUBLE |
double |
ONNX_DATA_TYPE_UINT32 |
uint de 32 bits |
ONNX_DATA_TYPE_UINT64 |
uint de 64 bits |
ONNX_DATA_TYPE_COMPLEX64 |
Número complexo de 64 bits |
ONNX_DATA_TYPE_COMPLEX128 |
Número complexo de 128 bits |
ONNX_DATA_TYPE_BFLOAT16 |
bfloat de 16 bits (Brain Floating Point) |
ENUM_ONNX_FLAGS #
A enumeração ENUM_ONNX_FLAGS descreve o modo de inicialização do modelo
Identificador |
Descrição |
---|---|
ONNX_DEBUG_LOGS |
Saída de registros de depuração |
ONNX_NO_CONVERSION |
Proibir a autoconversão, usar os dados do usuário como estão |
ONNX_COMMON_FOLDER |
Carga do arquivo do modelo a partir da pasta Common/Files, igual em valor ao sinalizador FILE_COMMON |
Conversão de arrays ao trabalhar com modelos ONNX
Em tarefas de aprendizado de máquina, nem sempre é necessária uma grande precisão nos cálculos. Para acelerar os cálculos, alguns modelos utilizam tipos de dados com menor precisão, como Float16 e até mesmo Float8. Para que os usuários possam fornecer esses dados de entrada aos modelos, no MQL5 foram adicionadas 4 funções especiais que convertem os tipos padrões do MQL5 para os tipos especiais FP16 e FP8.
Função |
Ação |
---|---|
Realiza a cópia de um array do tipo float ou double para um array do tipo ushort com o formato especificado. |
|
Realiza a cópia de um array do tipo float ou double para um array do tipo uchar com o formato especificado. |
|
Realiza a cópia de um array do tipo ushort para um array do tipo float ou double com um formato especificado. |
|
Realiza a cópia de um array do tipo uchar para um array do tipo float ou double com um formato especificado. |
Essas funções para conversão de arrays utilizam formatos especiais, definidos nas enumerações abaixo.
ENUM_FLOAT16_FORMAT #
Enumeração ENUM_FLOAT16_FORMAT descreve 2 formatos do tipo FP16.
Identificador |
Descrição |
---|---|
FLOAT_FP16 |
Formato padrão de 16 bits, também conhecido como half |
FLOAT_BFP16 |
Formato especial brain float point |
Ambos os formatos têm suas vantagens e limitações. FLOAT16 oferece maior precisão, mas requer mais recursos para armazenamento e cálculos. BFLOAT16, por outro lado, oferece maior desempenho e eficiência no processamento de dados, mas pode ser menos preciso.
ENUM_FLOAT8_FORMAT #
Enumeração ENUM_FLOAT8_FORMAT descreve 4 formatos do tipo FP8.
O formato FP8 (número de ponto flutuante de 8 bits) é um dos tipos de dados usados para representar números de ponto flutuante. No FP8, cada número é representado por 8 bits de dados, que geralmente são divididos em três componentes: sinal, expoente e mantissa. Este formato oferece um compromisso entre precisão e eficiência de armazenamento de dados, tornando-o atraente para uso em aplicativos onde a economia de memória e recursos computacionais é necessária.
Identificador |
Descrição |
---|---|
FLOAT_FP8_E4M3FN |
Número de ponto flutuante de 8 bits, 4 bits de ordem e 3 bits de mantissa. Geralmente usado como coeficientes. |
FLOAT_FP8_E4M3FNUZ |
Número de ponto flutuante de 8 bits, 4 bits de ordem e 3 bits de mantissa. Suporta NaN, não suporta zero negativo e Inf. Geralmente usado como coeficientes. |
FLOAT_FP8_E5M2FN |
Número de ponto flutuante de 8 bits, 5 bits de ordem e 2 bits de mantissa. Suporta NaN e Inf. Geralmente usado para gradientes. |
FLOAT_FP8_E5M2FNUZ |
Número de ponto flutuante de 8 bits, 5 bits de ordem e 2 bits de mantissa. Suporta NaN e Inf, não suporta zero negativo. Também utilizado para gradientes. |
Uma das principais vantagens do FP8 é sua eficiência no processamento de grandes volumes de dados. Graças à representação compacta de números, FP8 permite reduzir os requisitos de memória e acelerar os cálculos. Isso é especialmente importante em aplicações de aprendizado de máquina e inteligência artificial, onde o processamento de grandes conjuntos de dados é comum.