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 , демонстрирует использование этого интерфейса оценки.