"...resnet50_tensorflow.git" did not exist on "158c96d25c7ed58725dcae33d0b9f3ac737c1a80"
Unverified Commit 6c3148c7 authored by SparkSnail's avatar SparkSnail Committed by GitHub
Browse files

Merge pull request #239 from microsoft/master

merge master
parents 0fb78620 a2e524d3
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
先决条件:`python 64-bit >=3.5`, `git`, `PowerShell` 先决条件:`python 64-bit >=3.5`, `git`, `PowerShell`
```bash ```bash
git clone -b v1.3 https://github.com/Microsoft/nni.git git clone -b v1.4 https://github.com/Microsoft/nni.git
cd nni cd nni
powershell -ExecutionPolicy Bypass -file install.ps1 powershell -ExecutionPolicy Bypass -file install.ps1
``` ```
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
* 通过克隆源代码下载示例。 * 通过克隆源代码下载示例。
```bash ```bash
git clone -b v1.3 https://github.com/Microsoft/nni.git git clone -b v1.4 https://github.com/Microsoft/nni.git
``` ```
* 运行 MNIST 示例。 * 运行 MNIST 示例。
...@@ -70,7 +70,7 @@ You can use these commands to get more information about the experiment ...@@ -70,7 +70,7 @@ You can use these commands to get more information about the experiment
----------------------------------------------------------------------- -----------------------------------------------------------------------
``` ```
* 在浏览器中打开 `Web UI url`,可看到下图的 Experiment 详细信息,以及所有的 Trial 任务。 查看[这里](../Tutorial/WebUI.md)的更多页面。 * 在浏览器中打开 `Web UI url`,可看到下图的实验详细信息,以及所有的尝试任务。 查看[这里](../Tutorial/WebUI.md)的更多页面。
![概述](../../img/webui_overview_page.png) ![概述](../../img/webui_overview_page.png)
...@@ -106,7 +106,7 @@ You can use these commands to get more information about the experiment ...@@ -106,7 +106,7 @@ You can use these commands to get more information about the experiment
检查 Trial 日志文件来了解详情。 检查 Trial 日志文件来了解详情。
如果存在 stderr 文件,也需要查看其内容。 可能的错误情况包括 如果存在 stderr 文件,也需要查看其内容。 两种可能的情况是
* 忘记将 Experiment 配置的 Trial 命令中的 `python3` 改为 `python` * 忘记将 Experiment 配置的 Trial 命令中的 `python3` 改为 `python`
* 忘记安装 Experiment 的依赖,如 TensorFlow,Keras 等。 * 忘记安装 Experiment 的依赖,如 TensorFlow,Keras 等。
...@@ -122,7 +122,7 @@ You can use these commands to get more information about the experiment ...@@ -122,7 +122,7 @@ You can use these commands to get more information about the experiment
注意: 注意:
* 如果遇到 `Segmentation fault` 这样的错误,参考[常见问](FAQ.md) * 如果遇到 `Segmentation fault` 的错误,请参阅[常见问](FAQ.md)
## 更多 ## 更多
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
## 安装 ## 安装
前支持 LinuxmacOS 和 Windows,在 Ubuntu 16.04 或更高版本macOS 10.14.1 以及 Windows 10.1809 上进行了测试。 在 `python >= 3.5` 的环境中,只需要运行 `pip install` 即可完成安装。 前支持 LinuxmacOS 和 Windows Ubuntu 16.04 或更高版本macOS 10.14.1 Windows 10.1809 均经过测试并支持。 在 `python >= 3.5` 的环境中,只需要运行 `pip install` 即可完成安装。
**Linux 和 macOS** **Linux 和 macOS**
...@@ -19,12 +19,12 @@ ...@@ -19,12 +19,12 @@
注意: 注意:
* 在 Linux 和 macOS 上,如果要将 NNI 安装到当前用户的 home 目录中,可使用 `--user`,则不需要特殊权限。 * 在 Linux 和 macOS 上,如果要将 NNI 安装到当前用户的 home 目录中,可使用 `--user`,则不需要特殊权限。
* 如果遇到`Segmentation fault` 这样的任何错误参考[常见问](FAQ.md) * 如果遇到 `Segmentation fault` 这样的错误参考[常见问](FAQ.md)
* 有关 NNI 的`系统要求`,参考[在 Linux 和 macOS 上安装](InstallationLinux.md)[Windows](InstallationWin.md) * 有关 NNI 的`系统要求`,参考[在 Linux 和 macOS 上安装](InstallationLinux.md)[Windows](InstallationWin.md)
## MNIST 上的 "Hello World" ## MNIST 上的 "Hello World"
NNI 是一个能进行自动机器学习实验的工具包。 它可以自动进行获取超参、运行 Trial,测试结果,调优超参的循环。 下面会展示如何使用 NNI 来找到最佳超参组合 NNI 是一个能进行自动机器学习实验的工具包。 它可以自动进行获取超参、运行 Trial,测试结果,调优超参的循环。 在这里,将演示如何使用 NNI 帮助找到 MNIST 模型的最佳超参
这是还**没有 NNI** 的示例代码,用 CNN 在 MNIST 数据集上训练: 这是还**没有 NNI** 的示例代码,用 CNN 在 MNIST 数据集上训练:
...@@ -67,7 +67,7 @@ NNI 用来帮助超参调优。它的流程如下: ...@@ -67,7 +67,7 @@ NNI 用来帮助超参调优。它的流程如下:
7: return 最好的实验结果 7: return 最好的实验结果
``` ```
如果需要使用 NNI 来自动训练模型,找到最佳超参,需要如下三步: 如果需要使用 NNI 来自动训练模型,找到最佳超参,需要根据代码,进行如下三步改动
**启动 Experiment 的三个步骤** **启动 Experiment 的三个步骤**
...@@ -114,7 +114,7 @@ NNI 用来帮助超参调优。它的流程如下: ...@@ -114,7 +114,7 @@ NNI 用来帮助超参调优。它的流程如下:
*实现代码:[mnist.py](https://github.com/Microsoft/nni/tree/master/examples/trials/mnist-tfv1/mnist.py)* *实现代码:[mnist.py](https://github.com/Microsoft/nni/tree/master/examples/trials/mnist-tfv1/mnist.py)*
**第三步**:定义 YAML 格式的`配置`文件,其中声明了搜索空间和 Trial 文件的`路径`,以及`其它信息`如调算法,最大尝试次数最大运行时间等等 **第三步**:定义 YAML 格式的`配置`文件,其中声明了搜索空间和 Trial 文件的`路径`。 它还提供其他信息,例如调算法,最大 Trial 运行次数最大持续时间的参数
```yaml ```yaml
authorName: default authorName: default
...@@ -135,7 +135,7 @@ trial: ...@@ -135,7 +135,7 @@ trial:
gpuNum: 0 gpuNum: 0
``` ```
注意:**在 Windows 上,需要将 Trial 命令的 `python3` 改为 `python`** 注意:**在 Windows 上,需要将 Trial 命令的 `python3` 改为 `python`**
*实现代码:[config.yml](https://github.com/Microsoft/nni/tree/master/examples/trials/mnist-tfv1/config.yml)* *实现代码:[config.yml](https://github.com/Microsoft/nni/tree/master/examples/trials/mnist-tfv1/config.yml)*
...@@ -190,7 +190,7 @@ You can use these commands to get more information about the experiment ...@@ -190,7 +190,7 @@ You can use these commands to get more information about the experiment
----------------------------------------------------------------------- -----------------------------------------------------------------------
``` ```
如果根据上述步骤准备好了相应 `Trial`, `搜索空间``配置`,并成功创建的 NNI 任务。NNI 会自动开始通过配置的搜索空间来运行不同的超参集合,搜索最好的超参。 通过 Web 界面可看到 NNI 的进度。 如果根据上述步骤准备好了相应 `Trial`, `搜索空间``配置`,并成功创建的 NNI 任务。NNI 会自动开始通过配置的搜索空间来运行不同的超参集合,搜索最好的超参。 通过 Web 界面可看到 NNI 的进度。
## Web 界面 ## Web 界面
...@@ -200,17 +200,17 @@ You can use these commands to get more information about the experiment ...@@ -200,17 +200,17 @@ You can use these commands to get more information about the experiment
Web 地址为:[IP 地址]:8080 Web 地址为:[IP 地址]:8080
``` ```
在浏览器中打开 `Web 界面地址`(即:`[IP 地址]:8080`),就可以看到 Experiment 的详细信息,以及所有的 Trial 任务。 如果无法打开终端中的 Web 界面链接,可以参考 [FAQ](FAQ.md) 在浏览器中打开 `Web 界面地址`(即:`[IP 地址]:8080`),就可以看到 Experiment 的详细信息,以及所有的 Trial 任务。 如果无法打开终端中的 Web 界面链接,可以参考[常见问题](FAQ.md)
### 查看概要页面 ### 查看概要页面
点击标签 "Overview"。 点击 "Overview" 标签
Experiment 相关信息会显示在界面上,配置和搜索空间等。 可通过 **Download** 按钮来`下载信息和参数`。 可以在运行中或结束后,随时下载 Experiment 的结果 Experiment 相关信息会显示在界面上,配置和搜索空间等。 可通过 **Download** 按钮来下载信息和参数。 可以在 Experiment 运行时随时下载结果,也可以等到执行结束
![](../../img/QuickStart1.png) ![](../../img/QuickStart1.png)
前 10 个 Trial 结果也会列在 Overview 页面中,可以在 "Trials Detail" 部分浏览所有 Trial。 前 10 个 Trial 列在 Overview 页上。 可以在 "Trials Detail" 页面上浏览所有 Trial。
![](../../img/QuickStart2.png) ![](../../img/QuickStart2.png)
...@@ -233,10 +233,10 @@ Experiment 相关信息会显示在界面上,配置和搜索空间等。 可 ...@@ -233,10 +233,10 @@ Experiment 相关信息会显示在界面上,配置和搜索空间等。 可
下面是所有 Trial 的状态。 包括: 下面是所有 Trial 的状态。 包括:
* Trial 详情:Trial 的 id,持续时间,开始时间,结束时间,状态,精度和搜索空间。 * Trial 详情:Trial 的 id,持续时间,开始时间,结束时间,状态,精度和搜索空间文件
* 如果在 OpenPAI 平台上运行,还可以看到 hdfsLog。 * 如果在 OpenPAI 平台上运行,还可以看到 hdfsLog。
* Kill: 可终止正在运行的任务。 * Kill: 可结束在 `Running` 状态的任务。
* 支持搜索某个定的 Trial。 * Support: 用于搜索某个定的 Trial。
![](../../img/QuickStart6.png) ![](../../img/QuickStart6.png)
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
点击标签 "Overview"。 点击标签 "Overview"。
* 查看 Experiment Trial 配置、搜索空间以及结果好的 Trial。 * 在 Overview 标签上,可看到 Experiment Trial 的概况、搜索空间以及好的 Trial 结果
![](../../img/webui-img/over1.png) ![](../../img/webui-img/over2.png) ![](../../img/webui-img/over1.png) ![](../../img/webui-img/over2.png)
...@@ -16,11 +16,11 @@ ...@@ -16,11 +16,11 @@
![](../../img/webui-img/download.png) ![](../../img/webui-img/download.png)
* 如果 Experiment 状态为 ERROR,可点击图标,查看 Experiment 错误日志 * 如果实验的状态为错误,可以单击错误框中的感叹号来查看日志消息
![](../../img/webui-img/log-error.png) ![](../../img/webui-img/review-log.png) ![](../../img/webui-img/log-error.png) ![](../../img/webui-img/review-log.png)
* 点击 "Feedback" 反馈问题。 * 点击 "Feedback" 报告任何问题。
## 查看任务默认指标 ## 查看任务默认指标
...@@ -55,17 +55,15 @@ ...@@ -55,17 +55,15 @@
Trial 可能在训练过程中有大量中间结果。 为了更清楚的理解一些 Trial 的趋势,可以为中间结果图设置过滤。 Trial 可能在训练过程中有大量中间结果。 为了更清楚的理解一些 Trial 的趋势,可以为中间结果图设置过滤。
这样可以发现 Trial 在某个中间结果上会变得更好或更差。 换句话说,这是一个重要的中间结果。 如果要仔细查看这个点,可以在 #Intermediate 中输入其横坐标。 这样可以发现 Trial 在某个中间结果上会变得更好或更差。 这表明它是一个重要的并相关的中间结果。 如果要仔细查看这个点,可以在 #Intermediate 中输入其 X 坐标。 并输入这个中间结果的指标范围。 在下图中,选择了 No。 并将指标范围设置为了 0.8 -1。
并输入这个中间结果的指标范围。 如下图所示,选择了第 4 个中间结果, 并将指标范围设置为了 0.8 -1。
![](../../img/webui-img/filter-intermediate.png) ![](../../img/webui-img/filter-intermediate.png)
## 查看 Trial 状态 ## 查看 Trial 状态
点击 "Trials Detail" 标签查看所有 Trial 的状态。 包括 点击 "Trials Detail" 标签查看所有 Trial 的状态。 特别是
* Trial 详情:Trial 的 id,持续时间,开始时间,结束时间,状态,精度和搜索空间。 * Trial 详情:Trial 的 id,持续时间,开始时间,结束时间,状态,精度和搜索空间文件
![](../../img/webui-img/detail-local.png) ![](../../img/webui-img/detail-local.png)
......
# 自动调优的 Python API 参考
```eval_rst
.. contents::
```
## Trial
```eval_rst
.. autofunction:: nni.get_next_parameter
.. autofunction:: nni.get_current_parameter
.. autofunction:: nni.report_intermediate_result
.. autofunction:: nni.report_final_result
.. autofunction:: nni.get_experiment_id
.. autofunction:: nni.get_trial_id
.. autofunction:: nni.get_sequence_id
```
## Tuner
```eval_rst
.. autoclass:: nni.tuner.Tuner
:members:
.. autoclass:: nni.hyperopt_tuner.hyperopt_tuner.HyperoptTuner
:members:
.. autoclass:: nni.evolution_tuner.evolution_tuner.EvolutionTuner
:members:
.. autoclass:: nni.smac_tuner.SMACTuner
:members:
.. autoclass:: nni.gridsearch_tuner.GridSearchTuner
:members:
.. autoclass:: nni.networkmorphism_tuner.networkmorphism_tuner.NetworkMorphismTuner
:members:
.. autoclass:: nni.metis_tuner.metis_tuner.MetisTuner
:members:
.. autoclass:: nni.ppo_tuner.PPOTuner
:members:
.. autoclass:: nni.batch_tuner.batch_tuner.BatchTuner
:members:
.. autoclass:: nni.gp_tuner.gp_tuner.GPTuner
:members:
```
## Assessor
```eval_rst
.. autoclass:: nni.assessor.Assessor
:members:
.. autoclass:: nni.assessor.AssessResult
:members:
.. autoclass:: nni.curvefitting_assessor.CurvefittingAssessor
:members:
.. autoclass:: nni.medianstop_assessor.MedianstopAssessor
:members:
```
## Advisor
```eval_rst
.. autoclass:: nni.msg_dispatcher_base.MsgDispatcherBase
:members:
.. autoclass:: nni.hyperband_advisor.hyperband_advisor.Hyperband
:members:
.. autoclass:: nni.bohb_advisor.bohb_advisor.BOHB
:members:
```
内置 Assessor 内置 Assessor
================= =================
为了节省计算资源,NNI 中可通过创建 **Assessor**,来配置提前终止策略 为了节省计算资源,NNI 支持提前终止策略,并且通过叫做 **Assessor** 的接口来执行此操作
Assessor 从 Trial 中接收中间结果,并通过指定的算法决定此 Trial 是否应该终止。 一旦 Trial 满足了提前终止策略(这表示 Assessor 认为最终结果不会太好),Assessor 会终止此 Trial,并将其状态标志为 `"EARLY_STOPPED"`。 Assessor 从 Trial 中接收中间结果,并通过指定的算法决定此 Trial 是否应该终止。 一旦 Trial 满足了提前终止策略(这表示 Assessor 认为最终结果不会太好),Assessor 会终止此 Trial,并将其状态标志为 `EARLY_STOPPED`。
这是 MNIST 在使用了 'Curvefitting' Assessor 的 'maximize' 模式后的实验结果可以看到 Assessor 成功的将大量最终结果不好的 Trial **提前结束** 。 使用 Assessor,能在相同的计算资源下,得到更好的结果。 这是 MNIST 在 "最大化" 模式下使用 "曲线拟合" Assessor 的实验结果可以看到 Assessor 成功的 **提前终止** 了许多结果不好超参组合的 Trial。 使用 Assessor,能在相同的计算资源下,得到更好的结果。
*实现代码:config_assessor.yml <https://github.com/Microsoft/nni/blob/master/examples/trials/mnist-tfv1/config_assessor.yml>* *实现代码:[config_assessor.yml](https://github.com/Microsoft/nni/blob/master/examples/trials/mnist-tfv1/config_assessor.yml) *
.. image:: ../img/Assessor.png .. image:: ../img/Assessor.png
......
...@@ -28,7 +28,7 @@ author = 'Microsoft' ...@@ -28,7 +28,7 @@ author = 'Microsoft'
# The short X.Y version # The short X.Y version
version = '' version = ''
# The full version, including alpha/beta/rc tags # The full version, including alpha/beta/rc tags
release = 'v1.3' release = 'v1.4'
# -- General configuration --------------------------------------------------- # -- General configuration ---------------------------------------------------
......
...@@ -2,6 +2,8 @@ ...@@ -2,6 +2,8 @@
================= =================
.. toctree:: .. toctree::
:maxdepth: 2
启用多阶段 <AdvancedFeature/MultiPhase> 启用多阶段 <AdvancedFeature/MultiPhase>
编写新的 Tuner <Tuner/CustomizeTuner> 编写新的 Tuner <Tuner/CustomizeTuner>
编写新的 Assessor <Assessor/CustomizeAssessor> 编写新的 Assessor <Assessor/CustomizeAssessor>
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
############################# #############################
自动调优是 NNI 提供的关键功能之一,主要应用场景是 自动调优是 NNI 提供的关键功能之一,主要应用场景是
超参调优。 Trial 代码是需要被调优的,这里提供了一些常见 超参调优。 应用于 Trial 代码的调优。 提供了很多流行
自动调优算法(称为 Tuner )和一些提前终止算法(称为 Assessor)。 自动调优算法(称为 Tuner )和一些提前终止算法(称为 Assessor)。
NNI 支持在各种培训平台上运行 Trial,例如,在本地计算机上运行, NNI 支持在各种培训平台上运行 Trial,例如,在本地计算机上运行,
在多台服务器上分布式运行,或在 OpenPAI,Kubernetes 等平台上。 在多台服务器上分布式运行,或在 OpenPAI,Kubernetes 等平台上。
...@@ -12,7 +12,7 @@ NNI 的其它重要功能,例如模型压缩,特征工程,也可以进一 ...@@ -12,7 +12,7 @@ NNI 的其它重要功能,例如模型压缩,特征工程,也可以进一
通过自动调优来提高,这会在介绍具体功能时提及。 通过自动调优来提高,这会在介绍具体功能时提及。
NNI 具有高扩展性,高级用户可以定制自己的 Tuner、 Assessor,以及训练平台 NNI 具有高扩展性,高级用户可以定制自己的 Tuner、 Assessor,以及训练平台
根据自己的需求。 来适应不同的需求。
.. toctree:: .. toctree::
:maxdepth: 2 :maxdepth: 2
......
...@@ -21,3 +21,4 @@ NNI 中也内置了一些流程的模型压缩算法。 ...@@ -21,3 +21,4 @@ NNI 中也内置了一些流程的模型压缩算法。
Quantizer <quantizers> Quantizer <quantizers>
模型加速 <Compressor/ModelSpeedup> 模型加速 <Compressor/ModelSpeedup>
自动模型压缩 <Compressor/AutoCompression> 自动模型压缩 <Compressor/AutoCompression>
实现 <Compressor/Framework>
############################
支持的剪枝算法
############################
.. toctree::
:maxdepth: 1
Level Pruner <Compressor/Pruner>
AGP Pruner <Compressor/Pruner>
Lottery Ticket Pruner <Compressor/LotteryTicketHypothesis>
FPGM Pruner <Compressor/Pruner>
L1Filter Pruner <Compressor/l1filterpruner>
L2Filter Pruner <Compressor/Pruner>
ActivationAPoZRankFilterPruner <Compressor/Pruner>
ActivationMeanRankFilterPruner <Compressor/Pruner>
Slim Pruner <Compressor/SlimPruner>
#################################
支持的量化算法
#################################
.. toctree::
:maxdepth: 1
Naive Quantizer <Compressor/Quantizer>
QAT Quantizer <Compressor/Quantizer>
DoReFa Quantizer <Compressor/Quantizer>
BNN Quantizer <Compressor/Quantizer>
\ No newline at end of file
########################### ####################
Python API 参考 Python API 参考
########################### ####################
Trial(尝试)
------------------------
.. autofunction:: nni.get_next_parameter
.. autofunction:: nni.get_current_parameter
.. autofunction:: nni.report_intermediate_result
.. autofunction:: nni.report_final_result
.. autofunction:: nni.get_experiment_id
.. autofunction:: nni.get_trial_id
.. autofunction:: nni.get_sequence_id
.. toctree::
:maxdepth: 1
Tuner(调参器) 自动调优 <autotune_ref>
------------------------ NAS <NAS/NasReference>
.. autoclass:: nni.tuner.Tuner \ No newline at end of file
:members:
.. autoclass:: nni.hyperopt_tuner.hyperopt_tuner.HyperoptTuner
:members:
.. autoclass:: nni.evolution_tuner.evolution_tuner.EvolutionTuner
:members:
.. autoclass:: nni.smac_tuner.SMACTuner
:members:
.. autoclass:: nni.gridsearch_tuner.GridSearchTuner
:members:
.. autoclass:: nni.networkmorphism_tuner.networkmorphism_tuner.NetworkMorphismTuner
:members:
.. autoclass:: nni.metis_tuner.metis_tuner.MetisTuner
:members:
.. autoclass:: nni.ppo_tuner.PPOTuner
:members:
.. autoclass:: nni.batch_tuner.batch_tuner.BatchTuner
:members:
.. autoclass:: nni.gp_tuner.gp_tuner.GPTuner
:members:
Assessor(评估器)
------------------------
.. autoclass:: nni.assessor.Assessor
:members:
.. autoclass:: nni.assessor.AssessResult
:members:
.. autoclass:: nni.curvefitting_assessor.CurvefittingAssessor
:members:
.. autoclass:: nni.medianstop_assessor.MedianstopAssessor
:members:
Advisor
------------------------
.. autoclass:: nni.msg_dispatcher_base.MsgDispatcherBase
:members:
.. autoclass:: nni.hyperband_advisor.hyperband_advisor.Hyperband
:members:
.. autoclass:: nni.bohb_advisor.bohb_advisor.BOHB
:members:
...@@ -9,3 +9,4 @@ NNI 支持的训练平台介绍 ...@@ -9,3 +9,4 @@ NNI 支持的训练平台介绍
OpenPAI Yarn 模式<./TrainingService/PaiYarnMode> OpenPAI Yarn 模式<./TrainingService/PaiYarnMode>
Kubeflow<./TrainingService/KubeflowMode> Kubeflow<./TrainingService/KubeflowMode>
FrameworkController<./TrainingService/FrameworkControllerMode> FrameworkController<./TrainingService/FrameworkControllerMode>
OpenPAI<./TrainingService/DLTSMode>
...@@ -53,13 +53,13 @@ prune_config = { ...@@ -53,13 +53,13 @@ prune_config = {
'op_types': ['Conv2d'] 'op_types': ['Conv2d']
}] }]
}, },
'l1': { 'l1filter': {
'dataset_name': 'cifar10', 'dataset_name': 'cifar10',
'model_name': 'vgg16', 'model_name': 'vgg16',
'pruner_class': L1FilterPruner, 'pruner_class': L1FilterPruner,
'config_list': [{ 'config_list': [{
'sparsity': 0.5, 'sparsity': 0.5,
'op_types': ['default'], 'op_types': ['Conv2d'],
'op_names': ['feature.0', 'feature.24', 'feature.27', 'feature.30', 'feature.34', 'feature.37'] 'op_names': ['feature.0', 'feature.24', 'feature.27', 'feature.30', 'feature.34', 'feature.37']
}] }]
}, },
...@@ -69,7 +69,7 @@ prune_config = { ...@@ -69,7 +69,7 @@ prune_config = {
'pruner_class': ActivationMeanRankFilterPruner, 'pruner_class': ActivationMeanRankFilterPruner,
'config_list': [{ 'config_list': [{
'sparsity': 0.5, 'sparsity': 0.5,
'op_types': ['default'], 'op_types': ['Conv2d'],
'op_names': ['feature.0', 'feature.24', 'feature.27', 'feature.30', 'feature.34', 'feature.37'] 'op_names': ['feature.0', 'feature.24', 'feature.27', 'feature.30', 'feature.34', 'feature.37']
}] }]
}, },
......
...@@ -25,7 +25,7 @@ config = { ...@@ -25,7 +25,7 @@ config = {
'model_name': 'vgg16', 'model_name': 'vgg16',
'device': 'cuda', 'device': 'cuda',
'input_shape': [64, 3, 32, 32], 'input_shape': [64, 3, 32, 32],
'masks_file': './checkpoints/mask_vgg16_cifar10_l1.pth' 'masks_file': './checkpoints/mask_vgg16_cifar10_l1filter.pth'
}, },
'fpgm': { 'fpgm': {
'model_name': 'naive', 'model_name': 'naive',
......
...@@ -149,7 +149,7 @@ def get_params(): ...@@ -149,7 +149,7 @@ def get_params():
# Training settings # Training settings
parser = argparse.ArgumentParser(description='PyTorch MNIST Example') parser = argparse.ArgumentParser(description='PyTorch MNIST Example')
parser.add_argument("--data_dir", type=str, parser.add_argument("--data_dir", type=str,
default='/tmp/tensorflow/mnist/input_data', help="data directory") default='./data', help="data directory")
parser.add_argument('--batch_size', type=int, default=64, metavar='N', parser.add_argument('--batch_size', type=int, default=64, metavar='N',
help='input batch size for training (default: 64)') help='input batch size for training (default: 64)')
parser.add_argument("--hidden_size", type=int, default=512, metavar='N', parser.add_argument("--hidden_size", type=int, default=512, metavar='N',
......
...@@ -22,12 +22,13 @@ if __name__ == "__main__": ...@@ -22,12 +22,13 @@ if __name__ == "__main__":
parser.add_argument("--batch-size", default=64, type=int) parser.add_argument("--batch-size", default=64, type=int)
parser.add_argument("--log-frequency", default=10, type=int) parser.add_argument("--log-frequency", default=10, type=int)
parser.add_argument("--epochs", default=50, type=int) parser.add_argument("--epochs", default=50, type=int)
parser.add_argument("--channels", default=16, type=int)
parser.add_argument("--unrolled", default=False, action="store_true") parser.add_argument("--unrolled", default=False, action="store_true")
args = parser.parse_args() args = parser.parse_args()
dataset_train, dataset_valid = datasets.get_dataset("cifar10") dataset_train, dataset_valid = datasets.get_dataset("cifar10")
model = CNN(32, 3, 16, 10, args.layers) model = CNN(32, 3, args.channels, 10, args.layers)
criterion = nn.CrossEntropyLoss() criterion = nn.CrossEntropyLoss()
optim = torch.optim.SGD(model.parameters(), 0.025, momentum=0.9, weight_decay=3.0E-4) optim = torch.optim.SGD(model.parameters(), 0.025, momentum=0.9, weight_decay=3.0E-4)
......
...@@ -24,16 +24,17 @@ if __name__ == "__main__": ...@@ -24,16 +24,17 @@ if __name__ == "__main__":
parser.add_argument("--batch-size", default=128, type=int) parser.add_argument("--batch-size", default=128, type=int)
parser.add_argument("--log-frequency", default=10, type=int) parser.add_argument("--log-frequency", default=10, type=int)
parser.add_argument("--search-for", choices=["macro", "micro"], default="macro") parser.add_argument("--search-for", choices=["macro", "micro"], default="macro")
parser.add_argument("--epochs", default=None, type=int, help="Number of epochs (default: macro 310, micro 150)")
args = parser.parse_args() args = parser.parse_args()
dataset_train, dataset_valid = datasets.get_dataset("cifar10") dataset_train, dataset_valid = datasets.get_dataset("cifar10")
if args.search_for == "macro": if args.search_for == "macro":
model = GeneralNetwork() model = GeneralNetwork()
num_epochs = 310 num_epochs = args.epochs or 310
mutator = None mutator = None
elif args.search_for == "micro": elif args.search_for == "micro":
model = MicroNetwork(num_layers=6, out_channels=20, num_nodes=5, dropout_rate=0.1, use_aux_heads=True) model = MicroNetwork(num_layers=6, out_channels=20, num_nodes=5, dropout_rate=0.1, use_aux_heads=True)
num_epochs = 150 num_epochs = args.epochs or 150
mutator = enas.EnasMutator(model, tanh_constant=1.1, cell_exit_extra_step=True) mutator = enas.EnasMutator(model, tanh_constant=1.1, cell_exit_extra_step=True)
else: else:
raise AssertionError raise AssertionError
......
...@@ -25,23 +25,28 @@ logger = logging.getLogger('nni') ...@@ -25,23 +25,28 @@ logger = logging.getLogger('nni')
if __name__ == "__main__": if __name__ == "__main__":
parser = ArgumentParser("pdarts") parser = ArgumentParser("pdarts")
parser.add_argument('--add_layers', action='append', parser.add_argument('--add_layers', action='append', type=int,
default=[0, 6, 12], help='add layers') help='add layers, default: [0, 6, 12]')
parser.add_argument('--dropped_ops', action='append', parser.add_argument('--dropped_ops', action='append', type=int,
default=[3, 2, 1], help='drop ops') help='drop ops, default: [3, 2, 1]')
parser.add_argument("--nodes", default=4, type=int) parser.add_argument("--nodes", default=4, type=int)
parser.add_argument("--init_layers", default=5, type=int) parser.add_argument("--init_layers", default=5, type=int)
parser.add_argument("--channels", default=16, type=int)
parser.add_argument("--batch-size", default=64, type=int) parser.add_argument("--batch-size", default=64, type=int)
parser.add_argument("--log-frequency", default=1, type=int) parser.add_argument("--log-frequency", default=1, type=int)
parser.add_argument("--epochs", default=50, type=int) parser.add_argument("--epochs", default=50, type=int)
parser.add_argument("--unrolled", default=False, action="store_true") parser.add_argument("--unrolled", default=False, action="store_true")
args = parser.parse_args() args = parser.parse_args()
if args.add_layers is None:
args.add_layers = [0, 6, 12]
if args.dropped_ops is None:
args.dropped_ops = [3, 2, 1]
logger.info("loading data") logger.info("loading data")
dataset_train, dataset_valid = datasets.get_dataset("cifar10") dataset_train, dataset_valid = datasets.get_dataset("cifar10")
def model_creator(layers): def model_creator(layers):
model = CNN(32, 3, 16, 10, layers, n_nodes=args.nodes) model = CNN(32, 3, args.channels, 10, layers, n_nodes=args.nodes)
criterion = nn.CrossEntropyLoss() criterion = nn.CrossEntropyLoss()
optim = torch.optim.SGD(model.parameters(), 0.025, momentum=0.9, weight_decay=3.0E-4) optim = torch.optim.SGD(model.parameters(), 0.025, momentum=0.9, weight_decay=3.0E-4)
......
...@@ -241,7 +241,8 @@ def init_trainable_embedding(embedding_path, word_id_dict, embed_dim=300): ...@@ -241,7 +241,8 @@ def init_trainable_embedding(embedding_path, word_id_dict, embed_dim=300):
embedding = np.random.random([len(word_id_dict), embed_dim]).astype(np.float32) / 2.0 - 0.25 embedding = np.random.random([len(word_id_dict), embed_dim]).astype(np.float32) / 2.0 - 0.25
embedding[0] = np.zeros(embed_dim) # PAD embedding[0] = np.zeros(embed_dim) # PAD
embedding[1] = (np.random.rand(embed_dim) - 0.5) / 2 # UNK embedding[1] = (np.random.rand(embed_dim) - 0.5) / 2 # UNK
for word, idx in word_id_dict.items(): for word in sorted(word_id_dict.keys()):
idx = word_id_dict[word]
if idx == 0 or idx == 1: if idx == 0 or idx == 1:
continue continue
if word in word_embed_model["mapping"]: if word in word_embed_model["mapping"]:
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment