MindSpore 使用mindoptimizer进行超参调优

MindSpore 使用mindoptimizer进行超参调优,第1张

MindSpore 使用mindoptimizer进行超参调优

概述

机器学习领域一般有两类参数,一类是模型内部参数,依靠训练数据来对模型参数进行调参,还有一类则是模型外部的设置参数,需要人工配置,这类参数被称为“超参数”。不同的超参数会对模型效果有不小的影响,因此超参在训练任务中的重要性较高。传统的方式都需要人工去调试和配置,这种方式消耗时间和精力。MindInsight调参功能可以用于搜索超参,基于用户给的调参配置信息,可以自动搜索参数并且执行模型训练。

MindInsight提供的mindoptimizer调参命令可以根据用户配置,从训练日志中提取以往训练记录,再对以往训练记录进行分析,推荐超参,最后自动执行训练脚本。用户在使用时需要按照yaml格式来配置超参的范围等信息,再参考本教程替换训练脚本中的超参,旨在将自动推荐的超参同步到训练脚本里面。当前仅支持高斯过程调参方法,其他方法敬请期待。

安装

此工具为MindInsight的子模块,安装MindInsight后,即可使用MindInsight调参命令,

 MindInsight提供调参命令,命令行(Command-line interface, CLI)的使用方式

代码如下:


usage: mindoptimizer [-h] [--version] [--config CONFIG]
                     [--iter ITER]

optional arguments:
  -h, --help             Shows the help message and exits.
  --version              Shows the program version and exits.
  --config ConFIG        Specifies the configuration file for parameter tuning.
                         The file format is yaml.
  --iter ITER            Specifies the times of automatic training.
                         Automatically recommended parameters are used every time
                         before the training is performed.
                         The default value of ITER is 1.

配置文件规则说明

调参配置文件的格式是yaml,需配置运行命令、训练日志根目录、调参方法、优化目标和超参数信息。其中超参数需要配置取值范围,类型和来源等。MindInsight会根据配置的超参数和优化目标从训练日志中取训练记录,如学习率和正确率,可以供推荐算法分析它们之间的关系,更好地推荐超参数。

配置运行命令

通过command来配置运行命令,如command: python train.py。在调参程序推荐出超参数后,运行命令会被直接执行。

配置训练日志根目录

summary_base_dir是训练日志根目录,它用于训练记录的提取,这样可以更好地推荐超参。同时,建议用户在训练脚本中加SummaryColletor来收集训练信息,调参命令会根据配置的summary_base_dir来生成子目录路径,可配置在SummaryColletor记录该次训练记录。自动执行训练后,会在训练日志根目录的子目录记录当次训练信息,产生的训练信息可以作为训练记录来推荐下一次需要的超参。配置summary_base_dir如summary_base_dir: /home/summaries。

配置调参方法

通过name配置调参方法的名字,通过args字段来配置这个调参方法的参数。

当前采用的算法是高斯过程回归器(Gaussian process regressor, GP),这个算法可配置采集方法(Acquisition Function),可选,范围是[ucb, pi,ei],默认值为ucb。

Upper confidence bound (UCB

Probability of improvement (PI)

Expected improvement (EI)

 

配置调参目标

用户可以选择loss或者自定义的评估指标作为调参的目标。

配置说明:

group:可选,取值包括system_defined和metric,默认system_defined。使用group来配置优化目标所在的组,如loss是系统自定义收集字段,则是system_defined组;而其他在Model()中使用的评估指标,如model = Model(net, loss_fn=loss, optimizer=None, metrics={'Accuracy'}),Accuracy属于评估指标(metrics),因此组别是metric。

goal:可选,取值包括minimize、maximize,默认minimize。使用goal来表示该目标的优化方向,如正确率越高越好,即goal需要配置为maximize。

配置loss:

配置评估指标中的Accuracy:

配置超参信息

超参的配置字段:bounds、choice、type和source。这里配置的超参字段,会用于训练记录的提取和超参推荐。其中,bounds、choice和type会影响超参推荐,bounds配置了参数的上下界,choice表示推荐值从中选取,type则是配置了该参数的类型。

目前系统自定义收集的可调字段包括learning_rate、batch_size和epoch。其余参数都为用户自定义参数,可配置为user_defined,将在训练时被自动收集在训练日志中。

bounds: 列表,元素个数为2,第一个数为下界值min,第二个数为上界值max。范围是[min, max),生成随机数方法是numpy.random.uniform()。

choice:列表,个数不限,参数取值从这个列表中的元素中选取。

type:必填,取值为int或float。

source:可选,取值为system_defined或user_defined。如果是自动收集的字段,默认为system_defined;否则,默认为user_defined。

配置config.yaml


command: sh /home/example/run_alexnet_ascend.sh
summary_base_dir: /home/summaries
tuner:
    name: gp
target:
    group: metric
    name: Accuracy
    goal: maximize
parameters:
    learning_rate:
        bounds: [0.00001, 0.001]
        type: float
    batch_size:
        choice: [32, 64, 128, 256]
        type: int
    momentum:
        source: user_defined
        choice: [0.8, 0.9]
        type: float

yaml配置同名字段会选取最后一个,要避免以下使用方式。


parameters:
    learning_rate:
        bounds: [0.0005, 0.001]
        type: float
    learning_rate:
        source: user_defined
        bounds: [0.00002, 0.0001]
        type: float

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5658637.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存