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.