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 umaNetworkBuilder
propriedade ou de ummodelPath
atributo.deviceId
: especifica o valor de identificação do dispositivo para preparar para a propriedade da descrição dadeviceId
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 dadeviceId
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 outputKey
especificada .
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 oList<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 outputKey
especificada .
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 oList<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.