Microsoft Cognitive Toolkit 简明教程

CNTK - Monitoring the Model

在本章中,我们将了解如何在 CNTK 中监视模型。

Introduction

在前面的部分中,我们已经对我们的 NN 模型进行了一些验证。但是,在训练期间监视我们的模型是否也有必要并且是否可行?

是的,我们已经使用 ProgressWriter 类来监视我们的模型,还有许多其他方式可以做到这一点。在深入了解这些方法之前,首先让我们了解 CNTK 中的监视如何工作以及我们如何使用它来检测 NN 模型中的问题。

Callbacks in CNTK

实际上,在训练和验证期间,CNTK 允许我们在 API 的几个位置指定回调。首先,让我们仔细看看 CNTK 何时调用回调。

When CNTK invoke callbacks?

当以下情况发生时,CNTK 会在训练和测试集时刻调用回调−

  1. A minibatch is completed.

  2. 整个数据集的扫描在训练期间完成。

  3. 一批测试完成。

  4. 在测试过程中,已完成对数据集的全面扫描。

Specifying callbacks

在使用 CNTK 时,我们可以在 API 的多个位置中指定回调。例如−

When call train on a loss function?

在这里,当我们对损失函数调用“train 时”,可以通过 callbacks 参数指定一组回调,如下所示:

training_summary=loss.train((x_train,y_train),
parameter_learners=[learner],
callbacks=[progress_writer]),
minibatch_size=16, max_epochs=15)

When working with minibatch sources or using a manual minibatch loop−

在这种情况下,我们可以通过创建 Trainer 指定用于监控目的的回调,如下所示:

from cntk.logging import ProgressPrinter
callbacks = [
   ProgressPrinter(0)
]
Trainer = Trainer(z, (loss, metric), learner, [callbacks])

Various monitoring tools

让我们研究不同的监控工具。

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