přehled využití CNTK
Pokud chcete použít CNTK potřebujete stáhnout spustitelné binární soubory nebo stáhnout zdrojový kód a zkompilovat ho na svém počítači (podrobnosti). Existují tři hlavní úlohy (nebo akce), které CNTK podporují:
- Trénování – definování sítě a jeho trénování k vytvoření vytrénovaného modelu pomocí trénovacích dat
- Vyhodnocení – testování vytrénovaného modelu k posouzení jeho výkonu pomocí testovacích dat
- Nasazení – k klasifikaci nových instancí použijte trénovaný model, například ve vlastním řešení.
Níže je uveden stručný přehled pro každý z těchto úkolů a zobrazí se podrobnější popis. Kromě toho existují další úlohy, které CNTK podporují, jako jsou úpravy existujících modelů a výstupy uzlů zápisu do souboru. Popis těchto témat najdete v části Upřesnit témata na stránce příkazů nejvyšší úrovně .
Trénování modelu pomocí CNTK
Trénování neurální sítě pomocí CNTK zahrnuje tři komponenty, které je potřeba nakonfigurovat:
- síť: neurální síť, včetně její struktury nebo vzorce, parametrů modelu. Zde jsou zahrnuta také kritéria trénování a metrika hodnocení.
- čtenář: jak se trénovací data čtou
- SGD: hyper-parametry procesu stochastic-gradient
Tyto informace musíte zadat prostřednictvím konfiguračního souboru jako prvního argumentu při volání spustitelného souboru CNTK. Konfigurační soubor používá konkrétní syntaxi. Podrobnosti o konfiguračních souborech najdete v přehledu konfiguračních souborů.
V následujícím příkladu používáme konfiguraci CNTK a výsledky z příkladu MNIST, zejména konfigurace 01_OneHidden_ndl_deprecated.cntk (podrobnosti najdete v tématu Obrázek/GettingStarted a 01_OneHidden.cntk).
Příkazový řádek CNTK pro tento příklad je cntk configFile=01_OneHidden_ndl_deprecated.cntk
. Následující fragment kódu poskytuje přehled obsahu konfiguračního souboru, který je relevantní pro trénování.
modelDir = "$OutputDir$/Models"
deviceId = 0
command = MNISTtrain
modelPath = "$modelDir$/01_OneHidden"
MNISTtrain = [
action = "train"
# network definition
BrainScriptNetworkBuilder = (new ComputationNetwork
include "$ConfigDir$/01_OneHidden.bs"
)
# learner configuration
SGD = [
...
]
# reader configuration
reader = [
readerType = "CNTKTextFormatReader"
file = "$DataDir$/Train-28x28_cntk_text.txt"
...
]
]
Výše uvedený fragment kódu definuje příkaz volaný MNISTtrain
pomocí action = "train"
. Další podporované akce jsou například test
nebo write
. Parametr deviceId
určuje, jestli se má použít procesor nebo GPU. Pokud je nastavená hodnota "auto"
, CNTK vybere nejlepší dostupné zařízení. Nastavte ho tak, aby -1
používal procesor nebo hodnotu >=0 pro použití konkrétního GPU. Definuje modelPath
, kam se mají ukládat přechodné a konečné natrénované modely. V tomto příkladu používá proměnnou ModelDir
definovanou na začátku konfiguračního souboru.
Tři hlavní bloky konfigurace pro trénování definují samotnou síť a parametry pro trénovací algoritmus a čtenář dat.
- Tvůrce sítě – tady definujete topologii a podrobnosti o síti, například velikost a počet vrstev a typ uzlů. Jednoduchý Network Builder můžete použít pro standardní modely nebo Nástroj BrainScript Network Builder pro vlastní. Podrobnosti najdete na odpovídajících stránkách.
- SGD – tento blok umožňuje parametrizovat trénovací algoritmus (stochastický gradientní sestup). Konfigurovatelné možnosti zahrnují dynamiku, adaptivní rychlost učení, adaptivní velikost minibatchu, paralelní trénování. Další podrobnosti najdete v bloku SGD .
- čtečka – blok čtečky definuje, kterou čtečce se mají používat a kde jsou odpovídající vstupní soubory. CNTK poskytuje několik čteček dat pro různé formáty a úlohy (viz blok čtenáře).
Nakonec řádek command = MNISTtrain
určuje, které z definovaných úloh se mají provést. Pokud chcete provést několik úkolů po sobě, například trénování a vyhodnocení, stačí do příkazu odděleného dvojtečkam přidat další úkoly: command = "MNISTtrain:MNISTtest"
.
Vyhodnocení vytrénovaného modelu
K vyhodnocení přesnosti vytrénovaného modelu použijte eval
příkaz nebo test
příkaz (podrobnosti najdete také v tématu Trénování, Testování, Eval ). Odpovídající konfigurace v příkladu MNIST 01_OneHidden.cntk vypadá takto.
testNetwork = {
action = "test"
minibatchSize = 1024 # reduce this if you run out of memory
reader = {
readerType = "CNTKTextFormatReader"
file = "$DataDir$/Test-28x28_cntk_text.txt"
input = {
features = { dim = 784 ; format = "dense" }
labels = { dim = 10 ; format = "dense" }
}
}
}
Blok MNISTtest
používá action = "test"
. test
Pro akci musíte definovat model, který by se měl použít k testování pomocí parametrumodelPath
. V tomto příkladu modelPath
MNISTtest
není definován uvnitř bloku, ale na nejvyšší úrovni (viz část trénování výše) a používá se jak akce train
test
, tak akce. reader
Uvnitř bloku zadáte datový soubor, který se má použít k testování, Test-28x28.txt
v příkladu. Nakonec musíte nastavit command = MNISTtest
a spustit cntk configFile=01_OneHidden_ndl_deprecated.cntk
, abyste mohli provést testování. Výsledek na příkazovém řádku je:
Final Results: Minibatch[1-625]: errs = 2.39% * 10000; ce = 0.076812531 * 10000; Perplexity = 1.0798396
COMPLETED!
Použití vytrénovaného modelu ve vlastním kódu
Jakmile model vytrénujete, potřebujete funkce k vyhodnocení modelu v cílovém prostředí. CNTK nabízí různé způsoby, jak modely obsluhovat v různých scénářích. Trénovaný model můžete použít z jazyků C++, Python, C# nebo jiných jazyků .NET. Zkušební verzi můžete spustit na svém počítači nebo v Azure. Část Vyhodnocení modelů CNTK (viz boční panel) obsahuje mnoho podrobností, včetně vyhodnocení pomocí C++/Python/C#/Azure.
Další kroky