Compartilhar via


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 for true.

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 for true.

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 for true.

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 exterior vector representa uma coleção de sequências com comprimento variável e o interior vector representa cada sequência individual.
  • device: em qual dispositivo o Valor deve ser criado.
  • readOnly: o valor será somente leitura se esse sinalizador for true.

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 exterior vector representa uma coleção de sequências com comprimento variável e o interior vector representa cada sequência individual.
  • sequenceStartFlags: uma coleção de valores boolianos. Cada elemento representa se a sequência batchOfSequences correspondente é uma nova sequência (no caso de true) ou uma continuação de uma sequência anterior (no caso de false).
  • device: em qual dispositivo o Valor deve ser criado.
  • readOnly: o valor será somente leitura se esse sinalizador for true.

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 for true.

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 for true.

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 for true.

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 exterior vector representa uma coleção de sequências com comprimento variável e o interior vector representa cada sequência individual.
  • device: em qual dispositivo o objeto Value deve ser criado.
  • readOnly: o valor será somente leitura se esse sinalizador for true.

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 exterior vector representa uma coleção de sequências com comprimento variável e o interior vector representa cada sequência individual.
  • sequenceStartFlags: uma coleção de valores boolianos. Cada elemento representa se a sequência batchOfSequences correspondente é uma nova sequência (no caso de true) ou uma continuação de uma sequência anterior (no caso de false).
  • device: em qual dispositivo o objeto Value deve ser criado.
  • readOnly: o valor será somente leitura se esse sinalizador for true.

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 matriz nonZeroValues.
  • colStarts: a matriz que contém índices nas matrizes rowIndices e nonZeroValues.

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 matrizes rowIndices e nonZeroValues.
  • rowIndices: a matriz que contém os índices de linha dos elementos correspondentes na matriz nonZeroValues.
  • 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 for true.

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 matrizes rowIndices e nonZeroValues.
  • rowIndices: a matriz que contém os índices de linha dos elementos correspondentes na matriz nonZeroValues.
  • 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 for true.

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 matrizes rowIndices e nonZeroValues.
  • rowIndices: a matriz que contém os índices de linha dos elementos correspondentes na matriz nonZeroValues.
  • 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 for true.

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 matrizes rowIndices e nonZeroValues.
  • rowIndices: a matriz que contém os índices de linha dos elementos correspondentes na matriz nonZeroValues.
  • 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 for true.

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 for true.

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ência sequences correspondente é uma nova sequência (no caso de true) ou uma continuação de uma sequência anterior (no caso de false).
  • device: em qual dispositivo o objeto Value deve ser criado.
  • readOnly: o valor será somente leitura se esse sinalizador for true.

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 o sequences.
  • 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 o sequences.
  • 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 ecolStartsrowIndices, 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 no nonZeorValues 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.