Udostępnij za pośrednictwem


Omówienie pliku konfiguracji brainScript

Aby uruchomić CNTK należy użyć wiersza polecenia podobnego do cntk configFile=yourExp.cntk tego, gdzie yourExp.cntk jest plikiem konfiguracji CNTK, który zazwyczaj zawiera kilka bloków poleceń. Blok poleceń jest blokiem najwyższego poziomu konfiguracji. Każdy blok poleceń musi określać, jaką akcję należy wykonać z powiązanymi informacjami. Aby zilustrować bloki konfiguracji i poleceń, użyjemy prostego przykładu poniżej (pobranego z przykładu MNIST).

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"
            ]
        ]
    ]
]

W tym przykładzie można zauważyć, że wszystkie wartości konfiguracji są określane jako para nazwa-wartość. Wartość może być wartością liczbową, ciągiem, listą, a nawet blokiem konfiguracji. Możesz określić zmienne, takie jak DataDir w tym przykładzie, i odwołać się do nich w dalszej części skryptu, używając notacji $DataDir$.

Parametr command konfiguracji najwyższego poziomu określa, jakie bloki poleceń mają być wykonywane i w jakiej kolejności są wykonywane, jeśli określono więcej niż jeden blok poleceń. W tym przykładzie mnistTrain zostanie wykonany blok poleceń. Ten blok poleceń określa akcję do wykonania, która jest train w tym przypadku. Często istnieją trzy bloki parametrów skojarzone z akcją pociągu:

  • blok konstruktora sieci, który określa, jak utworzyć sieć od podstaw i jak załadować model z istniejącego pliku modelu,
  • blok ucznia, który określa, jakiego algorytmu trenowania użyć,
  • blok czytnika, który określa, gdzie i jak ładować funkcje i etykiety.

W tym konkretnym przykładzie konstruktor sieci wskazany przez blok BrainScriptNetworkBuilder służy do definiowania sieci, stochastycznego algorytmu uczenia spadku gradientu wskazanego przez blok SGD jest używany do trenowania modelu, a czytnik formatu tekstu CNTK służy do ładowania funkcji i etykiet z plików w formacie CNTK Text. Należy pamiętać, że czytniki są implementowane jako oddzielne biblioteki DLL, a nazwa czytnika jest również nazwą pliku DLL, który zostanie załadowany do odczytu danych.

Najczęściej używane bloki konfiguracji to:

  • Konstruktorzy sieci
    • SimpleNetworkBuilder — tworzy jedną ze wstępnie zdefiniowanych sieci z ograniczonym dostosowaniem.
    • BrainScriptNetworkBuilder — tworzy sieć zdefiniowaną przy użyciu języka opisu sieci CNTK (BrainScript). Zapewnia pełną elastyczność projektowania własnych operacji i struktury sieci.
  • Uczniów
    • SGD — używa algorytmu spadku gradientu stochastycznego do trenowania modelu. Jest to pożądany trener dla większości aplikacji.
  • Czytelnicy danych
    • CNTK Czytnik formatów tekstu — odczytuje format CNTK oparty na tekście, który obsługuje wiele danych wejściowych połączonych w tym samym pliku.
    • UCI Fast Reader (przestarzały) — odczytuje tekstowy format UCI, który zawiera etykiety i funkcje połączone w jednym pliku.
    • Czytnik HTKMLF — odczytuje pliki formatu HTK/MLF, często używane w aplikacjach rozpoznawania mowy.
    • Czytnik sekwencji LM — odczytuje pliki tekstowe zawierające sekwencje wyrazów w celu przewidywania sekwencji słów. Jest to często używane w modelowaniu języka.
    • Czytelnik sekwencji LU — odczytuje pliki tekstowe zawierające sekwencje wyrazów i ich etykiety. Jest to często używane do zrozumienia języka.

W poniższych podsekcjach szczegółowo opiszemy konfigurację CNTK i powyższe bloki. Możesz również przejść do poszczególnych bloków przy użyciu linków w powyższym tekście.

Zobacz też