- Microsoft Cognitive Toolkit(CNTK) 教程
- 首頁
- 簡介
- 入門
- CPU 和 GPU
- CNTK - 序列分類
- CNTK - 邏輯迴歸模型
- CNTK - 神經網路 (NN) 概念
- CNTK - 建立第一個神經網路
- CNTK - 訓練神經網路
- CNTK - 記憶體資料集和大型資料集
- CNTK - 效能測量
- 神經網路分類
- 神經網路二元分類
- CNTK - 神經網路迴歸
- CNTK - 分類模型
- CNTK - 迴歸模型
- CNTK - 記憶體不足的資料集
- CNTK - 模型監控
- CNTK - 卷積神經網路
- CNTK - 迴圈神經網路
- Microsoft Cognitive Toolkit 資源
- Microsoft Cognitive Toolkit - 快速指南
- Microsoft Cognitive Toolkit - 資源
- Microsoft Cognitive Toolkit - 討論
CNTK - 模型監控
在本章中,我們將瞭解如何在 CNTK 中監控模型。
簡介
在前面的章節中,我們對 NN 模型進行了一些驗證。但是,在訓練過程中監控我們的模型是否也有必要且可行呢?
是的,我們已經使用過 **ProgressWriter** 類來監控我們的模型,並且還有許多其他方法可以做到這一點。在深入瞭解這些方法之前,讓我們先了解一下 CNTK 中的監控機制以及如何使用它來檢測 NN 模型中的問題。
CNTK 中的回撥函式
實際上,在訓練和驗證期間,CNTK 允許我們在 API 的多個位置指定回撥函式。首先,讓我們仔細看看 CNTK 何時呼叫回撥函式。
CNTK 何時呼叫回撥函式?
CNTK 將在訓練和測試資料集的以下時刻呼叫回撥函式:
一個 mini-batch 完成。
在訓練期間完成對資料集的完整掃描。
一個 mini-batch 的測試完成。
在測試期間完成對資料集的完整掃描。
指定回撥函式
在使用 CNTK 時,我們可以在 API 的多個位置指定回撥函式。例如:
當呼叫損失函式的訓練時?
在這裡,當我們呼叫損失函式的訓練時,可以透過回撥引數指定一組回撥函式,如下所示:
training_summary=loss.train((x_train,y_train), parameter_learners=[learner], callbacks=[progress_writer]), minibatch_size=16, max_epochs=15)
當使用 mini-batch 源或使用手動 mini-batch 迴圈時:
在這種情況下,在建立 **Trainer** 時,我們可以為監控目的指定回撥函式,如下所示:
from cntk.logging import ProgressPrinter callbacks = [ ProgressPrinter(0) ] Trainer = Trainer(z, (loss, metric), learner, [callbacks])
各種監控工具
讓我們學習一下不同的監控工具。
ProgressPrinter
在閱讀本教程時,您會發現 **ProgressPrinter** 是最常用的監控工具。**ProgressPrinter** 監控工具的一些特性包括:
**ProgressPrinter** 類實現了基於控制檯的基本日誌記錄來監控我們的模型。如果需要,它可以將日誌記錄到磁碟。
在分散式訓練場景中特別有用。
在無法登入控制檯檢視 Python 程式輸出的場景中也非常有用。
藉助以下程式碼,我們可以建立一個 **ProgressPrinter** 的例項:
ProgressPrinter(0, log_to_file=’test.txt’)
我們將獲得我們在前面章節中看到的類似輸出:
Test.txt CNTKCommandTrainInfo: train : 300 CNTKCommandTrainInfo: CNTKNoMoreCommands_Total : 300 CNTKCommandTrainBegin: train ------------------------------------------------------------------- average since average since examples loss last metric last ------------------------------------------------------ Learning rate per minibatch: 0.1 1.45 1.45 -0.189 -0.189 16 1.24 1.13 -0.0382 0.0371 48 [………]
TensorBoard
使用 ProgressPrinter 的缺點之一是,我們無法很好地檢視損失和指標隨時間的變化情況。TensorBoardProgressWriter 是 CNTK 中 **ProgressPrinter** 類的絕佳替代方案。
在使用它之前,我們需要使用以下命令先安裝它:
pip install tensorboard
現在,為了使用 TensorBoard,我們需要在我們的訓練程式碼中設定 **TensorBoardProgressWriter**,如下所示:
import time
from cntk.logging import TensorBoardProgressWriter
tensorbrd_writer = TensorBoardProgressWriter(log_dir=’logs/{}’.format(time.time()),freq=1,model=z)
在完成 **NN** 模型的訓練後,呼叫 **TensorBoardProgressWriter** 例項上的 close 方法是一個好習慣。
我們可以藉助以下命令視覺化 **TensorBoard** 日誌資料:
Tensorboard –logdir logs