CNTK utvärdera dolda lager
Den här sidan beskriver hur du exponerar en tränad modells dolda lagervärden.
Översikt
En CNTK modell bygger på sammankopplade lager. Vissa av dessa lager kan utvärderas med hjälp av EvalDll
eftersom de är taggade som "utdata"-lager. Om du vill exponera andra lager via EvalDll
måste dessa lager taggas som utdatalager genom att lägga till dem i outputNodes
egenskapen .
Konfigurationsfilen 01_OneHidden_ndl_deprecated.cntk
refererar till exempel till 01_OneHidden.ndl
nätverksdefinitionens fil. I den här nätverksbeskrivningsfilen har vi två definierade lager:
h1 = DNNSigmoidLayer (featDim, hiddenDim, featScaled, 1)
ol = DNNLayer (hiddenDim, labelDim, h1, 1)
Men bara ett lager markeras som utdata:
outputNodes = (ol)
EvalDll
Därför returnerar endast värden som hör till ol
lagret under utvärderingen.
För att kunna utvärdera det h1
dolda lagret måste vi först exponera det som en utdatanod. Det finns tre möjliga sätt:
1. Träningsmodell med dolda lager exponerade
Om du vill mata ut h1
lagret lägger du bara till det som utdata i nätverksbeskrivningen (01_OneHidden.bs
filen) när du tränar det, och det lagret skulle vara tillgängligt för läsning under utvärderingen:
outputNodes = (h1:ol)
Detta innebär dock att modellen måste tränas (om)med den här konfigurationen.
2. Ändra en redan tränad modell
Modeller kan ändras i farten när de läses in med Hjälp av BrainScript-uttryck. Detta kommer att dokumenteras i en framtida uppdatering av den här dokumentationen.
3. Ändra utdatanoduppsättningen för en redan tränad modell när den läses in för utvärdering med hjälp av modulerna EvalDll
/EvalDllWrapper
Om en tränad utvärderas med hjälp av modulerna EvalDll
/EvalDllWrapper
kan du lägga till outputNodeNames
egenskapen med en kolonavgränsad lista över noder i nätverksdefinitionen:
outputNodeNames = "h1.z:ol.z"
När nätverket läses in identifierar outputNodeNames
Eval-motorn egenskapen och ersätter modellens utdatanoder med listan över noder som anges i outputNodeNames
egenskapen .
Om du tittar på koden i CPPEvalClient
exempelprojektet visas raden (okommenterad) som anger outputNodeNames
egenskapen:
networkConfiguration += "outputNodeNames=\"h1.z:ol.z\"\n";
networkConfiguration += "modelPath=\"" + modelFilePath + "\"";
model->CreateNetwork(networkConfiguration);
När du kör programmet visas motsvarande utdata för h1.z
lagret.