EvalDLL C++ API
有一個原生介面可用來評估模型,而不需要資料讀取器或資料檔案 () 。 此介面會在 DLL 內分別在 Windows 和 libCntk.Eval
Linux 中的 Cntk.Eval
C++ 中實作。 元件 Cntk.Eval
(也會 EvalWrapper
使用 DLL,其會在 Windows 中提供受控層) 。
原生介面名稱如下:
template <typename ElemType> class IEvaluateModel
其中 ElemType
是元素類型 (float
或 double
) 。
此介面提供下列方法:
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程式示範此評估介面的使用方式。