Dela via


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 EvalDllmå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.