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
廣告

© . All rights reserved.