EvalDLL C++ API
データ リーダーまたはデータ ファイルを必要とせずにモデルを評価するために使用できるネイティブ インターフェイスがあります。 このインターフェイスは、Windowsの DLL 内の Cntk.Eval
C++ と libCntk.Eval
Linux でそれぞれ実装されます。 Cntk.Eval
また、DLL は、WindowsのEvalWrapper
アセンブリ (マネージド レイヤーを提供) でも使用されます。
ネイティブ インターフェイス名は次のとおりです。
template <typename ElemType> class IEvaluateModel
要素の型 (float
または ) はどこにありますか。ElemType
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)
このメソッドは、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()
ネットワーク作成時に割り当てられたリソースを解放します。
クライアントで使用できるこのインターフェイスの実装は 2 つあります。
IEvaluateModelF : IEvaluateModel<float> // Assumes data elements of type float
および
IEvaluateModelD : IEvaluateModel<double> // Assumes data elements of type double
例
Examples/Evaluation/LegacyEvalDll/CPPEvalClient フォルダーにある CPPEvalClient プログラムは、この評価インターフェイスの使用方法を示しています。