Sdílet prostřednictvím


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 modelPathMNISTtest není definován uvnitř bloku, ale na nejvyšší úrovni (viz část trénování výše) a používá se jak akce traintest , 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