Share via


Übersicht über die Verwendung CNTK

Wenn Sie CNTK verwenden möchten, müssen Sie entweder die ausführbaren Binärdateien herunterladen oder den Quellcode herunterladen und auf Ihrem Computer kompilieren (Details). Es gibt drei Hauptaufgaben (oder Aktionen), die von CNTK unterstützt werden:

  • Train – Definieren eines Netzwerks und trainieren sie, um ein trainiertes Modell mithilfe von Schulungsdaten zu erstellen
  • Bewerten – Testen eines trainierten Modells, um seine Leistung mithilfe von Testdaten zu bewerten
  • Deploy - Verwenden eines trainierten Modells, z. B. in Ihrer eigenen Lösung, um neue Instanzen zu klassifizieren

Eine kurze Übersicht für jede dieser Aufgaben wird unten angegeben, und Zeiger auf eine detailliertere Beschreibung werden bereitgestellt. Darüber hinaus gibt es weitere Aufgaben, die CNTK unterstützen, z. B. vorhandene Modelle bearbeiten und Knotenausgaben in eine Datei schreiben. Eine Beschreibung dieser Informationen finden Sie im Abschnitt "Erweiterte Themen" auf der Seite " Befehle auf oberster Ebene".

Schulung eines Modells mit CNTK

Das Training eines neuralen Netzwerks mit CNTK umfasst drei Komponenten, die konfiguriert werden müssen:

  • Netzwerk: das neurale Netzwerk, einschließlich seiner Struktur/Formel, Modellparameter. Schulungskriterien und Bewertungsmetrik sind auch hier enthalten.
  • Leser: Wie Schulungsdaten gelesen werden
  • SGD: die Hyperparameter des stochastischen Farbverlaufsprozesses

Sie müssen diese Informationen über eine Konfigurationsdatei als erstes Argument bereitstellen, wenn Sie die CNTK ausführbare Datei aufrufen. Die Konfigurationsdatei verwendet eine bestimmte Syntax. Weitere Informationen zu Konfigurationsdateien finden Sie in der Konfigurationsdateiübersicht .

Im Folgenden verwenden wir die CNTK Konfiguration und ergebnisse aus dem MNIST-Beispiel, insbesondere die Konfiguration "01_OneHidden_ndl_deprecated.cntk" (siehe Image/GetStarted und 01_OneHidden.cntk für vollständige Details).

Die CNTK Befehlszeile für dieses Beispiel ist cntk configFile=01_OneHidden_ndl_deprecated.cntk. Im folgenden Codeausschnitt finden Sie einen Überblick über die Konfigurationsdateiinhalte, die für Schulungen relevant sind.

modelDir = "$OutputDir$/Models"
deviceId = 0
command = MNISTtrain

modelPath = "$modelDir$/01_OneHidden"

MNISTtrain = [
    action = "train"

    # network definition   
    BrainScriptNetworkBuilder = (new ComputationNetwork
        include "$ConfigDir$/01_OneHidden.bs"
    )

    # learner configuration       
    SGD = [
        ...
    ]

    # reader configuration   
    reader = [
        readerType = "CNTKTextFormatReader"
        file = "$DataDir$/Train-28x28_cntk_text.txt"
        ...
    ]    
]

Der obige Codeausschnitt definiert einen Befehl namens ".MNISTtrainaction = "train" Andere unterstützte Aktionen sind z. B test . oder write. Der deviceId Parameter gibt an, ob CPU oder GPU verwendet werden sollen. Wenn sie auf "auto"", CNTK festgelegt ist, wählen Sie das beste verfügbare Gerät aus. Legen Sie ihn -1 fest, um die CPU oder einen Wert >=0 zu verwenden, um eine bestimmte GPU zu verwenden. Die modelPath definiert, wo die Zwischen- und Endmodelle gespeichert werden sollen. In diesem Beispiel wird die variable verwendet, die ModelDir am Anfang der Konfigurationsdatei definiert ist.

Die drei Hauptkonfigurationsblöcke für Schulungen definieren das Netzwerk selbst und die Parameter für den Schulungsalgorithmus und den Datenleser.

  • Netzwerk-Generator – hier definieren Sie die Topologie und die Details des Netzwerks, z. B. die Größe und Anzahl der Ebenen und den Typ von Knoten. Sie können den Einfachen Netzwerk-Generator für Standardmodelle oder den BrainScript-Netzwerk-Generator für benutzerdefinierte verwenden. Weitere Informationen finden Sie auf den entsprechenden Seiten.
  • SGD – Dieser Block ermöglicht ihnen die Parameterisierung des Schulungsalgorithmus (stochastische Farbverlaufsabstieg). Konfigurierbare Optionen umfassen Dynamik, adaptive Lernrate, adaptive Minibatchgröße, parallele Schulung. Weitere Details finden Sie im SGD-Block .
  • Reader - der Leseblock definiert, welche Reader verwendet werden sollen und wo die entsprechenden Eingabedateien sind. CNTK bietet mehrere Datenleser für verschiedene Formate und Aufgaben (siehe Reader-Block).

Schließlich gibt die Zeile command = MNISTtrain an, welche der definierten Vorgänge ausgeführt werden sollen. Um mehrere Aufgaben fortlaufend auszuführen, z. B. Schulung und Auswertung, fügen Sie einfach weitere Aufgaben zum Befehl hinzu, die durch einen Doppelpunkt getrennt sind: command = "MNISTtrain:MNISTtest"

Bewerten eines trainierten Modells

Um die Genauigkeit eines trainierten Modells zu bewerten, verwenden Sie den evaltest Befehl oder den Befehl (siehe auch "Train", "Test", "Eval " für vollständige Details). Die entsprechende Konfiguration im MNIST 01_OneHidden.cntk-Beispiel sieht wie folgt aus.

testNetwork = {
    action = "test"
    minibatchSize = 1024    # reduce this if you run out of memory

    reader = {
        readerType = "CNTKTextFormatReader"
        file = "$DataDir$/Test-28x28_cntk_text.txt"
        input = {
            features = { dim = 784 ; format = "dense" }
            labels =   { dim = 10  ; format = "dense" }
        }
    }
}

Der MNISTtest Block verwendet action = "test". Für die test Aktion müssen Sie ein Modell definieren, das zum Testen mithilfe des modelPath Parameters verwendet werden soll. In diesem Beispiel wird der modelPath Block nicht definiert MNISTtest , sondern auf oberster Ebene (siehe Schulungsteil oben) und wird von den traintest beiden Aktionen verwendet. Innerhalb des reader Blocks geben Sie die Datendatei an, die zum Testen verwendet werden soll, Test-28x28.txt im Beispiel. Schließlich müssen Sie den Test festlegen command = MNISTtest und ausführen cntk configFile=01_OneHidden_ndl_deprecated.cntk . Das Ergebnis der Befehlszeile lautet:

Final Results: Minibatch[1-625]: errs = 2.39% * 10000; ce = 0.076812531 * 10000; Perplexity = 1.0798396
COMPLETED!

Verwenden eines trainierten Modells in Ihrem eigenen Code

Nachdem Sie ein Modell trainiert haben, benötigen Sie die Funktionalität, um das Modell in Ihrer Zielumgebung zu bewerten. CNTK bietet mehrere Möglichkeiten, Ihre Modelle in verschiedenen Szenarien zu bedienen. Sie können ein trainiertes Modell von C++, Python, C# oder anderen .NET-Sprachen verwenden. Sie können die Auswertung auf Ihrem Computer oder in Azure ausführen. Der Abschnitt "Auswertung CNTK Modelle" (siehe Sidebar) verfügt über viele Details, einschließlich Auswertung mit C++/Python/C#/Azure.

Nächste Schritte