NNI 小白入门

使用最简单的BatchTuner进行演示

参考本博客前,需要先浏览过NNI的官网,了解大致流程

GridSearch 参考另一篇 https://blog.csdn.net/weixin_44110392/article/details/113257885

运行代码框架

  • a simple implement of linear regression

    不用在意线性回归的实现

    • 假如需要调参的是 batch_size, epochs_number, learning_rate

      • 为了方便演示,假设上面三个参数从给定的范围中选取,所以使用BatchTuner

        • 参数范围:

          epochs = [i for i in range(10, 20)]
          batch_sizes = [i for i in range(10, 20, 5)]
          learning_rates = [i*0.001 for i in range(1,3)]
          

NNI配置

config.yml

NNI 环境配置

  • trialConcurrency: 并发数量
  • maxTrialNum: 调参的参数组的总数。例如上面给出的10*2*2=40
  • Trail-command: 每一次执行程序的命令
authorName: default
experimentName: example_Linear_Regression
trialConcurrency: 5
maxExecDuration: 1h
maxTrialNum: 40
#choice: local, remote, pai
trainingServicePlatform: local
searchSpacePath: search_space.json
#choice: true, false
useAnnotation: false
tuner:builtinTunerName: BatchTuner
trial:command: python3 linear_regression.pycodeDir: .gpuNum: 0

search_space.json

参数的搜索空间

本例中使用BatchTuner,所以就是不同的参数组成的list

  • 下面的写法是固定的,默认batchTuner只能这样写,能更改的只有_value中的内容(类型必须是list)

    • 下面value中的list省略了一些参数(太长不好看)
{"combine_params": {"_type": "choice","_value": [{"epochs": 10, "batch_size": 10, "learning_rate": 0.001}, {"epochs":                                    10, "batch_size": 10, "learning_rate": 0.002}, {"epochs": 10,                                                     "batch_size": 15, "learning_rate": 0.001}"learning_rate": 0.002}]}
}

执行文件

  • main函数

    • log是为了方便debug
    • nni.get_next_parameter()得到tuner中的下一组参数
      • 由于我写的参数是用dict的形式存储,所以我先生成了一组默认参数然后用读取到的参数update
  • train函数
    • 要在开始的时候用读入的参数初始化parameters
    • 最后要report_final_reault(),这里读入的数值会在最终的交互界面上画图
  • 其余函数与NNI无关
import torch as t
import numpy as np
import random
import nni
import loggingLOG = logging.getLogger('linear_regression')np.random.seed(1)
random.seed(1)def generate_date(true_w, true_b, num_examples):'''generate synthetic data'''x = np.random.normal(0, 1, (num_examples, len(true_w)))y = np.dot(x, true_w) + true_b# add noisey += np.random.normal(0, 0.01, y.shape)return t.Tensor(x), t.Tensor(y)def data_iter(batch_size, features, labels):'''reading data iteration by iteration'''num_examples = len(labels)indices = list(range(num_examples))# examples are read at randomrandom.shuffle(indices)for i in range(0, num_examples, batch_size):batch_indices = np.array(indices[i:min(i + batch_size, num_examples)])yield features[batch_indices], labels[batch_indices]def loss_func(y_hat, y):'''square loss'''return (y_hat - y)**2 / 2def sgd(params, lr, batch_size):'''minibatch stochastic gradient descent'''with t.no_grad():for param in params:param -= lr * param.grad / batch_sizeparam.grad.zero_()def linreg(X, w, b):"""The linear regression model."""return t.matmul(X, w) + bdef train(ARGS, features, labels):lr = ARGS['learning_rate']num_epochs = ARGS['epochs']net = linregloss = loss_funcbatch_size = ARGS['batch_size']w = t.Tensor([1, 1])w.requires_grad_(True)b = t.Tensor([0])b.requires_grad_(True)for epoch in range(num_epochs):for X, y in data_iter(batch_size, features, labels):l = loss(net(X, w, b), y)  # Minibatch loss in `X` and `y`# Compute gradient on `l` with respect to [`w`, `b`]l.sum().backward()sgd([w, b], lr,batch_size)  # Update parameters using their gradient# with t.no_grad():#     train_l = loss(net(features, w, b), labels)# print(f'epoch {epoch + 1}, loss {float(train_l.mean()):f}')res_loss = loss(net(features, w, b), labels)# print(w, b)loss_mean = res_loss.mean()nni.report_final_result(float(loss_mean))def generate_default_params():"""Generate default hyper parameters"""return {"epochs": 10, "batch_size": 10, "learning_rate": 0.003}if __name__ == "__main__":# generate datatrue_w = [2, -3.4]true_b = 4.2features, labels = generate_date(true_w=true_w,true_b=true_b,num_examples=200)# get parameters from tunerRECEIVED_PARAMS = nni.get_next_parameter()LOG.debug(RECEIVED_PARAMS)PARAMS = generate_default_params()PARAMS.update(RECEIVED_PARAMS)# traintrain(PARAMS, features, labels)

结果

NNI 示例 BatchTuner相关推荐

  1. 微软自动调参工具—NNI—安装与使用教程(附错误解决)

    简介 NNI是微软的开源自动调参的工具.人工调参实在是太麻烦了,最近试了下水,感觉还不错,能在帮你调参的同时,把可视化的工作一起给做了,简单明了.然后感觉很多博客写的并不是很明白,所以打算自己补充一下 ...

  2. 微软自动调参工具 NNI 使用事例教程

    第一步:安装 nni的安装通过pip命令就可以安装了.并且提供了example供参考学习. 系统配置要求:tensorflow,python >= 3.5 # 安装nnipython3 -m p ...

  3. NNI GridSearch示例

    NNI 小白入门 GridSearch示例 使用最简单的GridSearch进行演示 参考本博客前,需要先浏览过NNI的官网,了解大致流程 BatchTuner参考另一篇 添https://blog. ...

  4. Neural Network Intelligence (NNI) | 自动特征工程AutoFE示例程序

    一.安装NNI和依赖 pip install nni pip install sklearn 不建议在Win10下面装NNI,因为需要c++14.0很麻烦. 另外 nni==2.2 二.数据集 下载地 ...

  5. Neural Network Intelligence (NNI) | PyTorch-CiFar10 项目示例+常用pytorch版本模型全家福

    一.环境 NNI version: 2.1 Python version: 3.8.3 Pytorch version: 1.6.0 二.代码 1.main.py '''Train CIFAR10 w ...

  6. 微软自动调参工具—NNI安装与快速上手,AutoML必备工具

    文章目录 概述 直观的看看里面有什么 安装方法 NNI 快速入门与超参优化 设置超参数的搜索范围 配置config.yaml 听说点进蝈仔帖子的都喜欢点赞加关注~~ 老规矩官网送上: https:// ...

  7. NNI(自动超参数搜索)工具环境配置及使用

    本文主要介绍如何搭建Microsoft的NNI工具环境以及使用NNI进行Mnist分类任务的超参数搜索. NNI简介 NNI (Neural Network Intelligence) 是一个轻量但强 ...

  8. NNI 自动调参使用。

    前言 NNI是由微软研究院,开发的深度学习开发工具. Neural Network Intelligence 是一个工具包,可以有效帮助用户设计并调优汲取学习模型的神经网络架构,以及超参数.具有易于使 ...

  9. 微软开源的自动机器学习工具上新了:NNI概览及新功能详解

    作者 | 宋驰 来源 | 微软研究院AI头条(ID: MSRAsia) 2018年9月,微软亚洲研究院发布了第一版 NNI (Neural Network Intelligence) ,目前已在 Gi ...

最新文章

  1. Linux/ubuntu 服务器开启6010端口-X11服务-ssh连接
  2. DFS分布式文件系统 不同用户访问不同服务器修改同一文件 解决方案
  3. (翻译)Real-UID,Effective-UID,Saved-UID区别
  4. 数字图像处理领域的二十四个典型算法及vc实现、第一章
  5. pytorch机器学习_机器学习— PyTorch
  6. netflix 开源_Netflix的Polynote是一个新的开源框架,可用来构建更好的数据科学笔记本
  7. crio电压采集 labview_NI cDAQ917采集温度方法
  8. 十八般武艺玩转GaussDB(DWS)性能调优:路径干预
  9. 深度学习2.0-18.随机梯度下降之手写数字问题实战(层)
  10. 在其他的电脑上配置绿色Jre+tomcat运行环境
  11. vasp软件全名是什么_vasp软件主要功能
  12. 蓝牙厂商代码与公司对应列表
  13. 如何成为成功的Andr​​oid游戏开发
  14. Windows 用户自动登录开启与关闭方法
  15. 郑捷《机器学习算法原理与编程实践》学习笔记(第六章 神经网络初步)6.2 BP神经网络...
  16. sRGB和scRGB的区别
  17. 学习drag and drop
  18. Quasi-Monte Carlo Image Synthesis in a Nutshell——低差异序列
  19. hive后台启动_将Hive Thrift server 添加到服务后台运行
  20. 微信小程序我在校园打卡微信小程序设计与实现(含论文)

热门文章

  1. 软件工程SWEBOK所包含的10个领域以及每个领域所做的事情
  2. 如何在VISIO 2010/2013 中关闭Shape protection(图形保护)
  3. FastAPI之挂载应用程序
  4. 微信官方首次表态:微信公众平台不是营销工具
  5. https - nginx反向代理 - nginx端口映射
  6. 嵌入式系统开发学习如何起步、如何深入?(转)
  7. vscode导入python包_使用Visual Studio Code将请求导入Python
  8. python SSL: CERTIFICATE_VERIFY_FAILED c1129
  9. 数据库:存储过程实验
  10. css 平滑滚动:scroll-behavior: smooth;锚点使用