EvalDLL C# API
Pro vyhodnocování modelů je k dispozici spravované rozhraní bez nutnosti čtečky dat nebo datových souborů. Toto rozhraní se implementuje ve spravovaném kódu rozhraní příkazového EvalWrapper
řádku uvnitř knihovny. Tato knihovna zase používá Evaldll
knihovnu k provádění skutečných vyhodnocení sítě (v nativním jazyce C++).
Název spravovaného rozhraní (v jazyce C#) je následující:
public interface IEvaluateModelManaged<T> : IDisposable
Kde T
je typ prvku (float
nebo double
)
Toto rozhraní poskytuje následující metody:
void Init(string config)
Tato metoda inicializuje vyhodnocovací modul se zadaným konfiguračním souborem. Položky z konfiguračního souboru se analyzují a přiřazují k vyhodnocovacímu modulu, ale síť se v rámci tohoto volání nevytvořila. Kromě toho tato metoda výchozí numCPUThreads
vlastnost , pokud 1
konfigurační soubor neobsahuje jinou hodnotu pro tuto vlastnost.
void CreateNetwork(string networkDescription)
Tato metoda sestaví síť buď z popisu sítě v konfiguračním souboru, nebo pokud modelPath
je atribut zadán, načte model z disku.
networkDescription
: obsahuje popis sítě, a to buď prostřednictvím položky NetworkBuilder atributu modelPath.
void CreateNetwork(string networkDescription, List<string> outputNodeNames)
Tato metoda sestaví síť buď z popisu sítě v konfiguračním souboru, nebo pokud modelPath
je atribut zadán, načte model z disku. Kromě toho nahradí seznam výstupních uzlů z konfiguračního souboru seznamem předaným jako argument. To umožňuje volajícímu načíst výstupní hodnoty jiných uzlů, jako jsou ty ve skrytých vrstvách.
networkDescription
: obsahuje popis sítě, a to buď prostřednictvím položky NetworkBuilder atributu modelPath.outputNodeNames
: seznam uzlů, které se mají označit jako výstup, aby bylo možné je vyhodnotit.
void CreateNetwork(string networkDescription, int deviceId)
Tato metoda sestaví síť z popisu sítě v konfiguračním souboru. Jedná se pouze o pohodlnou metodunetworkDescription
, která předpřipravená deviceId=<deviceId>
na text.
networkDescription
: obsahuje popis sítě, a to buď prostřednictvímNetworkBuilder
vlastnosti, nebo atributumodelPath
.deviceId
: určuje hodnotu ID zařízení, která se má předem nastavit na vlastnost popisudeviceId
sítě.
void CreateNetwork(string networkDescription, int deviceId, List<string> outputNodeNames)
Tato metoda sestaví síť z popisu sítě v konfiguračním souboru. Jedná se pouze o pohodlnou metodunetworkDescription
, která předpřipravená deviceId=<deviceId>
na text.
networkDescription
: obsahuje popis sítě, a to buď prostřednictvím položky NetworkBuilder atributu modelPath.deviceId
: určuje hodnotu ID zařízení, která se má předem nastavit na vlastnost popisudeviceId
sítě.outputNodeNames
: seznam uzlů, které se mají označit jako výstup, aby bylo možné je vyhodnotit.
List<T> Evaluate(string outputKey, int outputSize)
Tato metoda vyhodnotí síť s jedním předáváním (bez vstupu) a vrátí hodnoty přidružené k zadané vrstvě outputKey
.
outputKey
: Název vrstvy pro vrácení hodnot z.outputSize
: počet hodnot ve výstupní vrstvě.
Tato metoda je zastaralá. Místo toho použijte metoduList<T> Evaluate(string outputKey)
.
List<T> Evaluate(string outputKey)
Tato metoda vyhodnotí síť s jedním předáváním (bez vstupu) a vrátí hodnoty přidružené k zadané vrstvě outputKey
.
outputKey
: Název vrstvy pro vrácení hodnot z. Interně metoda určuje požadovanou velikost vyrovnávací paměti dat pro výstup a přidělí potřebnou vyrovnávací paměť.
void Evaluate(Dictionary<string, List<T>> inputs, Dictionary<string, List<T>> outputs)
Tato metoda vyhodnotí síť pomocí zadaného vstupu a načte více výstupních vrstev.
inputs
: Slovník mapuje názvy vstupních vrstev na hodnoty, které se mají použít jako vstup do sítě.outputs
: Slovník mapuje názvy výstupních vrstev na hodnoty, které se mají načíst ze sítě.
List<T> Evaluate(Dictionary<string, List<T>> inputs, string outputKey, int outputSize)
Tato metoda vyhodnotí síť se zadaným vstupem a načte jednu výstupní vrstvu.
inputs
: Slovník mapuje názvy vstupních vrstev na hodnoty, které se mají použít jako vstup do sítě.outputKey
: název požadované výstupní vrstvy.outputSize
: počet hodnot ve výstupní vrstvě.
Tato metoda je zastaralá. Místo toho použijte metoduList<T> Evaluate(Dictionary<string, List<T>> inputs, string outputKey)
.
List<T> Evaluate(Dictionary<string, List<T>> inputs, string outputKey)
Tato metoda vyhodnotí síť se zadaným vstupem a načte jednu výstupní vrstvu.
inputs
: Slovník mapuje názvy vstupních vrstev na hodnoty, které se mají použít jako vstup do sítě.outputKey
: název požadované výstupní vrstvy.
Interně metoda určuje požadovanou velikost vyrovnávací paměti dat pro výstup a přidělí potřebnou vyrovnávací paměť.
List<T> EvaluateRgbImage(Bitmap image, string outputKey)
Tato metoda vyhodnotí rastrový obrázek a načte jednu výstupní vrstvu.
image
: rastrový obrázek vstup ve formátu RGB. Musí být již znovu nastavená tak, aby odpovídala velikosti očekávané síti.outputKey
: název požadované výstupní vrstvy.
Interně metoda nejprve extrahuje vektor funkce, který obsahuje 3 kanály, a pak ho jako vstup do sítě. Přidělí také potřebnou vyrovnávací paměť pro výstup.
Dictionary<string, int> GetNodeDimensions(NodeGroup nodeGroup)
Tato metoda vrátí slovník položek, přičemž každá položka mapuje název vrstvy (klíč) na velikost dimenze. Skupina uzlů je definována prostřednictvím výčtu NodeGroup
:
public enum class NodeGroup
{
nodeInput, // an input node
nodeOutput, // an output node
nodeSpecified
};
Spravovanému klientovi jsou k dispozici dvě implementace tohoto rozhraní:
class IEvaluateModelManagedF : IEvaluateModelManaged<float> // Assumes data elements of type float
a
class IEvaluateModelManagedD : IEvaluateModelManaged<double> // Assumes data elements of type double
Příklad
Program CSEvalClient umístěný zde ukazuje použití tohoto zkušebního rozhraní.