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.