Overzicht van BrainScript-configuratiebestand
Als u CNTK gebruikt u een opdrachtregel die vergelijkbaar cntk configFile=yourExp.cntk
is met waar yourExp.cntk een CNTK configuratiebestand is, dat meestal meerdere opdrachtblokken bevat. Een opdrachtblok is een blok op het hoogste niveau van de configuratie. Elk opdrachtblok moet opgeven welke actie moet worden uitgevoerd met gerelateerde informatie. Om configuratie- en opdrachtblokken te illustreren, gebruiken we hieronder een eenvoudig voorbeeld (uit het MNIST-voorbeeld).
rootDir = ".." # often, this is overwritten on the command line
configDir = "$rootDir$/Config"
dataDir = "$rootDir$/Data"
outputDir = "$rootDir$/Output"
modelDir = "$outputDir$/Models"
command = mnistTrain
mnistTrain = [
action = "train"
# network definition
BrainScriptNetworkBuilder = (new ComputationNetwork
include "$ConfigDir$/01_OneHidden.bs"
)
# SGD learner configuration
SGD = [
modelPath = "$ModelDir$/01_OneHidden_Model.dnn"
epochSize = 60000
minibatchSize = 32
learningRatesPerMB = 0.1
maxEpochs = 30
]
# reader configuration
reader = [
readerType = "CNTKTextFormatReader"
file = "$DataDir$/Train-28x28_cntk_text.txt"
input = [
features = [
dim = 784
format = "dense"
]
labels = [
dim = 10
format = "dense"
]
]
]
]
In dit voorbeeld ziet u dat alle configuratiewaarden zijn opgegeven als een naam-waardepaar. Een waarde kan een numerieke waarde, een tekenreeks, een lijst of zelfs een blok configuraties zijn. U kunt variabelen opgeven, zoals DataDir
in dit voorbeeld, en deze later in het script raadplegen met behulp van de notatie $DataDir$
.
De configuratieparameter command
op het hoogste niveau bepaalt welke opdrachtblokken moeten worden uitgevoerd en in welke volgorde ze worden uitgevoerd als er meer dan één opdrachtblok is opgegeven. In dit voorbeeld wordt het mnistTrain
opdrachtblok uitgevoerd. Met dit opdrachtblok wordt de actie opgegeven die moet worden uitgevoerd. Dit is train
in dit geval. Er zijn vaak drie parameterblokken gekoppeld aan de treinactie:
- een bouwsteen voor netwerkbouwer, die aangeeft hoe u een volledig nieuw netwerk bouwt en hoe u een model uit een bestaand modelbestand laadt,
- een leerblok, dat aangeeft welk trainingsalgoritmen moeten worden gebruikt,
- een lezerblok, waarmee wordt aangegeven waar en hoe u functies en labels laadt.
In dit specifieke voorbeeld wordt de netwerkbouwer die wordt aangegeven door het BrainScriptNetworkBuilder-blok gebruikt om het netwerk te definiëren, het stochastische gradiëntafname-algoritme zoals aangegeven door het SGD-blok wordt gebruikt om het model te trainen en de CNTK Text Format Reader wordt gebruikt om de functies en labels van bestanden in CNTK Tekstindeling te laden. Let op: lezers worden geïmplementeerd als afzonderlijke DLL's en de naam van de lezer is ook de naam van het DLL-bestand dat wordt geladen om gegevens te lezen.
De meest gebruikte configuratieblokken zijn:
- Network Builders
- SimpleNetworkBuilder - maakt een van de vooraf gedefinieerde netwerken met beperkte aanpassing.
- BrainScriptNetworkBuilder : maakt een netwerk dat is gedefinieerd met behulp van de netwerkbeschrijvingstaal van CNTK (BrainScript). Het biedt volledige flexibiliteit bij het ontwerpen van uw eigen netwerkbewerkingen en -structuur.
- Leerlingen
- SGD : gebruikt het stochastische gradiëntafname-algoritme om het model te trainen. Het is de gewenste trainer voor de meeste toepassingen.
- Gegevenslezers
- CNTK Lezer voor tekstopmaak: leest de op tekst gebaseerde CNTK-indeling, die ondersteuning biedt voor meerdere invoer die in hetzelfde bestand wordt gecombineerd.
- UCI Fast Reader (afgeschaft) - leest de op tekst gebaseerde UCI-indeling, die labels en functies in één bestand bevat.
- HTKMLF Reader - leest de HTK/MLF-indelingsbestanden, vaak gebruikt in spraakherkenningstoepassingen.
- LM Sequence Reader : leest tekstbestanden die woordreeksen bevatten, voor het voorspellen van woordreeksen. Dit wordt vaak gebruikt in taalmodellering.
- LU-reekslezer : leest op tekst gebaseerde bestanden die woordreeksen en hun labels bevatten. Dit wordt vaak gebruikt voor taalkennis.
In de volgende subsecties beschrijven we CNTK configuratie en de bovenstaande blokken in detail. U kunt ook naar de afzonderlijke blokken gaan met behulp van de koppelingen in de bovenstaande tekst.
Zie ook