Biblioteca CNTK Eval C++ API
A Biblioteca de CNTK C++ baseia-se na API da Biblioteca CNTK. Os seguintes métodos são utilizados para avaliar uma modelo.
Carregue um modelo
static FunctionPtr CNTK::Function::Load(const std::wstring& modelFile, const DeviceDescriptor& computeDevice = DeviceDescriptor::UseDefaultDevice()
Este método carrega um ficheiro modelo e devolve o ponteiro à Função que representa o modelo carregado. Uma Função em CNTK denota um gráfico de cálculo composto por funções primitivas ou funções compostas com argumentos de entrada zero ou mais e uma ou mais saídas. É modelFile
o caminho modelo arquivo. O computeDevice
dispositivo especifica o dispositivo para executar a avaliação.
static FunctionPtr CNTK::Function::Load(char *modelBuffer, size_t modelBufferLength, const DeviceDescriptor& computeDevice = DeviceDescriptor::UseDefaultDevice()
Este método carrega um modelo de um tampão de memória e devolve o ponteiro à Função que representa o modelo carregado. Os modelBuffer
pontos para o tampão que contém o conteúdo de modelo serializado, e o modelBufferLength
comprimento do tampão. O computeDevice
dispositivo especifica o dispositivo para executar a 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 this
avaliação da Função que representa o modelo com parâmetros especificados. Contém arguments
valores de todas as variáveis de entrada necessárias para avaliação, e a outputs
loja os valores das variáveis de saída. O armazenamento dos valores de saída pode ser pré-atribuído pelo chamador, ou pelo sistema se o mapeamento ValuePtr for passado como nulo pelo autor da chamada. O computeDevice
dispositivo especifica o dispositivo para executar a avaliação.
Criar um valor usando a 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 contendo um lote de amostras. O número de amostras no lote é o número de elementos divididos batchData
pelo tamanho de (Um erro de sampleShape
tempo de execução ocorre se o restante não for zero). O objeto Valor criado contém uma cópia dos dados especificados em batchData
. ElementType
é o tipo de dados do objeto Valor criado. Atualmente, float
e double
são apoiados.
Parâmetros:
sampleShape
: a forma de tensor do objeto Valor.batchData
: os dados a conter no objeto Valor.device
: em que dispositivo deve ser criado o objeto Valor.readOnly
: o objeto Valor só é lido se esta bandeira 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 contendo uma sequência de amostras. O objeto Valor 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 de (Um erro de sampleShape
tempo de execução ocorre se o restante não for zero). A sequência criada é uma nova sequência. ElementType
é o tipo de dados do objeto Valor criado. Atualmente, float
e double
são apoiados.
Parâmetros:
sampleShape
: a forma de tensor do Valor.sequenceData
: os dados a conter no Valor.device
: em que dispositivo deve ser criado o objeto Valor.readOnly
: o Valor só é lido se esta bandeira 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 contendo uma sequência de amostras. O objeto Valor 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 de (Um erro de sampleShape
tempo de execução ocorre se o restante não for zero). A sequênciaStartFlag especifica se esta 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 a este método. ElementType
é o tipo de dados do objeto Valor criado. Atualmente, float
e double
são apoiados.
Parâmetros:
sampleShape
: a forma de tensor do Valor.sequenceData
: os dados a conter no Valor.sequenceStartFlag
:true
indica que é uma nova sequência.false
significa uma continuação de uma sequência anterior.device
: em que dispositivo deve ser criado o objeto Valor.readOnly
: o Valor só é lido se esta bandeira 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 contendo um lote de sequências de comprimento variável. O objeto Valor 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
tempo de execução ocorre se o restante não for zero). Cada sequência batchOfSequences
é uma nova sequência. ElementType
é o tipo de dados do objeto Valor criado. Atualmente, float
e double
são apoiados.
Parâmetros:
sampleShape
: a forma de tensor do Valor.batchOfSequences
: os dados a armazenar 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 que dispositivo o Valor deve ser criado.readOnly
: o Valor só é lido se esta bandeira 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 contendo um lote de sequências de comprimento variável. O objeto Valor 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
tempo de execução ocorre se o restante não for zero). ElementType
é o tipo de dados do objeto Valor criado. Atualmente, float
e double
são apoiados.
Parâmetros:
sampleShape
: a forma de tensor do Valor.batchOfSequences
: os dados a armazenar 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 boolean. Cada elemento representa se a sequênciabatchOfSequences
correspondente é uma nova sequência (em caso detrue
) ou uma continuação de uma sequência anterior (em caso defalse
).device
: em que dispositivo o Valor deve ser criado.readOnly
: o Valor só é lido se esta bandeira fortrue
.
Criar um valor usando a entrada de vetor de um só quente
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 contendo um lote de amostras. Cada amostra é representada por um valor de índice que aponta para o valor não-zero no vetor de um só quente de dimension
elementos. O número de amostras no lote é o número de elementos em batchData
. ElementType
é o tipo de dados do objeto Valor criado. Atualmente, float
e double
são apoiados.
Parâmetros:
dimension
: o tamanho da dimensão do vetor de um só calor.batchData
: a recolha de índices que representem o lote de amostras.device
: em que dispositivo deve ser criado o objeto Valor.readOnly
: o Valor só é lido se esta bandeira 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 contendo uma sequência de amostras. Cada amostra é representada por um valor de índice que aponta para o valor não-zero no vetor de um só quente de 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 Valor criado. Atualmente, float
e double
são apoiados.
Parâmetros:
dimension
: o tamanho da dimensão do vetor de um só calor.sequenceData
: a recolha de índices que representem a sequência de amostras.device
: em que dispositivo deve ser criado o objeto Valor.readOnly
: o Valor só é lido se esta bandeira 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 contendo uma sequência de amostras. Cada amostra é representada por um valor de índice que aponta para o valor não-zero no vetor de um só quente de dimension
elementos. O seqStartFlag especifica se esta 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 a este método. O comprimento da sequência é o número de elementos em sequenceData
. ElementType
é o tipo de dados do objeto Valor criado. Atualmente, float
e double
são apoiados.
Parâmetros:
dimension
: o tamanho da dimensão do vetor de um só calor.sequenceData
: a recolha de índices que representem a sequência de amostras.sequenceStartFlag
:true
indica que é uma nova sequência.false
significa uma continuação de uma sequência anterior.device
: em que dispositivo deve ser criado o objeto Valor.readOnly
: o Valor só é lido se esta bandeira 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 contendo um lote de sequências de comprimento variável. Cada amostra é representada por um valor de índice que aponta para o valor não-zero no vetor de um só quente de dimension
elementos. O número de sequências é o número de elementos na lista exterior 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 Valor criado. Atualmente, float
e double
são apoiados.
Parâmetros:
dimension
: o tamanho da dimensão do vetor de um só calor.batchOfSequences
: a recolha de índices que representam sequências de amostras. O exteriorvector
representa uma coleção de sequências com comprimento variável, e o interiorvector
representa cada sequência individual.device
: em que dispositivo deve ser criado o objeto Valor.readOnly
: o Valor só é lido se esta bandeira 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 contendo um lote de sequências de comprimento variável. Cada amostra é representada por um valor de índice que aponta para o valor não-zero no vetor de um só quente de dimension
elementos. O número de sequências é o número de elementos na lista exterior 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 Valor criado. Atualmente, float
e double
são apoiados.
Parâmetros:
dimension
: o tamanho da dimensão do vetor de um só calor.batchOfSequences
: a recolha de índices que representam sequências de amostras. 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 boolean. Cada elemento representa se a sequênciabatchOfSequences
correspondente é uma nova sequência (em caso detrue
) ou uma continuação de uma sequência anterior (em caso defalse
).device
: em que dispositivo deve ser criado o objeto Valor.readOnly
: o Valor só é lido se esta bandeira fortrue
.
Criar um Valor utilizando uma entrada CSC escassa
Atualmente, o Formato da Coluna Sparse Comprimida (CSC) é suportado. O formato CSC armazena a matriz em formato de coluna-grande, e a matriz que contém os índices de coluna é comprimido. Uma matriz no formato CSC é representada pelos seguintes parâmetros:
nonZeroValues
: a matriz de dados que detém todos os valores não zero da matriz em formato coluna-major.rowIndices
: a matriz que contém os índices de linha dos elementos correspondentes na matriznonZeroValues
.colStarts
: a matriz que mantém os í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 contendo uma sequência de amostras utilizando o formato de entrada escasso do CSC. O comprimento da sequência é o número de linhas da matriz escassa. A sequência criada é uma nova sequência. ElementType
é o tipo de dados do objeto Valor criado. Atualmente, float
e double
são apoiados.
Parâmetros:
sampleShape
: a forma de tensor do Valor. Para uma entrada escassa, a modelar a dimensão líder da forma do tensor deve ser a mesma do tamanho total da forma do tensor.sequenceLength
: o comprimento da sequência, que é também o número de linhas na matriz escassa.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 detém todos os valores não zero na matriz escassa.numNonZeroValues
: o número de valores não zero na matriz escassa.device
: em que dispositivo deve ser criado o objeto Valor.readOnly
: o Valor só é lido se esta bandeira 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 contendo uma sequência de amostras utilizando o formato de entrada escasso do CSC. O comprimento da sequência é o número de linhas da matriz escassa. A sequênciaStartFlag especifica se esta sequência é uma nova sequência ou continuação de uma sequência anterior de uma chamada anterior a este método. ElementType
é o tipo de dados do objeto Valor criado. Atualmente, float
e double
são apoiados.
Parâmetros:
sampleShape
: a forma de tensor do Valor. Para uma entrada escassa, a modelar a dimensão líder da forma do tensor deve ser a mesma do tamanho total da forma do tensor.sequenceLength
: o comprimento da sequência, que é também o número de linhas na matriz escassa.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 detém todos os valores não zero na matriz escassa.numNonZeroValues
: o número de valores não zero na matriz escassa.sequenceStartFlag
:true
indica que é uma nova sequência.false
significa uma continuação de uma sequência anterior.device
: em que dispositivo deve ser criado o objeto Valor.readOnly
: o Valor só é lido se esta bandeira 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 contendo uma sequência de amostras utilizando o formato de entrada escasso do CSC. O comprimento da sequência é o número de linhas da matriz escassa. A sequência criada é uma nova sequência. ElementType
é o tipo de dados do objeto Valor criado. Atualmente, float
e double
são apoiados.
Parâmetros:
dimension
: o tamanho da dimensão do vetor de um só calor.sequenceLength
: o comprimento da sequência, que é também o número de linhas na matriz escassa.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 detém todos os valores não zero na matriz escassa.numNonZeroValues
: o número de valores não zero na matriz escassa.device
: em que dispositivo deve ser criado o objeto Valor.readOnly
: o Valor só é lido se esta bandeira 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 contendo uma sequência de amostras utilizando o formato de entrada escasso do CSC. O comprimento da sequência é o número de linhas da matriz escassa. A sequênciaStartFlag especifica se esta sequência é uma nova sequência ou continuação de uma sequência anterior. ElementType
é o tipo de dados do objeto Valor criado. Atualmente, float
e double
são apoiados.
Parâmetros:
dimension
: o tamanho da dimensão do vetor de um só calor.sequenceLength
: o comprimento da sequência, que é também o número de linhas na matriz escassa.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 detém todos os valores não zero na matriz escassa.numNonZeroValues
: o número de valores não zero na matriz escassa.sequenceStartFlag
:true
indica que é uma nova sequência.false
significa uma continuação de uma sequência anterior.device
: em que dispositivo deve ser criado o objeto Valor.readOnly
: o Valor só é lido se esta bandeira fortrue
.
Criar um valor a partir 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 baseado numa coleção de NDArrayViews. Cada sequência sequences
é uma nova sequência.
Parâmetros:
sampleShape
: a forma de tensor do Valor que está a ser criado.sequences
: uma coleção de sequências representadas pelo NDArrayView. Cada NDArrayView representa uma sequência.device
: em que dispositivo deve ser criado o objeto Valor.readOnly
: o Valor só é lido se esta bandeira 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 baseado numa coleção de NDArrayViews. A sequênciaStartFlags especifica se uma sequência é uma nova sequência ou continuação de uma sequência anterior.
Parâmetros:
sampleShape
: a forma de tensor do Valor que está a ser criado.sequences
: uma coleção de sequências representadas pelo NDArrayView. Cada NDArrayView representa uma sequência.sequenceStartFlags
: Uma coleção de valores boolean. Cada elemento representa se a sequênciasequences
correspondente é uma nova sequência (em caso detrue
) ou uma continuação de uma sequência anterior (em caso defalse
).device
: em que dispositivo deve ser criado o objeto Valor.readOnly
: o Valor só é lido se esta bandeira fortrue
.
Copiar dados de um objeto de valor
template <typename ElementType> void CNTK::Value::CopyVariableValueTo(const Variable& outputVariable, std::vector<std::vector<ElementType>>& sequences
Copia os dados armazenados no Valor no tampão fornecido por sequences
. É sequences
uma lista de sequências com comprimento variável. O número de itens contidos na lista sequences
exterior é o número de sequências no Valor. Cada elemento da lista exterior representa uma sequência. Cada sequência, representada por vector<ElementType>
, contém um número variável de amostras. Cada amostra consiste num 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 Valor criado. Atualmente, float
e double
são apoiados.
Parâmetros:
outputVariable
: denota a forma e os eixos dinâmicos ao copiar dados deste Valor para osequences
.sequences
: o tampão de saída utilizado 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 Valor no tampão fornecido por sequences
. É sequences
uma lista de sequências com comprimento variável. O número de itens contidos na lista sequences
exterior é o número de sequências no Valor. Cada elemento da lista exterior representa uma sequência. Cada sequência, representada por vector<size_t>
, contém um número variável de amostras. Cada amostra é representada por um índice que aponta para o valor não zero no vetor de um só hot. O tamanho do vetor de uma única altura deve corresponder ao definido no outputVariable
.
Parâmetros:
outputVariable
: denota a forma e os eixos dinâmicos ao copiar dados deste Valor para osequences
.sequences
: o tampão de saída utilizado 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 Valor para os tampão que representam uma sequência no formato escasso do CSC. O tampão de sequência será redimensionado se necessário. O Valor deve ter a mesma forma de tensor que a saída Variabilidade. No retorno, sequenceLength
é definido para o comprimento da sequência armazenada no Valor, e colStarts
contém rowIndices
nonZeroValues
os dados dos índices de arranque da coluna, índices de linha e valores não nulos, e numNonZeroValues
é definido para um número de valores não nus contidos no this
Valor.
Parâmetros:
outputVariable
: denota a forma e os eixos dinâmicos ao copiar dados deste Valor para os tampões.sequenceLength
: no retorno, é definido ao comprimento da sequência armazenada no Valor.colStarts
: no retorno, contém índices nononZeorValues
primeiro elemento não-zero de cada coluna da matriz.rowIndices
: no retorno, contém os índices de linha de cada elemento não-zero da matriz.nonZeroValues
: no retorno, contém valores de todos os elementos não nulos da matriz.numNonZeroValues
: no retorno, devolve o número de elementos não nulos da matriz.
Funções do ajudante para manipular a Função a avaliar
FunctionPtr CNTK::Function::Clone(ParameterCloningMethod parameterCloneMethod = ParameterCloningMethod::Clone, const std::unordered_map<Variable, Variable>& replacements = {}) const
Para avaliação, este método é chamado para criar uma Função clonada que pode ser usada por outro fio para avaliar o mesmo modelo. Para o efeito, o deve ser definido para o parameterCloneMethod
seu valor ParameterCloningMethod::Share
predefinido . O parâmetro replacements
especifica quaisquer substituições variáveis que são 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
Encontre uma função com o dado name
no gráfico de função subjacente à função 'this' Função. Se existir mais de uma função com o mesmo nome, é lançada uma exceção. Se nestedSearchInsideBlockFunction
for verdade, todas as funções dentro do bloco também são pesquisadas.
std::vector<FunctionPtr> CNTK::Function::FindAllWithName(const std::wstring& name, bool nestedSearchInsideBlockFunction = false
Encontre uma lista de funções com o dado name
no gráfico de função subjacente à função 'esta' Função. Se nestedSearchInsideBlockFunction
for verdade, todas as funções dentro do bloco também sã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 'operands' de Funções. As 'Saídas' da nova 'Função' são a união das 'Saídas' de cada uma das funções 'operands' especificadas. Como exemplo, ao criar uma classificação modelo, tipicamente a Função de Perda de CrossEntropy e a Função ClassificaçãoError compreendem as raízes do gráfico de cálculo que pode ser "Combine"d para criar uma única Função com 2 saídas; viz. Perda de CrossEntropy e saída do ClassificationError.
FunctionPtr CNTK::AsComposite(const FunctionPtr& rootFunction, const std::wstring& name = L""
Cria uma função composta que tem a especificada rootFunction
como raiz. O composto denota uma função de nível superior que encapsula todo o gráfico de funções subjacentes à especificada rootFunction
.
FunctionPtr CNTK::Alias(const Variable& operand, const std::wstring& name = L""
Cria uma nova instância de função que é apenas um pseudónimo do especificado operand
.
Consulte cNTKLibrary.h para obter detalhes sobre os tipos de dados utilizados pelas funções acima.
Exemplos
Os exemplos CNTKLibraryCPPEvalCPUOnlyExamples e CNTKLibraryCPPEvalGPUExamples demonstram o uso de CNTK Biblioteca para avaliação. As amostras também mostram como fazer múltiplas avaliações em paralelo usando múltiplos fios e compartilhando modelo parâmetros entre os fios.