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, 1
a 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.