overzicht van CNTK gebruik
Als u CNTK wilt gebruiken, moet u de binaire bestanden van het bestand downloaden of de broncode downloaden en compileren op uw computer (details). Er zijn drie hoofdtaken (of acties) die worden ondersteund door CNTK:
- Trainen - Een netwerk definiëren en trainen om een getraind model te produceren met behulp van trainingsgegevens
- Evalueren - Een getraind model testen om de prestaties ervan te beoordelen met behulp van testgegevens
- Implementeren - Gebruik een getraind model, bijvoorbeeld in uw eigen oplossing, om nieuwe exemplaren te classificeren
Hieronder vindt u een kort overzicht van elk van deze taken en verwijst u naar een gedetailleerdere beschrijving. Daarnaast zijn er andere taken die CNTK ondersteunt, zoals het bewerken van bestaande modellen en het schrijven van knooppuntuitvoer naar een bestand. Een beschrijving hiervan vindt u in de sectie Geavanceerde onderwerpen op de pagina opdrachten op het hoogste niveau .
Een model trainen met behulp van CNTK
Het trainen van een neuraal netwerk met CNTK omvat drie onderdelen die moeten worden geconfigureerd:
- netwerk: het neurale netwerk, inclusief de structuur/formule, modelparameters. Hier worden ook trainingscriteria en evaluatiemetrieken opgenomen.
- lezer: hoe trainingsgegevens worden gelezen
- SGD: de hyperparameters van het stochastische kleurovergangsproces
U moet deze informatie opgeven via een configuratiebestand als het eerste argument bij het aanroepen van het uitvoerbare CNTK. Het configuratiebestand maakt gebruik van een specifieke syntaxis. Zie het overzicht van het configuratiebestand voor meer informatie over configuratiebestanden.
In het volgende voorbeeld gebruiken we de CNTK configuratie en resultaten uit het MNIST-voorbeeld, met name de configuratie '01_OneHidden_ndl_deprecated.cntk' (zie Image/GettingStarted en 01_OneHidden.cntk voor meer informatie).
De CNTK opdrachtregel voor dit voorbeeld iscntk configFile=01_OneHidden_ndl_deprecated.cntk
. Het volgende codefragment bevat een overzicht van de inhoud van het configuratiebestand die relevant is voor training.
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"
...
]
]
Het bovenstaande codefragment definieert een opdracht met action = "train"
de naam MNISTtrain
. Andere ondersteunde acties zijn bijvoorbeeld test
of write
. De deviceId
parameter geeft aan of cpu of GPU moet worden gebruikt. Als deze optie is ingesteld"auto"
, kiest CNTK het beste beschikbare apparaat. Stel deze in op -1
het gebruik van de CPU of op een waarde >=0 om een specifieke GPU te gebruiken. De modelPath
definitie bepaalt waar de tussenliggende en uiteindelijke getrainde modellen moeten worden opgeslagen. In dit voorbeeld wordt de ModelDir
variabele gebruikt die is gedefinieerd aan het begin van het configuratiebestand.
De drie belangrijkste configuratieblokken voor training definiëren het netwerk zelf en de parameters voor het trainingsalgoritmen en de gegevenslezer.
- Netwerkbouwer: hier definieert u de topologie en de details van het netwerk, zoals de grootte en het aantal lagen en het type knooppunten. U kunt de Simple Network Builder gebruiken voor standaardmodellen of de BrainScript Network Builder voor aangepaste modellen. Raadpleeg de bijbehorende pagina's voor meer informatie.
- Met dit blok kunt u het trainingsalgoritmen (stochastische gradiëntafname) parameteriseren. Configureerbare opties zijn momentum, adaptieve leersnelheid, adaptieve minibatchgrootte, parallelle training. Zie het SGD-blok voor meer informatie.
- lezer: het lezerblok definieert welke lezer moet worden gebruikt en waar de bijbehorende invoerbestanden zich bevinden. CNTK biedt verschillende gegevenslezers voor verschillende indelingen en taken (zie leesblok).
Ten slotte geeft de regel command = MNISTtrain
aan welke van de gedefinieerde taken moeten worden uitgevoerd. Als u meerdere taken opeenvolgend wilt uitvoeren, bijvoorbeeld training en evaluatie, voegt u gewoon meer taken toe aan de opdracht, gescheiden door een dubbele punt: command = "MNISTtrain:MNISTtest"
.
Een getraind model evalueren
Als u de nauwkeurigheid van een getraind model wilt evalueren, gebruikt u de eval
of test
opdracht (zie ook Trainen, Testen, Eval voor meer informatie). De bijbehorende configuratie in het MNIST 01_OneHidden.cntk-voorbeeld ziet er als volgt uit.
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" }
}
}
}
Het MNISTtest
blok maakt gebruik van action = "test"
. Voor de test
actie moet u een model definiëren dat moet worden gebruikt voor het testen met behulp van de modelPath
parameter. In dit voorbeeld is het modelPath
niet gedefinieerd in het MNISTtest
blok, maar op het hoogste niveau (zie het bovenstaande trainingsonderdeel) en wordt gebruikt door zowel de train
als test
de acties. In het reader
blok geeft u het gegevensbestand op dat moet worden gebruikt voor het testen, Test-28x28.txt
in het voorbeeld. Ten slotte moet u instellen command = MNISTtest
en uitvoeren cntk configFile=01_OneHidden_ndl_deprecated.cntk
om de test uit te voeren. Het resultaat op de opdrachtregel is:
Final Results: Minibatch[1-625]: errs = 2.39% * 10000; ce = 0.076812531 * 10000; Perplexity = 1.0798396
COMPLETED!
Een getraind model gebruiken in uw eigen code
Zodra u een model hebt getraind, hebt u de functionaliteit nodig om het model in uw doelomgeving te evalueren. CNTK biedt meerdere manieren om uw modellen in verschillende scenario's te bedienen. U kunt een getraind model gebruiken vanuit C++, Python, C# of andere .NET-talen. U kunt evaluatie uitvoeren op uw computer of in Azure. De sectie Evalueren CNTK Modellen (zie zijbalk) bevat veel details, waaronder evaluatie met behulp van C++/Python/C#/Azure.
Volgende stappen