CNTK評估隱藏層
此頁面描述如何公開定型模型的隱藏層值。
概觀
CNTK模型建置在互連層上。 其中有些層可以使用 來評估 EvalDll
,因為它們標記為「輸出」層。 若要透過 EvalDll
公開其他層,必須將這些圖層新增至 outputNodes
屬性,將其標記為輸出層。
例如,組 01_OneHidden_ndl_deprecated.cntk
態檔是指 01_OneHidden.ndl
網路定義的檔案。 在此網路描述檔案中,我們定義了兩層:
h1 = DNNSigmoidLayer (featDim, hiddenDim, featScaled, 1)
ol = DNNLayer (hiddenDim, labelDim, h1, 1)
但只有一個圖層標示為輸出:
outputNodes = (ol)
因此, EvalDll
只會在評估期間傳回與 ol
圖層相關的值。
為了能夠評估 h1
隱藏層,我們必須先將其公開為輸出節點。 有三種可能的方式:
1.公開隱藏層的定型模型
若要輸出 h1
圖層,只要將它新增為網路描述中的輸出, 01_OneHidden.bs
(檔案在定型時) ,該層就可以在評估期間讀取:
outputNodes = (h1:ol)
不過,這表示需要重新 (使用此組態來訓練模型) 。
2.修改已定型的模型
使用 BrainScript 運算式載入時,可以即時修改模型。 這份檔的未來更新將記載此檔。
3.在載入模型以使用 EvalDll
/EvalDllWrapper
模組進行評估時變更已定型模型的輸出節點集
如果使用模組來評估 EvalDll
/EvalDllWrapper
定型的 ,您可以將具有冒號分隔節點清單的屬性新增 outputNodeNames
至網路定義:
outputNodeNames = "h1.z:ol.z"
載入網路時,Eval 引擎會辨識 outputNodeNames
屬性,並將模型的輸出節點取代為 屬性中指定的 outputNodeNames
節點清單。
查看範例專案內的 CPPEvalClient
程式碼,顯示指定 屬性的 (未批註) 行 outputNodeNames
:
networkConfiguration += "outputNodeNames=\"h1.z:ol.z\"\n";
networkConfiguration += "modelPath=\"" + modelFilePath + "\"";
model->CreateNetwork(networkConfiguration);
執行程式會顯示圖層的 h1.z
對應輸出。