Dela via


Ö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