CNTK vyhodnotit skryté vrstvy
Tato stránka popisuje, jak zpřístupnit hodnoty skryté vrstvy vytrénovaného modelu.
Přehled
Model CNTK je postaven na propojených vrstvách. Některé z těchto vrstev lze vyhodnotit pomocí EvalDll
toho, že jsou označené jako výstupní vrstvy. Aby bylo možné zpřístupnit další vrstvy prostřednictvím EvalDll
této vrstvy, musí být tyto vrstvy označené jako výstupní vrstvy přidáním do outputNodes
vlastnosti.
Konfigurační soubor například 01_OneHidden_ndl_deprecated.cntk
odkazuje na 01_OneHidden.ndl
soubor definice sítě. V tomto souboru popisu sítě máme definované dvě vrstvy:
h1 = DNNSigmoidLayer (featDim, hiddenDim, featScaled, 1)
ol = DNNLayer (hiddenDim, labelDim, h1, 1)
Jako výstup se ale označí jenom jedna vrstva:
outputNodes = (ol)
EvalDll
Proto se vrátí pouze hodnoty týkající ol
se vrstvy během vyhodnocení.
Abychom mohli vyhodnotit skrytou vrstvu h1
, musíme ji nejprve zveřejnit jako výstupní uzel. Existují tři možné způsoby:
1. Trénovací model se skrytými vrstvami vystavenými
Pokud chcete vytvořit výstup vrstvy h1
, stačí ji přidat jako výstup v popisu sítě (01_OneHidden.bs
souboru) při trénování a tato vrstva by byla k dispozici pro čtení během vyhodnocení:
outputNodes = (h1:ol)
To ale znamená, že model bude muset být (re)natrénován s touto konfigurací.
2. Úprava již natrénovaného modelu
Modely je možné upravovat po běhu při načítání pomocí výrazů BrainScriptu. To bude zdokumentované v budoucí aktualizaci této dokumentace.
3. Změna sady výstupních uzlů již vytrénovaného modelu při načítání pro vyhodnocení pomocí EvalDll
/EvalDllWrapper
modulů
Pokud se trénovaný modul vyhodnotí pomocí EvalDll
/EvalDllWrapper
modulů, můžete do definice sítě přidat outputNodeNames
vlastnost s dvojtečkam odděleným seznamem uzlů:
outputNodeNames = "h1.z:ol.z"
Při načítání sítě modul Eval rozpozná outputNodeNames
vlastnost a nahradí výstupní uzly modelu seznamem uzlů zadaných ve outputNodeNames
vlastnosti.
Když se podíváte na kód uvnitř ukázkového CPPEvalClient
projektu, zobrazí se řádek (nekommentovaný) určující outputNodeNames
vlastnost:
networkConfiguration += "outputNodeNames=\"h1.z:ol.z\"\n";
networkConfiguration += "modelPath=\"" + modelFilePath + "\"";
model->CreateNetwork(networkConfiguration);
Spuštěním programu se zobrazí odpovídající výstup vrstvy h1.z
.