EvalDLL C++ API
Det finns ett internt gränssnitt för utvärdering av modeller utan att kräva dataläsare eller datafiler. Det här gränssnittet implementeras i C++ i Cntk.Eval
DLL i Windows respektive libCntk.Eval
i Linux. DLLCntk.Eval
:en används i sin tur också av EvalWrapper
sammansättningen (som tillhandahåller ett hanterat lager) i Windows.
Det interna gränssnittsnamnet är följande:
template <typename ElemType> class IEvaluateModel
Var ElemType
är elementtypen (float
eller double
).
Det här gränssnittet innehåller följande metoder:
void Init(const std::string& config)
Den här metoden initierar utvärderingsmotorn med den angivna konfigurationsfilen. Posterna från konfigurationsfilen parsas och tilldelas till utvärderingsmotorn, men nätverket skapas inte i det här anropet. Dessutom kommer den numCPUThreads
här metoden som standard egenskapen till 1
, såvida inte konfigurationsfilen innehåller ett annat värde för den här egenskapen.
void CreateNetwork(const std::string& networkDescription)
Den här metoden skapar nätverket från antingen nätverksbeskrivningen i konfigurationsfilen eller om modelPath
attributet har angetts läser den in modellen från disken.
networkDescription
: innehåller beskrivningen av nätverket, antingen via en NetworkBuilder-post för ett modelPath-attribut.
void GetNodeDimensions(std::map<std::wstring, size_t>& dimensions, NodeGroup nodeGroup)
Den här metoden fyller en ordlista med dimensioner, där varje dimensionsobjekt mappar lagernamnet (nyckeln) till dimensionsstorleken. Nodgruppen definieras via NodeGroup
uppräkningen:
enum NodeGroup
{
nodeInput, // an input node
nodeOutput, // an output node
nodeSpecified
};
void StartEvaluateMinibatchLoop(const std::wstring& outputNodeName)
De här metoderna förbereder nätverket för Utvärdera anrop.
outputNodeName
: namnet på noden som ska utvärderas
void Evaluate(std::map<std::wstring, std::vector<ElemType>*>& inputs, std::map<std::wstring, std::vector<ElemType>*>& outputs)
Den här metoden utvärderar nätverket med de angivna indata och hämtar flera utdatalager.
inputs
: ordlistan mappar indatalagernamn till värden som ska användas som indata till nätverket.outputs
: ordlistan mappar utdatalagernamn till värden som ska hämtas från nätverket.
void Evaluate(std::map<std::wstring, std::vector<ElemType>*>& outputs)`
Den här metoden utvärderar nätverket som hämtar flera utdatalager. Utvärderingen är ett pass med en enda vidarebefordran som utvärderar utdatanoderna.
outputs
: ordlistan mappar utdatalagernamn till värden som ska hämtas från nätverket.
void Destroy()
Frigör resurser som allokerats när nätverket skapas.
Det finns två implementeringar av det här gränssnittet som är tillgängliga för klienten:
IEvaluateModelF : IEvaluateModel<float> // Assumes data elements of type float
och
IEvaluateModelD : IEvaluateModel<double> // Assumes data elements of type double
Exempel
CPPEvalClient-programmet i mappen Examples/Evaluation/LegacyEvalDll/CPPEvalClient visar användningen av det här utvärderingsgränssnittet.