API Eval C++ da Biblioteca CNTK
A Biblioteca de CNTK do C++ para Avaliação baseia-se na API da Biblioteca CNTK. Os métodos a seguir são usados para avaliar um modelo.
Carregar um modelo
static FunctionPtr CNTK::Function::Load(const std::wstring& modelFile, const DeviceDescriptor& computeDevice = DeviceDescriptor::UseDefaultDevice()
Esse método carrega um arquivo de modelo e retorna o ponteiro para a Função que representa o modelo carregado. Uma função em CNTK denota um grafo de computação composto de funções primitivas ou funções compostas com zero ou mais argumentos de entrada e uma ou mais saídas. Esse modelFile
é o caminho do arquivo de modelo. Especifica computeDevice
o dispositivo a ser executado na avaliação.
static FunctionPtr CNTK::Function::Load(char *modelBuffer, size_t modelBufferLength, const DeviceDescriptor& computeDevice = DeviceDescriptor::UseDefaultDevice()
Esse método carrega um modelo de um buffer de memória e retorna o ponteiro para a Função que representa o modelo carregado. Os modelBuffer
pontos para o buffer que contém o conteúdo do modelo serializado e o tamanho do modelBufferLength
buffer. Especifica computeDevice
o dispositivo a ser executado na avaliação.
Avaliar uma função
void CNTK::Function::Evaluate(const std::unordered_map<Variable, ValuePtr>& arguments, std::unordered_map<Variable, ValuePtr>& outputs, const DeviceDescriptor& computeDevice = DeviceDescriptor::UseDefaultDevice()
Este método inicia a avaliação da this
Função que representa o modelo com parâmetros especificados. Os arguments
valores contêm todos os valores de todas as variáveis de entrada necessárias para avaliação e o outputs
armazenamento dos valores das variáveis de saída. O armazenamento de valores de saída pode ser pré-alocado pelo chamador ou pelo sistema se o mapeamento ValuePtr for passado como nulo pelo chamador. Especifica computeDevice
o dispositivo a ser executado na avaliação.
Criar um valor usando entrada densa
template <typename ElementType> static ValuePtr CNTK::Value::CreateBatch(const NDShape& sampleShape, const std::vector<ElementType>& batchData, const DeviceDescriptor& device, bool readOnly = false
Cria um novo objeto Value que contém um lote de amostras. O número de exemplos no lote é o número de elementos divididos batchData
pelo tamanho do (ocorre um erro de sampleShape
runtime se o restante não for zero). O objeto Value criado contém uma cópia dos dados especificados em batchData
. ElementType
é o tipo de dados do objeto Value criado. Atualmente, float
e double
há suporte.
Parâmetros:
sampleShape
: a forma tensor do objeto Value.batchData
: os dados a serem contidos no objeto Value.device
: em qual dispositivo o objeto Value deve ser criado.readOnly
: o objeto Value será somente leitura se esse sinalizador fortrue
.
template <typename ElementType> static ValuePtr CNTK::Value::CreateSequence(const NDShape& sampleShape, const std::vector<ElementType>& sequenceData, const DeviceDescriptor& device, bool readOnly = false
Cria um novo objeto Value que contém uma sequência de exemplos. O objeto Value criado contém uma cópia dos dados especificados em sequenceData
. O comprimento da sequência é o número de elementos divididos sequenceData
pelo tamanho do sampleShape
(ocorre um erro de runtime se o restante não for zero). A sequência criada é uma nova sequência. ElementType
é o tipo de dados do objeto Value criado. Atualmente, float
e double
há suporte.
Parâmetros:
sampleShape
: a forma tensor do Valor.sequenceData
: os dados a serem contidos no Valor.device
: em qual dispositivo o objeto Value deve ser criado.readOnly
: o valor será somente leitura se esse sinalizador fortrue
.
template <typename ElementType> static ValuePtr CNTK::Value::CreateSequence(const NDShape& sampleShape, const std::vector<ElementType>& sequenceData, bool sequenceStartFlag, const DeviceDescriptor& device, bool readOnly = false
Cria um novo objeto Value que contém uma sequência de exemplos. O objeto Value criado contém uma cópia dos dados especificados em sequenceData
. O comprimento da sequência é o número de elementos divididos sequenceData
pelo tamanho do sampleShape
(ocorre um erro de runtime se o restante não for zero). O sequenceStartFlag especifica se essa sequência é uma nova sequência ou continuação de uma sequência anterior no mesmo índice na lista de sequências de uma chamada anterior para este método. ElementType
é o tipo de dados do objeto Value criado. Atualmente, float
e double
há suporte.
Parâmetros:
sampleShape
: a forma tensor do Valor.sequenceData
: os dados a serem contidos no Valor.sequenceStartFlag
:true
indica que é uma nova sequência.false
significa uma continuação de uma sequência anterior.device
: em qual dispositivo o objeto Value deve ser criado.readOnly
: o valor será somente leitura se esse sinalizador fortrue
.
template <typename ElementType> static ValuePtr CNTK::Value::CreateBatchOfSequences(const NDShape& sampleShape, const std::vector<std::vector<ElementType>>& batchOfSequences, const DeviceDescriptor& device, bool readOnly = false
Cria um novo objeto Value que contém um lote de sequências de comprimento variável. O objeto Value criado contém uma cópia dos dados especificados em batchOfSequences
. O número de sequências no lote é do tamanho de batchOfSequences
. O comprimento de cada sequência é o número de elementos na sequência correspondente de batchOfSequences
dividido pelo tamanho de (um erro de sampleShape
runtime ocorre se o restante não for zero). Cada sequência é batchOfSequences
uma nova sequência. ElementType
é o tipo de dados do objeto Value criado. Atualmente, float
e double
há suporte.
Parâmetros:
sampleShape
: a forma tensor do Valor.batchOfSequences
: os dados a serem armazenados no Valor. O exteriorvector
representa uma coleção de sequências com comprimento variável e o interiorvector
representa cada sequência individual.device
: em qual dispositivo o Valor deve ser criado.readOnly
: o valor será somente leitura se esse sinalizador fortrue
.
template <typename ElementType> static ValuePtr CNTK::Value::CreateBatchOfSequences(const NDShape& sampleShape, const std::vector<std::vector<ElementType>>& batchOfSequences, const std::vector<bool>& sequenceStartFlags, const DeviceDescriptor& device, bool readOnly = false
Cria um novo objeto Value que contém um lote de sequências de comprimento variável. O objeto Value criado contém uma cópia dos dados especificados em batchOfSequences
. O número de sequências no lote é do tamanho de batchOfSequences
. O comprimento de cada sequência é o número de elementos na sequência correspondente de batchOfSequences
dividido pelo tamanho de (um erro de sampleShape
runtime ocorre se o restante não for zero). ElementType
é o tipo de dados do objeto Value criado. Atualmente, float
e double
há suporte.
Parâmetros:
sampleShape
: a forma tensor do Valor.batchOfSequences
: os dados a serem armazenados no Valor. O exteriorvector
representa uma coleção de sequências com comprimento variável e o interiorvector
representa cada sequência individual.sequenceStartFlags
: uma coleção de valores boolianos. Cada elemento representa se a sequênciabatchOfSequences
correspondente é uma nova sequência (no caso detrue
) ou uma continuação de uma sequência anterior (no caso defalse
).device
: em qual dispositivo o Valor deve ser criado.readOnly
: o valor será somente leitura se esse sinalizador fortrue
.
Criar um valor usando entrada de vetor único
template <typename ElementType> static ValuePtr CNTK::Value::CreateBatch(size_t dimension, const std::vector<size_t>& batchData, const DeviceDescriptor& device, bool readOnly = false)
Cria um novo objeto Value que contém um lote de amostras. Cada exemplo é representado por um valor de índice que aponta para o valor diferente de zero no vetor único dos dimension
elementos. O número de exemplos no lote é o número de elementos em batchData
. ElementType
é o tipo de dados do objeto Value criado. Atualmente, float
e double
há suporte.
Parâmetros:
dimension
: o tamanho da dimensão do vetor único.batchData
: a coleção de índices que representa o lote de amostras.device
: em qual dispositivo o objeto Value deve ser criado.readOnly
: o valor será somente leitura se esse sinalizador fortrue
.
template <typename ElementType> static ValuePtr CNTK::Value::CreateSequence(size_t dimension, const std::vector<size_t>& sequenceData, const DeviceDescriptor& device, bool readOnly = false)
Cria um novo objeto Value que contém uma sequência de exemplos. Cada exemplo é representado por um valor de índice que aponta para o valor diferente de zero no vetor único dos dimension
elementos. O comprimento da sequência é o número de elementos em sequenceData
. Cada sequência é uma nova sequência. ElementType
é o tipo de dados do objeto Value criado. Atualmente, float
e double
há suporte.
Parâmetros:
dimension
: o tamanho da dimensão do vetor único.sequenceData
: a coleção de índices que representa a sequência de exemplos.device
: em qual dispositivo o objeto Value deve ser criado.readOnly
: o valor será somente leitura se esse sinalizador fortrue
.
template <typename ElementType> static ValuePtr CNTK::Value::CreateSequence(size_t dimension, const std::vector<size_t>& sequenceData, bool sequenceStartFlag, const DeviceDescriptor& device, bool readOnly = false)
Cria um novo objeto Value que contém uma sequência de exemplos. Cada exemplo é representado por um valor de índice que aponta para o valor diferente de zero no vetor único dos dimension
elementos. O seqStartFlag especifica se essa sequência é uma nova sequência ou continuação de uma sequência anterior no mesmo índice na lista de sequências de uma chamada anterior para este método. O comprimento da sequência é o número de elementos em sequenceData
. ElementType
é o tipo de dados do objeto Value criado. Atualmente, float
e double
há suporte.
Parâmetros:
dimension
: o tamanho da dimensão do vetor único.sequenceData
: a coleção de índices que representa a sequência de exemplos.sequenceStartFlag
:true
indica que é uma nova sequência.false
significa uma continuação de uma sequência anterior.device
: em qual dispositivo o objeto Value deve ser criado.readOnly
: o valor será somente leitura se esse sinalizador fortrue
.
template <typename ElementType> static ValuePtr CNTK::Value::CreateBatchOfSequences(size_t dimension, const std::vector<std::vector<size_t>>& batchOfSequences, const DeviceDescriptor& device, bool readOnly = false
Cria um novo objeto Value que contém um lote de sequências de comprimento variável. Cada exemplo é representado por um valor de índice que aponta para o valor diferente de zero no vetor único dos dimension
elementos. O número de sequências é o número de elementos na lista externa de batchOfSequences
. O comprimento de cada sequência é o número de elementos da sequência correspondente na lista interna de batchOfSequences
. Cada sequência é batchOfSequences
uma nova sequência. ElementType
é o tipo de dados do objeto Value criado. Atualmente, float
e double
há suporte.
Parâmetros:
dimension
: o tamanho da dimensão do vetor único.batchOfSequences
: a coleção de índices que representam sequências de exemplos. O exteriorvector
representa uma coleção de sequências com comprimento variável e o interiorvector
representa cada sequência individual.device
: em qual dispositivo o objeto Value deve ser criado.readOnly
: o valor será somente leitura se esse sinalizador fortrue
.
template <typename ElementType> static ValuePtr CNTK::Value::CreateBatchOfSequences(size_t dimension, const std::vector<std::vector<size_t>>& batchOfSequences, const std::vector<bool>& sequenceStartFlags, const DeviceDescriptor& device, bool readOnly = false
Cria um novo objeto Value que contém um lote de sequências de comprimento variável. Cada exemplo é representado por um valor de índice que aponta para o valor diferente de zero no vetor único dos dimension
elementos. O número de sequências é o número de elementos na lista externa de batchOfSequences
. O comprimento de cada sequência é o número de elementos da sequência correspondente na lista interna de batchOfSequences
. ElementType
é o tipo de dados do objeto Value criado. Atualmente, float
e double
há suporte.
Parâmetros:
dimension
: o tamanho da dimensão do vetor único.batchOfSequences
: a coleção de índices que representam sequências de exemplos. O exteriorvector
representa uma coleção de sequências com comprimento variável e o interiorvector
representa cada sequência individual.sequenceStartFlags
: uma coleção de valores boolianos. Cada elemento representa se a sequênciabatchOfSequences
correspondente é uma nova sequência (no caso detrue
) ou uma continuação de uma sequência anterior (no caso defalse
).device
: em qual dispositivo o objeto Value deve ser criado.readOnly
: o valor será somente leitura se esse sinalizador fortrue
.
Criar um valor usando entrada CSC esparsa
Atualmente, há suporte para o CSC (Formato de Coluna Esparsa Compactada). O formato CSC armazena a matriz no formato de coluna principal e a matriz que contém os índices de coluna é compactada. Uma matriz no formato CSC é representada pelos seguintes parâmetros:
nonZeroValues
: a matriz de dados que contém todos os valores não zero da matriz no formato coluna-principal.rowIndices
: a matriz que contém os índices de linha dos elementos correspondentes na matriznonZeroValues
.colStarts
: a matriz que contém índices nas matrizesrowIndices
enonZeroValues
.
Uma descrição detalhada do formato CSC pode ser encontrada aqui.
template <typename ElementType> static ValuePtr CNTK::Value::CreateSequence(const NDShape& sampleShape, size_t sequenceLength, const SparseIndexType* colStarts, const SparseIndexType* rowIndices, const ElementType* nonZeroValues, size_t numNonZeroValues, const DeviceDescriptor& device, bool readOnly = false
Cria um novo objeto Value que contém uma sequência de exemplos usando o formato de entrada esparso CSC. O comprimento da sequência é o número de linhas da matriz esparsa. A sequência criada é uma nova sequência. ElementType
é o tipo de dados do objeto Value criado. Atualmente, float
e double
há suporte.
Parâmetros:
sampleShape
: a forma tensor do Valor. Para entrada esparsa, a dimensionalidade à esquerda da forma tensor deve ser igual ao tamanho total da forma tensor.sequenceLength
: o comprimento da sequência, que também é o número de linhas na matriz esparsa.colStarts
: a matriz contém índices para cada coluna nas matrizesrowIndices
enonZeroValues
.rowIndices
: a matriz que contém os índices de linha dos elementos correspondentes na matriznonZeroValues
.nonZeroValues
: a matriz que contém todos os valores não zero na matriz esparsa.numNonZeroValues
: o número de valores não zero na matriz esparsa.device
: em qual dispositivo o objeto Value deve ser criado.readOnly
: o valor será somente leitura se esse sinalizador fortrue
.
template <typename ElementType> static ValuePtr CNTK::Value::CreateSequence(const NDShape& sampleShape, size_t sequenceLength, const SparseIndexType* colStarts, const SparseIndexType* rowIndices, const ElementType* nonZeroValues, size_t numNonZeroValues, bool sequenceStartFlag, const DeviceDescriptor& device, bool readOnly = false
Cria um novo objeto Value que contém uma sequência de exemplos usando o formato de entrada esparso CSC. O comprimento da sequência é o número de linhas da matriz esparsa. A sequenceStartFlag especifica se essa sequência é uma nova sequência ou continuação de uma sequência anterior de uma chamada anterior para este método. ElementType
é o tipo de dados do objeto Value criado. Atualmente, float
e double
há suporte.
Parâmetros:
sampleShape
: a forma tensor do Valor. Para entrada esparsa, a dimensionalidade à esquerda da forma tensor deve ser igual ao tamanho total da forma tensor.sequenceLength
: o comprimento da sequência, que também é o número de linhas na matriz esparsa.colStarts
: a matriz contém índices para cada coluna nas matrizesrowIndices
enonZeroValues
.rowIndices
: a matriz que contém os índices de linha dos elementos correspondentes na matriznonZeroValues
.nonZeroValues
: a matriz que contém todos os valores não zero na matriz esparsa.numNonZeroValues
: o número de valores não zero na matriz esparsa.sequenceStartFlag
:true
indica que é uma nova sequência.false
significa uma continuação de uma sequência anterior.device
: em qual dispositivo o objeto Value deve ser criado.readOnly
: o valor será somente leitura se esse sinalizador fortrue
.
template <typename ElementType> static ValuePtr CNTK::Value::CreateSequence(size_t dimension, size_t sequenceLength, const SparseIndexType* colStarts, const SparseIndexType* rowIndices, const ElementType* nonZeroValues, size_t numNonZeroValues, const DeviceDescriptor& device, bool readOnly = false
Cria um novo objeto Value que contém uma sequência de exemplos usando o formato de entrada esparso CSC. O comprimento da sequência é o número de linhas da matriz esparsa. A sequência criada é uma nova sequência. ElementType
é o tipo de dados do objeto Value criado. Atualmente, float
e double
há suporte.
Parâmetros:
dimension
: o tamanho da dimensão do vetor único.sequenceLength
: o comprimento da sequência, que também é o número de linhas na matriz esparsa.colStarts
: a matriz contém índices para cada coluna nas matrizesrowIndices
enonZeroValues
.rowIndices
: a matriz que contém os índices de linha dos elementos correspondentes na matriznonZeroValues
.nonZeroValues
: a matriz que contém todos os valores não zero na matriz esparsa.numNonZeroValues
: o número de valores não zero na matriz esparsa.device
: em qual dispositivo o objeto Value deve ser criado.readOnly
: o valor será somente leitura se esse sinalizador fortrue
.
template <typename ElementType> static ValuePtr CNTK::Value::CreateSequence(size_t dimension, size_t sequenceLength, const SparseIndexType* colStarts, const SparseIndexType* rowIndices, const ElementType* nonZeroValues, size_t numNonZeroValues, bool sequenceStartFlag, const DeviceDescriptor& device, bool readOnly = false
Cria um novo objeto Value que contém uma sequência de exemplos usando o formato de entrada esparso CSC. O comprimento da sequência é o número de linhas da matriz esparsa. O sequenceStartFlag especifica se essa sequência é uma nova sequência ou continuação de uma sequência anterior. ElementType
é o tipo de dados do objeto Value criado. Atualmente, float
e double
há suporte.
Parâmetros:
dimension
: o tamanho da dimensão do vetor único.sequenceLength
: o comprimento da sequência, que também é o número de linhas na matriz esparsa.colStarts
: a matriz contém índices para cada coluna nas matrizesrowIndices
enonZeroValues
.rowIndices
: a matriz que contém os índices de linha dos elementos correspondentes na matriznonZeroValues
.nonZeroValues
: a matriz que contém todos os valores não zero na matriz esparsa.numNonZeroValues
: o número de valores não zero na matriz esparsa.sequenceStartFlag
:true
indica que é uma nova sequência.false
significa uma continuação de uma sequência anterior.device
: em qual dispositivo o objeto Value deve ser criado.readOnly
: o valor será somente leitura se esse sinalizador fortrue
.
Criar um valor do NDArrayView
static ValuePtr CNTK::Value::Create(const NDShape& sampleShape, const std::vector<NDArrayViewPtr>& sequences, const DeviceDescriptor& device, bool readOnly = false
Cria um novo objeto Value com base em uma coleção de NDArrayViews. Cada sequência é sequences
uma nova sequência.
Parâmetros:
sampleShape
: a forma tensor do valor que está sendo criado.sequences
: uma coleção de sequências representada pelo NDArrayView. Cada NDArrayView representa uma sequência.device
: em qual dispositivo o objeto Value deve ser criado.readOnly
: o valor será somente leitura se esse sinalizador fortrue
.
static ValuePtr CNTK::Value::Create(const NDShape& sampleShape, const std::vector<NDArrayViewPtr>& sequences, const std::vector<bool>& sequenceStartFlags, const DeviceDescriptor& device, bool readOnly, bool createNewCopy
Cria um novo objeto Value com base em uma coleção de NDArrayViews. O sequenceStartFlags especifica se uma sequência é uma nova sequência ou continuação de uma sequência anterior.
Parâmetros:
sampleShape
: a forma tensor do valor que está sendo criado.sequences
: uma coleção de sequências representada pelo NDArrayView. Cada NDArrayView representa uma sequência.sequenceStartFlags
: uma coleção de valores boolianos. Cada elemento representa se a sequênciasequences
correspondente é uma nova sequência (no caso detrue
) ou uma continuação de uma sequência anterior (no caso defalse
).device
: em qual dispositivo o objeto Value deve ser criado.readOnly
: o valor será somente leitura se esse sinalizador fortrue
.
Copiar dados de um objeto Value
template <typename ElementType> void CNTK::Value::CopyVariableValueTo(const Variable& outputVariable, std::vector<std::vector<ElementType>>& sequences
Copia os dados armazenados no Valor no buffer fornecido por sequences
. É sequences
uma lista de sequências com comprimento variável. O número de itens contidos na lista sequences
externa é o número de sequências no Valor. Cada elemento da lista externa representa uma sequência. Cada sequência, representada por vector<ElementType>
, contém um número variável de amostras. Cada exemplo consiste em um número fixo de elementos com tipo de ElementType
. O número de elementos de uma amostra é determinado pela forma de outputVariable
. A forma da variável deve corresponder à forma do Valor. ElementType
é o tipo de dados do objeto Value criado. Atualmente, float
e double
há suporte.
Parâmetros:
outputVariable
: denota a forma e os eixos dinâmicos ao copiar dados desse valor para osequences
.sequences
: o buffer de saída usado para armazenar os dados copiados do Valor.
void CNTK::Value::CopyVariableValueTo(const Variable& outputVariable, std::vector<std::vector<size_t>>& sequences
Copia os dados armazenados no objeto Value no buffer fornecido por sequences
. É sequences
uma lista de sequências com comprimento variável. O número de itens contidos na lista sequences
externa é o número de sequências no Valor. Cada elemento da lista externa representa uma sequência. Cada sequência, representada por vector<size_t>
, contém um número variável de amostras. Cada exemplo é representado por um índice que aponta para o valor diferente de zero no vetor único. O tamanho da dimensão do vetor de um hot deve corresponder ao definido no outputVariable
.
Parâmetros:
outputVariable
: denota a forma e os eixos dinâmicos ao copiar dados desse valor para osequences
.sequences
: o buffer de saída usado para armazenar os dados copiados do Valor.
template <typename ElementType> void CopyVariableValueTo(const Variable& outputVariable, size_t& sequenceLength, std::vector<SparseIndexType>& colStarts, std::vector<SparseIndexType>& rowIndices, std::vector<ElementType>& nonZeroValues, size_t& numNonZeroValues)
Copie os dados armazenados no objeto Value para os buffers que representam uma sequência no formato esparso CSC. O buffer de sequência será redimensionado, se necessário. O Valor deve ter a mesma forma tensor que outputVariable. No retorno, sequenceLength
é definido como o comprimento da sequência armazenada no Valor ecolStarts
rowIndices
, e nonZeroValues
contém os dados de índices de início de coluna, índices de linha e valores não zero, e numNonZeroValues
é definido como número de valores não zero contidos no this
Valor.
Parâmetros:
outputVariable
: denota a forma e os eixos dinâmicos ao copiar dados desse Valor para os buffers.sequenceLength
: no retorno, ele é definido como o comprimento da sequência armazenada no Valor.colStarts
: no retorno, ele contém índices nononZeorValues
primeiro elemento diferente de zero de cada coluna da matriz.rowIndices
: no retorno, ele contém os índices de linha de cada elemento diferente de zero da matriz.nonZeroValues
: no retorno, ele contém valores de todos os elementos não zero da matriz.numNonZeroValues
: no retorno, ele retorna o número de elementos não zero da matriz.
Funções auxiliares para manipular a Função a ser avaliada
FunctionPtr CNTK::Function::Clone(ParameterCloningMethod parameterCloneMethod = ParameterCloningMethod::Clone, const std::unordered_map<Variable, Variable>& replacements = {}) const
Para avaliação, esse método é chamado para criar uma função clonada que pode ser usada por outro thread para avaliar o mesmo modelo. Para essa finalidade, o parameterCloneMethod
valor deve ser definido como padrão ParameterCloningMethod::Share
. O parâmetro replacements
especifica quaisquer substituições de variáveis aplicadas na instância de Função clonada e geralmente não é necessário para avaliação.
FunctionPtr CNTK::Function::FindByName(const std::wstring& name, bool nestedSearchInsideBlockFunction = false
Localize uma função com a determinada name
no grafo de função subjacente à função 'this'. Se houver mais de uma função com o mesmo nome, uma exceção será gerada. Se nestedSearchInsideBlockFunction
for verdadeiro, todas as funções dentro das funções de bloco também serão pesquisadas.
std::vector<FunctionPtr> CNTK::Function::FindAllWithName(const std::wstring& name, bool nestedSearchInsideBlockFunction = false
Localize uma lista de funções com o determinado name
no grafo de função subjacente a 'this' Function. Se nestedSearchInsideBlockFunction
for verdadeiro, todas as funções dentro das funções de bloco também serão pesquisadas.
FunctionPtr CNTK::Combine(const std::vector<Variable>& operands, const std::wstring& name = L""
Crie uma nova instância de função que combine as saídas da lista especificada de 'operandos' do Functions. As 'Saídas' da nova 'Função' são a união das 'Saídas' de cada uma das Funções 'operandos' especificadas. Por exemplo, ao criar um modelo de classificação, normalmente a Função de perda CrossEntropy e a Função ClassificationError compõem as raízes do grafo de computação que pode ser "Combinar"d para criar uma única Função com 2 saídas; Viz. Perda de CrossEntropy e saída ClassificationError.
FunctionPtr CNTK::AsComposite(const FunctionPtr& rootFunction, const std::wstring& name = L""
Cria uma função composta que tem a especificada rootFunction
como sua raiz. A composição denota uma função de nível superior encapsulando todo o grafo de funções subjacentes ao especificado rootFunction
.
FunctionPtr CNTK::Alias(const Variable& operand, const std::wstring& name = L""
Cria uma nova instância de Função que é apenas um alias do especificado operand
.
Consulte CNTKLibrary.h para obter detalhes dos tipos de dados usados pelas funções acima.
Exemplos
Os exemplos CNTKLibraryCPPEvalCPUOnlyExamples e CNTKLibraryCPPEvalGPUExamples demonstram o uso da Biblioteca de CNTK para avaliação. Os exemplos também mostram como fazer várias avaliações em paralelo usando vários threads e compartilhar parâmetros de modelo entre threads.