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 , EvalDll
questi 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.bs
file) 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.