Partager via


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

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.