CNTK提供一種簡單的方式,可使用Graphviz將模型的基礎計算圖表視覺化,這是開放原始碼圖表視覺效果軟體。
為了說明使用案例,讓我們先使用CNTK Layers 程式庫來建置簡單的卷積網路。
import cntk as C
def create_model(x, num_classes):
with C.layers.default_options(init=C.glorot_uniform(), activation=C.relu):
model = C.layers.Sequential([
C.layers.For(range(3), lambda i: [
C.layers.Convolution((5,5), [32,32,64][i], pad=True, name=['conv1', 'conv2', 'conv3'][i]),
C.layers.MaxPooling((3,3), strides=(2,2), name=['pool1', 'pool2', 'pool3'][i])
]),
C.layers.Dense(64, name='fc1'),
C.layers.Dense(num_classes, activation=None, name='classify')
])
return model(x)
現在假設我們要在 CIFAR-10 資料集上進行定型,其中包含 10 個類別中的 32x32 影像,我們可以對應指派輸入圖形。 如需下載和準備 CIFAR-10 資料集以用於CNTK的指示,請參閱 CNTK 201A教學課程。
input_var = C.input_variable((3,32,32))
z = create_model(input_var)
若要取得計算圖形的基礎描述,CNTK在模組中 cntk.logging.graph 提供 plot 函式。
函 plot(root, filename=None) 式會傳回圖形的網路描述,從 root 提供的節點開始。 此外,如果 filename 已指定 ,方法會輸出 DOT、PNG、PDF 或 SVG 檔案, (對應至檔案名尾碼) 。
若要輸出 DOT 輸出,您必須安裝 pydot-ng (pip install pydot_ng) 。 此外,如果您想要 PNG、PDF 或 SVG 輸出,除了 之外,還需要 Graphvizpydot-ng 。
安裝 Graphviz 之後,請確定 Graphviz 二進位檔位於您的 PATH 環境變數中。
import pydot_ng
graph_description = C.logging.graph.plot(z, "graph.png")
print(graph_description)
Convolution(Parameter5302, Parameter5303, Input5301) -> Block6011_Output_0;
MaxPooling(Block6011_Output_0) -> Block6023_Output_0;
Convolution(Parameter5332, Parameter5333, Block6023_Output_0) -> Block6039_Output_0;
MaxPooling(Block6039_Output_0) -> Block6051_Output_0;
Convolution(Parameter5362, Parameter5363, Block6051_Output_0) -> Block6067_Output_0;
MaxPooling(Block6067_Output_0) -> Block6079_Output_0;
Dense(Parameter5710, Parameter5711, Block6079_Output_0) -> Block6095_Output_0;
Dense(Parameter5730, Parameter5731, Block6095_Output_0) -> Block6110_Output_0;
如果您使用Jupyter Notebook,您可以內嵌顯示圖形視覺效果輸出:
from IPython.display import Image
display(Image(filename="graph.png"))

如需使用 logging.graph.plot 的更詳細視覺效果範例,請參閱 如何偵錯 手動。