Compartir a través de


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.