提交 9dd37bfe 编写于 作者: C ceci3

update

上级 ec438407
# 图像分类网络结构搜索-快速开始 # 图像分类网络结构搜索-快速开始
该教程以图像分类模型MobileNetV2为例,说明如何在cifar10数据集上快速使用[网络结构搜索接口](../api/nas_api.md) 该教程以图像分类模型MobileNetV2为例,说明如何在CIFAR10数据集上快速使用[网络结构搜索接口](../api/nas_api.md)基于模拟退火(Simulated Annealing,简称SA)的方式进行网络结构搜索。
模拟退火算法来源于固体退火原理,将固体加温至充分高,再让其徐徐冷却,加温时,固体内部粒子随温升变为无序状,内能增大,而徐徐冷却时粒子渐趋有序,在每个温度都达到平衡态,最后在常温时达到基态,内能减为最小。详细算法可以参考[模拟退火](https://github.com/PaddlePaddle/PaddleSlim/blob/develop/docs/zh_cn/algo/algo.md#411-%E6%A8%A1%E6%8B%9F%E9%80%80%E7%81%AB)
Tips: 运行该示例前请确认已正确安装Paddle和PaddleSlim。 Tips: 运行该示例前请确认已正确安装Paddle和PaddleSlim。
该示例包含以下步骤: 该示例包含以下步骤:
...@@ -15,8 +18,7 @@ Tips: 运行该示例前请确认已正确安装Paddle和PaddleSlim。 ...@@ -15,8 +18,7 @@ Tips: 运行该示例前请确认已正确安装Paddle和PaddleSlim。
以下章节依次介绍每个步骤的内容。 以下章节依次介绍每个步骤的内容。
# 1. 加载示例数据 # 1. 加载示例数据
NEED to add more description 使用的示例数据集为CIFAR10,CIFAR10数据集共有60000张彩色图片,图像大小是32\*32,分为10个类,每类6000张图片。训练集包含50000张图片,共有10个类别,每类从6000张>图片中随机选取5000张图片,剩下的图片组成测试集,测试集包含10000张图片。paddle框架中`paddle.dataset.cifar`包括了cifar数据集的下载和读取,代码如下:
使用的示例数据集为cifar10,paddle框架中`paddle.dataset.cifar`包括了cifar数据集的下载和读取,代码如下:
```python ```python
import paddle import paddle
import paddle.fluid as fluid import paddle.fluid as fluid
...@@ -29,9 +31,9 @@ eval_feeder = fluid.DataFeeder(inputs, fluid.CPUPlace()) ...@@ -29,9 +31,9 @@ eval_feeder = fluid.DataFeeder(inputs, fluid.CPUPlace())
# 2. 构建模型 # 2. 构建模型
NEED to add more description 本示例是基于MobileNetV2搜索空间进行网络结构搜索的,MobileNetV2是一个基于inverted residual的轻量级网络,详细信息可以查看[MobileNetV2: Inverted Residuals and Linear Bottlenecks](https://arxiv.org/abs/1801.04381)
```python ```python
### 初始化SANAS实例 ### 初始化SANAS实例,指定搜索空间为MobileNetV2。
sanas = slim.nas.SANAS(configs=[('MobileNetV2Space')], server_addr=("", 8337), save_checkpoint=None) sanas = slim.nas.SANAS(configs=[('MobileNetV2Space')], server_addr=("", 8337), save_checkpoint=None)
### 获取当前搜索到的模型结构 ### 获取当前搜索到的模型结构
archs = sanas.next_archs()[0] archs = sanas.next_archs()[0]
...@@ -62,7 +64,7 @@ with fluid.program_guard(train_program, startup_program): ...@@ -62,7 +64,7 @@ with fluid.program_guard(train_program, startup_program):
``` ```
# 3. 开始训练当前网络结构 # 3. 开始训练当前网络结构
NEED to add more description 根据上面一步拿到的模型结构构造的训练program开始训练。
```python ```python
outputs = [avg_cost.name, acc_top1.name, acc_top5.name] outputs = [avg_cost.name, acc_top1.name, acc_top5.name]
for data in train_reader(): for data in train_reader():
...@@ -71,7 +73,7 @@ for data in train_reader(): ...@@ -71,7 +73,7 @@ for data in train_reader():
``` ```
# 4. 开始评估当前网络结构 # 4. 开始评估当前网络结构
NEED to add more description 评估第3步中训练的模型结构。
```python ```python
reward = [] reward = []
for data in eval_reader(): for data in eval_reader():
...@@ -84,7 +86,7 @@ print("FINAL TEST: avg_cost: {}, acc1: {}, acc5: {}".format(finally_reward[0], f ...@@ -84,7 +86,7 @@ print("FINAL TEST: avg_cost: {}, acc1: {}, acc5: {}".format(finally_reward[0], f
``` ```
# 5. 回传当前网络结构的得分 # 5. 回传当前网络结构的得分
NEED to add more description 在当前模型结构训练和评估完成后回传最终的评估结果,SANAS会根据这个结果更新下一轮的模型结构。
```python ```python
sanas.reward(float(finally_reward[1])) sanas.reward(float(finally_reward[1]))
``` ```
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册