Freigeben über


CNTK Ausgeblendete Ebenen auswerten

Auf dieser Seite wird beschrieben, wie sie die Werte des ausgeblendeten Modells eines trainierten Modells verfügbar machen.

Übersicht

Ein CNTK Modell basiert auf verbundenen Ebenen. Einige dieser Ebenen können mithilfe EvalDll der als "Ausgabe"-Ebenen gekennzeichneten Ebenen ausgewertet werden. Um andere Ebenen über die EvalDllEigenschaft verfügbar zu machen, müssen diese Ebenen als Ausgabeebenen gekennzeichnet werden, indem sie der outputNodes Eigenschaft hinzugefügt werden.

Beispielsweise bezieht sich die Konfigurationsdatei auf die Datei für die 01_OneHidden_ndl_deprecated.cntk01_OneHidden.ndl Netzwerkdefinition. In dieser Netzwerkbeschreibungsdatei haben wir zwei Ebenen definiert:

h1 = DNNSigmoidLayer (featDim, hiddenDim, featScaled, 1)  
ol = DNNLayer (hiddenDim, labelDim, h1, 1)  

Aber nur eine Ebene wird als Ausgabe markiert:

outputNodes = (ol)

Dies gibt daher nur Werte zurück, die EvalDll sich auf die Ebene während der ol Auswertung beziehen.

Um die h1 ausgeblendete Ebene auszuwerten, müssen wir sie zuerst als Ausgabeknoten verfügbar machen. Es gibt drei mögliche Möglichkeiten:

1. Schulungsmodell mit ausgeblendeten Ebenen verfügbar gemacht

Um die Ebene auszugeben, fügen Sie es einfach als Ausgabe in der Netzwerkbeschreibung (01_OneHidden.bsDatei) beim Training hinzu, und diese Ebene wäre für das Lesen während der h1 Auswertung verfügbar:

outputNodes = (h1:ol)

Dies bedeutet jedoch, dass das Modell mit dieser Konfiguration (neu)trainiert werden muss.

2. Ändern eines bereits trainierten Modells

Modelle können beim Laden mit BrainScript-Ausdrücken geändert werden. Dies wird in einer zukünftigen Aktualisierung dieser Dokumentation dokumentiert.

3. Ändern des Ausgabeknotensatzes eines bereits trainierten Modells beim Laden für die Auswertung mithilfe der EvalDll/EvalDllWrapper Module

Wenn ein trainiertes Objekt mithilfe der EvalDll/EvalDllWrapper Module ausgewertet wird, können Sie die outputNodeNames Eigenschaft mit einer getrennten Doppelpunktliste zu der Netzwerkdefinition hinzufügen:

outputNodeNames = "h1.z:ol.z"

Beim Laden des Netzwerks erkennt das Eval-Modul die outputNodeNames Eigenschaft und ersetzt die Ausgabeknoten des Modells durch die Liste der in der outputNodeNames Eigenschaft angegebenen Knoten.

Wenn Sie den Code im CPPEvalClient Beispielprojekt betrachten, zeigt die Zeile (unkommentiert) an, die die Eigenschaft angibt outputNodeNames :

networkConfiguration += "outputNodeNames=\"h1.z:ol.z\"\n";
networkConfiguration += "modelPath=\"" + modelFilePath + "\"";
model->CreateNetwork(networkConfiguration);

Das Ausführen des Programms zeigt die entsprechende Ausgabe für die h1.z Ebene an.