共用方式為


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 對應輸出。