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ż