关于自动调参工具nni的第一次使用心得

NNI (Neural Network Intelligence) 是自动机器学习(AutoML)的工具包。 它通过多种调优的算法来搜索最好的神经网络结构和(或)超参,并支持单机、本地多机、云等不同的运行环境。

话不多说开始正题。

1.下载nni工具包

(nni) D:\pythoncode\SVC>pip install -i https://pypi.tuna.tsinghua.edu.cn/simple nni==2.3

这里用的是清华源的(下载比快)nni2.3版本,本来用的是2.4版本但是一直在服务器启动上报错关于自动调参工具nni的第一次使用心得_第1张图片

 从代码检查到了host等等,最后发现是版本的问题,nni默认下载时2.4版本,但是2.4版本似乎会出错。

2.配置文件

需要配置一个search-space.json,用来给出模型需要自动调参的参数,以及参数的数据范围

{
    "hidden_layer_sizes": {"_type": "quniform" ,"_value":[20,700,2]},
    "max_iter": {"_type": "quniform" ,"_value":[100,1000,50]},
    "alpha": {"_type": "uniform" ,"_value":[0.1, 1]}
}

参数数据类型主要有:

“uniform”,去设置参数值在某个范围均匀分布的值, 当优化时,此变量值会在两侧区间内。

“quniform”,去设置参数值在某个范围,以一定步长去变化,例如[100,1000,50],参数值在50-1000之间步长为20

“choise”,在你设置的参数中选择一个值,例如[100,300,20,60,80]

等等,具体可以看官网例子

接下来要定义实验配置一个config.yml

authorName: default
experimentName: titanic
trialConcurrency: 1
maxExecDuration: 1h
maxTrialNum: 100
#choice: local, remote
trainingServicePlatform: local
searchSpacePath: search_space.json
#choice: true, false
useAnnotation: false
tuner:
  #choice: TPE, Random, Anneal, Evolution
  builtinTunerName: TPE
  classArgs:
    #choice: maximize, minimize
    optimize_mode: maximize
trial:
  command: python svc.py
  codeDir: .
  gpuNum: 0

command :用来执行的你的代码

gpuNum,设置gpu的参数

optimize_mode,如果看模型loss参数就选择 minimize,看accuracy就选maximize(应该是这样)

最后改写模型代码

new_PARAMS = nni.get_next_parameter()
        PARAMS.update(new_PARAMS)
    ##需要先给模型设置一个原始的参数
        model = MLPClassifier(PARAMS)
        scores = cross_val_score(model, x_train, y_train)
        score = scores.mean()
        nni.report_intermediate_result(score)#一个epochs汇报一次
        nni.report_final_result(score)#最后选择最好的结果汇报

接下来说说我踩的坑:

1.nni是去执行config.yml文件去开始训练,而不是主程序.py文件

nnictl create --config config.yml -p 8888

2.需要把nni加入系统环境变量

3.就是nni的版本,我是用2.3版本才成功的

关于自动调参工具nni的第一次使用心得_第2张图片

 

你可能感兴趣的:(python,开发语言,后端)