Поделиться через


EvalDLL C++ API

Существует собственный интерфейс, доступный для оценки моделей без необходимости чтения данных или файлов данных. Этот интерфейс реализуется в C++ внутри библиотеки Cntk.Eval DLL в Windows и libCntk.Eval Linux соответственно. Библиотека Cntk.Eval DLL, в свою очередь, также используется сборкой EvalWrapper (которая предоставляет управляемый слой) в Windows.

Имя собственного интерфейса имеет следующее:

template <typename ElemType> class IEvaluateModel

Где ElemType находится тип элемента (float или double).

Этот интерфейс предоставляет следующие методы:


void Init(const std::string& config)

Этот метод инициализирует модуль оценки с указанным файлом конфигурации. Записи из файла конфигурации анализируются и назначаются подсистеме вычислений, однако сеть не создается внутри этого вызова. Кроме того, этот метод будет по умолчанию numCPUThreads использовать свойство 1, если файл конфигурации не содержит другое значение для этого свойства.


void CreateNetwork(const std::string& networkDescription)

Этот метод создает сеть из описания сети в файле конфигурации или, если modelPath атрибут указан, он загружает модель с диска.

  • networkDescription : содержит описание сети с помощью записи NetworkBuilder атрибута modelPath.

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

Этот метод заполняет словарь измерений, каждый элемент измерения сопоставляет имя слоя (ключ) с размером измерения. Группа узлов определяется с помощью NodeGroup перечисления:

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

void StartEvaluateMinibatchLoop(const std::wstring& outputNodeName)

Эти методы подготавливают сеть для вызовов Evaluate.

  • outputNodeName : имя узла, который будет вычисляться.

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

Этот метод оценивает сеть с использованием предоставленных входных данных и извлекает несколько уровней вывода.

  • inputs : сопоставление имен входных слоев словаря со значениями, используемыми в качестве входных данных в сети.
  • outputs : сопоставление имен выходного слоя словаря со значениями для получения из сети.

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

Этот метод оценивает сеть, извлекающую несколько выходных слоев. Оценка — это одноадресный проход, который оценивает выходные узлы.

  • outputs : сопоставление имен выходного слоя словаря со значениями для получения из сети.

void Destroy()

Освобождает ресурсы, выделенные во время создания сети.


Существует две реализации этого интерфейса, доступные клиенту:

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

и

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

Пример

Программа CPPEvalClient , расположенная в папке Examples/Evaluation/LegacyEvalDll/CPPEvalClient , демонстрирует использование этого интерфейса оценки.