panoramica dell'utilizzo CNTK

Per usare CNTK è necessario scaricare i file binari eseguibili o scaricare il codice sorgente e compilarlo nel computer (dettagli). Esistono tre attività principali (o azioni) supportate da CNTK:

  • Training - Definire una rete e eseguirne il training per produrre un modello sottoposto a training usando i dati di training
  • Valutare : testare un modello sottoposto a training per valutare le prestazioni usando i dati di test
  • Deploy - Usare un modello sottoposto a training, ad esempio nella propria soluzione, per classificare nuove istanze

Viene fornita una breve panoramica per ognuna di queste attività e vengono forniti puntatori a una descrizione più dettagliata. Sono inoltre disponibili altre attività che CNTK supportano, ad esempio modificare i modelli esistenti e scrivere gli output dei nodi in un file. Una descrizione di queste informazioni viene fornita nella sezione Argomenti avanzati nella pagina Comandi di primo livello .

Training di un modello usando CNTK

Il training di una rete neurale con CNTK implica tre componenti che devono essere configurati:

  • rete: la rete neurale, inclusa la relativa struttura/formula, i parametri del modello. I criteri di training e la metrica di valutazione sono inclusi anche qui.
  • lettore: come leggere i dati di training
  • SGD: i parametri hyper-parameters del processo stochastic-gradient

È necessario fornire queste informazioni tramite un file di configurazione come primo argomento quando si chiama l'eseguibile CNTK. Il file di configurazione usa una sintassi specifica. Per informazioni dettagliate sui file di configurazione, vedere Panoramica del file di configurazione .

Di seguito viene usata la configurazione CNTK e i risultati dell'esempio MNIST, in particolare la configurazione "01_OneHidden_ndl_deprecated.cntk" (vedere Image/GettingStarted e 01_OneHidden.cntk per informazioni complete).

La riga di comando CNTK per questo esempio è cntk configFile=01_OneHidden_ndl_deprecated.cntk. Il frammento di codice seguente fornisce una panoramica del contenuto del file di configurazione pertinente per il training.

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

Il frammento di codice precedente definisce un comando denominato MNISTtrain con action = "train". Altre azioni supportate sono ad esempio test o write. Il deviceId parametro specifica se usare CPU o GPU. Se impostato su "auto", CNTK sceglierà il dispositivo più disponibile. Impostarlo su -1 per usare la CPU o su un valore >=0 per usare una GPU specifica. Definisce modelPath dove archiviare i modelli intermedi e finali sottoposti a training. In questo esempio viene usata la variabile definita all'inizio ModelDir del file di configurazione.

I tre blocchi di configurazione principali per il training definiscono la rete stessa e i parametri per l'algoritmo di training e il lettore dati.

  • Generatore di rete: qui si definiscono la topologia e i dettagli della rete, ad esempio le dimensioni e il numero di livelli e il tipo di nodi. È possibile usare Simple Network Builder per modelli standard o BrainScript Network Builder per quelli personalizzati. Per informazioni dettagliate, vedere le pagine corrispondenti.
  • SGD: questo blocco consente di parametrizzare l'algoritmo di training (discesa sfumatura stochastica). Le opzioni configurabili includono slancio, frequenza di apprendimento adattivo, dimensioni minibatch adattive, training parallelo. Per altre informazioni, vedere Blocco SGD .
  • reader: il blocco lettore definisce il lettore da usare e dove sono i file di input corrispondenti. CNTK offre diversi lettori di dati per diversi formati e attività (vedere Blocco lettore).

Infine, la riga command = MNISTtrain specifica quale delle attività definite da eseguire. Per eseguire diverse attività consecutivamente, ad esempio il training e la valutazione, aggiungere semplicemente altre attività al comando separato da due punti: command = "MNISTtrain:MNISTtest".

Valutazione di un modello sottoposto a training

Per valutare l'accuratezza del modello sottoposto a training, usare il eval comando o test (vedere anche Train, Test, Eval per informazioni dettagliate). La configurazione corrispondente nell'esempio MNIST 01_OneHidden.cntk è simile al seguente.

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

Il MNISTtest blocco usa action = "test". Per l'azione test è necessario definire un modello che deve essere usato per il test usando il modelPath parametro . In questo esempio non modelPath è definito all'interno del MNISTtest blocco, ma nel livello superiore (vedere la parte di training precedente) e viene usato sia dalle azioni che dalle traintest azioni. All'interno del reader blocco si specifica il file di dati che deve essere usato per il test, Test-28x28.txt nell'esempio. Infine, è necessario impostare command = MNISTtest ed eseguire cntk configFile=01_OneHidden_ndl_deprecated.cntk per eseguire il test. Il risultato della riga di comando è:

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

Uso di un modello sottoposto a training nel proprio codice

Dopo aver eseguito il training di un modello, è necessaria la funzionalità per valutare il modello nell'ambiente di destinazione. CNTK offre diversi modi per gestire i modelli in diversi scenari. È possibile usare un modello sottoposto a training da C++, Python, C# o altri linguaggi .NET. È possibile eseguire la valutazione nel computer o in Azure. La sezione Valutazione di modelli di CNTK (vedere la barra laterale) include molti dettagli, tra cui la valutazione con C++/Python/C#/Azure.

Passaggi successivi