Compartilhar via


EvalDLL C++ API

Há uma interface nativa disponível para avaliar modelos sem exigir um leitor de dados ou arquivos de dados. Essa interface é implementada em C++ dentro da Cntk.Eval DLL no Windows e libCntk.Eval no Linux, respectivamente. A Cntk.Eval DLL, por sua vez, também é usada pelo EvalWrapper assembly (que fornece uma camada gerenciada) em Windows.

O nome da interface nativa é o seguinte:

template <typename ElemType> class IEvaluateModel

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

Essa interface fornece os seguintes métodos:


void Init(const std::string& config)

Esse método inicializa o mecanismo de avaliação com o arquivo de configuração especificado. As entradas do arquivo de configuração são analisadas e atribuídas ao mecanismo de avaliação, no entanto, a rede não é criada dentro dessa chamada. Além disso, esse método usará como padrão a numCPUThreads propriedade, 1a menos que o arquivo de configuração contenha um valor diferente para essa propriedade.


void CreateNetwork(const std::string& networkDescription)

Esse método cria a rede a partir da descrição da rede no arquivo de configuração ou, se o modelPath atributo for especificado, ele carregará o modelo do disco.

  • networkDescription : contém a descrição da rede, por meio de uma entrada networkbuilder de um atributo modelPath.

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

Esse 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ós é definido por meio da NodeGroup enumeração:

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

void StartEvaluateMinibatchLoop(const std::wstring& outputNodeName)

Esses métodos preparam a rede para chamadas de Avaliação.

  • 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)

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

  • inputs : o dicionário mapeando nomes de camada de entrada para valores a serem usados como entrada para a rede.
  • outputs : o dicionário mapeando nomes de camada de saída para valores a serem recuperados da rede.

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

Esse método avalia a rede que recupera várias camadas de saída. A avaliação é um passe de avanço único avaliando os nós de saída.

  • outputs : o dicionário mapeando nomes de camada de saída para valores a serem recuperados da rede.

void Destroy()

Libera recursos alocados durante a criação da rede.


Há duas implementações dessa 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 Examples/Evaluation/LegacyEvalDll/CPPEvalClient demonstra o uso dessa interface de avaliação.