利用nni实现nas(神经网络架构搜索)

当前深度学习的模型设计较为费事,有点玄学,不过,现在是可以进行向超参数一样,搜索出最优的模型架构,于是NAS就诞生了。

自从有了nni以后,nas变得容易很多了,直接就可以进行搜索。

不过,目前仅仅支持随机搜索和ppo(感谢大佬指正,这个说法着实不严谨,nni支持的nas算法非常多,源码里面的例子就能看出来,我是想表达的意思是classic_nas里面只支持随机和ppo)。

nni这篇文章讲过如何安装以及超参数搜索的使用。

 nas下面的例子就演示随机搜索,ppo运行时间较长,这里就只展示随机搜索,ppo也亲测可行,和随机搜索一样,按照下面的过程就可以。

等安装nni好并且下载nni的GitHub源码以后就能进行使用了,使用过程如下:

(1)进入到nni源码的nas例子的路径下

cd /opt/nni/examples/nas/classic_nas

(2)在第一次进行搜索的时候,需要敲命令生成搜索空间文件,这里我将其命名为ss.json

因为,仔细看mnist.py文件就可看到,卷积的都是可以进行选择的,就是留给们进行随机选择组合,因此需要搜索 空间文件,不想超参数搜索,自己设置文件,这里需要命令去生成。

nnictl ss_gen --trial_command="python3 mnist.py" --trial_dir=./ --file=ss.json

我们可以看一下,生成后的结果:

[root@localhost classic_nas]# cat ss.json 
{
  "first_conv": {
    "_type": "layer_choice",
    "_value": [
      "conv5x5",
      "conv3x3"
    ]
  },
  "mid_conv": {
    "_type": "layer_choice",
    "_value": [
      "0",
      "1"
    ]
  },
  "skip": {
    "_type": "input_choice",
    "_value": {
      "candidates": [
        "",
        ""
      ],
      "n_chosen": 1
    }
  }
}

(3)编辑config_random_search.yml,设置searchSpacePath的具体路径:

vim config_random_search.yml
authorName: default
experimentName: example_mnist
trialConcurrency: 1
maxExecDuration: 1h
maxTrialNum: 10
#choice: local, remote, pai
trainingServicePlatform: local
#please use `nnictl ss_gen` to generate search space file first
searchSpacePath: ss.json
useAnnotation: False
tuner:
  codeDir: ../../tuners/random_nas_tuner
  classFileName: random_nas_tuner.py
  className: RandomNASTuner
trial:
  command: python3 mnist.py
  codeDir: .
  gpuNum: 0

(4)运行nas

nnictl create --config config_random_search.yml

运行成功以后就可以,在网页上进行查看:

 看一下最好的分数的具体的深度学习结构:

 可以看到,这里最高的得分的是第一个卷积层使用卷积核为5X5的。

运行一下ppo结果:

因为这个可枚举的空间不大,导致很早就直接就收敛了,数据结果看起来不如随机搜索,实际上找到网络结构是基本上一样的。

 

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值