共用方式為


EvalDLL C++ API

有一個原生介面可用來評估模型,而不需要資料讀取器或資料檔案 () 。 此介面會在 DLL 內分別在 Windows 和 libCntk.Eval Linux 中的 Cntk.Eval C++ 中實作。 元件 Cntk.Eval (也會 EvalWrapper 使用 DLL,其會在 Windows 中提供受控層) 。

原生介面名稱如下:

template <typename ElemType> class IEvaluateModel

其中 ElemType 是元素類型 (floatdouble) 。

此介面提供下列方法:


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程式示範此評估介面的使用方式。