Partilhar via


EvalDLL C++ API

Existe uma interface nativa disponível para avaliar modelos sem necessitar de um leitor de dados ou ficheiros de dados. Esta interface é implementada em C++ dentro do Cntk.Eval DLL em Windows e libCntk.Eval em Linux, respectivamente. O Cntk.Eval DLL, por sua vez, também é utilizado pelo EvalWrapper conjunto (que fornece uma camada gerida) em Windows.

O nome da interface nativa é o seguinte:

template <typename ElemType> class IEvaluateModel

Onde ElemType está o tipo de elemento (float ou double.

Esta interface fornece os seguintes métodos:


void Init(const std::string& config)

Este método inicializa o motor de avaliação com o ficheiro de configuração especificado. As entradas do ficheiro de configuração são analisadas e atribuídas ao motor de avaliação, no entanto, a rede não é criada dentro desta chamada. Além disso, este método irá predefinição da numCPUThreads propriedade para 1, a menos que o ficheiro de configuração contenha um valor diferente para esta propriedade.


void CreateNetwork(const std::string& networkDescription)

Este método constrói a rede a partir da descrição da rede no ficheiro de configuração, ou se o modelPath atributo for especificado, carrega a modelo do disco.

  • networkDescription : contém a descrição da rede, seja através de uma entrada NetworkBuilder de um atributo modelPath.

void GetNodeDimensions(std::map<std::wstring, size_t>& dimensions, NodeGroup nodeGroup)

Este método preenche um dicionário de dimensões, com cada item de dimensão mapeando o nome da camada (chave) para o tamanho da dimensão. O grupo de nó é definido através da NodeGroup enumeração:

    enum NodeGroup     
    {      
        nodeInput,  // an input node     
        nodeOutput, // an output node     
        nodeSpecified     
    };

void StartEvaluateMinibatchLoop(const std::wstring& outputNodeName)

Estes métodos preparam a rede para avaliar chamadas.

  • outputNodeName : o nome do nó que será avaliado

void Evaluate(std::map<std::wstring, std::vector<ElemType>*>& inputs, std::map<std::wstring, std::vector<ElemType>*>& outputs)

Este método avalia a rede utilizando a entrada fornecida e recupera várias camadas de saída.

  • inputs : o dicionário mapeamento de nomes da camada de entrada para valores a utilizar como entrada na rede.
  • outputs : a camada de saída de mapeamento do dicionário dá nomes aos valores a recuperar da rede.

void Evaluate(std::map<std::wstring, std::vector<ElemType>*>& outputs)`

Este método avalia a rede recuperando várias camadas de saída. A avaliação é um passe único para a frente avaliando os nós de saída.

  • outputs : a camada de saída de mapeamento do dicionário dá nomes aos valores a recuperar da rede.

void Destroy()

Liberta recursos atribuídos durante a criação de rede.


Existem duas implementações desta interface disponíveis para o cliente:

IEvaluateModelF : IEvaluateModel<float> // Assumes data elements of type float

e

IEvaluateModelD : IEvaluateModel<double> // Assumes data elements of type double

Exemplo

O programa CPPEvalClient localizado na pasta Exemplos/Avaliação/LegacyEvalDll/CPPEvalClient demonstra o uso desta interface de avaliação.