EvalDLL C++ API
K dispozici je nativní rozhraní pro vyhodnocování modelů bez nutnosti čtečky dat nebo datových souborů. Toto rozhraní je implementováno v jazyce C++ uvnitř Cntk.Eval
knihovny DLL v Windows a libCntk.Eval
v Linuxu v uvedeném pořadí. Knihovna Cntk.Eval
DLL je zase používána EvalWrapper
sestavením (který poskytuje spravovanou vrstvu) v Windows.
Název nativního rozhraní je následující:
template <typename ElemType> class IEvaluateModel
Kde ElemType
je typ prvku (float
nebo double
).
Toto rozhraní poskytuje následující metody:
void Init(const std::string& config)
Tato metoda inicializuje vyhodnocovací modul se zadaným konfiguračním souborem. Položky z konfiguračního souboru se analyzují a přiřazují k vyhodnocovacímu modulu, ale síť se v rámci tohoto volání nevytvořila. Tato metoda navíc ve výchozím nastavení numCPUThreads
vlastnost na 1
, pokud konfigurační soubor neobsahuje jinou hodnotu pro tuto vlastnost.
void CreateNetwork(const std::string& networkDescription)
Tato metoda sestaví síť buď z popisu sítě v konfiguračním souboru, nebo pokud modelPath
je atribut zadán, načte model z disku.
networkDescription
: obsahuje popis sítě, a to buď prostřednictvím položky NetworkBuilder atributu modelPath.
void GetNodeDimensions(std::map<std::wstring, size_t>& dimensions, NodeGroup nodeGroup)
Tato metoda vyplní slovník dimenzí, přičemž každá položka dimenze mapuje název vrstvy (klíč) na velikost dimenze. Skupina uzlů je definována prostřednictvím výčtu NodeGroup
:
enum NodeGroup
{
nodeInput, // an input node
nodeOutput, // an output node
nodeSpecified
};
void StartEvaluateMinibatchLoop(const std::wstring& outputNodeName)
Tyto metody připraví síť na volání Evaluate.
outputNodeName
: název uzlu, který se vyhodnotí
void Evaluate(std::map<std::wstring, std::vector<ElemType>*>& inputs, std::map<std::wstring, std::vector<ElemType>*>& outputs)
Tato metoda vyhodnotí síť pomocí zadaného vstupu a načte více výstupních vrstev.
inputs
: Slovník mapuje názvy vstupních vrstev na hodnoty, které se mají použít jako vstup do sítě.outputs
: slovník mapuje názvy výstupní vrstvy na hodnoty, které se mají načíst ze sítě.
void Evaluate(std::map<std::wstring, std::vector<ElemType>*>& outputs)`
Tato metoda vyhodnocuje síť, která načítá více výstupních vrstev. Vyhodnocení je předávání s jedním předáváním, které vyhodnocuje výstupní uzly.
outputs
: slovník mapuje názvy výstupní vrstvy na hodnoty, které se mají načíst ze sítě.
void Destroy()
Uvolní prostředky přidělené během vytváření sítě.
Pro klienta jsou k dispozici dvě implementace tohoto rozhraní:
IEvaluateModelF : IEvaluateModel<float> // Assumes data elements of type float
a
IEvaluateModelD : IEvaluateModel<double> // Assumes data elements of type double
Příklad
Program CPPEvalClient umístěný ve složce Examples/Evaluation/LegacyEvalDll/CPPEvalClient ukazuje použití tohoto zkušebního rozhraní.