我试图通过使用Chainer的comet.ml来可视化学习


1.什么是Comet.ml?

Comet.ml是用于机器学习的实验性支持工具之一。
粗略地说,您可以执行以下操作:

  • 记录实验结果(损失,准确性等)
  • 保存超参数和网络结构
  • 保存执行代码
  • 贝叶斯优化的超参数搜索(付费计划)
  • Tensorboard作为Tensorflow的实验支持工具而闻名,但我认为它与实验日志非常接近。
    这是日语中易于理解的介绍性文章。

    • CometML旨在成为"机器学习的GitHub"
    • 我尝试使用Github和CometML进行机器学习

    Comet.ml正式宣布的深度学习框架是" Keras,Tensorflow,Pytorch和Theano",但是我真的很想使用Chainer,所以这次,Chainer的MNIST示例试图将Comet.ml与之一起使用。

    除了深度学习,官方文档中还发布了scikit-learn执行的示例。 (https://www.comet.ml/docs/python-sdk/scikit/)

    image.png

    2.准备您的Comet.ml帐户

    2.1帐户注册

    您需要在Comet.ml中注册一个帐户来管理实验结果。
    您可以使用您的电子邮件地址进行注册,但也可以使用您的Github帐户进行注册。

    我还没有尝试过,但是似乎它还具有与Github的集成功能,因此,如果您有Github帐户,则可能要在此注册。

    2.2获取API密钥

    创建帐户后,首先创建一个项目。

    您可以通过仪表板右上方的"新建项目"按钮来创建它。
    目前,您可以将项目设置为公共或私有,但是暂时将其设为私有是个好主意。

    进入

    项目页面时,页面顶部栏中的按钮名为" API Key",您可以从中获取API密钥。
    该密钥对我所有项目都是通用的,因此一旦获得它,就不必更改它。 (大概)

    顺便说一下,Comet.ml的帐户创建和API密钥的获取已完成。

    3.与Chainer一起移动

    以下假定您要在Python中运行链接器。

    这次,我对官方发布的MNIST示例进行了一些修改,使其登录到Comet.ml。
    完整的代码可在Github上找到,因此请参见此处。

    首先,您需要安装Comet.ml Python软件包。
    可以使用pip安装。

    1
    $ pip install comet_ml

    现在,让我们从特定的实现开始,但是只有三件事要做。

  • Experimet实例创建

  • 记录超参数
  • 记录丢失和正确的回答率
  • 首先,导入comet_ml模块的Experiment实例。

    1
    from comet_ml import Experiment

    3.1实验实例生成

    为了与您在

    comet.ml上的帐户关联,您首先需要创建一个Experiment实例。

    1
    experiment = Experiment(api_key='自分のAPIキー', project_name='プロジェクト名')

    使用先前创建的项目名称。
    即使您的帐户中不存在指定的项目名称,也不会出现问题,因为会自动生成一个私人项目。

    3.2记录超参数

    进行深度学习实验的最必要任务之一是记录超参数,不是吗?
    这可以通过以下方法完成。

    1
    2
    3
    4
    5
    6
    hyper_params = {
        'batch_size': 64,
        'epoch': 20,
        'n_hidden_unit': 32}

    experiment.log_multiple_params(hyper_params)

    hyper_params的内容可以是任何内容。将您认为需要的内容存储在字典中。

    另外,当一一记录超参数时,

    1
    experiment.log_parameter(name, value)

    您也可以使用

    3.3培训过程中的丢失记录和正确答案率

    这几乎与记录超参数相同。

    1
    2
    3
    4
    5
    6
    7
    metrics = {
        'train_loss': train_loss,
        'train_acc': train_acc,
        'test_loss': test_loss,
        'test_acc': test_acc}

    experiment.log_multiple_metrics(metrics, step=i)

    1
    experiment.log_parameter('train_loss', train_loss, step=i)

    的形式编写。

    唯一的区别是添加了参数step,并在此处输入了迭代次数和时期数。
    因此,您需要为每个迭代和每个时期运行此代码。

    可视化时,以步进值作为X轴显示图形。
    (实际上,似乎log_multiple_params等也具有step自变量,但目前我不知道如何使用它们。)

    这一次,我使用chainer.training.extension意识到了这一点。
    以Trainer作为参数,我创建了一个函数_log_exp,该函数记录到comet.ml并将其传递给trainer.extend

    扩展实现示例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    def log_cometml(exp, _log_report='LogReport'):
        @training.make_extension(trigger=(1, 'epoch'))
        def _log_exp(trainer):
            log_report = trainer.get_extension(_log_report)
            lastest_log = log_report.log[-1]
            n_epoch = lastest_log.pop('epoch')
            n_iter = lastest_log.pop('iteration')
            exp.log_multiple_metrics(lastest_log, step=n_epoch)
        return _log_exp

    '省略'

    trainer.extend(extensions.LogReport())
    trainer.extend(log_cometml(experiment))

    对于我自己的扩展,该程序非常有用。
    Chainer:创建您自己的扩展程序并将您自己的处理过程插入深度学习培训中

    4.结果可视化

    我认为实际查看它会更快,所以请看一下我创建的项目页面。
    https://www.comet.ml/29takuya/chainer-mnist

    我将简要解释屏幕。

    以下是项目仪表板页面
    一行对应一个实验,还可以列出参数和损耗。
    (如果您多次尝试使用相同的项目名称,则会显示如下所示)

    image.png

    接下来,这是您选择实验时的屏幕。
    我认为经常使用以下四个项目。
    1.图表:以log_metric保存的变量以图形表示
    2.代码:执行后的代码将被保存。
    3.超级参数:您可以引用log_parameter保存的变量。
    4.指标:您可以选择图表上显示的指标。您还可以看到诸如最大和最小的信息。

    image.png

    您还可以将多次实验的结果与以下感觉进行比较。

    image.png

    5.结论

    这次,我尝试了comet.ml,它是机器学习的实验性支持工具。

    到目前为止,我以前一直逐个输出文本和图像并将其记录下来,但是从现在开始,我希望可以很好地使用此工具。
    另外,"也许"学生可以免费使用付费计划,因此,如果获得批准,我想尝试诸如参数优化之类的功能。

    感谢您阅读本文!

    6.链接

    • 官方页面:https://www.comet.ml/

    • MNIST分类项目页面:https://www.comet.ml/29takuya/chainer-mnist

    • 链接器对MNIST分类的来源:https://github.com/29Takuy??a/chainer-cometml