Översikt över BrainScript-konfigurationsfil
Om du vill köra CNTK använder du en kommandorad som liknar cntk configFile=yourExp.cntk
den där yourExp.cntk är en CNTK konfigurationsfil, som vanligtvis innehåller flera kommandoblock. Ett kommandoblock är ett block på den översta nivån i konfigurationen. Varje kommandoblock måste ange vilken åtgärd som ska utföras med relaterad information. För att illustrera konfigurations- och kommandoblock använder vi ett enkelt exempel nedan (hämtat från MNIST-exemplet).
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"
]
]
]
]
I det här exemplet kan du se att alla konfigurationsvärden anges som ett namn/värde-par. Ett värde kan vara ett numeriskt värde, en sträng, en lista eller till och med ett block med konfigurationer. Du kan ange variabler, till exempel DataDir
i det här exemplet, och referera tillbaka till dem senare i skriptet med hjälp av notationen $DataDir$
.
Konfigurationsparametern command
på den översta nivån avgör vilka kommandoblock som ska köras och i vilken ordning de körs om fler än ett kommandoblock anges. I det här exemplet körs kommandoblocket mnistTrain
. Det här kommandoblocket anger vilken åtgärd som ska köras, vilket i det här fallet är train
. Det finns ofta tre parameterblock som är associerade med träningsåtgärden:
- ett block för nätverksbyggare, som anger hur du skapar ett nätverk från grunden och hur du läser in en modell från en befintlig modellfil.
- ett learner-block, som anger vilken träningsalgoritm som ska användas,
- ett läsarblock som anger var och hur du läser in funktioner och etiketter.
I det här specifika exemplet används nätverksbyggaren som anges av blocket BrainScriptNetworkBuilder för att definiera nätverket, inlärningsalgoritmen för stokastisk gradient descent som anges av SGD-blocket används för att träna modellen och CNTK Textformatläsare används för att läsa in funktioner och etiketter från filer i CNTK Text-format. Observera att läsare implementeras som separata DLL:er och att namnet på läsaren också är namnet på DLL-filen som läses in för att läsa data.
De vanligaste konfigurationsblocken är:
- Nätverksbyggare
- SimpleNetworkBuilder – skapar ett av de fördefinierade nätverken med begränsad anpassning.
- BrainScriptNetworkBuilder – skapar ett nätverk som definierats med hjälp av CNTK:s språk för nätverksbeskrivning (BrainScript). Det ger fullständig flexibilitet när du utformar din egen nätverksdrift och struktur.
- Elever
- SGD – använder algoritmen för stokastisk gradient descent för att träna modellen. Det är den önskade tränaren för de flesta applikationer.
- Dataläsare
- CNTK Textformatläsare – läser det textbaserade CNTK-formatet, som stöder flera indata som kombineras i samma fil.
- UCI Fast Reader (inaktuell) – läser det textbaserade UCI-formatet, som innehåller etiketter och funktioner som kombineras i en fil.
- HTKMLF Reader – läser HTK/MLF-formatfilerna, som ofta används i taligenkänningsprogram.
- LM-sekvensläsare – läser textbaserade filer som innehåller ordsekvenser för att förutsäga ordsekvenser. Detta används ofta i språkmodellering.
- LU-sekvensläsare – läser textbaserade filer som innehåller ordsekvenser och deras etiketter. Detta används ofta för språktolkning.
I följande underavsnitt beskriver vi CNTK konfiguration och ovanstående block i detalj. Du kan också hoppa till de enskilda blocken med hjälp av länkarna i texten ovan.
Se även