CNTK Evaluar capas ocultas
En esta página se describe cómo exponer los valores de la capa oculta de un modelo entrenado.
Información general
Un modelo de CNTK se basa en capas interconectadas. Algunas de estas capas se pueden evaluar mediante porque EvalDll
se etiquetan como capas de "salida". Para exponer otras capas a través de EvalDll
, estas capas deben etiquetarse como capas de salida agregándolas a la outputNodes
propiedad .
Por ejemplo, el 01_OneHidden_ndl_deprecated.cntk
archivo de configuración hace referencia al 01_OneHidden.ndl
archivo para la definición de red. En este archivo de descripción de red, tenemos dos capas definidas:
h1 = DNNSigmoidLayer (featDim, hiddenDim, featScaled, 1)
ol = DNNLayer (hiddenDim, labelDim, h1, 1)
Pero solo una capa se marca como salida:
outputNodes = (ol)
Por lo tanto, solo EvalDll
devolverá valores que pertenecen a la capa durante la ol
evaluación.
Para poder evaluar la h1
capa oculta, es necesario exponerla primero como un nodo de salida. Hay tres maneras posibles:
1. Entrenamiento del modelo con capas ocultas expuestas
Para generar la h1
capa, basta con agregarla como salida en la descripción de red (01_OneHidden.bs
archivo) al entrenarla y esa capa estaría disponible para leer durante la evaluación:
outputNodes = (h1:ol)
Sin embargo, esto implica que el modelo tendría que entrenarse (re)con esta configuración.
2. Modificación de un modelo ya entrenado
Los modelos se pueden modificar sobre la marcha cuando se cargan mediante expresiones BrainScript. Esto se documentará en una actualización futura de esta documentación.
3. Cambio del conjunto de nodos de salida de un modelo ya entrenado mientras se carga para su evaluación mediante los EvalDll
/EvalDllWrapper
módulos
Si un entrenado se evaluará mediante los EvalDll
/EvalDllWrapper
módulos, puede agregar la outputNodeNames
propiedad con una lista separada por dos puntos de nodos a la definición de red:
outputNodeNames = "h1.z:ol.z"
Al cargar la red, el motor de Eval reconocerá la outputNodeNames
propiedad y reemplazará los nodos de salida del modelo por la lista de nodos especificados en la outputNodeNames
propiedad .
Al examinar el código dentro del proyecto de CPPEvalClient
ejemplo, se muestra la línea (sin marca de comentario) que especifica la outputNodeNames
propiedad :
networkConfiguration += "outputNodeNames=\"h1.z:ol.z\"\n";
networkConfiguration += "modelPath=\"" + modelFilePath + "\"";
model->CreateNetwork(networkConfiguration);
La ejecución del programa muestra la salida correspondiente para la h1.z
capa.