Compartir a través de


EvalDLL C# API

Hay una interfaz administrada disponible para evaluar modelos sin necesidad de un lector de datos o archivos de datos. Esta interfaz se implementa en el código administrado de la CLI dentro de la EvalWrapper biblioteca. A su vez, esta biblioteca usa Evaldll la biblioteca para realizar las evaluaciones de red reales (en C++nativo).

El nombre de la interfaz administrada (en C#) es el siguiente:

public interface IEvaluateModelManaged<T> : IDisposable

Donde T es el tipo de elemento (float o double)

Esta interfaz proporciona los métodos siguientes:


void Init(string config)

Este método inicializa el motor de evaluación con el archivo de configuración especificado. Las entradas del archivo de configuración se analizan y se asignan al motor de evaluación; sin embargo, la red no se crea dentro de esta llamada. Además, este método usará de forma predeterminada la numCPUThreads propiedad en , a 1menos que el archivo de configuración contenga un valor diferente para esta propiedad.


void CreateNetwork(string networkDescription)

Este método compila la red a partir de la descripción de red en el archivo de configuración o, si se especifica el modelPath atributo, carga el modelo desde el disco.

  • networkDescription : contiene la descripción de la red, ya sea a través de una entrada NetworkBuilder de un atributo modelPath.

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

Este método compila la red a partir de la descripción de red en el archivo de configuración o, si se especifica el modelPath atributo, carga el modelo desde el disco. Además, reemplaza la lista de nodos de salida del archivo de configuración, por la lista pasada como argumento. Esto permite al autor de la llamada recuperar los valores de salida de otros nodos, como los de las capas ocultas.

  • networkDescription : contiene la descripción de la red, ya sea a través de una entrada NetworkBuilder de un atributo modelPath.
  • outputNodeNames : lista de nodos que se van a marcar como Salida, por lo que se pueden evaluar.

void CreateNetwork(string networkDescription, int deviceId)

Este método compila la red a partir de la descripción de red en el archivo de configuración. Es simplemente un método de conveniencia que antepone deviceId=<deviceId> al networkDescription texto.

  • networkDescription : contiene la descripción de la red, ya sea a través de una NetworkBuilder propiedad o un modelPath atributo.
  • deviceId : especifica el valor de id. de dispositivo que se antepone a la propiedad de la descripción de deviceId red.

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

Este método compila la red a partir de la descripción de red en el archivo de configuración. Es simplemente un método de conveniencia que antepone deviceId=<deviceId> al networkDescription texto.

  • networkDescription : contiene la descripción de la red, ya sea a través de una entrada NetworkBuilder de un atributo modelPath.
  • deviceId : especifica el valor de id. de dispositivo que se antepone a la propiedad de la descripción de deviceId red.
  • outputNodeNames : lista de nodos que se van a marcar como Salida, por lo que se pueden evaluar.

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

Este método evalúa la red con un solo pase de avance (sin entrada) y devuelve los valores asociados a la capa outputKeyespecificada.

  • outputKey : nombre de capa del que se van a devolver los valores.
  • outputSize : número de valores en la capa de salida.
    Este método es desusado. En su lugar, use el List<T> Evaluate(string outputKey) método .

List<T> Evaluate(string outputKey)

Este método evalúa la red con un solo pase de avance (sin entrada) y devuelve los valores asociados a la capa outputKeyespecificada.

  • outputKey : nombre de capa del que se van a devolver los valores. Internamente, el método determina el tamaño de búfer de datos necesario para la salida y asigna el búfer necesario.

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

Este método evalúa la red mediante la entrada proporcionada y recupera varias capas de salida.

  • inputs : el diccionario asigna los nombres de capa de entrada a los valores que se van a usar como entrada en la red.
  • outputs : el diccionario asigna los nombres de capa de salida a los valores que se van a recuperar de la red.

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

Este método evalúa una red con la entrada proporcionada y recupera una única capa de salida.

  • inputs : el diccionario asigna los nombres de capa de entrada a los valores que se van a usar como entrada en la red.
  • outputKey : el nombre de la capa de salida deseada.
  • outputSize : el número de valores de la capa de salida.
    Este método es desusado. En su lugar, use el 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 evalúa una red con la entrada proporcionada y recupera una única capa de salida.

  • inputs : el diccionario asigna los nombres de capa de entrada a los valores que se van a usar como entrada en la red.
  • outputKey : el nombre de la capa de salida deseada.
    Internamente, el método determina el tamaño de búfer de datos necesario para la salida y asigna el búfer necesario.

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

Este método evalúa una imagen de mapa de bits y recupera una única capa de salida.

  • image : entrada de imagen de mapa de bits en formato RGB. Ya debe cambiar el tamaño para que coincida con el tamaño esperado por la red.
  • outputKey : el nombre de la capa de salida deseada.
    Internamente, el método extrae primero el vector de características que contiene 3 canales y, a continuación, lo alimenta como entrada a la red. También asigna el búfer necesario para la salida.

Dictionary<string, int> GetNodeDimensions(NodeGroup nodeGroup)

Este método devuelve un diccionario de elementos, con cada elemento asignando el nombre de capa (clave) al tamaño de dimensión. El grupo de nodos se define mediante la NodeGroup enumeración :

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

Hay dos implementaciones de esta interfaz disponibles para el cliente administrado:

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

y

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

Ejemplo

El programa CSEvalClient que se encuentra aquí muestra el uso de esta interfaz de evaluación.