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 EvalDll
Eigenschaft 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.cntk
01_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.bs
Datei) 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.