- 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