CNTK - 监控模型

  • 简述

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

    在前面的部分中,我们已经对我们的 NN 模型进行了一些验证。但是,在训练期间监控我们的模型是否也有必要和可能?
    是的,我们已经使用ProgressWriter类来监控我们的模型,还有更多方法可以做到这一点。在深入研究方法之前,首先让我们看看 CNTK 中的监控是如何工作的,以及我们如何使用它来检测我们的 NN 模型中的问题。
  • CNTK 中的回调

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

    CNTK 何时调用回调?

    CNTK 将在训练和测试集的时刻调用回调:
    • 一个小批量完成。
    • 在训练期间完成了对数据集的全面扫描。
    • 小批量测试完成。
    • 在测试期间完成了对数据集的全面扫描。
  • 指定回调

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

    何时在损失函数上调用火车?

    在这里,当我们在损失函数上调用 train 时,我们可以通过 callbacks 参数指定一组回调,如下所示 -
    
    
    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
    
    tensorbrd_writer = TensorBoardProgressWriter(log_dir=’logs/{}’.format(time.time()),freq=1,model=z)
    
    
    在完成NN模型的训练后,在TensorBoardProgressWriter实例上调用 close 方法是一种很好的做法。
    我们可以借助以下命令可视化TensorBoard日志数据 -
    
    
    Tensorboard –logdir logs