Compartilhar via


CNTK avaliar camadas ocultas

Esta página descreve como expor os valores da camada oculta de um modelo treinado.

Visão geral

Um modelo CNTK é criado em camadas interconectadas. Algumas dessas camadas podem ser avaliadas usando o EvalDll porque são marcadas como camadas de "saída". Para expor outras camadas por meio das EvalDllcamadas, essas camadas devem ser marcadas como camadas de saída adicionando-as outputNodes à propriedade.

Por exemplo, o 01_OneHidden_ndl_deprecated.cntk arquivo de configuração refere-se ao 01_OneHidden.ndl arquivo para a definição de rede. Neste arquivo de descrição de rede, temos duas camadas definidas:

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

Mas apenas uma camada é marcada como uma saída:

outputNodes = (ol)

Assim, os EvalDll valores só retornarão referentes à camada durante a ol avaliação.

Para poder avaliar a h1 camada oculta, precisamos expô-la primeiro como um nó de saída. Há três maneiras possíveis:

1. Modelo de treinamento com camadas ocultas expostas

Para gerar a h1 camada, basta adicioná-la como uma saída na descrição da rede (01_OneHidden.bs arquivo) ao treiná-la e essa camada estará disponível para leitura durante a avaliação:

outputNodes = (h1:ol)

No entanto, isso implica que o modelo precisaria ser (re)treinado com essa configuração.

2. Modificando um modelo já treinado

Os modelos podem ser modificados em tempo real ao serem carregados usando expressões BrainScript. Isso será documentado em uma atualização futura desta documentação.

3. Alterando o conjunto de nós de saída de um modelo já treinado ao carregá-lo para avaliação usando os EvalDll/EvalDllWrapper módulos

Se um treinado for avaliado usando os EvalDll/EvalDllWrapper módulos, você poderá adicionar a outputNodeNames propriedade com uma lista separada por dois-pontos de nós à definição de rede:

outputNodeNames = "h1.z:ol.z"

Ao carregar a rede, o mecanismo Eval reconhecerá a outputNodeNames propriedade e substituirá os nós de saída do modelo pela lista de nós especificados na outputNodeNames propriedade.

Examinar o código dentro do CPPEvalClient projeto de exemplo mostra a linha (não comunicada) especificando a outputNodeNames propriedade:

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

A execução do programa mostra a saída correspondente para a h1.z camada.