Dela via


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.