你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

EvalDLL C# API

有一个托管接口可用于评估模型,无需数据读取器或数据文件 () 。 此接口是在库内的 CLI 托管代码中实现的 EvalWrapper 。 此库又使用 Evaldll 库在本机 C++) 中执行实际的网络评估 (。

C#) 中的托管接口名称 (如下:

public interface IEvaluateModelManaged<T> : IDisposable

元素类型在哪里 T (floatdouble)

此接口提供以下方法:


void Init(string config)

此方法使用指定的配置文件初始化评估引擎。 配置文件中的条目将分析并分配给评估引擎,但是,不会在此调用中创建网络。 此外,此方法将默认 numCPUThreads 为此属性 1,除非配置文件包含此属性的其他值。


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 属性的设备 ID 值。

void CreateNetwork(string networkDescription, int deviceId, List<string> outputNodeNames)

此方法从配置文件中的网络说明生成网络。 它只是一种在文本前面附加deviceId=<deviceId>networkDescription的便利方法。

  • networkDescription :包含网络的说明,无论是通过 modelPath 属性的 NetworkBuilder 条目。
  • deviceId :指定要附加到网络说明 deviceId 属性的设备 ID 值。
  • 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

and

class IEvaluateModelManagedD : IEvaluateModelManaged<double> // Assumes data elements of type double

示例

此处的 CSEvalClient 程序演示了此评估接口的使用。