EvalDLL C++ API
Hay una interfaz nativa disponible para evaluar modelos sin necesidad de un lector de datos o archivos de datos. Esta interfaz se implementa en C++ dentro del Cntk.Eval
archivo DLL en Windows y libCntk.Eval
en Linux, respectivamente. A Cntk.Eval
su vez, el ensamblado usa el EvalWrapper
archivo DLL (que proporciona una capa administrada) en Windows.
El nombre de la interfaz nativa es el siguiente:
template <typename ElemType> class IEvaluateModel
Donde ElemType
es el tipo de elemento (float
o double
).
Esta interfaz proporciona los métodos siguientes:
void Init(const std::string& config)
Este método inicializa el motor de evaluación con el archivo de configuración especificado. Las entradas del archivo de configuración se analizan y se asignan al motor de evaluación; sin embargo, la red no se crea dentro de esta llamada. Además, este método usará de forma predeterminada la numCPUThreads
propiedad en , a 1
menos que el archivo de configuración contenga un valor diferente para esta propiedad.
void CreateNetwork(const std::string& networkDescription)
Este método compila la red a partir de la descripción de red en el archivo de configuración o, si se especifica el modelPath
atributo, carga el modelo desde el disco.
networkDescription
: contiene la descripción de la red, ya sea a través de una entrada NetworkBuilder de un atributo modelPath.
void GetNodeDimensions(std::map<std::wstring, size_t>& dimensions, NodeGroup nodeGroup)
Este método rellena un diccionario de dimensiones, con cada elemento de dimensión que asigna el nombre de la capa (clave) al tamaño de dimensión. El grupo de nodos se define mediante la NodeGroup
enumeración :
enum NodeGroup
{
nodeInput, // an input node
nodeOutput, // an output node
nodeSpecified
};
void StartEvaluateMinibatchLoop(const std::wstring& outputNodeName)
Este método prepara la red para evaluar las llamadas.
outputNodeName
: el nombre del nodo que se evaluará.
void Evaluate(std::map<std::wstring, std::vector<ElemType>*>& inputs, std::map<std::wstring, std::vector<ElemType>*>& outputs)
Este método evalúa la red mediante la entrada proporcionada y recupera varias capas de salida.
inputs
: el diccionario asigna los nombres de capa de entrada a los valores que se van a usar como entrada en la red.outputs
: el diccionario asigna los nombres de capa de salida a los valores que se van a recuperar de la red.
void Evaluate(std::map<std::wstring, std::vector<ElemType>*>& outputs)`
Este método evalúa la red que recupera varias capas de salida. La evaluación es un paso de avance único que evalúa los nodos de salida.
outputs
: el diccionario asigna los nombres de capa de salida a los valores que se van a recuperar de la red.
void Destroy()
Libera los recursos asignados durante la creación de la red.
Hay dos implementaciones de esta interfaz disponibles para el cliente:
IEvaluateModelF : IEvaluateModel<float> // Assumes data elements of type float
y
IEvaluateModelD : IEvaluateModel<double> // Assumes data elements of type double
Ejemplo
El programa CPPEvalClient ubicado en la carpeta Examples/Evaluation/LegacyEvalDll/CPPEvalClient muestra el uso de esta interfaz de evaluación.