共用方式為


EvalDLL C# API

有一個受控介面可用來評估模型,而不需要資料讀取器或資料檔案 () 。 此介面是在程式庫內的 CLI Managed 程式碼中 EvalWrapper 實作。 此程式庫接著會使用 Evaldll 程式庫,在原生 C++) 中執行實際的網路評估 (。

C# ) 中的 Managed 介面名稱 (如下:

public interface IEvaluateModelManaged<T> : IDisposable

其中 T 是元素類型 (floatdouble)

此介面提供下列方法:


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