EvalDLL C++ API
데이터 판독기 또는 데이터 파일 없이 모델을 평가하는 데 사용할 수 있는 네이티브 인터페이스가 있습니다. 이 인터페이스는 각각 Windows DLL 내의 Cntk.Eval
C++와 libCntk.Eval
Linux에서 구현됩니다. DLL은 Cntk.Eval
Windows 어셈블리(관리되는 계층을 제공)에서도 사용됩니다EvalWrapper
.
네이티브 인터페이스 이름은 다음과 같습니다.
template <typename ElemType> class IEvaluateModel
요소 형식(float
또는double
)은 어디에 ElemType
있나요?
이 인터페이스는 다음 메서드를 제공합니다.
void Init(const std::string& config)
이 메서드는 지정된 구성 파일을 사용하여 평가 엔진을 초기화합니다. 구성 파일의 항목은 구문 분석되고 평가 엔진에 할당되지만 이 호출 내에 네트워크가 만들어지지 않습니다. 또한 구성 파일에 이 속성1
에 numCPUThreads
대한 다른 값이 포함되지 않는 한 이 메서드는 속성을 기본값으로 설정합니다.
void CreateNetwork(const std::string& networkDescription)
이 메서드는 구성 파일의 네트워크 설명에서 네트워크를 빌드하거나 특성이 지정된 경우 modelPath
디스크에서 모델을 로드합니다.
networkDescription
: modelPath 특성의 NetworkBuilder 항목을 통해 네트워크에 대한 설명을 포함합니다.
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)
이 메서드는 평가 호출을 위해 네트워크를 준비합니다.
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
예제
Examples/Evaluation/LegacyEvalDll/CPPEvalClient 폴더에 있는 CPPEvalClient 프로그램은 이 평가 인터페이스의 사용을 보여 줍니다.