EvalDLL C++ API
Er is een systeemeigen interface beschikbaar voor het evalueren van modellen zonder dat hiervoor een gegevenslezer of gegevensbestand nodig is. Deze interface wordt geïmplementeerd in C++ in het Cntk.Eval
DLL-bestand in respectievelijk Windows en libCntk.Eval
in Linux. Het Cntk.Eval
DLL-bestand wordt ook gebruikt door de EvalWrapper
assembly (die een beheerde laag biedt) in Windows.
De systeemeigen interfacenaam is het volgende:
template <typename ElemType> class IEvaluateModel
Waar ElemType
is het elementtype (float
of double
).
Deze interface biedt de volgende methoden:
void Init(const std::string& config)
Met deze methode wordt de evaluatie-engine geïnitialiseerd met het opgegeven configuratiebestand. De vermeldingen uit het configuratiebestand worden geparseerd en toegewezen aan de evaluatie-engine, maar het netwerk wordt niet gemaakt in deze aanroep. Daarnaast wordt de numCPUThreads
eigenschap 1
standaard ingesteld op deze methode, tenzij het configuratiebestand een andere waarde voor deze eigenschap bevat.
void CreateNetwork(const std::string& networkDescription)
Met deze methode wordt het netwerk gebouwd op basis van de netwerkbeschrijving in het configuratiebestand of als het modelPath
kenmerk is opgegeven, wordt het model vanaf schijf geladen.
networkDescription
: bevat de beschrijving van het netwerk, hetzij via een NetworkBuilder-vermelding van een modelPath-kenmerk.
void GetNodeDimensions(std::map<std::wstring, size_t>& dimensions, NodeGroup nodeGroup)
Met deze methode wordt een woordenlijst met dimensies ingevuld, waarbij elk dimensie-item de laagnaam (sleutel) toedeelt aan de dimensiegrootte. De knooppuntgroep wordt gedefinieerd via de NodeGroup
opsomming:
enum NodeGroup
{
nodeInput, // an input node
nodeOutput, // an output node
nodeSpecified
};
void StartEvaluateMinibatchLoop(const std::wstring& outputNodeName)
Met deze methoden wordt het netwerk voorbereid op Evaluate-aanroepen.
outputNodeName
: de naam van het knooppunt dat wordt geëvalueerd
void Evaluate(std::map<std::wstring, std::vector<ElemType>*>& inputs, std::map<std::wstring, std::vector<ElemType>*>& outputs)
Met deze methode wordt het netwerk geëvalueerd met behulp van de opgegeven invoer en worden meerdere uitvoerlagen opgehaald.
inputs
: de namen van invoerlagen toewijzen aan waarden die moeten worden gebruikt als invoer voor het netwerk.outputs
: de namen van uitvoerlagen van de woordenlijst toewijzen aan waarden die moeten worden opgehaald uit het netwerk.
void Evaluate(std::map<std::wstring, std::vector<ElemType>*>& outputs)`
Met deze methode wordt het netwerk geëvalueerd voor het ophalen van meerdere uitvoerlagen. De evaluatie is een single-forward pass die de uitvoerknooppunten evalueert.
outputs
: de namen van uitvoerlagen van de woordenlijst toewijzen aan waarden die moeten worden opgehaald uit het netwerk.
void Destroy()
Geeft resources vrij die zijn toegewezen tijdens het maken van het netwerk.
Er zijn twee implementaties van deze interface beschikbaar voor de client:
IEvaluateModelF : IEvaluateModel<float> // Assumes data elements of type float
en
IEvaluateModelD : IEvaluateModel<double> // Assumes data elements of type double
Voorbeeld
Het CPPEvalClient-programma in de map Examples/Evaluation/LegacyEvalDll/CPPEvalClient demonstreert het gebruik van deze evaluatie-interface.