EvalDLL C# API
有一個受控介面可用來評估模型,而不需要資料讀取器或資料檔案 () 。 此介面是在程式庫內的 CLI Managed 程式碼中 EvalWrapper
實作。 此程式庫接著會使用 Evaldll
程式庫,在原生 C++) 中執行實際的網路評估 (。
C# ) 中的 Managed 介面名稱 (如下:
public interface IEvaluateModelManaged<T> : IDisposable
其中 T
是元素類型 (float
或 double
)
此介面提供下列方法:
void Init(string config)
這個方法會使用指定的組態檔初始化評估引擎。 組態檔中的專案會剖析並指派給評估引擎,不過,不會在此呼叫內建立網路。 此外,除非組態檔包含此屬性的不同值,否則這個方法會將 屬性 1
預設 numCPUThreads
為 。
void CreateNetwork(string networkDescription)
這個方法會從組態檔中的網路描述建置網路,或者如果 modelPath
指定屬性,它會從磁片載入模型。
networkDescription
:包含網路的描述,不論是透過 modelPath 屬性的 NetworkBuilder 專案。
void CreateNetwork(string networkDescription, List<string> outputNodeNames)
這個方法會從組態檔中的網路描述建置網路,或者如果 modelPath
指定屬性,它會從磁片載入模型。 此外,它會以傳入做為引數的清單取代組態檔中的輸出節點清單。 這可讓呼叫端擷取其他節點的輸出值,例如隱藏層中的節點 () 。
networkDescription
:包含網路的描述,不論是透過 modelPath 屬性的 NetworkBuilder 專案。outputNodeNames
:要標示為 [輸出] 的節點清單,以便進行評估。
void CreateNetwork(string networkDescription, int deviceId)
這個方法會從組態檔中的網路描述建置網路。 這只是在文字前面 deviceId=<deviceId>
networkDescription
加上的便利方法。
networkDescription
:包含透過NetworkBuilder
屬性或modelPath
屬性的網路描述。deviceId
:指定要在網路描述deviceId
屬性前面加上的裝置識別碼值。
void CreateNetwork(string networkDescription, int deviceId, List<string> outputNodeNames)
這個方法會從組態檔中的網路描述建置網路。 這只是在文字前面 deviceId=<deviceId>
networkDescription
加上的便利方法。
networkDescription
:包含網路的描述,不論是透過 modelPath 屬性的 NetworkBuilder 專案。deviceId
:指定要在網路描述deviceId
屬性前面加上的裝置識別碼值。outputNodeNames
:要標示為 [輸出] 的節點清單,以便進行評估。
List<T> Evaluate(string outputKey, int outputSize)
此方法會使用單一轉送傳遞來評估網路, (沒有輸入) ,並傳回與指定圖層 outputKey
相關聯的值。
outputKey
:要傳回值的圖層名稱。outputSize
:輸出層中的值數目。
此方法已被取代。 請改用List<T> Evaluate(string outputKey)
方法。
List<T> Evaluate(string outputKey)
此方法會使用單一轉送傳遞來評估網路, (沒有輸入) ,並傳回與指定圖層 outputKey
相關聯的值。
outputKey
:要傳回值的圖層名稱。 在內部,方法會決定輸出所需的資料緩衝區大小,並配置必要的緩衝區。
void Evaluate(Dictionary<string, List<T>> inputs, Dictionary<string, List<T>> outputs)
此方法會使用提供的輸入來評估網路,並擷取多個輸出層。
inputs
:字典會將輸入層名稱對應至要作為網路輸入的值。outputs
:字典會將輸出層名稱對應至要從網路擷取的值。
List<T> Evaluate(Dictionary<string, List<T>> inputs, string outputKey, int outputSize)
此方法會評估具有所提供輸入的網路,並擷取單一輸出層
inputs
:字典會將輸入層名稱對應至要作為網路輸入的值。outputKey
:所需輸出層的名稱。outputSize
:輸出層中的值數目。
此方法已被取代。 請改用List<T> Evaluate(Dictionary<string, List<T>> inputs, string outputKey)
方法。
List<T> Evaluate(Dictionary<string, List<T>> inputs, string outputKey)
此方法會評估具有所提供輸入的網路,並擷取單一輸出層
inputs
:字典會將輸入層名稱對應至要作為網路輸入的值。outputKey
:所需輸出層的名稱。
在內部,方法會決定輸出所需的資料緩衝區大小,並配置必要的緩衝區。
List<T> EvaluateRgbImage(Bitmap image, string outputKey)
此方法會評估點陣圖影像,並擷取單一輸出層
image
:RGB 格式的點陣圖影像輸入。 它必須已經重新調整大小,以符合網路預期的大小。outputKey
:所需輸出層的名稱。
在內部,方法會先擷取包含 3 個通道的功能向量,然後將它饋送為網路的輸入。 它也會為輸出配置必要的緩衝區。
Dictionary<string, int> GetNodeDimensions(NodeGroup nodeGroup)
這個方法會傳回專案的字典,每個專案都會將圖層名稱 (索引鍵對應至維度大小) 。 節點群組是透過 NodeGroup
列舉來定義:
public enum class NodeGroup
{
nodeInput, // an input node
nodeOutput, // an output node
nodeSpecified
};
受控用戶端可以使用此介面的兩個實作:
class IEvaluateModelManagedF : IEvaluateModelManaged<float> // Assumes data elements of type float
及
class IEvaluateModelManagedD : IEvaluateModelManaged<double> // Assumes data elements of type double
範例
此處的 CSEvalClient 程式示範此評估介面的使用方式。