EvalDLL C#-API
Er is een beheerde interface beschikbaar voor het evalueren van modellen zonder dat hiervoor een gegevenslezer of gegevensbestand nodig is. Deze interface wordt geïmplementeerd in beheerde CLI-code in de EvalWrapper
bibliotheek. Deze bibliotheek maakt op zijn beurt gebruik van Evaldll
een bibliotheek om de daadwerkelijke netwerkevaluaties (in systeemeigen C++) uit te voeren.
De naam van de beheerde interface (in C#) is het volgende:
public interface IEvaluateModelManaged<T> : IDisposable
Waar T
is het elementtype (float
of double
)
Deze interface biedt de volgende methoden:
void Init(string config)
Met deze methode initialiseert u de evaluatie-engine met het opgegeven configuratiebestand. De vermeldingen uit het configuratiebestand worden geparseerd en toegewezen aan de evaluatie-engine, maar het netwerk wordt niet gemaakt in deze aanroep. Bovendien wordt met deze methode de numCPUThreads
eigenschap standaard ingesteld op 1
, tenzij het configuratiebestand een andere waarde voor deze eigenschap bevat.
void CreateNetwork(string networkDescription)
Met deze methode wordt het netwerk gebouwd op basis van de netwerkbeschrijving in het configuratiebestand of als het modelPath
kenmerk is opgegeven, wordt het model vanaf de schijf geladen.
networkDescription
: bevat de beschrijving van het netwerk, hetzij via een NetworkBuilder-vermelding van een modelPath-kenmerk.
void CreateNetwork(string networkDescription, List<string> outputNodeNames)
Met deze methode wordt het netwerk gebouwd op basis van de netwerkbeschrijving in het configuratiebestand of als het modelPath
kenmerk is opgegeven, wordt het model vanaf de schijf geladen. Daarnaast wordt de lijst met uitvoerknooppunten uit het configuratiebestand vervangen door de lijst die als argument is doorgegeven. Hierdoor kan de aanroeper de uitvoerwaarden van andere knooppunten ophalen, zoals die in de verborgen laag(en).
networkDescription
: bevat de beschrijving van het netwerk, hetzij via een NetworkBuilder-vermelding van een modelPath-kenmerk.outputNodeNames
: lijst met knooppunten die als uitvoer moeten worden gemarkeerd, zodat ze kunnen worden geëvalueerd.
void CreateNetwork(string networkDescription, int deviceId)
Met deze methode wordt het netwerk gebouwd op basis van de netwerkbeschrijving in het configuratiebestand. Het is slechts een handige methode die vooraf deviceId=<deviceId>
gaat aan de networkDescription
tekst.
networkDescription
: bevat de beschrijving van het netwerk, hetzij via eenNetworkBuilder
eigenschap of eenmodelPath
kenmerk.deviceId
: geeft de waarde van de apparaat-id op die moet worden voorbereid op de eigenschap vandeviceId
de netwerkbeschrijving.
void CreateNetwork(string networkDescription, int deviceId, List<string> outputNodeNames)
Met deze methode wordt het netwerk gebouwd op basis van de netwerkbeschrijving in het configuratiebestand. Het is slechts een handige methode die vooraf deviceId=<deviceId>
gaat aan de networkDescription
tekst.
networkDescription
: bevat de beschrijving van het netwerk, hetzij via een NetworkBuilder-vermelding van een modelPath-kenmerk.deviceId
: geeft de waarde van de apparaat-id op die moet worden voorbereid op de eigenschap vandeviceId
de netwerkbeschrijving.outputNodeNames
: lijst met knooppunten die als uitvoer moeten worden gemarkeerd, zodat ze kunnen worden geëvalueerd.
List<T> Evaluate(string outputKey, int outputSize)
Met deze methode wordt het netwerk geëvalueerd met één doorsturende pass (geen invoer) en worden de waarden geretourneerd die zijn gekoppeld aan de opgegeven laag outputKey
.
outputKey
: laagnaam waaruit de waarden moeten worden geretourneerd.outputSize
: aantal waarden in de uitvoerlaag.
Deze methode is afgeschaft. Gebruik in plaats daarvan deList<T> Evaluate(string outputKey)
methode.
List<T> Evaluate(string outputKey)
Met deze methode wordt het netwerk geëvalueerd met één doorsturende pass (geen invoer) en worden de waarden geretourneerd die zijn gekoppeld aan de opgegeven laag outputKey
.
outputKey
: laagnaam waaruit de waarden moeten worden geretourneerd. Intern bepaalt de methode de vereiste gegevensbuffergrootte voor de uitvoer en wijst de benodigde buffer toe.
void Evaluate(Dictionary<string, List<T>> inputs, Dictionary<string, List<T>> outputs)
Met deze methode wordt het netwerk geëvalueerd met behulp van de opgegeven invoer en worden meerdere uitvoerlagen opgehaald.
inputs
: de namen van invoerlagen toewijzen aan waarden die moeten worden gebruikt als invoer voor het netwerk.outputs
: de namen van de uitvoerlaag voor woordenlijsttoewijzingen aan waarden die moeten worden opgehaald uit het netwerk.
List<T> Evaluate(Dictionary<string, List<T>> inputs, string outputKey, int outputSize)
Met deze methode wordt een netwerk geëvalueerd met de opgegeven invoer en wordt één uitvoerlaag opgehaald
inputs
: de namen van invoerlagen toewijzen aan waarden die moeten worden gebruikt als invoer voor het netwerk.outputKey
: de naam van de gewenste uitvoerlaag.outputSize
: het aantal waarden in de uitvoerlaag.
Deze methode is afgeschaft. Gebruik in plaats daarvan deList<T> Evaluate(Dictionary<string, List<T>> inputs, string outputKey)
methode.
List<T> Evaluate(Dictionary<string, List<T>> inputs, string outputKey)
Met deze methode wordt een netwerk geëvalueerd met de opgegeven invoer en wordt één uitvoerlaag opgehaald
inputs
: de namen van invoerlagen toewijzen aan waarden die moeten worden gebruikt als invoer voor het netwerk.outputKey
: de naam van de gewenste uitvoerlaag.
Intern bepaalt de methode de vereiste gegevensbuffergrootte voor de uitvoer en wijst de benodigde buffer toe.
List<T> EvaluateRgbImage(Bitmap image, string outputKey)
Met deze methode wordt een bitmapafbeelding geëvalueerd en wordt één uitvoerlaag opgehaald
image
: de bitmapafbeeldingsinvoer in RGB-indeling. De grootte moet al worden aangepast aan de grootte die door het netwerk wordt verwacht.outputKey
: de naam van de gewenste uitvoerlaag.
Intern extraheert de methode eerst de functievector die drie kanalen bevat en voert deze vervolgens als invoer voor het netwerk in. Er wordt ook de benodigde buffer toegewezen voor de uitvoer.
Dictionary<string, int> GetNodeDimensions(NodeGroup nodeGroup)
Met deze methode wordt een woordenlijst met items geretourneerd, waarbij elk item de laagnaam (sleutel) toedeelt aan de dimensiegrootte. De knooppuntgroep wordt gedefinieerd via de NodeGroup
opsomming:
public enum class NodeGroup
{
nodeInput, // an input node
nodeOutput, // an output node
nodeSpecified
};
Er zijn twee implementaties van deze interface beschikbaar voor de beheerde client:
class IEvaluateModelManagedF : IEvaluateModelManaged<float> // Assumes data elements of type float
en
class IEvaluateModelManagedD : IEvaluateModelManaged<double> // Assumes data elements of type double
Voorbeeld
Het CSEvalClient-programma dat zich hier bevindt, laat het gebruik van deze evaluatie-interface zien.