Freigeben über


EvalDLL C++-API

Es gibt eine native Schnittstelle, die für die Auswertung von Modellen verfügbar ist, ohne dass eine Datenlese- oder Datendatei erforderlich ist. Diese Schnittstelle wird in C++ innerhalb der Cntk.Eval DLL in Windows und libCntk.Eval in Linux implementiert. Die Cntk.Eval DLL wird wiederum von der EvalWrapper Assembly (die eine verwaltete Ebene bereitstellt) in Windows verwendet.

Der Name der nativen Schnittstelle ist folgendes:

template <typename ElemType> class IEvaluateModel

Wo ElemType befindet sich der Elementtyp (float oder double).

Diese Schnittstelle stellt die folgenden Methoden bereit:


void Init(const std::string& config)

Diese Methode initialisiert das Auswertungsmodul mit der angegebenen Konfigurationsdatei. Die Einträge aus der Konfigurationsdatei werden analysiert und dem Auswertungsmodul zugewiesen, das Netzwerk wird jedoch nicht innerhalb dieses Aufrufs erstellt. Darüber hinaus wird diese Methode standardmäßig die Eigenschaft festlegen, es sei denn, die numCPUThreads Konfigurationsdatei enthält einen anderen Wert für diese Eigenschaft 1.


void CreateNetwork(const std::string& networkDescription)

Diese Methode erstellt das Netzwerk entweder aus der Netzwerkbeschreibung in der Konfigurationsdatei oder wenn das modelPath Attribut angegeben wird, lädt das Modell aus dem Datenträger.

  • networkDescription : enthält die Beschreibung des Netzwerks, entweder über einen NetworkBuilder-Eintrag eines ModelPath-Attributs.

void GetNodeDimensions(std::map<std::wstring, size_t>& dimensions, NodeGroup nodeGroup)

Diese Methode füllt ein Wörterbuch der Dimensionen, wobei jedes Dimensionelement den Layernamen (Schlüssel) der Dimensionsgröße zugeordnet. Die Knotengruppe wird über die NodeGroup Aufzählung definiert:

    enum NodeGroup     
    {      
        nodeInput,  // an input node     
        nodeOutput, // an output node     
        nodeSpecified     
    };

void StartEvaluateMinibatchLoop(const std::wstring& outputNodeName)

Diese Methoden bereiten das Netzwerk für Werteaufrufe vor.

  • outputNodeName : der Name des Knotens, der ausgewertet wird

void Evaluate(std::map<std::wstring, std::vector<ElemType>*>& inputs, std::map<std::wstring, std::vector<ElemType>*>& outputs)

Diese Methode bewertet das Netzwerk mithilfe der bereitgestellten Eingabe und ruft mehrere Ausgabeebenen ab.

  • inputs : Die Wörterbuchzuordnung von Eingabeebenennamen zu Werten, die als Eingabe für das Netzwerk verwendet werden sollen.
  • outputs : Die Wörterbuchzuordnung von Ausgabeschichtnamen zu Werten, die vom Netzwerk abgerufen werden sollen.

void Evaluate(std::map<std::wstring, std::vector<ElemType>*>& outputs)`

Diese Methode ausgewertet das Netzwerk, das mehrere Ausgabeebenen abruft. Die Auswertung ist ein Einzelweiterlauf, der die Ausgabeknoten auswertet.

  • outputs : Die Wörterbuchzuordnung von Ausgabeschichtnamen zu Werten, die vom Netzwerk abgerufen werden sollen.

void Destroy()

Veröffentlicht Ressourcen, die während der Netzwerkerstellung zugewiesen wurden.


Es gibt zwei Implementierungen dieser Schnittstelle, die dem Client zur Verfügung steht:

IEvaluateModelF : IEvaluateModel<float> // Assumes data elements of type float

und

IEvaluateModelD : IEvaluateModel<double> // Assumes data elements of type double

Beispiel

Das CPPEvalClient-Programm im Ordner "Beispiele/Auswertung/LegacyEvalDll/CPPEvalClient " veranschaulicht die Verwendung dieser Auswertungsschnittstelle.