Condividi tramite


CNTK valutare i livelli nascosti

Questa pagina descrive come esporre i valori del livello nascosto di un modello sottoposto a training.

Panoramica

Un modello CNTK è basato su livelli interconnessi. Alcuni di questi livelli possono essere valutati usando il EvalDll perché sono contrassegnati come livelli di 'output'. Per esporre altri livelli tramite , EvalDllquesti livelli devono essere contrassegnati come livelli di output aggiungendoli alla outputNodes proprietà.

Ad esempio, il 01_OneHidden_ndl_deprecated.cntk file di configurazione fa riferimento al 01_OneHidden.ndl file per la definizione di rete. In questo file di descrizione di rete sono definiti due livelli:

h1 = DNNSigmoidLayer (featDim, hiddenDim, featScaled, 1)  
ol = DNNLayer (hiddenDim, labelDim, h1, 1)  

Ma un solo livello è contrassegnato come output:

outputNodes = (ol)

Pertanto, l'oggetto EvalDll restituirà solo i valori relativi al livello durante la ol valutazione.

Per poter valutare il h1 livello nascosto, è necessario esponerlo prima come nodo di output. Esistono tre modi possibili:

1. Eseguire il training del modello con livelli nascosti esposti

Per restituire il livello, aggiungerlo come output nella descrizione di rete (01_OneHidden.bsfile) durante il h1 training e tale livello sarà disponibile per la lettura durante la valutazione:

outputNodes = (h1:ol)

Tuttavia, ciò implica che il modello deve essere (ri)sottoposto a training con questa configurazione.

2. Modifica di un modello già sottoposto a training

I modelli possono essere modificati al momento del caricamento usando espressioni BrainScript. Questa documentazione verrà documentata in un aggiornamento futuro di questa documentazione.

3. Modifica del set di nodi di output di un modello già sottoposto a training durante il caricamento per la valutazione usando i EvalDll/EvalDllWrapper moduli

Se un training verrà valutato usando i EvalDll/EvalDllWrapper moduli, è possibile aggiungere la outputNodeNames proprietà con un elenco delimitato di punti di nodi alla definizione di rete:

outputNodeNames = "h1.z:ol.z"

Quando si carica la rete, il motore Eval riconoscerà la outputNodeNames proprietà e sostituirà i nodi di output del modello con l'elenco di nodi specificati nella outputNodeNames proprietà.

Esaminando il codice all'interno del CPPEvalClient progetto di esempio, viene visualizzata la riga (non commentata) che specifica la outputNodeNames proprietà:

networkConfiguration += "outputNodeNames=\"h1.z:ol.z\"\n";
networkConfiguration += "modelPath=\"" + modelFilePath + "\"";
model->CreateNetwork(networkConfiguration);

L'esecuzione del programma mostra l'output corrispondente per il h1.z livello.