EvalDLL C# API
Dostępny jest interfejs zarządzany do oceny modeli bez konieczności odczytywania danych ani plików danych. Ten interfejs jest implementowany w kodzie zarządzanym interfejsu EvalWrapper
wiersza polecenia wewnątrz biblioteki. Ta biblioteka z kolei używa Evaldll
biblioteki do przeprowadzania rzeczywistych ocen sieci (w natywnym języku C++).
Nazwa interfejsu zarządzanego (w języku C#) jest następująca:
public interface IEvaluateModelManaged<T> : IDisposable
Gdzie T
jest typem elementu (float
lub double
)
Ten interfejs udostępnia następujące metody:
void Init(string config)
Ta metoda inicjuje aparat oceny przy użyciu określonego pliku konfiguracji. Wpisy z pliku konfiguracji są analizowane i przypisywane do aparatu oceny, jednak sieć nie jest tworzona wewnątrz tego wywołania. Ponadto ta metoda domyślnie numCPUThreads
ustawi właściwość na 1
wartość , chyba że plik konfiguracji zawiera inną wartość dla tej właściwości.
void CreateNetwork(string networkDescription)
Ta metoda kompiluje sieć z opisu sieci w pliku konfiguracji lub jeśli modelPath
określono atrybut, ładuje model z dysku.
networkDescription
: zawiera opis sieci za pośrednictwem wpisu NetworkBuilder atrybutu modelPath.
void CreateNetwork(string networkDescription, List<string> outputNodeNames)
Ta metoda kompiluje sieć z opisu sieci w pliku konfiguracji lub jeśli modelPath
określono atrybut, ładuje model z dysku. Ponadto zastępuje listę węzłów wyjściowych z pliku konfiguracji, a lista przekazana jako argument. Dzięki temu obiekt wywołujący może pobierać wartości wyjściowe innych węzłów, takich jak te w ukrytych warstwach.
networkDescription
: zawiera opis sieci za pośrednictwem wpisu NetworkBuilder atrybutu modelPath.outputNodeNames
: lista węzłów, które mają być oznaczone jako dane wyjściowe, aby można je było ocenić.
void CreateNetwork(string networkDescription, int deviceId)
Ta metoda tworzy sieć z opisu sieci w pliku konfiguracji. Jest to tylko metoda wygody, która poprzedza deviceId=<deviceId>
networkDescription
tekst.
networkDescription
: zawiera opis sieci za pośrednictwemNetworkBuilder
właściwości lub atrybutumodelPath
.deviceId
: określa wartość identyfikatora urządzenia, która ma poprzedzać właściwość opisudeviceId
sieci.
void CreateNetwork(string networkDescription, int deviceId, List<string> outputNodeNames)
Ta metoda tworzy sieć z opisu sieci w pliku konfiguracji. Jest to tylko metoda wygody, która poprzedza deviceId=<deviceId>
networkDescription
tekst.
networkDescription
: zawiera opis sieci za pośrednictwem wpisu NetworkBuilder atrybutu modelPath.deviceId
: określa wartość identyfikatora urządzenia, która ma poprzedzać właściwość opisudeviceId
sieci.outputNodeNames
: lista węzłów, które mają być oznaczone jako dane wyjściowe, aby można je było ocenić.
List<T> Evaluate(string outputKey, int outputSize)
Ta metoda ocenia sieć za pomocą pojedynczego przekazywania do przodu (bez danych wejściowych) i zwraca wartości skojarzone z określoną warstwą outputKey
.
outputKey
: nazwa warstwy, z których mają być zwracane wartości.outputSize
: liczba wartości w warstwie wyjściowej.
Ta metoda jest przestarzała. Zamiast tego należy użyćList<T> Evaluate(string outputKey)
metody .
List<T> Evaluate(string outputKey)
Ta metoda ocenia sieć za pomocą pojedynczego przekazywania do przodu (bez danych wejściowych) i zwraca wartości skojarzone z określoną warstwą outputKey
.
outputKey
: nazwa warstwy, z których mają być zwracane wartości. Wewnętrznie metoda określa wymagany rozmiar buforu danych dla danych wyjściowych i przydziela niezbędny bufor.
void Evaluate(Dictionary<string, List<T>> inputs, Dictionary<string, List<T>> outputs)
Ta metoda ocenia sieć przy użyciu podanych danych wejściowych i pobiera wiele warstw wyjściowych.
inputs
: słownik mapuje nazwy warstw wejściowych na wartości, które mają być używane jako dane wejściowe w sieci.outputs
: słownik mapowania nazw warstw wyjściowych na wartości do pobrania z sieci.
List<T> Evaluate(Dictionary<string, List<T>> inputs, string outputKey, int outputSize)
Ta metoda ocenia sieć z podanymi danymi wejściowymi i pobiera pojedynczą warstwę danych wyjściowych
inputs
: słownik mapuje nazwy warstw wejściowych na wartości, które mają być używane jako dane wejściowe w sieci.outputKey
: nazwa żądanej warstwy wyjściowej.outputSize
: liczba wartości w warstwie wyjściowej.
Ta metoda jest przestarzała. Zamiast tego należy użyćList<T> Evaluate(Dictionary<string, List<T>> inputs, string outputKey)
metody .
List<T> Evaluate(Dictionary<string, List<T>> inputs, string outputKey)
Ta metoda ocenia sieć z podanymi danymi wejściowymi i pobiera pojedynczą warstwę danych wyjściowych
inputs
: słownik mapuje nazwy warstw wejściowych na wartości, które mają być używane jako dane wejściowe w sieci.outputKey
: nazwa żądanej warstwy wyjściowej.
Wewnętrznie metoda określa wymagany rozmiar buforu danych dla danych wyjściowych i przydziela niezbędny bufor.
List<T> EvaluateRgbImage(Bitmap image, string outputKey)
Ta metoda ocenia obraz mapy bitowej i pobiera pojedynczą warstwę wyjściową
image
: dane wejściowe obrazu mapy bitowej w formacie RGB. Rozmiar musi być już zmieniany, aby był zgodny z rozmiarem oczekiwanym przez sieć.outputKey
: nazwa żądanej warstwy wyjściowej.
Metoda najpierw wyodrębnia wektor funkcji zawierający 3 kanały, a następnie przekaże go jako dane wejściowe do sieci. Przydziela również niezbędny bufor dla danych wyjściowych.
Dictionary<string, int> GetNodeDimensions(NodeGroup nodeGroup)
Ta metoda zwraca słownik elementów, a każdy element mapuje nazwę warstwy (klucz) na rozmiar wymiaru. Grupa węzłów jest definiowana NodeGroup
za pomocą wyliczenia:
public enum class NodeGroup
{
nodeInput, // an input node
nodeOutput, // an output node
nodeSpecified
};
Istnieją dwie implementacje tego interfejsu dostępne dla zarządzanego klienta:
class IEvaluateModelManagedF : IEvaluateModelManaged<float> // Assumes data elements of type float
oraz
class IEvaluateModelManagedD : IEvaluateModelManaged<double> // Assumes data elements of type double
Przykład
Program CSEvalClient znajdujący się tutaj demonstruje użycie tego interfejsu oceny.