Partilhar via


EvalDLL C# API

Existe uma interface gerida disponível para avaliar modelos sem necessitar de um leitor de dados ou ficheiros de dados. Esta interface é implementada em código gerido pelo CLI dentro da EvalWrapper biblioteca. Esta biblioteca, por sua vez, utiliza Evaldll a biblioteca para realizar as avaliações reais da rede (em C++) nativos.

O nome de interface gerido (em C#) é o seguinte:

public interface IEvaluateModelManaged<T> : IDisposable

Onde T está o tipo de elemento (float ou double)

Esta interface fornece os seguintes métodos:


void Init(string config)

Este método inicializa o motor de avaliação com o ficheiro de configuração especificado. As entradas do ficheiro de configuração são analisadas e atribuídas ao motor de avaliação, no entanto, a rede não é criada dentro desta chamada. Além disso, este método irá predefinição da numCPUThreads propriedade para 1, a menos que o ficheiro de configuração contenha um valor diferente para esta propriedade.


void CreateNetwork(string networkDescription)

Este método constrói a rede a partir da descrição da rede no ficheiro de configuração, ou se o modelPath atributo for especificado, carrega a modelo do disco.

  • networkDescription : contém a descrição da rede, seja através de uma entrada NetworkBuilder de um atributo modelPath.

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

Este método constrói a rede a partir da descrição da rede no ficheiro de configuração, ou se o modelPath atributo for especificado, carrega a modelo do disco. Além disso, substitui a lista de nós de saída do ficheiro de configuração, com a lista passada como argumento. Isto permite ao chamador recuperar os valores de saída de outros nóns, tais como os da camada escondida.

  • networkDescription : contém a descrição da rede, seja através de uma entrada NetworkBuilder de um atributo modelPath.
  • outputNodeNames : lista de nós a marcar como Saída, para que possam ser avaliados.

void CreateNetwork(string networkDescription, int deviceId)

Este método constrói a rede a partir da descrição da rede no ficheiro de configuração. É apenas um método de conveniência que se prepara deviceId=<deviceId> para o networkDescription texto.

  • networkDescription : contém a descrição da rede, seja através de uma NetworkBuilder propriedade ou de um modelPath atributo.
  • deviceId : especifica o valor de identificação do dispositivo para preparar para a propriedade da descrição da deviceId rede.

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

Este método constrói a rede a partir da descrição da rede no ficheiro de configuração. É apenas um método de conveniência que se prepara deviceId=<deviceId> para o networkDescription texto.

  • networkDescription : contém a descrição da rede, seja através de uma entrada NetworkBuilder de um atributo modelPath.
  • deviceId : especifica o valor de identificação do dispositivo para preparar para a propriedade da descrição da deviceId rede.
  • outputNodeNames : lista de nós a marcar como Saída, para que possam ser avaliados.

List<T> Evaluate(string outputKey, int outputSize)

Este método avalia a rede com um único passe para a frente (sem entrada) e devolve os valores associados à camada outputKeyespecificada .

  • outputKey : nome da camada para devolver os valores de.
  • outputSize : número de valores na camada de saída.
    Este método é precotado. Em vez disso, use o List<T> Evaluate(string outputKey) método.

List<T> Evaluate(string outputKey)

Este método avalia a rede com um único passe para a frente (sem entrada) e devolve os valores associados à camada outputKeyespecificada .

  • outputKey : nome da camada para devolver os valores de. Internamente, o método, determina o tamanho do tampão de dados necessário para a saída e atribui o tampão necessário.

void Evaluate(Dictionary<string, List<T>> inputs, Dictionary<string, List<T>> outputs)

Este método avalia a rede utilizando a entrada fornecida e recupera várias camadas de saída.

  • inputs : o dicionário mapeamento de nomes da camada de entrada para valores a utilizar como entrada na rede.
  • outputs : a camada de saída de mapeamento do dicionário dá nomes aos valores a recuperar da rede.

List<T> Evaluate(Dictionary<string, List<T>> inputs, string outputKey, int outputSize)

Este método avalia uma rede com a entrada fornecida e recupera uma única camada de saída

  • inputs : o dicionário mapeamento de nomes da camada de entrada para valores a utilizar como entrada na rede.
  • outputKey : o nome da camada de saída desejada.
  • outputSize : o número de valores na camada de saída.
    Este método é precotado. Em vez disso, use o List<T> Evaluate(Dictionary<string, List<T>> inputs, string outputKey) método.

List<T> Evaluate(Dictionary<string, List<T>> inputs, string outputKey)

Este método avalia uma rede com a entrada fornecida e recupera uma única camada de saída

  • inputs : o dicionário mapeamento de nomes da camada de entrada para valores a utilizar como entrada na rede.
  • outputKey : o nome da camada de saída desejada.
    Internamente, o método, determina o tamanho do tampão de dados necessário para a saída e atribui o tampão necessário.

List<T> EvaluateRgbImage(Bitmap image, string outputKey)

Este método avalia uma imagem de bitmap e recupera uma única camada de saída

  • image : a entrada de imagem bitmap no formato RGB. Já deve ser redimensionado para corresponder ao tamanho esperado pela rede.
  • outputKey : o nome da camada de saída desejada.
    Internamente, o método primeiro extrai o vetor de recurso que contém 3 canais, e depois alimentá-lo como a entrada para a rede. Também atribui o tampão necessário para a saída.

Dictionary<string, int> GetNodeDimensions(NodeGroup nodeGroup)

Este método devolve um dicionário de itens, com cada item a mapear o nome da camada (chave) para o tamanho da dimensão. O grupo de nó é definido através da NodeGroup enumeração:

    public enum class NodeGroup     
    {      
        nodeInput,  // an input node     
        nodeOutput, // an output node     
        nodeSpecified     
    };

Existem duas implementações desta interface disponíveis para o cliente gerido:

class IEvaluateModelManagedF : IEvaluateModelManaged<float> // Assumes data elements of type float

e

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

Exemplo

O programa CSEvalClient localizado aqui demonstra o uso desta interface de avaliação.