CNTK - 监控模型

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

简介

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

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

CNTK 中的回调

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

CNTK 何时调用回调?

CNTK 将在训练和测试集时刻调用回调 −

  • 一个小批次已完成。

  • 在训练期间完成了对数据集的全面扫描。

  • 一个小批次的测试已完成。

  • 在测试期间完成了对数据集的全面扫描。

指定回调

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

何时在损失函数上调用 train?

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

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

使用小批量源或使用手动小批量循环时−

在这种情况下,我们可以在创建 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
tensorrd_writer = TensorBoardProgressWriter(log_dir='logs/{}'.format(time.time()),freq=1,model=z)

在完成训练后,最好在 TensorBoardProgressWriter 实例上调用 close 方法NN模型。

我们可以借助以下命令可视化 TensorBoard 日志数据 −

Tensorboard –logdir logs