栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

微软自动调参工具—NNI

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

微软自动调参工具—NNI

参考链接:
微软自动调参工具—NNI—安装与使用教程(附错误解决)
nni官方文档

总结一下步骤 1.pip安装nni

pip install nni

2.配置search_space.json,config.yml, model.py 三个文件

  1. 创建search_space.json文件,定义我们的超参数和搜索范围
{
	# 这里我定义了三个超参数
    "dropout_rate": {"_type": "uniform", "_value": [0.3, 0.6]},
    "embedding_unit": {"_type": "choice", "_value": [32, 64]},
    "activation_type": {"_type": "choice", "_value": ["softmax","tanh", "swish"]}
}
  1. 配置config.yaml
authorName: default
experimentName: example_mnist
trialConcurrency: 1 # 根据自己的GPU个数设置trail的并发数
maxExecDuration: 10h # 整个NNI自动调参的时间
maxTrialNum: 10  
#choice: local, remote, pai
trainingServicePlatform: local
searchSpacePath: search_space.json # 上面定义的search_space.json文件
#choice: true, false
useAnnotation: false
tuner:
  builtinTunerName: TPE
  classArgs:
    #choice: maximize, minimize
    optimize_mode: maximize # 优化方向,向nni报告我们的结果,如果报告结果是test_acc/准确率,那optimize_mode就选maximize。如果报告结果是loss,optimize_mode就选minimize
trial:
  command: python mnist.py # 这里要改成自己运行的model文件
  codeDir: .
  gpuNum: 0
  1. 修改model.py模型文件,添加以下代码
import nni
from tensorflow.keras.callbacks import Callback

# 默认参数
params = {
    'embedding_unit': 8,
    'activation_type': 'softmax',
    'dropout_rate': 0.1,
} # 这里的参数在后面添加到模型中,以params['dropout_rate']等替换原来的参数
tuner_params = nni.get_next_parameter() # 获得下一组搜索空间中的参数
params.update(tuner_params) # 更新参数
#-------------------------------------------------
# 这里是原来的模型
model = Sequential()
model.add(Embedding(max_features, params['embedding_unit'])) # 第一个参数
model.add(Dropout(params['dropout_rate'])) # 第二个参数
model.add(Bidirectional(LSTM(32)))
model.add(Dense(11, activation=params['activation_type'])) # 第三个参数
print(model.summary())
#-------------------------------------------------
# 定义callback函数,用于Keras的model.fit里报告中间结果 
class ReportIntermediates(Callback):
    """
    Callback class for reporting intermediate accuracy metrics.
    This callback sends accuracy to NNI framework every 100 steps,
    so you can view the learning curve on web UI.
    If an assessor is configured in experiment's YAML file,
    it will use these metrics for early stopping.
    """
    def on_epoch_end(self, epoch, logs=None):
        """Reports intermediate accuracy to NNI framework"""
        # TensorFlow 2.0 API reference claims the key is `val_acc`, but in fact it's `val_accuracy`
        if 'val_acc' in logs:
            nni.report_intermediate_result(logs['val_acc']) # 这里汇报中间结果,用的是acc,所以上面的optimize_mode是maximize
        else:
            nni.report_intermediate_result(logs['val_accuracy'])

history = model.fit(x_train, y_train , epochs=5, batch_size=32, validation_data=[x_test, y_test], validation_freq=1,callbacks=[ReportIntermediates()],)
#----------
score = model.evaluate(x_test, y_test) # score是准确率
nni.report_final_result(score[1]) # 向nni报告最终结果
  1. 命令行运行config.yml
nnictl create --config config.yml -p 8889

-p代表使用的端口号。

  1. 打开一个上面给出的url


  2. 在命令行使用nnictl stop停止调参

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1009549.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号