Condividi tramite


EvalDLL C++ API

È disponibile un'interfaccia nativa per la valutazione dei modelli senza richiedere un lettore di dati o file di dati. Questa interfaccia viene implementata in C++ all'interno della Cntk.Eval DLL in Windows e libCntk.Eval in Linux rispettivamente. La Cntk.Eval DLL a sua volta viene usata anche dall'assembly EvalWrapper (che fornisce un livello gestito) in Windows.

Il nome dell'interfaccia nativa è il seguente:

template <typename ElemType> class IEvaluateModel

Dove ElemType è il tipo di elemento (float o double).

Questa interfaccia fornisce i metodi seguenti:


void Init(const std::string& config)

Questo metodo inizializza il motore di valutazione con il file di configurazione specificato. Le voci del file di configurazione vengono analizzate e assegnate al motore di valutazione, ma la rete non viene creata all'interno di questa chiamata. Inoltre, questo metodo predefinitorà la numCPUThreads proprietà su 1, a meno che il file di configurazione contenga un valore diverso per questa proprietà.


void CreateNetwork(const std::string& networkDescription)

Questo metodo compila la rete dalla descrizione di rete nel file di configurazione o, se l'attributo è specificato, carica il modelPath modello dal disco.

  • networkDescription : contiene la descrizione della rete, tramite una voce NetworkBuilder di un attributo modelPath.

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

Questo metodo riempie un dizionario di dimensioni, con ogni elemento della dimensione che esegue il mapping del nome del livello (chiave) alla dimensione. Il gruppo di nodi viene definito tramite l'enumerazione NodeGroup :

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

void StartEvaluateMinibatchLoop(const std::wstring& outputNodeName)

Questi metodi preparano la rete per le chiamate Di valutazione.

  • outputNodeName : nome del nodo che verrà valutato

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

Questo metodo valuta la rete usando l'input fornito e recupera più livelli di output.

  • inputs : il mapping dei nomi dei livelli di input ai valori da usare come input alla rete.
  • outputs : il mapping dei nomi dei livelli di output del dizionario ai valori da recuperare dalla rete.

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

Questo metodo valuta il recupero di più livelli di output della rete. La valutazione è un passaggio single-forward che valuta i nodi di output.

  • outputs : il mapping dei nomi dei livelli di output del dizionario ai valori da recuperare dalla rete.

void Destroy()

Rilascia le risorse allocate durante la creazione di rete.


Esistono due implementazioni di questa interfaccia disponibili per il client:

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

e

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

Esempio

Il programma CPPEvalClient situato nella cartella Esempi/Valutazione/LegacyEvalDll/CPPEvalClient illustra l'utilizzo di questa interfaccia di valutazione.