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 1
menos 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 unaNetworkBuilder
propiedad o unmodelPath
atributo.deviceId
: especifica el valor de id. de dispositivo que se antepone a la propiedad de la descripción dedeviceId
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 dedeviceId
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 outputKey
especificada.
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 elList<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 outputKey
especificada.
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 elList<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.