EvalDLL C#-API
Det finns ett hanterat gränssnitt tillgängligt för utvärdering av modeller utan att kräva dataläsare eller datafiler. Det här gränssnittet implementeras i CLI-hanterad kod i EvalWrapper
biblioteket. Det här biblioteket använder Evaldll
i sin tur biblioteket för att utföra de faktiska nätverksutvärderingarna (i intern C++).
Namnet på det hanterade gränssnittet (i C#) är följande:
public interface IEvaluateModelManaged<T> : IDisposable
Var T
är elementtypen (float
eller double
)
Det här gränssnittet innehåller följande metoder:
void Init(string config)
Den här metoden initierar utvärderingsmotorn med den angivna konfigurationsfilen. Posterna från konfigurationsfilen parsas och tilldelas till utvärderingsmotorn, men nätverket skapas inte i det här anropet. Dessutom kommer den numCPUThreads
här metoden som standard egenskapen till 1
, såvida inte konfigurationsfilen innehåller ett annat värde för den här egenskapen.
void CreateNetwork(string networkDescription)
Den här metoden skapar nätverket antingen från nätverksbeskrivningen i konfigurationsfilen, eller om modelPath
attributet anges läser den in modellen från disken.
networkDescription
: innehåller beskrivningen av nätverket, antingen via en NetworkBuilder-post för ett modelPath-attribut.
void CreateNetwork(string networkDescription, List<string> outputNodeNames)
Den här metoden skapar nätverket antingen från nätverksbeskrivningen i konfigurationsfilen, eller om modelPath
attributet anges läser den in modellen från disken. Dessutom ersätter den listan över utdatanoder från konfigurationsfilen med listan som skickas som ett argument. Detta gör att anroparen kan hämta utdatavärdena för andra noder, till exempel de i de dolda skikten.
networkDescription
: innehåller beskrivningen av nätverket, antingen via en NetworkBuilder-post för ett modelPath-attribut.outputNodeNames
: lista över noder som ska markeras som Utdata, så att de kan utvärderas.
void CreateNetwork(string networkDescription, int deviceId)
Den här metoden skapar nätverket från nätverksbeskrivningen i konfigurationsfilen. Det är bara en bekvämlighetsmetod som förbereder deviceId=<deviceId>
networkDescription
texten.
networkDescription
: innehåller beskrivningen av nätverket, antingen via enNetworkBuilder
egenskap eller ettmodelPath
attribut.deviceId
: anger enhets-ID-värdet som ska förberedas för nätverksbeskrivningensdeviceId
egenskap.
void CreateNetwork(string networkDescription, int deviceId, List<string> outputNodeNames)
Den här metoden skapar nätverket från nätverksbeskrivningen i konfigurationsfilen. Det är bara en bekvämlighetsmetod som förbereder deviceId=<deviceId>
networkDescription
texten.
networkDescription
: innehåller beskrivningen av nätverket, antingen via en NetworkBuilder-post för ett modelPath-attribut.deviceId
: anger enhets-ID-värdet som ska förberedas för nätverksbeskrivningensdeviceId
egenskap.outputNodeNames
: lista över noder som ska markeras som Utdata, så att de kan utvärderas.
List<T> Evaluate(string outputKey, int outputSize)
Den här metoden utvärderar nätverket med en enda vidarebefordran (inga indata) och returnerar de värden som är associerade med det angivna lagret outputKey
.
outputKey
: lagernamn som värdena ska returneras från.outputSize
: antal värden i utdataskiktet.
Den här metoden är inaktuell. Använd iList<T> Evaluate(string outputKey)
stället metoden .
List<T> Evaluate(string outputKey)
Den här metoden utvärderar nätverket med en enda vidarebefordran (inga indata) och returnerar de värden som är associerade med det angivna lagret outputKey
.
outputKey
: lagernamn som värdena ska returneras från. Internt bestämmer metoden den databuffertstorlek som krävs för utdata och allokerar den nödvändiga bufferten.
void Evaluate(Dictionary<string, List<T>> inputs, Dictionary<string, List<T>> outputs)
Den här metoden utvärderar nätverket med hjälp av angivna indata och hämtar flera utdatalager.
inputs
: ordlistan som mappar indatalagernamn till värden som ska användas som indata till nätverket.outputs
: ordlistan mappar utdatalagernamn till värden som ska hämtas från nätverket.
List<T> Evaluate(Dictionary<string, List<T>> inputs, string outputKey, int outputSize)
Den här metoden utvärderar ett nätverk med angivna indata och hämtar ett enda utdatalager
inputs
: ordlistan som mappar indatalagernamn till värden som ska användas som indata till nätverket.outputKey
: namnet på önskat utdataskikt.outputSize
: antalet värden i utdataskiktet.
Den här metoden är inaktuell. Använd iList<T> Evaluate(Dictionary<string, List<T>> inputs, string outputKey)
stället metoden .
List<T> Evaluate(Dictionary<string, List<T>> inputs, string outputKey)
Den här metoden utvärderar ett nätverk med angivna indata och hämtar ett enda utdatalager
inputs
: ordlistan som mappar indatalagernamn till värden som ska användas som indata till nätverket.outputKey
: namnet på önskat utdataskikt.
Internt bestämmer metoden den databuffertstorlek som krävs för utdata och allokerar den nödvändiga bufferten.
List<T> EvaluateRgbImage(Bitmap image, string outputKey)
Den här metoden utvärderar en bitmappsbild och hämtar ett enda utdataskikt
image
: bitmappens bildindata i RGB-format. Den måste redan ändra storlek för att matcha den storlek som förväntas av nätverket.outputKey
: namnet på önskat utdataskikt.
Internt extraherar metoden först funktionsvektorn som innehåller 3 kanaler och matar sedan in den som indata till nätverket. Den allokerar också den nödvändiga bufferten för utdata.
Dictionary<string, int> GetNodeDimensions(NodeGroup nodeGroup)
Den här metoden returnerar en ordlista med objekt, där varje objekt mappar lagernamnet (nyckeln) till dimensionsstorleken. Nodgruppen definieras via NodeGroup
uppräkningen:
public enum class NodeGroup
{
nodeInput, // an input node
nodeOutput, // an output node
nodeSpecified
};
Det finns två implementeringar av det här gränssnittet som är tillgängliga för den hanterade klienten:
class IEvaluateModelManagedF : IEvaluateModelManaged<float> // Assumes data elements of type float
och
class IEvaluateModelManagedD : IEvaluateModelManaged<double> // Assumes data elements of type double
Exempel
CSEvalClient-programmet som finns här visar användningen av det här utvärderingsgränssnittet.