EvalDLL C++ API
Dostępny jest natywny interfejs do oceniania modeli bez konieczności odczytywania danych lub plików danych. Ten interfejs jest implementowany w języku C++ wewnątrz Cntk.Eval
biblioteki DLL odpowiednio w Windows i libCntk.Eval
w systemie Linux. Biblioteka Cntk.Eval
DLL z kolei jest również używana przez EvalWrapper
zestaw (który zapewnia zarządzaną warstwę) w Windows.
Nazwa interfejsu natywnego jest następująca:
template <typename ElemType> class IEvaluateModel
Gdzie ElemType
jest typem elementu (float
lub double
).
Ten interfejs udostępnia następujące metody:
void Init(const std::string& config)
Ta metoda inicjuje aparat oceny z określonym plikiem konfiguracji. Wpisy z pliku konfiguracji są analizowane i przypisywane do aparatu oceny, jednak sieć nie jest tworzona wewnątrz tego wywołania. Ponadto ta metoda domyślnie ustawi numCPUThreads
właściwość na 1
, chyba że plik konfiguracji zawiera inną wartość dla tej właściwości.
void CreateNetwork(const std::string& networkDescription)
Ta metoda kompiluje sieć z opisu sieci w pliku konfiguracji lub jeśli modelPath
określono atrybut, ładuje model z dysku.
networkDescription
: zawiera opis sieci za pośrednictwem wpisu NetworkBuilder atrybutu modelPath.
void GetNodeDimensions(std::map<std::wstring, size_t>& dimensions, NodeGroup nodeGroup)
Ta metoda wypełnia słownik wymiarów, a każdy element wymiaru mapuje nazwę warstwy (klucz) na rozmiar wymiaru. Grupa węzłów jest definiowana za pomocą wyliczenia NodeGroup
:
enum NodeGroup
{
nodeInput, // an input node
nodeOutput, // an output node
nodeSpecified
};
void StartEvaluateMinibatchLoop(const std::wstring& outputNodeName)
Te metody przygotowują sieć do oceny wywołań.
outputNodeName
: nazwa węzła, który zostanie oceniony
void Evaluate(std::map<std::wstring, std::vector<ElemType>*>& inputs, std::map<std::wstring, std::vector<ElemType>*>& outputs)
Ta metoda ocenia sieć przy użyciu podanych danych wejściowych i pobiera wiele warstw wyjściowych.
inputs
: słownik mapuje nazwy warstw wejściowych na wartości, które mają być używane jako dane wejściowe w sieci.outputs
: mapowanie nazw warstw wyjściowych słownika na wartości do pobrania z sieci.
void Evaluate(std::map<std::wstring, std::vector<ElemType>*>& outputs)`
Ta metoda ocenia pobieranie wielu warstw wyjściowych przez sieć. Ocena jest pojedynczym przekazywaniem do przodu, oceniając węzły wyjściowe.
outputs
: mapowanie nazw warstw wyjściowych słownika na wartości do pobrania z sieci.
void Destroy()
Zwalnia zasoby przydzielone podczas tworzenia sieci.
Istnieją dwie implementacje tego interfejsu dostępne dla klienta:
IEvaluateModelF : IEvaluateModel<float> // Assumes data elements of type float
oraz
IEvaluateModelD : IEvaluateModel<double> // Assumes data elements of type double
Przykład
Program CPPEvalClient znajdujący się w folderze Examples/Evaluation/LegacyEvalDll/CPPEvalClient demonstruje użycie tego interfejsu oceny.