Partager via


CNTK évaluer les couches masquées

Cette page explique comment exposer les valeurs de la couche masquée d’un modèle formé.

Vue d’ensemble

Un modèle CNTK repose sur des couches interconnectées. Certaines de ces couches peuvent être évaluées à l’aide du EvalDll fait qu’elles sont marquées comme étant des couches de « sortie ». Pour exposer d’autres couches à travers le EvalDll, ces couches doivent être étiquetées en tant que couches de sortie en les ajoutant à la outputNodes propriété.

Par exemple, le 01_OneHidden_ndl_deprecated.cntk fichier de configuration fait référence au 01_OneHidden.ndl fichier pour la définition réseau. Dans ce fichier de description réseau, nous avons deux couches définies :

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

Mais une seule couche est marquée comme une sortie :

outputNodes = (ol)

Par conséquent, la EvalDll valeur retourne uniquement les valeurs relatives à la couche pendant l’évaluation ol .

Pour pouvoir évaluer la couche masquée, nous devons d’abord l’exposer h1 en tant que nœud de sortie. Il existe trois façons possibles :

1. Modèle d’entraînement avec des couches masquées exposées

Pour générer la h1 couche, il vous suffit de l’ajouter en tant que sortie dans la description réseau (01_OneHidden.bs fichier) lors de l’entraînement, et cette couche sera disponible pour la lecture pendant l’évaluation :

outputNodes = (h1:ol)

Toutefois, cela implique que le modèle doit être (réentraîné) avec cette configuration.

2. Modification d’un modèle déjà formé

Les modèles peuvent être modifiés à la volée lors du chargement à l’aide d’expressions BrainScript. Ce document sera documenté dans une prochaine mise à jour de cette documentation.

3. Modification de l’ensemble de nœuds de sortie d’un modèle déjà entraîné lors du chargement pour l’évaluation à l’aide des EvalDll/EvalDllWrapper modules

Si une formation sera évaluée à l’aide des EvalDll/EvalDllWrapper modules, vous pouvez ajouter la outputNodeNames propriété avec une liste de nœuds séparée par deux-points à la définition réseau :

outputNodeNames = "h1.z:ol.z"

Lors du chargement du réseau, le moteur Eval reconnaît la propriété et remplace les outputNodeNames nœuds de sortie du modèle par la liste des nœuds spécifiés dans la outputNodeNames propriété.

En examinant le code à l’intérieur de l’exemple CPPEvalClient de projet, affiche la ligne (non commentée) spécifiant la outputNodeNames propriété :

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

L’exécution du programme affiche la sortie correspondante pour la h1.z couche.