Udostępnij za pośrednictwem


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.