# 在 PyTorch 中实现高效神经架构搜索(ENAS)
PyTorch 对 [通过参数共享实现高效神经架构搜索](https://arxiv.org/abs/1802.03268) 的实现。
**ENAS** 通过在大计算图中作为子图的模型之间共享参数,将 [神经架构搜索](https://arxiv.org/abs/1611.01578)(**NAS**)的计算需求(GPU 小时)降低了 1000 倍。在 `Penn Treebank` 语言建模任务上达到了当前最优水平。
**\*\*[注意] 请使用作者提供的官方代码:[链接](https://github.com/melodyguan/enas)\*\***
## 先决条件
- Python 3.6 及以上版本
- [PyTorch==0.3.1](https://pytorch.org/get-started/previous-versions/)
- tqdm、scipy、imageio、graphviz、tensorboardX
## 使用方法
使用以下命令安装先决条件:
conda 安装 graphviz
pip install -r requirements.txt
为了训练**ENAS**以发现用于RNN的循环单元:
Python main.py --network_type rnn --dataset ptb --controller_optim adam --controller_lr 0.00035 \
--shared_optim sgd --shared_lr 20.0 --entropy_coeff 0.0001
Python main.py --network_type rnn --dataset wikitext
为训练**ENAS**以发现CNN架构(进行中):
python main.py --network_type cnn --dataset cifar --controller_optim momentum --controller_lr_cosine=True \
--controller_lr_max 0.05 --controller_lr_min 0.0001 --entropy_coeff 0.1
或者你也可以通过放置图片来使用自己的数据集,例如:
数据
├── 你的文本数据集
│ ├── test.txt
│ ├── train.txt
│ └── valid.txt
├── YOUR_IMAGE_DATASET
│ ├── 测试
│ │ ├── xxx.jpg(文件名不重要)
│ │ ├── yyy.jpg(文件名不重要)
│ │ └── ...
│ ├── 训练
│ │ ├── xxx.jpg
│ │ └── ...
│ └── 有效
│ ├── xxx.jpg
│ └── ...
├── image.py
└── text.py
要生成生成样本的`gif`图像:
Python generate_gif.py --model_name=ptb_2018-02-15_11-20-02 --output=sample.gif
更多配置可以在[这里](config.py)找到。
## 结果
高效神经架构搜索(**ENAS**)由两组可学习参数组成:控制器LSTM *θ* 和共享参数 *ω*。