EvalDLL C++ API
Il existe une interface native disponible pour évaluer les modèles sans nécessiter de lecteur de données ou de fichiers de données. Cette interface est implémentée en C++ à l’intérieur de la Cntk.Eval
DLL dans Windows et libCntk.Eval
dans Linux respectivement. La Cntk.Eval
DLL à son tour est également utilisée par l’assembly EvalWrapper
(qui fournit une couche managée) dans Windows.
Le nom de l’interface native est le suivant :
template <typename ElemType> class IEvaluateModel
Où ElemType
est le type d’élément (float
ou double
).
Cette interface fournit les méthodes suivantes :
void Init(const std::string& config)
Cette méthode initialise le moteur d’évaluation avec le fichier de configuration spécifié. Les entrées du fichier de configuration sont analysées et affectées au moteur d’évaluation, mais le réseau n’est pas créé à l’intérieur de cet appel. En outre, cette méthode a pour valeur par défaut la numCPUThreads
propriété 1
, sauf si le fichier de configuration contient une valeur différente pour cette propriété.
void CreateNetwork(const std::string& networkDescription)
Cette méthode génère le réseau à partir de la description réseau dans le fichier de configuration ou si l’attribut modelPath
est spécifié, il charge le modèle à partir du disque.
networkDescription
: contient la description du réseau, soit par le biais d’une entrée NetworkBuilder d’un attribut modelPath.
void GetNodeDimensions(std::map<std::wstring, size_t>& dimensions, NodeGroup nodeGroup)
Cette méthode remplit un dictionnaire de dimensions, chaque élément de dimension mappant le nom de la couche (clé) à la taille de dimension. Le groupe de nœuds est défini via l’énumération NodeGroup
:
enum NodeGroup
{
nodeInput, // an input node
nodeOutput, // an output node
nodeSpecified
};
void StartEvaluateMinibatchLoop(const std::wstring& outputNodeName)
Cette méthode prépare le réseau pour évaluer les appels.
outputNodeName
: nom du nœud qui sera évalué
void Evaluate(std::map<std::wstring, std::vector<ElemType>*>& inputs, std::map<std::wstring, std::vector<ElemType>*>& outputs)
Cette méthode évalue le réseau à l’aide de l’entrée fournie et récupère plusieurs couches de sortie.
inputs
: le dictionnaire mapper les noms de couche d’entrée aux valeurs à utiliser comme entrée sur le réseau.outputs
: le dictionnaire mapper les noms de couche de sortie aux valeurs à récupérer à partir du réseau.
void Evaluate(std::map<std::wstring, std::vector<ElemType>*>& outputs)`
Cette méthode évalue le réseau qui récupère plusieurs couches de sortie. L’évaluation est une passe à transfert unique qui évalue les nœuds de sortie.
outputs
: le dictionnaire mapper les noms de couche de sortie aux valeurs à récupérer à partir du réseau.
void Destroy()
Libère les ressources allouées lors de la création du réseau.
Il existe deux implémentations de cette interface disponibles pour le client :
IEvaluateModelF : IEvaluateModel<float> // Assumes data elements of type float
et
IEvaluateModelD : IEvaluateModel<double> // Assumes data elements of type double
Exemple
Le programme CPPEvalClient situé dans le dossier Examples/Evaluation/LegacyEvalDll/CPPEvalClient illustre l’utilisation de cette interface d’évaluation.