Sdílet prostřednictvím


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 EvalDllté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 .