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 EvalDll
camadas, 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.