Partilhar via


CNTK avaliar camadas ocultas

Esta página descreve como expor os valores de uma camada escondida de um modelo treinado.

Descrição Geral

Um CNTK modelo é construído sobre camadas interligadas. Algumas destas camadas podem ser avaliadas usando a EvalDll porque são marcadas como camadas de "saída". Para expor outras camadas através da EvalDll, estas camadas devem ser marcadas como camadas de saída adicionando-as à outputNodes propriedade.

Por exemplo, o 01_OneHidden_ndl_deprecated.cntk ficheiro de configuração refere-se ao 01_OneHidden.ndl ficheiro para a definição de rede. Neste ficheiro de descrição da 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, o EvalDll só devolverá os valores relativos à camada durante a ol avaliação.

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

1. Formação modelo com camadas escondidas expostas

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

outputNodes = (h1:ol)

No entanto, isto implica que o modelo teria de ser (re)treinado com esta configuração.

2. Modificação de um modelo já treinado

Os modelos podem ser modificados em voo quando são carregados usando expressões BrainScript. Isto será documentado numa futura atualização desta documentação.

3. Alteração do conjunto de nós de saída de um modelo já treinado enquanto o carrega para avaliação utilizando os EvalDll/EvalDllWrapper módulos

Se um treinado for avaliado usando os EvalDll/EvalDllWrapper módulos, pode adicionar a outputNodeNames propriedade com uma lista de nó separados do cólon à definição de rede:

outputNodeNames = "h1.z:ol.z"

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

Olhando para o código dentro do CPPEvalClient projeto exemplo, mostra a linha (não comentada) especificando o outputNodeNames imóvel:

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.