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.