Dela via


CNTK användningsöversikt

Om du vill använda CNTK måste du antingen ladda ned de körbara binärfilerna eller ladda ned källkoden och kompilera den på datorn (information). Det finns tre huvuduppgifter (eller åtgärder) som stöds av CNTK:

  • Träna – Definiera ett nätverk och träna det att skapa en tränad modell med hjälp av träningsdata
  • Utvärdera – Testa en tränad modell för att utvärdera dess prestanda med hjälp av testdata
  • Distribuera – Använd en tränad modell, t.ex. i din egen lösning, för att klassificera nya instanser

En kort översikt över var och en av dessa uppgifter ges nedan och en mer detaljerad beskrivning ges. Dessutom finns det andra uppgifter som CNTK stöder, till exempel att redigera befintliga modeller och skriva nodutdata till en fil. En beskrivning av dessa finns i avsnittet Avancerade ämnen på kommandosidan på den översta nivån .

Träna en modell med hjälp av CNTK

Träning av ett neuralt nätverk med CNTK omfattar tre komponenter som måste konfigureras:

  • nätverk: det neurala nätverket, inklusive dess struktur/formel, modellparametrar. Träningskriterier och utvärderingsmått ingår också här.
  • läsare: hur träningsdata läse
  • SGD: hyperparametrarna i stochastic-gradient-processen

Du måste ange den här informationen via en konfigurationsfil som det första argumentet när du anropar CNTK körbara filen. Konfigurationsfilen använder en specifik syntax. Mer information om konfigurationsfiler finns i Översikt över konfigurationsfiler .

I följande använder vi CNTK konfiguration och resultat från MNIST-exemplet, särskilt konfigurationen "01_OneHidden_ndl_deprecated.cntk" (se Image/GettingStarted och 01_OneHidden.cntk för fullständig information).

Kommandoraden CNTK för det här exemplet är cntk configFile=01_OneHidden_ndl_deprecated.cntk. Följande kodfragment ger en översikt över det konfigurationsfilinnehåll som är relevant för träning.

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

Kodfragmentet ovan definierar ett kommando med namnet MNISTtrain med action = "train". Andra åtgärder som stöds är till exempel test eller write. Parametern deviceId anger om cpu eller GPU ska användas. När värdet är "auto"väljer CNTK den bästa tillgängliga enheten. Ange till att -1 använda PROCESSORn eller till ett värde >=0 för att använda en specifik GPU. modelPath definierar var de mellanliggande och slutgiltiga tränade modellerna ska lagras. I det här exemplet används variabeln ModelDir som definierades i början av konfigurationsfilen.

De tre huvudsakliga konfigurationsblocken för träning definierar själva nätverket och parametrarna för träningsalgoritmen och dataläsaren.

  • Nätverksbyggare – här definierar du topologin och information om nätverket, till exempel storlek och antal lager och typ av noder. Du kan använda Simple Network Builder för standardmodeller eller BrainScript Network Builder för anpassade. Mer information finns på motsvarande sidor.
  • SGD – med det här blocket kan du parametrisera träningsalgoritmen (stochastic gradient descent). Konfigurerbara alternativ inkluderar momentum, anpassningsbar inlärningstakt, anpassningsbar minibatchstorlek, parallell träning. Mer information finns i SGD-block .
  • reader – läsarblocket definierar vilken läsare som ska användas och var motsvarande indatafiler finns. CNTK tillhandahåller flera dataläsare för olika format och uppgifter (se Läsarblock).

Slutligen anger raden command = MNISTtrain vilka av de definierade aktiviteter som ska köras. Om du vill köra flera uppgifter i följd, t.ex. träning och utvärdering, lägger du helt enkelt till fler uppgifter i kommandot avgränsade med ett kolon: command = "MNISTtrain:MNISTtest".

Utvärdera en tränad modell

Om du vill utvärdera en tränad modells noggrannhet använder eval du kommandot eller test (se även Träna, Testa, Eval för fullständig information). Motsvarande konfiguration i exemplet MNIST 01_OneHidden.cntk ser ut så här.

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

Blocket MNISTtest använder action = "test". För åtgärden test måste du definiera en modell som ska användas för testning med hjälp av parametern modelPath . I det här exemplet modelPath definieras inte inuti MNISTtest blocket utan på den översta nivån (se träningsdelen ovan) och används av både train åtgärderna och test . reader I blocket anger du den datafil som ska användas för testning, Test-28x28.txt i exemplet. Slutligen måste du ange command = MNISTtest och köra cntk configFile=01_OneHidden_ndl_deprecated.cntk för att köra testningen. Resultatet på kommandoraden är:

Final Results: Minibatch[1-625]: errs = 2.39% * 10000; ce = 0.076812531 * 10000; Perplexity = 1.0798396
COMPLETED!

Använda en tränad modell i din egen kod

När du har tränat en modell behöver du funktionerna för att utvärdera modellen i målmiljön. CNTK tillhandahåller flera sätt att hantera dina modeller i olika scenarier. Du kan använda en tränad modell från C++, Python, C# eller andra .NET-språk. Du kan köra utvärderingsversionen på datorn eller i Azure. Avsnittet Utvärdera CNTK modeller (se sidopanelen) innehåller många detaljer, inklusive utvärdering med hjälp av C++/Python/C#/Azure.

Nästa steg