提交 6772e4e2 编写于 作者: Z zhangxuefei

Merge branch 'release/v1.4' of https://github.com/PaddlePaddle/PaddleHub into release/v1.4

...@@ -11,9 +11,9 @@ PaddleHub是飞桨预训练模型管理和迁移学习工具,通过PaddleHub ...@@ -11,9 +11,9 @@ PaddleHub是飞桨预训练模型管理和迁移学习工具,通过PaddleHub
* **[模型即软件](#模型即软件)**,通过Python API或命令行实现快速预测,更方便地使用PaddlePaddle模型库。 * **[模型即软件](#模型即软件)**,通过Python API或命令行实现快速预测,更方便地使用PaddlePaddle模型库。
* **[迁移学习](#迁移学习)**用户通过Fine-tune API,只需要少量代码即可完成自然语言处理和计算机视觉场景的深度迁移学习。 * **[迁移学习](#迁移学习)**用户通过Fine-tune API,只需要少量代码即可完成自然语言处理和计算机视觉场景的深度迁移学习。
* **[服务化部署](#服务化部署paddlehub-serving)**,简单一行命令即可搭建属于自己的模型的API服务 * **[服务化部署](#服务化部署paddlehub-serving)**,简单一行命令即可搭建属于自己的模型的API服务
* **[超参优化](#超参优化autodl-finetuner)**,自动搜索最优超参,得到更好的模型效果。 * **[超参优化](#超参优化autodl-finetuner)**,自动搜索最优超参,得到更好的模型效果。
...@@ -49,8 +49,8 @@ $ pip install paddlehub ...@@ -49,8 +49,8 @@ $ pip install paddlehub
```python ```python
import paddlehub import paddlehub
paddlehub.server_check() paddlehub.server_check()
# 如果可以连接远端PaddleHub-Server,则显示Request Hub-Server successfully. # 如果可以连接远端PaddleHub-Server,则显示Request Hub-Server successfully
# 如果无法连接远端PaddleHub-Server,则显示Request Hub-Server unsuccessfully. # 如果无法连接远端PaddleHub-Server,则显示Request Hub-Server unsuccessfully
``` ```
...@@ -92,7 +92,7 @@ PaddleHub同时支持安装、卸载、查看模型信息等命令行功能, ...@@ -92,7 +92,7 @@ PaddleHub同时支持安装、卸载、查看模型信息等命令行功能,
* 示例合集 * 示例合集
PaddleHub提供了使用Finetune-API和预训练模型完成[文本分类](./demo/text_classification)[序列标注](./demo/sequence_labeling)[多标签分类](./demo/multi_label_classification)[图像分类](./demo/image_classification)[检索式问答任务](./demo/qa_classification)[回归任务](./demo/regression)[句子语义相似度计算](./demo/sentence_similarity)[阅读理解任务](./demo/reading_comprehension)等迁移任务的使用示例,详细参见[demo](./demo) PaddleHub提供了使用Finetune-API和预训练模型完成[文本分类](./demo/text_classification)[序列标注](./demo/sequence_labeling)[多标签分类](./demo/multi_label_classification)[图像分类](./demo/image_classification)[检索式问答任务](./demo/qa_classification)[回归任务](./demo/regression)[句子语义相似度计算](./demo/sentence_similarity)[阅读理解任务](./demo/reading_comprehension)等迁移任务的使用示例,详细参见[demo](./demo)
* 场景化使用 * 场景化使用
...@@ -111,7 +111,7 @@ PaddleHub在AI Studio上提供了IPython NoteBook形式的demo。用户可以直 ...@@ -111,7 +111,7 @@ PaddleHub在AI Studio上提供了IPython NoteBook形式的demo。用户可以直
|LAC|词法分析|N/A|[点击体验](https://aistudio.baidu.com/aistudio/projectdetail/215711)|| |LAC|词法分析|N/A|[点击体验](https://aistudio.baidu.com/aistudio/projectdetail/215711)||
|Ultra-Light-Fast-Generic-Face-Detector-1MB|人脸检测|N/A|[点击体验](https://aistudio.baidu.com/aistudio/projectdetail/215962)|| |Ultra-Light-Fast-Generic-Face-Detector-1MB|人脸检测|N/A|[点击体验](https://aistudio.baidu.com/aistudio/projectdetail/215962)||
**NOTE:** `[飞桨PaddleHub](https://aistudio.baidu.com/aistudio/personalcenter/thirdview/79927)`是PaddleHub的官方账号 **NOTE:** [`飞桨PaddleHub`](https://aistudio.baidu.com/aistudio/personalcenter/thirdview/79927)是PaddleHub的官方账号。
关于PaddleHub快捷完成迁移学习,更多信息参考: 关于PaddleHub快捷完成迁移学习,更多信息参考:
...@@ -135,7 +135,7 @@ PaddleHub Serving启动方式有两种: ...@@ -135,7 +135,7 @@ PaddleHub Serving启动方式有两种:
$ hub serving start --modules [Module1==Version1, Module2==Version2, ...] $ hub serving start --modules [Module1==Version1, Module2==Version2, ...]
``` ```
其中选项参数`--modules/-m`表示待部署模型 其中选项参数`--modules/-m`表示待部署模型
* 配置文件方式: * 配置文件方式:
...@@ -145,7 +145,7 @@ $ hub serving start --config config.json ...@@ -145,7 +145,7 @@ $ hub serving start --config config.json
config.json文件包含待部署模型信息等, config.json文件包含待部署模型信息等,
关于PaddleHub Serving详细信息参考[PaddleHub Serving一键服务化部署](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub-Serving%E4%B8%80%E9%94%AE%E6%9C%8D%E5%8A%A1%E9%83%A8%E7%BD%B2) 关于PaddleHub Serving详细信息参考[PaddleHub Serving一键服务化部署](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub-Serving%E4%B8%80%E9%94%AE%E6%9C%8D%E5%8A%A1%E9%83%A8%E7%BD%B2)
### 超参优化AutoDL Finetuner ### 超参优化AutoDL Finetuner
...@@ -156,23 +156,23 @@ AutoDL Finetuner详细信息参见[PaddleHub超参优化](./tutorial/autofinetun ...@@ -156,23 +156,23 @@ AutoDL Finetuner详细信息参见[PaddleHub超参优化](./tutorial/autofinetun
## FAQ ## FAQ
**Q:** 利用PaddleHub Fine-tune如何适配自定义数据集 **Q:** 利用PaddleHub Fine-tune如何适配自定义数据集
**A:** 参考[PaddleHub适配自定义数据集完成Fine-tune](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub%E9%80%82%E9%85%8D%E8%87%AA%E5%AE%9A%E4%B9%89%E6%95%B0%E6%8D%AE%E5%AE%8C%E6%88%90FineTune) **A:** 参考[PaddleHub适配自定义数据集完成Fine-tune](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub%E9%80%82%E9%85%8D%E8%87%AA%E5%AE%9A%E4%B9%89%E6%95%B0%E6%8D%AE%E5%AE%8C%E6%88%90FineTune)
**Q:** 使用PaddleHub时,无法下载预置数据集、Module的等现象 **Q:** 使用PaddleHub时,无法下载预置数据集、Module的等现象
**A:** 下载数据集、module等,PaddleHub要求机器可以访问外网。可以使用server_check()可以检查本地与远端PaddleHub-Server的连接状态,使用方法如下: **A:** 下载数据集、module等,PaddleHub要求机器可以访问外网。可以使用server_check()可以检查本地与远端PaddleHub-Server的连接状态,使用方法如下:
```python ```python
import paddlehub import paddlehub
paddlehub.server_check() paddlehub.server_check()
# 如果可以连接远端PaddleHub-Server,则显示Request Hub-Server successfully. # 如果可以连接远端PaddleHub-Server,则显示Request Hub-Server successfully
# 如果无法连接远端PaddleHub-Server,则显示Request Hub-Server unsuccessfully. # 如果无法连接远端PaddleHub-Server,则显示Request Hub-Server unsuccessfully
``` ```
**Q:** 利用PaddleHub ernie/bert进行Fine-tune时,运行出错并提示`paddle.fluid.core_avx.EnforceNotMet: Input ShapeTensor cannot be found in Op reshape2`等信息 **Q:** 利用PaddleHub ernie/bert进行Fine-tune时,运行出错并提示`paddle.fluid.core_avx.EnforceNotMet: Input ShapeTensor cannot be found in Op reshape2`等信息
**A:** 因为ernie/bert module的创建时和此时运行环境中PaddlePaddle版本不对应。可以将PaddlePaddle和PaddleHub升级至最新版本,同时将ernie卸载。 **A:** 因为ernie/bert module的创建时和此时运行环境中PaddlePaddle版本不对应。可以将PaddlePaddle和PaddleHub升级至最新版本,同时将ernie卸载。
```shell ```shell
...@@ -187,7 +187,7 @@ $ hub uninstall ernie ...@@ -187,7 +187,7 @@ $ hub uninstall ernie
**更多问题** **更多问题**
当安装或者使用遇到问题时,可以通过[FAQ](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub-FAQ)查找解决方案。 当安装或者使用遇到问题时,可以通过[FAQ](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub-FAQ)查找解决方案。
如果在FAQ中没有找到解决方案,欢迎您将问题和bug报告以[Github Issues](https://github.com/PaddlePaddle/PaddleHub/issues)的形式提交给我们,我们会第一时间进行跟进 如果在FAQ中没有找到解决方案,欢迎您将问题和bug报告以[Github Issues](https://github.com/PaddlePaddle/PaddleHub/issues)的形式提交给我们,我们会第一时间进行跟进
## 用户交流群 ## 用户交流群
......
...@@ -65,4 +65,4 @@ ...@@ -65,4 +65,4 @@
## 超参优化AutoDL Finetuner ## 超参优化AutoDL Finetuner
PaddleHub还提供了超参优化(Hyperparameter Tuning)功能, 自动搜索最优模型超参得到更好的模型效果。详细信息参见[AutoDL Finetuner超参优化功能教程](../tutorial/autofinetune.md) PaddleHub还提供了超参优化(Hyperparameter Tuning)功能, 自动搜索最优模型超参得到更好的模型效果。详细信息参见[AutoDL Finetuner超参优化功能教程](../tutorial/autofinetune.md)
...@@ -16,7 +16,7 @@ AutoDL Finetuner会根据搜索空间来取样生成参数和网络架构。搜 ...@@ -16,7 +16,7 @@ AutoDL Finetuner会根据搜索空间来取样生成参数和网络架构。搜
要定义搜索空间,需要定义变量名称、类型及其搜索范围。通过这些信息构建了一个超参空间, 要定义搜索空间,需要定义变量名称、类型及其搜索范围。通过这些信息构建了一个超参空间,
PaddleHub将在这个空间内进行超参数的搜索,将搜索到的超参传入train.py获得评估效果,根据评估效果自动调整超参搜索方向,直到满足搜索次数。 PaddleHub将在这个空间内进行超参数的搜索,将搜索到的超参传入train.py获得评估效果,根据评估效果自动调整超参搜索方向,直到满足搜索次数。
以Fine-tune图像分类任务为例, 以下是待优化超参数的yaml文件hparam.yaml,包含需要搜素的超参名字、类型、范围等信息。目前参数搜索类型只支持float和int类型 以Fine-tune图像分类任务为例, 以下是待优化超参数的yaml文件hparam.yaml,包含需要搜素的超参名字、类型、范围等信息。目前参数搜索类型只支持float和int类型
``` ```
param_list: param_list:
- name : learning_rate - name : learning_rate
...@@ -63,4 +63,4 @@ img_cls.py以mobilenet为预训练模型,在flowers数据集上进行Fine-tune ...@@ -63,4 +63,4 @@ img_cls.py以mobilenet为预训练模型,在flowers数据集上进行Fine-tune
在完成安装PaddlePaddle与PaddleHub后,通过执行脚本`sh run_autofinetune.sh`即可开始使用超参优化功能。 在完成安装PaddlePaddle与PaddleHub后,通过执行脚本`sh run_autofinetune.sh`即可开始使用超参优化功能。
**NOTE:** 关于PaddleHub超参优化详情参考[教程](../../tutorial/autofinetune.md) **NOTE:** 关于PaddleHub超参优化详情参考[教程](../../tutorial/autofinetune.md)
...@@ -16,7 +16,7 @@ AutoDL Finetuner会根据搜索空间来取样生成参数和网络架构。搜 ...@@ -16,7 +16,7 @@ AutoDL Finetuner会根据搜索空间来取样生成参数和网络架构。搜
要定义搜索空间,需要定义变量名称、类型及其搜索范围。通过这些信息构建了一个超参空间, 要定义搜索空间,需要定义变量名称、类型及其搜索范围。通过这些信息构建了一个超参空间,
PaddleHub将在这个空间内进行超参数的搜索,将搜索到的超参传入train.py获得评估效果,根据评估效果自动调整超参搜索方向,直到满足搜索次数。 PaddleHub将在这个空间内进行超参数的搜索,将搜索到的超参传入train.py获得评估效果,根据评估效果自动调整超参搜索方向,直到满足搜索次数。
以Fine-tune文本分类任务为例, 以下是待优化超参数的yaml文件hparam.yaml,包含需要搜素的超参名字、类型、范围等信息。目前参数搜索类型只支持float和int类型 以Fine-tune文本分类任务为例, 以下是待优化超参数的yaml文件hparam.yaml,包含需要搜素的超参名字、类型、范围等信息。目前参数搜索类型只支持float和int类型
``` ```
param_list: param_list:
- name : learning_rate - name : learning_rate
......
...@@ -9,13 +9,13 @@ ...@@ -9,13 +9,13 @@
其中脚本参数说明如下: 其中脚本参数说明如下:
```shell ```shell
--batch_size: 批处理大小,请结合显存情况进行调整,若出现显存不足,请适当调低这一参数。默认为16 --batch_size: 批处理大小,请结合显存情况进行调整,若出现显存不足,请适当调低这一参数。默认为16
--num_epoch: Fine-tune迭代的轮数。默认为1 --num_epoch: Fine-tune迭代的轮数。默认为1
--module: 使用哪个Module作为Fine-tune的特征提取器,脚本支持{resnet50/resnet101/resnet152/mobilenet/nasnet/pnasnet}等模型。默认为resnet50 --module: 使用哪个Module作为Fine-tune的特征提取器,脚本支持{resnet50/resnet101/resnet152/mobilenet/nasnet/pnasnet}等模型。默认为resnet50
--checkpoint_dir: 模型保存路径,PaddleHub会自动保存验证集上表现最好的模型。默认为paddlehub_finetune_ckpt --checkpoint_dir: 模型保存路径,PaddleHub会自动保存验证集上表现最好的模型。默认为paddlehub_finetune_ckpt
--dataset: 使用什么数据集进行Fine-tune, 脚本支持分别是{flowers/dogcat/stanforddogs/indoor67/food101}。默认为flowers --dataset: 使用什么数据集进行Fine-tune, 脚本支持分别是{flowers/dogcat/stanforddogs/indoor67/food101}。默认为flowers
--use_gpu: 是否使用GPU进行训练,如果机器支持GPU且安装了GPU版本的PaddlePaddle,我们建议您打开这个开关。默认关闭 --use_gpu: 是否使用GPU进行训练,如果机器支持GPU且安装了GPU版本的PaddlePaddle,我们建议您打开这个开关。默认关闭
--use_data_parallel: 是否使用数据并行,打开该开关时,会将数据分散到不同的卡上进行训练(CPU下会分布到不同线程)。默认打开 --use_data_parallel: 是否使用数据并行,打开该开关时,会将数据分散到不同的卡上进行训练(CPU下会分布到不同线程)。默认打开
``` ```
## 代码步骤 ## 代码步骤
...@@ -58,15 +58,15 @@ data_reader = hub.reader.ImageClassificationReader( ...@@ -58,15 +58,15 @@ data_reader = hub.reader.ImageClassificationReader(
| Indoor67 | hub.dataset.Indoor67() | | Indoor67 | hub.dataset.Indoor67() |
| Food101 | hub.dataset.Food101() | | Food101 | hub.dataset.Food101() |
`hub.dataset.Flowers()` 会自动从网络下载数据集并解压到用户目录下`$HOME/.paddlehub/dataset`目录 `hub.dataset.Flowers()` 会自动从网络下载数据集并解压到用户目录下`$HOME/.paddlehub/dataset`目录
`module.get_expected_image_width()``module.get_expected_image_height()`会返回预训练模型对应的图片尺寸 `module.get_expected_image_width()``module.get_expected_image_height()`会返回预训练模型对应的图片尺寸
`module.module.get_pretrained_images_mean()``module.get_pretrained_images_std()`会返回预训练模型对应的图片均值和方差 `module.module.get_pretrained_images_mean()``module.get_pretrained_images_std()`会返回预训练模型对应的图片均值和方差
#### 自定义数据集 #### 自定义数据集
如果想加载自定义数据集完成迁移学习,详细参见[自定义数据集](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub%E9%80%82%E9%85%8D%E8%87%AA%E5%AE%9A%E4%B9%89%E6%95%B0%E6%8D%AE%E5%AE%8C%E6%88%90FineTune) 如果想加载自定义数据集完成迁移学习,详细参见[自定义数据集](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub%E9%80%82%E9%85%8D%E8%87%AA%E5%AE%9A%E4%B9%89%E6%95%B0%E6%8D%AE%E5%AE%8C%E6%88%90FineTune)
### Step3:选择优化策略和运行配置 ### Step3:选择优化策略和运行配置
...@@ -81,27 +81,27 @@ config = hub.RunConfig(use_cuda=True, use_data_parallel=True, num_epoch=3, batch ...@@ -81,27 +81,27 @@ config = hub.RunConfig(use_cuda=True, use_data_parallel=True, num_epoch=3, batch
#### 优化策略 #### 优化策略
PaddleHub提供了许多优化策略,如`AdamWeightDecayStrategy``ULMFiTStrategy``DefaultFinetuneStrategy`等,详细信息参见[策略](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub-API:-Strategy) PaddleHub提供了许多优化策略,如`AdamWeightDecayStrategy``ULMFiTStrategy``DefaultFinetuneStrategy`等,详细信息参见[策略](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub-API:-Strategy)
其中`DefaultFinetuneStrategy`: 其中`DefaultFinetuneStrategy`:
* `learning_rate`: 全局学习率。默认为1e-4 * `learning_rate`: 全局学习率。默认为1e-4
* `optimizer_name`: 优化器名称。默认adam * `optimizer_name`: 优化器名称。默认adam
* `regularization_coeff`: 正则化的λ参数。默认为1e-3 * `regularization_coeff`: 正则化的λ参数。默认为1e-3
#### 运行配置 #### 运行配置
`RunConfig` 主要控制Fine-tune的训练,包含以下可控制的参数: `RunConfig` 主要控制Fine-tune的训练,包含以下可控制的参数:
* `log_interval`: 进度日志打印间隔,默认每10个step打印一次 * `log_interval`: 进度日志打印间隔,默认每10个step打印一次
* `eval_interval`: 模型评估的间隔,默认每100个step评估一次验证集 * `eval_interval`: 模型评估的间隔,默认每100个step评估一次验证集
* `save_ckpt_interval`: 模型保存间隔,请根据任务大小配置,默认只保存验证集效果最好的模型和训练结束的模型 * `save_ckpt_interval`: 模型保存间隔,请根据任务大小配置,默认只保存验证集效果最好的模型和训练结束的模型
* `use_cuda`: 是否使用GPU训练,默认为False * `use_cuda`: 是否使用GPU训练,默认为False
* `use_pyreader`: 是否使用pyreader,默认False * `use_pyreader`: 是否使用pyreader,默认False
* `use_data_parallel`: 是否使用并行计算,默认True。打开该功能依赖nccl库 * `use_data_parallel`: 是否使用并行计算,默认True。打开该功能依赖nccl库
* `checkpoint_dir`: 模型checkpoint保存路径, 若用户没有指定,程序会自动生成 * `checkpoint_dir`: 模型checkpoint保存路径, 若用户没有指定,程序会自动生成
* `num_epoch`: Fine-tune的轮数 * `num_epoch`: Fine-tune的轮数
* `batch_size`: 训练的批大小,如果使用GPU,请根据实际情况调整batch_size * `batch_size`: 训练的批大小,如果使用GPU,请根据实际情况调整batch_size
* `strategy`: Fine-tune优化策略 * `strategy`: Fine-tune优化策略
### Step4: 构建网络并创建分类迁移任务进行Fine-tune ### Step4: 构建网络并创建分类迁移任务进行Fine-tune
...@@ -121,11 +121,11 @@ task.finetune_and_eval() ...@@ -121,11 +121,11 @@ task.finetune_and_eval()
**NOTE:** **NOTE:**
1. `output_dict["feature_map"]`返回了resnet/mobilenet等模型对应的feature_map,可以用于图片的特征表达。 1. `output_dict["feature_map"]`返回了resnet/mobilenet等模型对应的feature_map,可以用于图片的特征表达。
2. `feed_list`中的inputs参数指明了resnet/mobilenet等模型的输入tensor的顺序,与ImageClassifierTask返回的结果一致。 2. `feed_list`中的inputs参数指明了resnet/mobilenet等模型的输入tensor的顺序,与ImageClassifierTask返回的结果一致。
3. `hub.ImageClassifierTask`通过输入特征,label与迁移的类别数,可以生成适用于图像分类的迁移任务`ImageClassifierTask` 3. `hub.ImageClassifierTask`通过输入特征,label与迁移的类别数,可以生成适用于图像分类的迁移任务`ImageClassifierTask`
#### 自定义迁移任务 #### 自定义迁移任务
如果想改变迁移任务组网,详细参见[自定义迁移任务](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub:-%E8%87%AA%E5%AE%9A%E4%B9%89Task) 如果想改变迁移任务组网,详细参见[自定义迁移任务](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub:-%E8%87%AA%E5%AE%9A%E4%B9%89Task)
## 可视化 ## 可视化
...@@ -133,7 +133,7 @@ Fine-tune API训练过程中会自动对关键训练指标进行打点,启动 ...@@ -133,7 +133,7 @@ Fine-tune API训练过程中会自动对关键训练指标进行打点,启动
```bash ```bash
$ tensorboard --logdir $CKPT_DIR/visualization --host ${HOST_IP} --port ${PORT_NUM} $ tensorboard --logdir $CKPT_DIR/visualization --host ${HOST_IP} --port ${PORT_NUM}
``` ```
其中${HOST_IP}为本机IP地址,${PORT_NUM}为可用端口号,如本机IP地址为192.168.0.1,端口号8040,用浏览器打开192.168.0.1:8040,即可看到训练过程中指标的变化情况 其中${HOST_IP}为本机IP地址,${PORT_NUM}为可用端口号,如本机IP地址为192.168.0.1,端口号8040,用浏览器打开192.168.0.1:8040,即可看到训练过程中指标的变化情况
## 模型预测 ## 模型预测
...@@ -142,17 +142,17 @@ $ tensorboard --logdir $CKPT_DIR/visualization --host ${HOST_IP} --port ${PORT_N ...@@ -142,17 +142,17 @@ $ tensorboard --logdir $CKPT_DIR/visualization --host ${HOST_IP} --port ${PORT_N
我们使用该模型来进行预测。predict.py脚本支持的参数如下: 我们使用该模型来进行预测。predict.py脚本支持的参数如下:
```shell ```shell
--module: 使用哪个Module作为Fine-tune的特征提取器,脚本支持{resnet50/resnet101/resnet152/mobilenet/nasnet/pnasnet}等模型。默认为resnet50 --module: 使用哪个Module作为Fine-tune的特征提取器,脚本支持{resnet50/resnet101/resnet152/mobilenet/nasnet/pnasnet}等模型。默认为resnet50
--checkpoint_dir: 模型保存路径,PaddleHub会自动保存验证集上表现最好的模型。默认为paddlehub_finetune_ckpt --checkpoint_dir: 模型保存路径,PaddleHub会自动保存验证集上表现最好的模型。默认为paddlehub_finetune_ckpt
--dataset: 使用什么数据集进行Fine-tune, 脚本支持分别是{flowers/dogcat}。默认为flowers --dataset: 使用什么数据集进行Fine-tune, 脚本支持分别是{flowers/dogcat}。默认为flowers
--use_gpu: 使用使用GPU进行训练,如果本机支持GPU且安装了GPU版本的PaddlePaddle,我们建议您打开这个开关。默认关闭 --use_gpu: 使用使用GPU进行训练,如果本机支持GPU且安装了GPU版本的PaddlePaddle,我们建议您打开这个开关。默认关闭
--use_pyreader: 是否使用pyreader进行数据喂入。默认关闭 --use_pyreader: 是否使用pyreader进行数据喂入。默认关闭
``` ```
`注意`:进行预测时,所选择的module,checkpoint_dir,dataset必须和Fine-tune所用的一样 **NOTE:** 进行预测时,所选择的module,checkpoint_dir,dataset必须和Fine-tune所用的一样。
参数配置正确后,请执行脚本`sh run_predict.sh`,即可看到以下图片分类预测结果 参数配置正确后,请执行脚本`sh run_predict.sh`,即可看到以下图片分类预测结果
如需了解更多预测步骤,请参考`predict.py` 如需了解更多预测步骤,请参考`predict.py`
我们在AI Studio上提供了IPython NoteBook形式的demo,您可以直接在平台上在线体验,链接如下: 我们在AI Studio上提供了IPython NoteBook形式的demo,您可以直接在平台上在线体验,链接如下:
...@@ -172,4 +172,4 @@ $ tensorboard --logdir $CKPT_DIR/visualization --host ${HOST_IP} --port ${PORT_N ...@@ -172,4 +172,4 @@ $ tensorboard --logdir $CKPT_DIR/visualization --host ${HOST_IP} --port ${PORT_N
## 超参优化AutoDL Finetuner ## 超参优化AutoDL Finetuner
PaddleHub还提供了超参优化(Hyperparameter Tuning)功能, 自动搜索最优模型超参得到更好的模型效果。详细信息参见[AutoDL Finetuner超参优化功能教程](../../tutorial/autofinetune.md)[使用样例](../autofinetune) PaddleHub还提供了超参优化(Hyperparameter Tuning)功能, 自动搜索最优模型超参得到更好的模型效果。详细信息参见[AutoDL Finetuner超参优化功能教程](../../tutorial/autofinetune.md)
...@@ -3,13 +3,13 @@ ...@@ -3,13 +3,13 @@
本示例展示如何使用LAC Module进行预测。 本示例展示如何使用LAC Module进行预测。
LAC是中文词法分析模型,可以用于进行中文句子的分词/词性标注/命名实体识别等功能,关于模型的细节参见[模型介绍](https://www.paddlepaddle.org.cn/hubdetail?name=lac&en_category=LexicalAnalysis) LAC是中文词法分析模型,可以用于进行中文句子的分词/词性标注/命名实体识别等功能,关于模型的细节参见[模型介绍](https://www.paddlepaddle.org.cn/hubdetail?name=lac&en_category=LexicalAnalysis)
## 命令行方式预测 ## 命令行方式预测
`cli_demo.sh`给出了使用命令行接口(Command Line Interface)调用Module预测的示例脚本 `cli_demo.sh`给出了使用命令行接口(Command Line Interface)调用Module预测的示例脚本
通过以下命令试验下效果 通过以下命令试验下效果
```shell ```shell
$ hub run lac --input_text "今天是个好日子" $ hub run lac --input_text "今天是个好日子"
...@@ -32,14 +32,14 @@ user.dict为用户自定义词典,可以不指定,当指定自定义词典 ...@@ -32,14 +32,14 @@ user.dict为用户自定义词典,可以不指定,当指定自定义词典
**NOTE:** **NOTE:**
* 该PaddleHub Module使用词典干预功能时,依赖于第三方库pyahocorasick,请自行安装 * 该PaddleHub Module使用词典干预功能时,依赖于第三方库pyahocorasick,请自行安装
* 请不要直接复制示例文本使用,复制后的格式可能存在问题 * 请不要直接复制示例文本使用,复制后的格式可能存在问题
## 通过Python API预测 ## 通过Python API预测
`lac_demo.py`给出了使用python API调用PaddleHub LAC Module预测的示例代码 `lac_demo.py`给出了使用python API调用PaddleHub LAC Module预测的示例代码
通过以下命令试验下效果 通过以下命令试验下效果
```shell ```shell
python lac_demo.py python lac_demo.py
......
...@@ -20,21 +20,21 @@ ...@@ -20,21 +20,21 @@
```bash ```bash
# 模型相关 # 模型相关
--batch_size: 批处理大小,请结合显存情况进行调整,若出现显存不足,请适当调低这一参数 --batch_size: 批处理大小,请结合显存情况进行调整,若出现显存不足,请适当调低这一参数
--use_gpu: 是否使用GPU进行Fine-Tune,默认为False --use_gpu: 是否使用GPU进行Fine-Tune,默认为False
--learning_rate: Fine-tune的最大学习率 --learning_rate: Fine-tune的最大学习率
--weight_decay: 控制正则项力度的参数,用于防止过拟合,默认为0.01 --weight_decay: 控制正则项力度的参数,用于防止过拟合,默认为0.01
--warmup_proportion: 学习率warmup策略的比例,如果0.1,则学习率会在前10%训练step的过程中从0慢慢增长到learning_rate, 而后再缓慢衰减,默认为0 --warmup_proportion: 学习率warmup策略的比例,如果0.1,则学习率会在前10%训练step的过程中从0慢慢增长到learning_rate, 而后再缓慢衰减,默认为0
--num_epoch: Fine-tune迭代的轮数 --num_epoch: Fine-tune迭代的轮数
--max_seq_len: ERNIE/BERT模型使用的最大序列长度,最大不能超过512, 若出现显存不足,请适当调低这一参数 --max_seq_len: ERNIE/BERT模型使用的最大序列长度,最大不能超过512, 若出现显存不足,请适当调低这一参数
# 任务相关 # 任务相关
--checkpoint_dir: 模型保存路径,PaddleHub会自动保存验证集上表现最好的模型 --checkpoint_dir: 模型保存路径,PaddleHub会自动保存验证集上表现最好的模型
``` ```
## 代码步骤 ## 代码步骤
使用PaddleHub Fine-tune API进行Fine-tune可以分为4个步骤 使用PaddleHub Fine-tune API进行Fine-tune可以分为4个步骤
### Step1: 加载预训练模型 ### Step1: 加载预训练模型
...@@ -75,15 +75,15 @@ reader = hub.reader.MultiLabelClassifyReader( ...@@ -75,15 +75,15 @@ reader = hub.reader.MultiLabelClassifyReader(
max_seq_len=128) max_seq_len=128)
``` ```
其中数据集的准备代码可以参考 [toxic.py](https://github.com/PaddlePaddle/PaddleHub/blob/release/v1.2/paddlehub/dataset/toxic.py) 其中数据集的准备代码可以参考[toxic.py](https://github.com/PaddlePaddle/PaddleHub/blob/release/v1.2/paddlehub/dataset/toxic.py)
`hub.dataset.Toxic()` 会自动从网络下载数据集并解压到用户目录下`$HOME/.paddlehub/dataset`目录 `hub.dataset.Toxic()` 会自动从网络下载数据集并解压到用户目录下`$HOME/.paddlehub/dataset`目录
`module.get_vocab_path()` 会返回预训练模型对应的词表 `module.get_vocab_path()` 会返回预训练模型对应的词表
`max_seq_len` 需要与Step1中context接口传入的序列长度保持一致 `max_seq_len` 需要与Step1中context接口传入的序列长度保持一致
MultiLabelClassifyReader中的`data_generator`会自动按照模型对应词表对数据进行tokenize,以迭代器的方式返回BERT所需要的Tensor格式,包括`input_ids``position_ids``segment_id`与序列对应的mask `input_mask`. MultiLabelClassifyReader中的`data_generator`会自动按照模型对应词表对数据进行tokenize,以迭代器的方式返回BERT所需要的Tensor格式,包括`input_ids``position_ids``segment_id`与序列对应的mask `input_mask`
**NOTE**: Reader返回tensor的顺序是固定的,默认按照input_ids, position_ids, segment_id, input_mask这一顺序返回。 **NOTE**: Reader返回tensor的顺序是固定的,默认按照input_ids, position_ids, segment_id, input_mask这一顺序返回。
...@@ -91,7 +91,7 @@ MultiLabelClassifyReader中的`data_generator`会自动按照模型对应词表 ...@@ -91,7 +91,7 @@ MultiLabelClassifyReader中的`data_generator`会自动按照模型对应词表
#### 自定义数据集 #### 自定义数据集
如果想加载自定义数据集完成迁移学习,详细参见[自定义数据集](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub%E9%80%82%E9%85%8D%E8%87%AA%E5%AE%9A%E4%B9%89%E6%95%B0%E6%8D%AE%E5%AE%8C%E6%88%90\) 如果想加载自定义数据集完成迁移学习,详细参见[自定义数据集](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub%E9%80%82%E9%85%8D%E8%87%AA%E5%AE%9A%E4%B9%89%E6%95%B0%E6%8D%AE%E5%AE%8C%E6%88%90\)
### Step3:选择优化策略和运行配置 ### Step3:选择优化策略和运行配置
...@@ -109,27 +109,27 @@ config = hub.RunConfig(use_cuda=True, use_data_parallel=True, use_pyreader=True, ...@@ -109,27 +109,27 @@ config = hub.RunConfig(use_cuda=True, use_data_parallel=True, use_pyreader=True,
#### 优化策略 #### 优化策略
针对ERNIE与BERT类任务,PaddleHub封装了适合这一任务的迁移学习优化策略`AdamWeightDecayStrategy` 针对ERNIE与BERT类任务,PaddleHub封装了适合这一任务的迁移学习优化策略`AdamWeightDecayStrategy`
* `learning_rate`: Fine-tune过程中的最大学习率; * `learning_rate`: Fine-tune过程中的最大学习率
* `weight_decay`: 模型的正则项参数,默认0.01,如果模型有过拟合倾向,可适当调高这一参数; * `weight_decay`: 模型的正则项参数,默认0.01,如果模型有过拟合倾向,可适当调高这一参数
* `warmup_proportion`: 如果warmup_proportion>0, 例如0.1, 则学习率会在前10%的steps中线性增长至最高值learning_rate; * `warmup_proportion`: 如果warmup_proportion>0, 例如0.1, 则学习率会在前10%的steps中线性增长至最高值learning_rate
* `lr_scheduler`: 有两种策略可选(1) `linear_decay`策略学习率会在最高点后以线性方式衰减; `noam_decay`策略学习率会在最高点以多项式形式衰减; * `lr_scheduler`: 有两种策略可选(1) `linear_decay`策略学习率会在最高点后以线性方式衰减; `noam_decay`策略学习率会在最高点以多项式形式衰减;
PaddleHub提供了许多优化策略,如`AdamWeightDecayStrategy``ULMFiTStrategy``DefaultFinetuneStrategy`等,详细信息参见[策略](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub-API:-Strategy) PaddleHub提供了许多优化策略,如`AdamWeightDecayStrategy``ULMFiTStrategy``DefaultFinetuneStrategy`等,详细信息参见[策略](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub-API:-Strategy)
#### 运行配置 #### 运行配置
`RunConfig` 主要控制Fine-tune的训练,包含以下可控制的参数: `RunConfig` 主要控制Fine-tune的训练,包含以下可控制的参数:
* `log_interval`: 进度日志打印间隔,默认每10个step打印一次 * `log_interval`: 进度日志打印间隔,默认每10个step打印一次
* `eval_interval`: 模型评估的间隔,默认每100个step评估一次验证集 * `eval_interval`: 模型评估的间隔,默认每100个step评估一次验证集
* `save_ckpt_interval`: 模型保存间隔,请根据任务大小配置,默认只保存验证集效果最好的模型和训练结束的模型 * `save_ckpt_interval`: 模型保存间隔,请根据任务大小配置,默认只保存验证集效果最好的模型和训练结束的模型
* `use_cuda`: 是否使用GPU训练,默认为False * `use_cuda`: 是否使用GPU训练,默认为False
* use_pyreader: 是否使用pyreader,默认False * use_pyreader: 是否使用pyreader,默认False
* use_data_parallel: 是否使用并行计算,默认False。打开该功能依赖nccl库 * use_data_parallel: 是否使用并行计算,默认False。打开该功能依赖nccl库
* `checkpoint_dir`: 模型checkpoint保存路径, 若用户没有指定,程序会自动生成 * `checkpoint_dir`: 模型checkpoint保存路径, 若用户没有指定,程序会自动生成
* `num_epoch`: Fine-tune的轮数 * `num_epoch`: Fine-tune的轮数
* `batch_size`: 训练的批大小,如果使用GPU,请根据实际情况调整batch_size * `batch_size`: 训练的批大小,如果使用GPU,请根据实际情况调整batch_size
* `enable_memory_optim`: 是否使用内存优化, 默认为True * `enable_memory_optim`: 是否使用内存优化, 默认为True
* `strategy`: Fine-tune优化策略 * `strategy`: Fine-tune优化策略
### Step4: 构建网络并创建分类迁移任务进行Fine-tune ### Step4: 构建网络并创建分类迁移任务进行Fine-tune
```python ```python
...@@ -155,33 +155,33 @@ cls_task.finetune_and_eval() ...@@ -155,33 +155,33 @@ cls_task.finetune_and_eval()
**NOTE:** **NOTE:**
1. `outputs["pooled_output"]`返回了ERNIE/BERT模型对应的[CLS]向量,可以用于句子或句对的特征表达。 1. `outputs["pooled_output"]`返回了ERNIE/BERT模型对应的[CLS]向量,可以用于句子或句对的特征表达。
2. `feed_list`中的inputs参数指名了ERNIE/BERT中的输入tensor的顺序,与MultiLabelClassifierTask返回的结果一致。 2. `feed_list`中的inputs参数指名了ERNIE/BERT中的输入tensor的顺序,与MultiLabelClassifierTask返回的结果一致。
3. `hub.MultiLabelClassifierTask`通过输入特征,label与迁移的类别数,可以生成适用于多标签分类的迁移任务`MultiLabelClassifierTask` 3. `hub.MultiLabelClassifierTask`通过输入特征,label与迁移的类别数,可以生成适用于多标签分类的迁移任务`MultiLabelClassifierTask`
#### 自定义迁移任务 #### 自定义迁移任务
如果想改变迁移任务组网,详细参见[自定义迁移任务](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub:-%E8%87%AA%E5%AE%9A%E4%B9%89Task) 如果想改变迁移任务组网,详细参见[自定义迁移任务](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub:-%E8%87%AA%E5%AE%9A%E4%B9%89Task)
## 可视化 ## 可视化
Fine-tune API训练过程中会自动对关键训练指标进行打点,启动程序后执行下面命令 Fine-tune API训练过程中会自动对关键训练指标进行打点,启动程序后执行下面命令
```bash ```bash
$ tensorboard --logdir $CKPT_DIR/visualization --host ${HOST_IP} --port ${PORT_NUM} $ tensorboard --logdir $CKPT_DIR/visualization --host ${HOST_IP} --port ${PORT_NUM}
``` ```
其中${HOST_IP}为本机IP地址,${PORT_NUM}为可用端口号,如本机IP地址为192.168.0.1,端口号8040,用浏览器打开192.168.0.1:8040,即可看到训练过程中指标的变化情况 其中${HOST_IP}为本机IP地址,${PORT_NUM}为可用端口号,如本机IP地址为192.168.0.1,端口号8040,用浏览器打开192.168.0.1:8040,即可看到训练过程中指标的变化情况
## 模型预测 ## 模型预测
通过Fine-tune完成模型训练后,在对应的ckpt目录下,会自动保存验证集上效果最好的模型。 通过Fine-tune完成模型训练后,在对应的ckpt目录下,会自动保存验证集上效果最好的模型。
配置脚本参数 配置脚本参数
```shell ```shell
CKPT_DIR="./ckpt_toxic" CKPT_DIR="./ckpt_toxic"
python predict.py --checkpoint_dir $CKPT_DIR --max_seq_len 128 python predict.py --checkpoint_dir $CKPT_DIR --max_seq_len 128
``` ```
其中CKPT_DIR为Fine-tune API保存最佳模型的路径, max_seq_len是ERNIE模型的最大序列长度,*请与训练时配置的参数保持一致* 其中CKPT_DIR为Fine-tune API保存最佳模型的路径, max_seq_len是ERNIE模型的最大序列长度,*请与训练时配置的参数保持一致*
参数配置正确后,请执行脚本`sh run_predict.sh`,即可看到以下文本分类预测结果, 以及最终准确率。 参数配置正确后,请执行脚本`sh run_predict.sh`,即可看到以下文本分类预测结果, 以及最终准确率。
如需了解更多预测步骤,请参考`predict.py` 如需了解更多预测步骤,请参考`predict.py`
...@@ -204,4 +204,4 @@ python predict.py --checkpoint_dir $CKPT_DIR --max_seq_len 128 ...@@ -204,4 +204,4 @@ python predict.py --checkpoint_dir $CKPT_DIR --max_seq_len 128
## 超参优化AutoDL Finetuner ## 超参优化AutoDL Finetuner
PaddleHub还提供了超参优化(Hyperparameter Tuning)功能, 自动搜索最优模型超参得到更好的模型效果。详细信息参见[AutoDL Finetuner超参优化功能教程](../../tutorial/autofinetune.md)[使用样例](../autofinetune) PaddleHub还提供了超参优化(Hyperparameter Tuning)功能, 自动搜索最优模型超参得到更好的模型效果。详细信息参见[AutoDL Finetuner超参优化功能教程](../../tutorial/autofinetune.md)
...@@ -10,20 +10,20 @@ ...@@ -10,20 +10,20 @@
```bash ```bash
# 模型相关 # 模型相关
--batch_size: 批处理大小,请结合显存情况进行调整,若出现显存不足,请适当调低这一参数 --batch_size: 批处理大小,请结合显存情况进行调整,若出现显存不足,请适当调低这一参数
--learning_rate: Fine-tune的最大学习率 --learning_rate: Fine-tune的最大学习率
--weight_decay: 控制正则项力度的参数,用于防止过拟合,默认为0.01 --weight_decay: 控制正则项力度的参数,用于防止过拟合,默认为0.01
--warmup_proportion: 学习率warmup策略的比例,如果0.1,则学习率会在前10%训练step的过程中从0慢慢增长到learning_rate, 而后再缓慢衰减,默认为0 --warmup_proportion: 学习率warmup策略的比例,如果0.1,则学习率会在前10%训练step的过程中从0慢慢增长到learning_rate, 而后再缓慢衰减,默认为0
--num_epoch: Fine-tune迭代的轮数 --num_epoch: Fine-tune迭代的轮数
--max_seq_len: ERNIE/BERT模型使用的最大序列长度,最大不能超过512, 若出现显存不足,请适当调低这一参数 --max_seq_len: ERNIE/BERT模型使用的最大序列长度,最大不能超过512, 若出现显存不足,请适当调低这一参数
# 任务相关 # 任务相关
--checkpoint_dir: 模型保存路径,PaddleHub会自动保存验证集上表现最好的模型 --checkpoint_dir: 模型保存路径,PaddleHub会自动保存验证集上表现最好的模型
``` ```
## 代码步骤 ## 代码步骤
使用PaddleHub Fine-tune API进行Fine-tune可以分为4个步骤 使用PaddleHub Fine-tune API进行Fine-tune可以分为4个步骤
### Step1: 加载预训练模型 ### Step1: 加载预训练模型
...@@ -54,7 +54,7 @@ RoBERTa-wwm-ext-large, Chinese | `hub.Module(name='roberta_wwm_ext_chinese_L ...@@ -54,7 +54,7 @@ RoBERTa-wwm-ext-large, Chinese | `hub.Module(name='roberta_wwm_ext_chinese_L
更多模型请参考[PaddleHub官网](https://www.paddlepaddle.org.cn/hub?filter=hot&value=1) 更多模型请参考[PaddleHub官网](https://www.paddlepaddle.org.cn/hub?filter=hot&value=1)
如果想尝试BERT模型,只需要更换Module中的`name`参数即可. 如果想尝试BERT模型,只需要更换Module中的`name`参数即可
```python ```python
# 更换name参数即可无缝切换BERT中文模型, 代码示例如下 # 更换name参数即可无缝切换BERT中文模型, 代码示例如下
module = hub.Module(name="bert_chinese_L-12_H-768_A-12") module = hub.Module(name="bert_chinese_L-12_H-768_A-12")
...@@ -69,22 +69,22 @@ reader = hub.reader.ClassifyReader( ...@@ -69,22 +69,22 @@ reader = hub.reader.ClassifyReader(
max_seq_len=128) max_seq_len=128)
``` ```
其中数据集的准备代码可以参考 [nlpcc_dbqa.py](https://github.com/PaddlePaddle/PaddleHub/blob/release/v1.2/paddlehub/dataset/nlpcc_dbqa.py) 其中数据集的准备代码可以参考[nlpcc_dbqa.py](https://github.com/PaddlePaddle/PaddleHub/blob/release/v1.2/paddlehub/dataset/nlpcc_dbqa.py)
`hub.dataset.NLPCC_DBQA())` 会自动从网络下载数据集并解压到用户目录下`$HOME/.paddlehub/dataset`目录 `hub.dataset.NLPCC_DBQA())` 会自动从网络下载数据集并解压到用户目录下`$HOME/.paddlehub/dataset`目录
`module.get_vocab_path()` 会返回预训练模型对应的词表 `module.get_vocab_path()` 会返回预训练模型对应的词表
`max_seq_len` 需要与Step1中context接口传入的序列长度保持一致 `max_seq_len` 需要与Step1中context接口传入的序列长度保持一致
ClassifyReader中的`data_generator`会自动按照模型对应词表对数据进行切词,以迭代器的方式返回ERNIE/BERT所需要的Tensor格式,包括`input_ids``position_ids``segment_id`与序列对应的mask `input_mask`. ClassifyReader中的`data_generator`会自动按照模型对应词表对数据进行切词,以迭代器的方式返回ERNIE/BERT所需要的Tensor格式,包括`input_ids``position_ids``segment_id`与序列对应的mask `input_mask`
**NOTE**: Reader返回tensor的顺序是固定的,默认按照input_ids, position_ids, segment_id, input_mask这一顺序返回。 **NOTE**: Reader返回tensor的顺序是固定的,默认按照input_ids, position_ids, segment_id, input_mask这一顺序返回。
#### 自定义数据集 #### 自定义数据集
如果想加载自定义数据集完成迁移学习,详细参见[自定义数据集](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub%E9%80%82%E9%85%8D%E8%87%AA%E5%AE%9A%E4%B9%89%E6%95%B0%E6%8D%AE%E5%AE%8C%E6%88%90FineTune) 如果想加载自定义数据集完成迁移学习,详细参见[自定义数据集](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub%E9%80%82%E9%85%8D%E8%87%AA%E5%AE%9A%E4%B9%89%E6%95%B0%E6%8D%AE%E5%AE%8C%E6%88%90FineTune)
### Step3:选择优化策略和运行配置 ### Step3:选择优化策略和运行配置
...@@ -101,29 +101,29 @@ config = hub.RunConfig(use_cuda=True, use_data_parallel=True, use_pyreader=True, ...@@ -101,29 +101,29 @@ config = hub.RunConfig(use_cuda=True, use_data_parallel=True, use_pyreader=True,
#### 优化策略 #### 优化策略
PaddleHub提供了许多优化策略,如`AdamWeightDecayStrategy``ULMFiTStrategy``DefaultFinetuneStrategy`等,详细信息参见[策略](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub-API:-Strategy) PaddleHub提供了许多优化策略,如`AdamWeightDecayStrategy``ULMFiTStrategy``DefaultFinetuneStrategy`等,详细信息参见[策略](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub-API:-Strategy)
针对ERNIE与BERT类任务,PaddleHub封装了适合这一任务的迁移学习优化策略`AdamWeightDecayStrategy` 针对ERNIE与BERT类任务,PaddleHub封装了适合这一任务的迁移学习优化策略`AdamWeightDecayStrategy`
* `learning_rate`: Fine-tune过程中的最大学习率; * `learning_rate`: Fine-tune过程中的最大学习率
* `weight_decay`: 模型的正则项参数,默认0.01,如果模型有过拟合倾向,可适当调高这一参数; * `weight_decay`: 模型的正则项参数,默认0.01,如果模型有过拟合倾向,可适当调高这一参数
* `warmup_proportion`: 如果warmup_proportion>0, 例如0.1, 则学习率会在前10%的steps中线性增长至最高值learning_rate; * `warmup_proportion`: 如果warmup_proportion>0, 例如0.1, 则学习率会在前10%的steps中线性增长至最高值learning_rate
* `lr_scheduler`: 有两种策略可选(1) `linear_decay`策略学习率会在最高点后以线性方式衰减; `noam_decay`策略学习率会在最高点以多项式形式衰减; * `lr_scheduler`: 有两种策略可选(1) `linear_decay`策略学习率会在最高点后以线性方式衰减; `noam_decay`策略学习率会在最高点以多项式形式衰减;
#### 运行配置 #### 运行配置
`RunConfig` 主要控制Fine-tune的训练,包含以下可控制的参数: `RunConfig` 主要控制Fine-tune的训练,包含以下可控制的参数
* `log_interval`: 进度日志打印间隔,默认每10个step打印一次 * `log_interval`: 进度日志打印间隔,默认每10个step打印一次
* `eval_interval`: 模型评估的间隔,默认每100个step评估一次验证集 * `eval_interval`: 模型评估的间隔,默认每100个step评估一次验证集
* `save_ckpt_interval`: 模型保存间隔,请根据任务大小配置,默认只保存验证集效果最好的模型和训练结束的模型 * `save_ckpt_interval`: 模型保存间隔,请根据任务大小配置,默认只保存验证集效果最好的模型和训练结束的模型
* `use_cuda`: 是否使用GPU训练,默认为False * `use_cuda`: 是否使用GPU训练,默认为False
* `use_pyreader`: 是否使用pyreader,默认False * `use_pyreader`: 是否使用pyreader,默认False
* `use_data_parallel`: 是否使用并行计算,默认False。打开该功能依赖nccl库 * `use_data_parallel`: 是否使用并行计算,默认False。打开该功能依赖nccl库
* `checkpoint_dir`: 模型checkpoint保存路径, 若用户没有指定,程序会自动生成 * `checkpoint_dir`: 模型checkpoint保存路径, 若用户没有指定,程序会自动生成
* `num_epoch`: Fine-tune的轮数 * `num_epoch`: Fine-tune的轮数
* `batch_size`: 训练的批大小,如果使用GPU,请根据实际情况调整batch_size * `batch_size`: 训练的批大小,如果使用GPU,请根据实际情况调整batch_size
* `enable_memory_optim`: 是否使用内存优化, 默认为True * `enable_memory_optim`: 是否使用内存优化, 默认为True
* `strategy`: Fine-tune优化策略 * `strategy`: Fine-tune优化策略
### Step4: 构建网络并创建分类迁移任务进行Fine-tune ### Step4: 构建网络并创建分类迁移任务进行Fine-tune
```python ```python
...@@ -153,15 +153,15 @@ cls_task.finetune_and_eval() ...@@ -153,15 +153,15 @@ cls_task.finetune_and_eval()
#### 自定义迁移任务 #### 自定义迁移任务
如果想改变迁移任务组网,详细参见[自定义迁移任务](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub:-%E8%87%AA%E5%AE%9A%E4%B9%89Task) 如果想改变迁移任务组网,详细参见[自定义迁移任务](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub:-%E8%87%AA%E5%AE%9A%E4%B9%89Task)
## 可视化 ## 可视化
Fine-tune API训练过程中会自动对关键训练指标进行打点,启动程序后执行下面命令 Fine-tune API训练过程中会自动对关键训练指标进行打点,启动程序后执行下面命令
```bash ```bash
$ tensorboard --logdir $CKPT_DIR/visualization --host ${HOST_IP} --port ${PORT_NUM} $ tensorboard --logdir $CKPT_DIR/visualization --host ${HOST_IP} --port ${PORT_NUM}
``` ```
其中${HOST_IP}为本机IP地址,${PORT_NUM}为可用端口号,如本机IP地址为192.168.0.1,端口号8040,用浏览器打开192.168.0.1:8040,即可看到训练过程中指标的变化情况 其中${HOST_IP}为本机IP地址,${PORT_NUM}为可用端口号,如本机IP地址为192.168.0.1,端口号8040,用浏览器打开192.168.0.1:8040,即可看到训练过程中指标的变化情况
## 模型预测 ## 模型预测
...@@ -171,10 +171,10 @@ $ tensorboard --logdir $CKPT_DIR/visualization --host ${HOST_IP} --port ${PORT_N ...@@ -171,10 +171,10 @@ $ tensorboard --logdir $CKPT_DIR/visualization --host ${HOST_IP} --port ${PORT_N
CKPT_DIR="./ckpt_qa" CKPT_DIR="./ckpt_qa"
python predict.py --checkpoint_dir $CKPT_DIR --max_seq_len 128 python predict.py --checkpoint_dir $CKPT_DIR --max_seq_len 128
``` ```
其中CKPT_DIR为Fine-tune API保存最佳模型的路径, max_seq_len是ERNIE模型的最大序列长度,*请与训练时配置的参数保持一致* 其中CKPT_DIR为Fine-tune API保存最佳模型的路径, max_seq_len是ERNIE模型的最大序列长度,*请与训练时配置的参数保持一致*
参数配置正确后,请执行脚本`sh run_predict.sh`,即可看到以下文本分类预测结果, 以及最终准确率。 参数配置正确后,请执行脚本`sh run_predict.sh`,即可看到以下文本分类预测结果, 以及最终准确率。
如需了解更多预测步骤,请参考`predict.py` 如需了解更多预测步骤,请参考`predict.py`
我们在AI Studio上提供了IPython NoteBook形式的demo,您可以直接在平台上在线体验,链接如下: 我们在AI Studio上提供了IPython NoteBook形式的demo,您可以直接在平台上在线体验,链接如下:
...@@ -196,4 +196,4 @@ python predict.py --checkpoint_dir $CKPT_DIR --max_seq_len 128 ...@@ -196,4 +196,4 @@ python predict.py --checkpoint_dir $CKPT_DIR --max_seq_len 128
## 超参优化AutoDL Finetuner ## 超参优化AutoDL Finetuner
PaddleHub还提供了超参优化(Hyperparameter Tuning)功能, 自动搜索最优模型超参得到更好的模型效果。详细信息参见[AutoDL Finetuner超参优化功能教程](../../tutorial/autofinetune.md)[使用样例](../autofinetune) PaddleHub还提供了超参优化(Hyperparameter Tuning)功能, 自动搜索最优模型超参得到更好的模型效果。详细信息参见[AutoDL Finetuner超参优化功能教程](../../tutorial/autofinetune.md)
...@@ -10,21 +10,21 @@ ...@@ -10,21 +10,21 @@
```bash ```bash
# 模型相关 # 模型相关
--batch_size: 批处理大小,请结合显存情况进行调整,若出现显存不足,请适当调低这一参数 --batch_size: 批处理大小,请结合显存情况进行调整,若出现显存不足,请适当调低这一参数
--learning_rate: Fine-tune的最大学习率 --learning_rate: Fine-tune的最大学习率
--weight_decay: 控制正则项力度的参数,用于防止过拟合,默认为0.01 --weight_decay: 控制正则项力度的参数,用于防止过拟合,默认为0.01
--warmup_proportion: 学习率warmup策略的比例,如果0.1,则学习率会在前10%训练step的过程中从0慢慢增长到learning_rate, 而后再缓慢衰减,默认为0 --warmup_proportion: 学习率warmup策略的比例,如果0.1,则学习率会在前10%训练step的过程中从0慢慢增长到learning_rate, 而后再缓慢衰减,默认为0
--num_epoch: Fine-tune迭代的轮数 --num_epoch: Fine-tune迭代的轮数
--max_seq_len: BERT模型使用的最大序列长度,最大不能超过512, 若出现显存不足,请适当调低这一参数 --max_seq_len: BERT模型使用的最大序列长度,最大不能超过512, 若出现显存不足,请适当调低这一参数
--use_data_parallel: 是否使用并行计算,默认False。打开该功能依赖nccl库 --use_data_parallel: 是否使用并行计算,默认False。打开该功能依赖nccl库
# 任务相关 # 任务相关
--checkpoint_dir: 模型保存路径,PaddleHub会自动保存验证集上表现最好的模型 --checkpoint_dir: 模型保存路径,PaddleHub会自动保存验证集上表现最好的模型
``` ```
## 代码步骤 ## 代码步骤
使用PaddleHub Fine-tune API进行Fine-tune可以分为4个步骤 使用PaddleHub Fine-tune API进行Fine-tune可以分为4个步骤
### Step1: 加载预训练模型 ### Step1: 加载预训练模型
...@@ -55,7 +55,7 @@ RoBERTa-wwm-ext-large, Chinese | `hub.Module(name='roberta_wwm_ext_chinese_L ...@@ -55,7 +55,7 @@ RoBERTa-wwm-ext-large, Chinese | `hub.Module(name='roberta_wwm_ext_chinese_L
更多模型请参考[PaddleHub官网](https://www.paddlepaddle.org.cn/hub?filter=hot&value=1) 更多模型请参考[PaddleHub官网](https://www.paddlepaddle.org.cn/hub?filter=hot&value=1)
如果想尝试BERT模型,只需要更换Module中的`name`参数即可. 如果想尝试BERT模型,只需要更换Module中的`name`参数即可
```python ```python
# 更换name参数即可无缝切换BERT中文模型, 代码示例如下 # 更换name参数即可无缝切换BERT中文模型, 代码示例如下
module = hub.Module(name="bert_chinese_L-12_H-768_A-12") module = hub.Module(name="bert_chinese_L-12_H-768_A-12")
...@@ -71,15 +71,15 @@ reader = hub.reader.ReadingComprehensionReader( ...@@ -71,15 +71,15 @@ reader = hub.reader.ReadingComprehensionReader(
max_seq_length=384) max_seq_length=384)
``` ```
其中数据集的准备代码可以参考 [squad.py](https://github.com/PaddlePaddle/PaddleHub/blob/release/v1.2/paddlehub/dataset/squad.py) 其中数据集的准备代码可以参考 [squad.py](https://github.com/PaddlePaddle/PaddleHub/blob/release/v1.2/paddlehub/dataset/squad.py)
`hub.dataset.SQUAD(version_2_with_negative=False)` 会自动从网络下载数据集SQuAD v1.1并解压到用户目录下`$HOME/.paddlehub/dataset`目录;如果想选择数据集SQuAD v2.0,则只需version_2_with_negative=True `hub.dataset.SQUAD(version_2_with_negative=False)` 会自动从网络下载数据集SQuAD v1.1并解压到用户目录下`$HOME/.paddlehub/dataset`目录;如果想选择数据集SQuAD v2.0,则只需version_2_with_negative=True
`module.get_vocab_path()` 会返回预训练模型对应的词表 `module.get_vocab_path()` 会返回预训练模型对应的词表
`max_seq_len` 需要与Step1中context接口传入的序列长度保持一致 `max_seq_len` 需要与Step1中context接口传入的序列长度保持一致
ReadingComprehensionReader中的`data_generator`会自动按照模型对应词表对数据进行切词,以迭代器的方式返回BERT所需要的Tensor格式,包括`input_ids``position_ids``segment_id`与序列对应的mask `input_mask`. ReadingComprehensionReader中的`data_generator`会自动按照模型对应词表对数据进行切词,以迭代器的方式返回BERT所需要的Tensor格式,包括`input_ids``position_ids``segment_id`与序列对应的mask `input_mask`
**NOTE**: Reader返回tensor的顺序是固定的,默认按照input_ids, position_ids, segment_id, input_mask这一顺序返回。 **NOTE**: Reader返回tensor的顺序是固定的,默认按照input_ids, position_ids, segment_id, input_mask这一顺序返回。
...@@ -92,11 +92,11 @@ SQuAD v2.0 | hub.dataset.SQUAD(version_2_with_negative=True) ...@@ -92,11 +92,11 @@ SQuAD v2.0 | hub.dataset.SQUAD(version_2_with_negative=True)
DRCD | hub.dataset.DRCD() |roberta_wwm_ext_chinese_L-24_H-1024_A-16| DRCD | hub.dataset.DRCD() |roberta_wwm_ext_chinese_L-24_H-1024_A-16|
CMRC 2018 | hub.dataset.CMRC2018() |roberta_wwm_ext_chinese_L-24_H-1024_A-16| CMRC 2018 | hub.dataset.CMRC2018() |roberta_wwm_ext_chinese_L-24_H-1024_A-16|
更多数据集信息参考[Dataset](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub-API:-Dataset) 更多数据集信息参考[Dataset](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub-API:-Dataset)
#### 自定义数据集 #### 自定义数据集
如果想加载自定义数据集完成迁移学习,详细参见[自定义数据集](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub%E9%80%82%E9%85%8D%E8%87%AA%E5%AE%9A%E4%B9%89%E6%95%B0%E6%8D%AE%E5%AE%8C%E6%88%90FineTune) 如果想加载自定义数据集完成迁移学习,详细参见[自定义数据集](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub%E9%80%82%E9%85%8D%E8%87%AA%E5%AE%9A%E4%B9%89%E6%95%B0%E6%8D%AE%E5%AE%8C%E6%88%90FineTune)
### Step3:选择优化策略和运行配置 ### Step3:选择优化策略和运行配置
...@@ -111,30 +111,30 @@ config = hub.RunConfig(use_cuda=True, num_epoch=2, batch_size=12, strategy=strat ...@@ -111,30 +111,30 @@ config = hub.RunConfig(use_cuda=True, num_epoch=2, batch_size=12, strategy=strat
``` ```
#### 优化策略 #### 优化策略
针对ERNIE/BERT类Transformer模型,PaddleHub封装了适合这一任务的迁移学习优化策略`AdamWeightDecayStrategy` 针对ERNIE/BERT类Transformer模型,PaddleHub封装了适合这一任务的迁移学习优化策略`AdamWeightDecayStrategy`
`learning_rate`: Fine-tune过程中的最大学习率; `learning_rate`: Fine-tune过程中的最大学习率
`weight_decay`: 模型的正则项参数,默认0.01,如果模型有过拟合倾向,可适当调高这一参数; `weight_decay`: 模型的正则项参数,默认0.01,如果模型有过拟合倾向,可适当调高这一参数
`warmup_proportion`: 如果warmup_proportion>0, 例如0.1, 则学习率会在前10%的steps中线性增长至最高值learning_rate; `warmup_proportion`: 如果warmup_proportion>0, 例如0.1, 则学习率会在前10%的steps中线性增长至最高值learning_rate
`lr_scheduler`: 有两种策略可选(1)`linear_decay`策略学习率会在最高点后以线性方式衰减; (2)`noam_decay`策略学习率会在最高点以多项式形式衰减; `lr_scheduler`: 有两种策略可选(1)`linear_decay`策略学习率会在最高点后以线性方式衰减; (2)`noam_decay`策略学习率会在最高点以多项式形式衰减
PaddleHub提供了许多优化策略,如`AdamWeightDecayStrategy``ULMFiTStrategy``DefaultFinetuneStrategy`等,详细信息参见[策略](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub-API:-Strategy) PaddleHub提供了许多优化策略,如`AdamWeightDecayStrategy``ULMFiTStrategy``DefaultFinetuneStrategy`等,详细信息参见[策略](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub-API:-Strategy)
#### 运行配置 #### 运行配置
`RunConfig` 主要控制Fine-tune的训练,包含以下可控制的参数: `RunConfig` 主要控制Fine-tune的训练,包含以下可控制的参数:
* `log_interval`: 进度日志打印间隔,默认每10个step打印一次 * `log_interval`: 进度日志打印间隔,默认每10个step打印一次
* `eval_interval`: 模型评估的间隔,默认每100个step评估一次验证集 * `eval_interval`: 模型评估的间隔,默认每100个step评估一次验证集
* `save_ckpt_interval`: 模型保存间隔,请根据任务大小配置,默认只保存验证集效果最好的模型和训练结束的模型 * `save_ckpt_interval`: 模型保存间隔,请根据任务大小配置,默认只保存验证集效果最好的模型和训练结束的模型
* `use_cuda`: 是否使用GPU训练,默认为False * `use_cuda`: 是否使用GPU训练,默认为False
* `checkpoint_dir`: 模型checkpoint保存路径, 若用户没有指定,程序会自动生成 * `checkpoint_dir`: 模型checkpoint保存路径, 若用户没有指定,程序会自动生成
* `num_epoch`: Fine-tune的轮数 * `num_epoch`: Fine-tune的轮数
* `batch_size`: 训练的批大小,如果使用GPU,请根据实际情况调整batch_size * `batch_size`: 训练的批大小,如果使用GPU,请根据实际情况调整batch_size
* `enable_memory_optim`: 是否使用内存优化, 默认为True * `enable_memory_optim`: 是否使用内存优化, 默认为True
* `strategy`: Fine-tune优化策略 * `strategy`: Fine-tune优化策略
### Step4: 构建网络并创建阅读理解迁移任务进行Fine-tune ### Step4: 构建网络并创建阅读理解迁移任务进行Fine-tune
```python ```python
...@@ -160,13 +160,13 @@ reading_comprehension_task.finetune_and_eval() ...@@ -160,13 +160,13 @@ reading_comprehension_task.finetune_and_eval()
**NOTE:** **NOTE:**
1. `outputs["sequence_output"]`返回了ERNIE/BERT模型输入单词的对应输出,可以用于单词的特征表达。 1. `outputs["sequence_output"]`返回了ERNIE/BERT模型输入单词的对应输出,可以用于单词的特征表达。
2. `feed_list`中的inputs参数指名了BERT中的输入tensor的顺序,与ReadingComprehensionReader返回的结果一致。 2. `feed_list`中的inputs参数指名了BERT中的输入tensor的顺序,与ReadingComprehensionReader返回的结果一致。
3. `sub_task`指明阅读理解数据集名称,可选{squad, squad2.0, cmrc2018, drcd}, 用于适配各个数据集的模型训练过程中的评估方法 3. `sub_task`指明阅读理解数据集名称,可选{squad, squad2.0, cmrc2018, drcd}, 用于适配各个数据集的模型训练过程中的评估方法
4. `hub.ReadingComprehensionTask`通过输入特征、段落背景、问题和答案,可以生成适用于阅读理解迁移任务ReadingComprehensionTask 4. `hub.ReadingComprehensionTask`通过输入特征、段落背景、问题和答案,可以生成适用于阅读理解迁移任务ReadingComprehensionTask
#### 自定义迁移任务 #### 自定义迁移任务
如果想改变迁移任务组网,详细参见[自定义迁移任务](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub:-%E8%87%AA%E5%AE%9A%E4%B9%89Task) 如果想改变迁移任务组网,详细参见[自定义迁移任务](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub:-%E8%87%AA%E5%AE%9A%E4%B9%89Task)
## 可视化 ## 可视化
...@@ -174,10 +174,13 @@ Fine-tune API训练过程中会自动对关键训练指标进行打点,启动 ...@@ -174,10 +174,13 @@ Fine-tune API训练过程中会自动对关键训练指标进行打点,启动
```bash ```bash
$ tensorboard --logdir $CKPT_DIR/visualization --host ${HOST_IP} --port ${PORT_NUM} $ tensorboard --logdir $CKPT_DIR/visualization --host ${HOST_IP} --port ${PORT_NUM}
``` ```
其中${HOST_IP}为本机IP地址,${PORT_NUM}为可用端口号,如本机IP地址为192.168.0.1,端口号8040,用浏览器打开192.168.0.1:8040,即可看到训练过程中指标的变化情况 其中${HOST_IP}为本机IP地址,${PORT_NUM}为可用端口号,如本机IP地址为192.168.0.1,端口号8040,用浏览器打开192.168.0.1:8040,即可看到训练过程中指标的变化情况
## 模型预测 ## 模型预测
**NOTE:**
运行预测脚本时,建议用单卡预测。
通过Fine-tune完成模型训练后,在对应的ckpt目录下,会自动保存验证集上效果最好的模型。 通过Fine-tune完成模型训练后,在对应的ckpt目录下,会自动保存验证集上效果最好的模型。
配置脚本参数 配置脚本参数
...@@ -185,13 +188,10 @@ $ tensorboard --logdir $CKPT_DIR/visualization --host ${HOST_IP} --port ${PORT_N ...@@ -185,13 +188,10 @@ $ tensorboard --logdir $CKPT_DIR/visualization --host ${HOST_IP} --port ${PORT_N
CKPT_DIR=".ckpt_rc/" CKPT_DIR=".ckpt_rc/"
python predict.py --checkpoint_dir $CKPT_DIR --max_seq_len 384 --batch_size=1 python predict.py --checkpoint_dir $CKPT_DIR --max_seq_len 384 --batch_size=1
``` ```
其中CKPT_DIR为Fine-tune API保存最佳模型的路径, max_seq_len是ERNIE/BERT模型的最大序列长度,*请与训练时配置的参数保持一致* 其中CKPT_DIR为Fine-tune API保存最佳模型的路径, max_seq_len是ERNIE/BERT模型的最大序列长度,*请与训练时配置的参数保持一致*
参数配置正确后,请执行脚本`sh run_predict.sh`,预测时程序会自动调用官方评价脚本即可看到SQuAD数据集的最终效果。 参数配置正确后,请执行脚本`sh run_predict.sh`,预测时程序会自动调用官方评价脚本即可看到SQuAD数据集的最终效果。
如需了解更多预测步骤,请参考`predict.py` 如需了解更多预测步骤,请参考`predict.py`
**NOTE:**
运行预测脚本时,建议用单卡预测。
我们在AI Studio上提供了IPython NoteBook形式的demo,您可以直接在平台上在线体验,链接如下: 我们在AI Studio上提供了IPython NoteBook形式的demo,您可以直接在平台上在线体验,链接如下:
...@@ -211,4 +211,4 @@ python predict.py --checkpoint_dir $CKPT_DIR --max_seq_len 384 --batch_size=1 ...@@ -211,4 +211,4 @@ python predict.py --checkpoint_dir $CKPT_DIR --max_seq_len 384 --batch_size=1
## 超参优化AutoDL Finetuner ## 超参优化AutoDL Finetuner
PaddleHub还提供了超参优化(Hyperparameter Tuning)功能, 自动搜索最优模型超参得到更好的模型效果。详细信息参见[AutoDL Finetuner超参优化功能教程](../../tutorial/autofinetune.md)[使用样例](../autofinetune) PaddleHub还提供了超参优化(Hyperparameter Tuning)功能, 自动搜索最优模型超参得到更好的模型效果。详细信息参见[AutoDL Finetuner超参优化功能教程](../../tutorial/autofinetune.md)
...@@ -11,21 +11,21 @@ ...@@ -11,21 +11,21 @@
```bash ```bash
# 模型相关 # 模型相关
--batch_size: 批处理大小,请结合显存情况进行调整,若出现显存不足,请适当调低这一参数 --batch_size: 批处理大小,请结合显存情况进行调整,若出现显存不足,请适当调低这一参数
--learning_rate: Fine-tune的最大学习率 --learning_rate: Fine-tune的最大学习率
--weight_decay: 控制正则项力度的参数,用于防止过拟合,默认为0.01 --weight_decay: 控制正则项力度的参数,用于防止过拟合,默认为0.01
--warmup_proportion: 学习率warmup策略的比例,如果0.1,则学习率会在前10%训练step的过程中从0慢慢增长到learning_rate, 而后再缓慢衰减,默认为0 --warmup_proportion: 学习率warmup策略的比例,如果0.1,则学习率会在前10%训练step的过程中从0慢慢增长到learning_rate, 而后再缓慢衰减,默认为0
--num_epoch: Fine-tune迭代的轮数 --num_epoch: Fine-tune迭代的轮数
--max_seq_len: ERNIE/BERT模型使用的最大序列长度,最大不能超过512, 若出现显存不足,请适当调低这一参数 --max_seq_len: ERNIE/BERT模型使用的最大序列长度,最大不能超过512, 若出现显存不足,请适当调低这一参数
--use_data_parallel: 是否使用并行计算,默认True。打开该功能依赖nccl库 --use_data_parallel: 是否使用并行计算,默认True。打开该功能依赖nccl库
# 任务相关 # 任务相关
--checkpoint_dir: 模型保存路径,PaddleHub会自动保存验证集上表现最好的模型 --checkpoint_dir: 模型保存路径,PaddleHub会自动保存验证集上表现最好的模型
``` ```
## 代码步骤 ## 代码步骤
使用PaddleHub Fine-tune API进行Fine-tune可以分为4个步骤 使用PaddleHub Fine-tune API进行Fine-tune可以分为4个步骤
### Step1: 加载预训练模型 ### Step1: 加载预训练模型
...@@ -56,7 +56,7 @@ RoBERTa-wwm-ext-large, Chinese | `hub.Module(name='roberta_wwm_ext_chinese_L ...@@ -56,7 +56,7 @@ RoBERTa-wwm-ext-large, Chinese | `hub.Module(name='roberta_wwm_ext_chinese_L
更多模型请参考[PaddleHub官网](https://www.paddlepaddle.org.cn/hub?filter=hot&value=1) 更多模型请参考[PaddleHub官网](https://www.paddlepaddle.org.cn/hub?filter=hot&value=1)
如果想尝试BERT模型,只需要更换Module中的`name`参数即可. 如果想尝试BERT模型,只需要更换Module中的`name`参数即可
```python ```python
# 更换name参数即可无缝切换BERT模型, 代码示例如下 # 更换name参数即可无缝切换BERT模型, 代码示例如下
module = hub.Module(name="bert_cased_L-12_H-768_A-12") module = hub.Module(name="bert_cased_L-12_H-768_A-12")
...@@ -71,21 +71,21 @@ reader = hub.reader.RegressionReader( ...@@ -71,21 +71,21 @@ reader = hub.reader.RegressionReader(
max_seq_len=args.max_seq_len) max_seq_len=args.max_seq_len)
``` ```
其中数据集的准备代码可以参考 [glue.py](https://github.com/PaddlePaddle/PaddleHub/blob/release/v1.2/paddlehub/dataset/glue.py) 其中数据集的准备代码可以参考[glue.py](https://github.com/PaddlePaddle/PaddleHub/blob/release/v1.2/paddlehub/dataset/glue.py)
`hub.dataset.GLUE("STS-B")` 会自动从网络下载数据集并解压到用户目录下`$HOME/.paddlehub/dataset`目录 `hub.dataset.GLUE("STS-B")` 会自动从网络下载数据集并解压到用户目录下`$HOME/.paddlehub/dataset`目录
`module.get_vocab_path()` 会返回预训练模型对应的词表 `module.get_vocab_path()` 会返回预训练模型对应的词表
`max_seq_len` 需要与Step1中context接口传入的序列长度保持一致 `max_seq_len` 需要与Step1中context接口传入的序列长度保持一致
RegressionReader中的`data_generator`会自动按照模型对应词表对数据进行切词,以迭代器的方式返回ERNIE/BERT所需要的Tensor格式,包括`input_ids``position_ids``segment_id`与序列对应的mask `input_mask`. RegressionReader中的`data_generator`会自动按照模型对应词表对数据进行切词,以迭代器的方式返回ERNIE/BERT所需要的Tensor格式,包括`input_ids``position_ids``segment_id`与序列对应的mask `input_mask`
**NOTE**: Reader返回tensor的顺序是固定的,默认按照input_ids, position_ids, segment_id, input_mask这一顺序返回。 **NOTE**: Reader返回tensor的顺序是固定的,默认按照input_ids, position_ids, segment_id, input_mask这一顺序返回。
#### 自定义数据集 #### 自定义数据集
如果想加载自定义数据集完成迁移学习,详细参见[自定义数据集](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub%E9%80%82%E9%85%8D%E8%87%AA%E5%AE%9A%E4%B9%89%E6%95%B0%E6%8D%AE%E5%AE%8C%E6%88%90FineTune) 如果想加载自定义数据集完成迁移学习,详细参见[自定义数据集](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub%E9%80%82%E9%85%8D%E8%87%AA%E5%AE%9A%E4%B9%89%E6%95%B0%E6%8D%AE%E5%AE%8C%E6%88%90FineTune)
### Step3:选择优化策略和运行配置 ### Step3:选择优化策略和运行配置
...@@ -102,27 +102,27 @@ config = hub.RunConfig(use_cuda=True, num_epoch=3, batch_size=32, strategy=strat ...@@ -102,27 +102,27 @@ config = hub.RunConfig(use_cuda=True, num_epoch=3, batch_size=32, strategy=strat
#### 优化策略 #### 优化策略
PaddleHub提供了许多优化策略,如`AdamWeightDecayStrategy``ULMFiTStrategy``DefaultFinetuneStrategy`等,详细信息参见[策略](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub-API:-Strategy) PaddleHub提供了许多优化策略,如`AdamWeightDecayStrategy``ULMFiTStrategy``DefaultFinetuneStrategy`等,详细信息参见[策略](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub-API:-Strategy)
针对ERNIE与BERT类任务,PaddleHub封装了适合这一任务的迁移学习优化策略`AdamWeightDecayStrategy` 针对ERNIE与BERT类任务,PaddleHub封装了适合这一任务的迁移学习优化策略`AdamWeightDecayStrategy`
`learning_rate`: Fine-tune过程中的最大学习率; `learning_rate`: Fine-tune过程中的最大学习率
`weight_decay`: 模型的正则项参数,默认0.01,如果模型有过拟合倾向,可适当调高这一参数; `weight_decay`: 模型的正则项参数,默认0.01,如果模型有过拟合倾向,可适当调高这一参数
`warmup_proportion`: 如果warmup_proportion>0, 例如0.1, 则学习率会在前10%的steps中线性增长至最高值learning_rate; `warmup_proportion`: 如果warmup_proportion>0, 例如0.1, 则学习率会在前10%的steps中线性增长至最高值learning_rate
`lr_scheduler`: 有两种策略可选(1) `linear_decay`策略学习率会在最高点后以线性方式衰减; `noam_decay`策略学习率会在最高点以多项式形式衰减; `lr_scheduler`: 有两种策略可选(1) `linear_decay`策略学习率会在最高点后以线性方式衰减; `noam_decay`策略学习率会在最高点以多项式形式衰减;
#### 运行配置 #### 运行配置
`RunConfig` 主要控制Fine-tune的训练,包含以下可控制的参数: `RunConfig` 主要控制Fine-tune的训练,包含以下可控制的参数:
* `log_interval`: 进度日志打印间隔,默认每10个step打印一次 * `log_interval`: 进度日志打印间隔,默认每10个step打印一次
* `eval_interval`: 模型评估的间隔,默认每100个step评估一次验证集 * `eval_interval`: 模型评估的间隔,默认每100个step评估一次验证集
* `save_ckpt_interval`: 模型保存间隔,请根据任务大小配置,默认只保存验证集效果最好的模型和训练结束的模型 * `save_ckpt_interval`: 模型保存间隔,请根据任务大小配置,默认只保存验证集效果最好的模型和训练结束的模型
* `use_cuda`: 是否使用GPU训练,默认为False * `use_cuda`: 是否使用GPU训练,默认为False
* `checkpoint_dir`: 模型checkpoint保存路径, 若用户没有指定,程序会自动生成 * `checkpoint_dir`: 模型checkpoint保存路径, 若用户没有指定,程序会自动生成
* `num_epoch`: Fine-tune的轮数 * `num_epoch`: Fine-tune的轮数
* `batch_size`: 训练的批大小,如果使用GPU,请根据实际情况调整batch_size * `batch_size`: 训练的批大小,如果使用GPU,请根据实际情况调整batch_size
* `enable_memory_optim`: 是否使用内存优化, 默认为True * `enable_memory_optim`: 是否使用内存优化, 默认为True
* `strategy`: Fine-tune优化策略 * `strategy`: Fine-tune优化策略
### Step4: 构建网络并创建回归迁移任务进行Fine-tune ### Step4: 构建网络并创建回归迁移任务进行Fine-tune
```python ```python
...@@ -150,15 +150,15 @@ reg_task.finetune_and_eval() ...@@ -150,15 +150,15 @@ reg_task.finetune_and_eval()
#### 自定义迁移任务 #### 自定义迁移任务
如果想改变迁移任务组网,详细参见[自定义迁移任务](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub:-%E8%87%AA%E5%AE%9A%E4%B9%89Task) 如果想改变迁移任务组网,详细参见[自定义迁移任务](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub:-%E8%87%AA%E5%AE%9A%E4%B9%89Task)
## 可视化 ## 可视化
Fine-tune API训练过程中会自动对关键训练指标进行打点,启动程序后执行下面命令 Fine-tune API训练过程中会自动对关键训练指标进行打点,启动程序后执行下面命令
```bash ```bash
$ tensorboard --logdir $CKPT_DIR/visualization --host ${HOST_IP} --port ${PORT_NUM} $ tensorboard --logdir $CKPT_DIR/visualization --host ${HOST_IP} --port ${PORT_NUM}
``` ```
其中${HOST_IP}为本机IP地址,${PORT_NUM}为可用端口号,如本机IP地址为192.168.0.1,端口号8040,用浏览器打开192.168.0.1:8040,即可看到训练过程中指标的变化情况 其中${HOST_IP}为本机IP地址,${PORT_NUM}为可用端口号,如本机IP地址为192.168.0.1,端口号8040,用浏览器打开192.168.0.1:8040,即可看到训练过程中指标的变化情况
## 模型预测 ## 模型预测
...@@ -168,7 +168,7 @@ $ tensorboard --logdir $CKPT_DIR/visualization --host ${HOST_IP} --port ${PORT_N ...@@ -168,7 +168,7 @@ $ tensorboard --logdir $CKPT_DIR/visualization --host ${HOST_IP} --port ${PORT_N
CKPT_DIR="ckpt_stsb/" CKPT_DIR="ckpt_stsb/"
python predict.py --checkpoint_dir $CKPT_DIR --max_seq_len 128 python predict.py --checkpoint_dir $CKPT_DIR --max_seq_len 128
``` ```
其中CKPT_DIR为Fine-tune API保存最佳模型的路径, max_seq_len是ERNIE/BERT模型的最大序列长度,*请与训练时配置的参数保持一致* 其中CKPT_DIR为Fine-tune API保存最佳模型的路径, max_seq_len是ERNIE/BERT模型的最大序列长度,*请与训练时配置的参数保持一致*
参数配置正确后,请执行脚本`sh run_predict.sh`,即可看到以下回归任务预测结果。 参数配置正确后,请执行脚本`sh run_predict.sh`,即可看到以下回归任务预测结果。
如需了解更多预测步骤,请参考`predict.py` 如需了解更多预测步骤,请参考`predict.py`
...@@ -192,4 +192,4 @@ python predict.py --checkpoint_dir $CKPT_DIR --max_seq_len 128 ...@@ -192,4 +192,4 @@ python predict.py --checkpoint_dir $CKPT_DIR --max_seq_len 128
## 超参优化AutoDL Finetuner ## 超参优化AutoDL Finetuner
PaddleHub还提供了超参优化(Hyperparameter Tuning)功能, 自动搜索最优模型超参得到更好的模型效果。详细信息参见[AutoDL Finetuner超参优化功能教程](../../tutorial/autofinetune.md)[使用样例](../autofinetune) PaddleHub还提供了超参优化(Hyperparameter Tuning)功能, 自动搜索最优模型超参得到更好的模型效果。详细信息参见[AutoDL Finetuner超参优化功能教程](../../tutorial/autofinetune.md)
...@@ -20,8 +20,8 @@ test.txt 存放待预测文本, 如: ...@@ -20,8 +20,8 @@ test.txt 存放待预测文本, 如:
## 通过python API预测 ## 通过python API预测
`senta_demo.py`给出了使用python API调用Module预测的示例代码 `senta_demo.py`给出了使用python API调用Module预测的示例代码
通过以下命令试验下效果 通过以下命令试验下效果
```shell ```shell
python senta_demo.py python senta_demo.py
...@@ -38,13 +38,13 @@ $ sh run_finetune.sh ...@@ -38,13 +38,13 @@ $ sh run_finetune.sh
其中脚本参数说明如下: 其中脚本参数说明如下:
```bash ```bash
--batch_size: 批处理大小,请结合显存情况进行调整,若出现显存不足,请适当调低这一参数 --batch_size: 批处理大小,请结合显存情况进行调整,若出现显存不足,请适当调低这一参数
--checkpoint_dir: 模型保存路径,PaddleHub会自动保存验证集上表现最好的模型 --checkpoint_dir: 模型保存路径,PaddleHub会自动保存验证集上表现最好的模型
--num_epoch: Fine-tune迭代的轮数 --num_epoch: Fine-tune迭代的轮数
--use_gpu: 是否使用GPU进行训练,如果机器支持GPU且安装了GPU版本的PaddlePaddle,我们建议您打开这个开关 --use_gpu: 是否使用GPU进行训练,如果机器支持GPU且安装了GPU版本的PaddlePaddle,我们建议您打开这个开关
``` ```
使用PaddleHub Fine-tune API进行Fine-tune可以分为4个步骤 使用PaddleHub Fine-tune API进行Fine-tune可以分为4个步骤
### Step1: 加载预训练模型 ### Step1: 加载预训练模型
...@@ -65,7 +65,7 @@ senta_cnn | `hub.Module(name='senta_cnn')` ...@@ -65,7 +65,7 @@ senta_cnn | `hub.Module(name='senta_cnn')`
更多模型请参考[PaddleHub官网](https://www.paddlepaddle.org.cn/hub?filter=hot&value=1) 更多模型请参考[PaddleHub官网](https://www.paddlepaddle.org.cn/hub?filter=hot&value=1)
如果想尝GRU模型,只需要更换Module中的`name`参数即可. 如果想尝GRU模型,只需要更换Module中的`name`参数即可
```python ```python
# 更换name参数即可无缝切换GRU模型, 代码示例如下 # 更换name参数即可无缝切换GRU模型, 代码示例如下
module = hub.Module(name="senta_gru") module = hub.Module(name="senta_gru")
...@@ -79,17 +79,17 @@ reader = hub.reader.LACClassifyReader( ...@@ -79,17 +79,17 @@ reader = hub.reader.LACClassifyReader(
vocab_path=module.get_vocab_path()) vocab_path=module.get_vocab_path())
``` ```
`hub.dataset.ChnSentiCorp()` 会自动从网络下载数据集并解压到用户目录下`$HOME/.paddlehub/dataset`目录 `hub.dataset.ChnSentiCorp()` 会自动从网络下载数据集并解压到用户目录下`$HOME/.paddlehub/dataset`目录
`module.get_vocab_path()` 会返回预训练模型对应的词表 `module.get_vocab_path()` 会返回预训练模型对应的词表
LACClassifyReader中的`data_generator`会自动按照模型对应词表对数据进行切词,以迭代器的方式返回Senta所需要的word id LACClassifyReader中的`data_generator`会自动按照模型对应词表对数据进行切词,以迭代器的方式返回Senta所需要的word id
更多数据集信息参考[Dataset](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub-API:-Dataset) 更多数据集信息参考[Dataset](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub-API:-Dataset)
#### 自定义数据集 #### 自定义数据集
如果想加载自定义数据集完成迁移学习,详细参见[自定义数据集](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub%E9%80%82%E9%85%8D%E8%87%AA%E5%AE%9A%E4%B9%89%E6%95%B0%E6%8D%AE%E5%AE%8C%E6%88%90FineTune) 如果想加载自定义数据集完成迁移学习,详细参见[自定义数据集](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub%E9%80%82%E9%85%8D%E8%87%AA%E5%AE%9A%E4%B9%89%E6%95%B0%E6%8D%AE%E5%AE%8C%E6%88%90FineTune)
### Step3:选择优化策略和运行配置 ### Step3:选择优化策略和运行配置
...@@ -106,23 +106,23 @@ config = hub.RunConfig(use_cuda=True, num_epoch=3, batch_size=32, strategy=strat ...@@ -106,23 +106,23 @@ config = hub.RunConfig(use_cuda=True, num_epoch=3, batch_size=32, strategy=strat
#### 优化策略 #### 优化策略
PaddleHub提供了许多优化策略,如`AdamWeightDecayStrategy``ULMFiTStrategy``DefaultFinetuneStrategy`等,详细信息参见[策略](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub-API:-Strategy) PaddleHub提供了许多优化策略,如`AdamWeightDecayStrategy``ULMFiTStrategy``DefaultFinetuneStrategy`等,详细信息参见[策略](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub-API:-Strategy)
其中`AdamWeightDecayStrategy` 其中`AdamWeightDecayStrategy`
* `learning_rate`: Fine-tune过程中的最大学习率; * `learning_rate`: Fine-tune过程中的最大学习率
* `weight_decay`: 模型的正则项参数,默认0.01,如果模型有过拟合倾向,可适当调高这一参数; * `weight_decay`: 模型的正则项参数,默认0.01,如果模型有过拟合倾向,可适当调高这一参数
* `warmup_proportion`: 如果warmup_proportion>0, 例如0.1, 则学习率会在前10%的steps中线性增长至最高值learning_rate; * `warmup_proportion`: 如果warmup_proportion>0, 例如0.1, 则学习率会在前10%的steps中线性增长至最高值learning_rate
* `lr_scheduler`: 有两种策略可选(1) `linear_decay`策略学习率会在最高点后以线性方式衰减; `noam_decay`策略学习率会在最高点以多项式形式衰减; * `lr_scheduler`: 有两种策略可选(1) `linear_decay`策略学习率会在最高点后以线性方式衰减; `noam_decay`策略学习率会在最高点以多项式形式衰减;
#### 运行配置 #### 运行配置
`RunConfig` 主要控制Fine-tune的训练,包含以下可控制的参数: `RunConfig` 主要控制Fine-tune的训练,包含以下可控制的参数:
* `use_cuda`: 是否使用GPU训练,默认为False * `use_cuda`: 是否使用GPU训练,默认为False
* `checkpoint_dir`: 模型checkpoint保存路径, 若用户没有指定,程序会自动生成 * `checkpoint_dir`: 模型checkpoint保存路径, 若用户没有指定,程序会自动生成
* `num_epoch`: Fine-tune的轮数 * `num_epoch`: Fine-tune的轮数
* `batch_size`: 训练的批大小,如果使用GPU,请根据实际情况调整batch_size * `batch_size`: 训练的批大小,如果使用GPU,请根据实际情况调整batch_size
* `strategy`: Fine-tune优化策略 * `strategy`: Fine-tune优化策略
### Step4: 构建网络并创建分类迁移任务进行Fine-tune ### Step4: 构建网络并创建分类迁移任务进行Fine-tune
```python ```python
...@@ -140,9 +140,9 @@ cls_task = hub.TextClassifierTask( ...@@ -140,9 +140,9 @@ cls_task = hub.TextClassifierTask(
cls_task.finetune_and_eval() cls_task.finetune_and_eval()
``` ```
**NOTE:** **NOTE:**
1. `outputs["sentence_feature"]`返回了senta模型对应的句子特征,可以用于句子的特征表达 1. `outputs["sentence_feature"]`返回了senta模型对应的句子特征,可以用于句子的特征表达
2. `feed_list`中的inputs参数指名了senta中的输入tensor的顺序,与LACClassifyReader返回的结果一致 2. `feed_list`中的inputs参数指名了senta中的输入tensor的顺序,与LACClassifyReader返回的结果一致
3. `hub.TextClassifierTask`通过输入特征,label与迁移的类别数,可以生成适用于文本分类的迁移任务`TextClassifierTask` 3. `hub.TextClassifierTask`通过输入特征,label与迁移的类别数,可以生成适用于文本分类的迁移任务`TextClassifierTask`
## 可视化 ## 可视化
...@@ -150,7 +150,7 @@ Fine-tune API训练过程中会自动对关键训练指标进行打点,启动 ...@@ -150,7 +150,7 @@ Fine-tune API训练过程中会自动对关键训练指标进行打点,启动
```bash ```bash
$ tensorboard --logdir $CKPT_DIR/visualization --host ${HOST_IP} --port ${PORT_NUM} $ tensorboard --logdir $CKPT_DIR/visualization --host ${HOST_IP} --port ${PORT_NUM}
``` ```
其中${HOST_IP}为本机IP地址,${PORT_NUM}为可用端口号,如本机IP地址为192.168.0.1,端口号8040,用浏览器打开192.168.0.1:8040,即可看到训练过程中指标的变化情况 其中${HOST_IP}为本机IP地址,${PORT_NUM}为可用端口号,如本机IP地址为192.168.0.1,端口号8040,用浏览器打开192.168.0.1:8040,即可看到训练过程中指标的变化情况
## 模型预测 ## 模型预测
...@@ -163,7 +163,7 @@ python predict.py --checkpoint_dir $CKPT_DIR ...@@ -163,7 +163,7 @@ python predict.py --checkpoint_dir $CKPT_DIR
其中CKPT_DIR为Fine-tune API保存最佳模型的路径 其中CKPT_DIR为Fine-tune API保存最佳模型的路径
参数配置正确后,请执行脚本`sh run_predict.sh`,即可看到以下文本分类预测结果, 以及最终准确率。 参数配置正确后,请执行脚本`sh run_predict.sh`,即可看到以下文本分类预测结果, 以及最终准确率。
如需了解更多预测步骤,请参考`predict.py` 如需了解更多预测步骤,请参考`predict.py`
我们在AI Studio上提供了IPython NoteBook形式的demo,您可以直接在平台上在线体验,链接如下: 我们在AI Studio上提供了IPython NoteBook形式的demo,您可以直接在平台上在线体验,链接如下:
...@@ -186,4 +186,4 @@ python predict.py --checkpoint_dir $CKPT_DIR ...@@ -186,4 +186,4 @@ python predict.py --checkpoint_dir $CKPT_DIR
## 超参优化AutoDL Finetuner ## 超参优化AutoDL Finetuner
PaddleHub还提供了超参优化(Hyperparameter Tuning)功能, 自动搜索最优模型超参得到更好的模型效果。详细信息参见[AutoDL Finetuner超参优化功能教程](../../tutorial/autofinetune.md)[使用样例](../autofinetune) PaddleHub还提供了超参优化(Hyperparameter Tuning)功能, 自动搜索最优模型超参得到更好的模型效果。详细信息参见[AutoDL Finetuner超参优化功能教程](../../tutorial/autofinetune.md)
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
python sensim.py python sensim.py
``` ```
程序运行结束后, 可以看待预测的两个文本的余弦相似度 程序运行结束后, 可以看待预测的两个文本的余弦相似度
``` ```
text_a: 驾驶 违章 一次 扣 12分 用 两个 驾驶证 处理 可以 吗; text_b: 一次性 扣 12分 的 违章 , 能用 不满 十二分 的 驾驶证 扣分 吗; cosine_similarity: 0.39889 text_a: 驾驶 违章 一次 扣 12分 用 两个 驾驶证 处理 可以 吗; text_b: 一次性 扣 12分 的 违章 , 能用 不满 十二分 的 驾驶证 扣分 吗; cosine_similarity: 0.39889
......
...@@ -8,22 +8,22 @@ ...@@ -8,22 +8,22 @@
```bash ```bash
# 模型相关 # 模型相关
--use_gpu: 是否使用GPU,默认为False --use_gpu: 是否使用GPU,默认为False
--batch_size: 批处理大小,请结合显存情况进行调整,若出现显存不足,请适当调低这一参数 --batch_size: 批处理大小,请结合显存情况进行调整,若出现显存不足,请适当调低这一参数
--learning_rate: Fine-tune的最大学习率 --learning_rate: Fine-tune的最大学习率
--weight_decay: 控制正则项力度的参数,用于防止过拟合,默认为0.01 --weight_decay: 控制正则项力度的参数,用于防止过拟合,默认为0.01
--warmup_proportion: 学习率warmup策略的比例,如果0.1,则学习率会在前10%训练step的过程中从0慢慢增长到learning_rate, 而后再缓慢衰减,默认为0 --warmup_proportion: 学习率warmup策略的比例,如果0.1,则学习率会在前10%训练step的过程中从0慢慢增长到learning_rate, 而后再缓慢衰减,默认为0
--num_epoch: Fine-tune迭代的轮数 --num_epoch: Fine-tune迭代的轮数
--max_seq_len: ERNIE/BERT模型使用的最大序列长度,最大不能超过512, 若出现显存不足,请适当调低这一参数 --max_seq_len: ERNIE/BERT模型使用的最大序列长度,最大不能超过512, 若出现显存不足,请适当调低这一参数
--use_data_parallel: 是否使用并行计算,默认True。打开该功能依赖nccl库 --use_data_parallel: 是否使用并行计算,默认True。打开该功能依赖nccl库
# 任务相关 # 任务相关
--checkpoint_dir: 模型保存路径,PaddleHub会自动保存验证集上表现最好的模型 --checkpoint_dir: 模型保存路径,PaddleHub会自动保存验证集上表现最好的模型
``` ```
## 代码步骤 ## 代码步骤
使用PaddleHub Fine-tune API进行Fine-tune可以分为4个步骤 使用PaddleHub Fine-tune API进行Fine-tune可以分为4个步骤
### Step1: 加载预训练模型 ### Step1: 加载预训练模型
...@@ -54,7 +54,7 @@ RoBERTa-wwm-ext-large, Chinese | `hub.Module(name='roberta_wwm_ext_chinese_L ...@@ -54,7 +54,7 @@ RoBERTa-wwm-ext-large, Chinese | `hub.Module(name='roberta_wwm_ext_chinese_L
更多模型请参考[PaddleHub官网](https://www.paddlepaddle.org.cn/hub?filter=hot&value=1) 更多模型请参考[PaddleHub官网](https://www.paddlepaddle.org.cn/hub?filter=hot&value=1)
如果想尝试BERT模型,只需要更换Module中的`name`参数即可. 如果想尝试BERT模型,只需要更换Module中的`name`参数即可
```python ```python
# 更换name参数即可无缝切换BERT中文模型, 代码示例如下 # 更换name参数即可无缝切换BERT中文模型, 代码示例如下
module = hub.Module(name="bert_chinese_L-12_H-768_A-12") module = hub.Module(name="bert_chinese_L-12_H-768_A-12")
...@@ -71,25 +71,25 @@ reader = hub.reader.SequenceLabelReader( ...@@ -71,25 +71,25 @@ reader = hub.reader.SequenceLabelReader(
word_dict_path=module.get_word_dict_path()) word_dict_path=module.get_word_dict_path())
``` ```
其中数据集的准备代码可以参考 [msra_ner.py](https://github.com/PaddlePaddle/PaddleHub/blob/release/v1.2/paddlehub/dataset/msra_ner.py) 其中数据集的准备代码可以参考[msra_ner.py](https://github.com/PaddlePaddle/PaddleHub/blob/release/v1.2/paddlehub/dataset/msra_ner.py)
`hub.dataset.MSRA_NER()` 会自动从网络下载数据集并解压到用户目录下`$HOME/.paddlehub/dataset`目录 `hub.dataset.MSRA_NER()` 会自动从网络下载数据集并解压到用户目录下`$HOME/.paddlehub/dataset`目录
`module.get_vaocab_path()` 会返回预训练模型对应的词表 `module.get_vaocab_path()` 会返回预训练模型对应的词表
`max_seq_len` 需要与Step1中context接口传入的序列长度保持一致 `max_seq_len` 需要与Step1中context接口传入的序列长度保持一致
`module.sp_model_path``module.word_dict_path` 用于 ERNIE Tiny 中文sub-word中文切词技术 `module.sp_model_path``module.word_dict_path` 用于 ERNIE Tiny 中文sub-word中文切词技术
SequenceLabelReader中的`data_generator`会自动按照模型对应词表对数据进行切词,以迭代器的方式返回ERNIE/BERT所需要的Tensor格式,包括`input_ids``position_ids``segment_id`与序列对应的mask `input_mask`. SequenceLabelReader中的`data_generator`会自动按照模型对应词表对数据进行切词,以迭代器的方式返回ERNIE/BERT所需要的Tensor格式,包括`input_ids``position_ids``segment_id`与序列对应的mask `input_mask`
**NOTE**: **NOTE**:
* Reader返回tensor的顺序是固定的,默认按照input_ids, position_ids, segment_id, input_mask这一顺序返回。 * Reader返回tensor的顺序是固定的,默认按照input_ids, position_ids, segment_id, input_mask这一顺序返回。
* 如果选择的预训练模型不是ERNIE Tiny,则无需设定sp_model_path和word_dict_path参数 * 如果选择的预训练模型不是ERNIE Tiny,则无需设定sp_model_path和word_dict_path参数
#### 自定义数据集 #### 自定义数据集
如果想加载自定义数据集完成迁移学习,详细参见[自定义数据集](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub%E9%80%82%E9%85%8D%E8%87%AA%E5%AE%9A%E4%B9%89%E6%95%B0%E6%8D%AE%E5%AE%8C%E6%88%90FineTune) 如果想加载自定义数据集完成迁移学习,详细参见[自定义数据集](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub%E9%80%82%E9%85%8D%E8%87%AA%E5%AE%9A%E4%B9%89%E6%95%B0%E6%8D%AE%E5%AE%8C%E6%88%90FineTune)
### Step3:选择优化策略和运行配置 ### Step3:选择优化策略和运行配置
...@@ -105,29 +105,29 @@ config = hub.RunConfig(use_cuda=True, num_epoch=3, batch_size=32, strategy=strat ...@@ -105,29 +105,29 @@ config = hub.RunConfig(use_cuda=True, num_epoch=3, batch_size=32, strategy=strat
``` ```
#### 优化策略 #### 优化策略
PaddleHub提供了许多优化策略,如`AdamWeightDecayStrategy``ULMFiTStrategy``DefaultFinetuneStrategy`等,详细信息参见[策略](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub-API:-Strategy) PaddleHub提供了许多优化策略,如`AdamWeightDecayStrategy``ULMFiTStrategy``DefaultFinetuneStrategy`等,详细信息参见[策略](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub-API:-Strategy)
针对ERNIE与BERT类任务,PaddleHub封装了适合这一任务的迁移学习优化策略`AdamWeightDecayStrategy` 针对ERNIE与BERT类任务,PaddleHub封装了适合这一任务的迁移学习优化策略`AdamWeightDecayStrategy`
`learning_rate`: fine-tune过程中的最大学习率; `learning_rate`: fine-tune过程中的最大学习率
`weight_decay`: 模型的正则项参数,默认0.01,如果模型有过拟合倾向,可适当调高这一参数; `weight_decay`: 模型的正则项参数,默认0.01,如果模型有过拟合倾向,可适当调高这一参数
`warmup_proportion`: 如果warmup_proportion>0, 例如0.1, 则学习率会在前10%的steps中线性增长至最高值learning_rate; `warmup_proportion`: 如果warmup_proportion>0, 例如0.1, 则学习率会在前10%的steps中线性增长至最高值learning_rate
`lr_scheduler`: 有两种策略可选(1)`linear_decay`策略学习率会在最高点后以线性方式衰减;(2) `noam_decay`策略学习率会在最高点以多项式形式衰减; `lr_scheduler`: 有两种策略可选(1)`linear_decay`策略学习率会在最高点后以线性方式衰减(2) `noam_decay`策略学习率会在最高点以多项式形式衰减;
#### 运行配置 #### 运行配置
`RunConfig` 主要控制fine-tune的训练,包含以下可控制的参数: `RunConfig` 主要控制fine-tune的训练,包含以下可控制的参数:
* `log_interval`: 进度日志打印间隔,默认每10个step打印一次 * `log_interval`: 进度日志打印间隔,默认每10个step打印一次
* `eval_interval`: 模型评估的间隔,默认每100个step评估一次验证集 * `eval_interval`: 模型评估的间隔,默认每100个step评估一次验证集
* `save_ckpt_interval`: 模型保存间隔,请根据任务大小配置,默认只保存验证集效果最好的模型和训练结束的模型 * `save_ckpt_interval`: 模型保存间隔,请根据任务大小配置,默认只保存验证集效果最好的模型和训练结束的模型
* `use_cuda`: 是否使用GPU训练,默认为False * `use_cuda`: 是否使用GPU训练,默认为False
* `checkpoint_dir`: 模型checkpoint保存路径, 若用户没有指定,程序会自动生成 * `checkpoint_dir`: 模型checkpoint保存路径, 若用户没有指定,程序会自动生成
* `num_epoch`: fine-tune的轮数 * `num_epoch`: fine-tune的轮数
* `batch_size`: 训练的批大小,如果使用GPU,请根据实际情况调整batch_size * `batch_size`: 训练的批大小,如果使用GPU,请根据实际情况调整batch_size
* `enable_memory_optim`: 是否使用内存优化, 默认为True * `enable_memory_optim`: 是否使用内存优化, 默认为True
* `strategy`: fine-tune优化策略 * `strategy`: fine-tune优化策略
### Step4: 构建网络并创建序列标注迁移任务进行fine-tune ### Step4: 构建网络并创建序列标注迁移任务进行Fine-tune
```python ```python
sequence_output = outputs["sequence_output"] sequence_output = outputs["sequence_output"]
...@@ -151,22 +151,22 @@ seq_label_task.finetune_and_eval() ...@@ -151,22 +151,22 @@ seq_label_task.finetune_and_eval()
``` ```
**NOTE:** **NOTE:**
1. `outputs["sequence_output"]`返回了ERNIE/BERT模型输入单词的对应输出,可以用于单词的特征表达 1. `outputs["sequence_output"]`返回了ERNIE/BERT模型输入单词的对应输出,可以用于单词的特征表达
2. `feed_list`中的inputs参数指名了ERNIE/BERT中的输入tensor的顺序,与SequenceLabelReader返回的结果一致 2. `feed_list`中的inputs参数指名了ERNIE/BERT中的输入tensor的顺序,与SequenceLabelReader返回的结果一致
3. `hub.SequenceLabelTask`通过输入特征,迁移的类别数,可以生成适用于序列标注的迁移任务`SequenceLabelTask` 3. `hub.SequenceLabelTask`通过输入特征,迁移的类别数,可以生成适用于序列标注的迁移任务`SequenceLabelTask`
4. `hub.SequenceLabelTask`通过add_crf, 选择是否加入crf作为decoder。如果add_crf=True, 则在预训练模型计算图加入fc+crf层,否则只在在预训练模型计算图加入fc层 4. `hub.SequenceLabelTask`通过add_crf, 选择是否加入crf作为decoder。如果add_crf=True, 则在预训练模型计算图加入fc+crf层,否则只在在预训练模型计算图加入fc层
#### 自定义迁移任务 #### 自定义迁移任务
如果想改变迁移任务组网,详细参见[自定义迁移任务](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub:-%E8%87%AA%E5%AE%9A%E4%B9%89Task) 如果想改变迁移任务组网,详细参见[自定义迁移任务](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub:-%E8%87%AA%E5%AE%9A%E4%B9%89Task)
## 可视化 ## 可视化
Fine-tune API训练过程中会自动对关键训练指标进行打点,启动程序后执行下面命令 Fine-tune API训练过程中会自动对关键训练指标进行打点,启动程序后执行下面命令
```bash ```bash
$ tensorboard --logdir $CKPT_DIR/visualization --host ${HOST_IP} --port ${PORT_NUM} $ tensorboard --logdir $CKPT_DIR/visualization --host ${HOST_IP} --port ${PORT_NUM}
``` ```
其中${HOST_IP}为本机IP地址,${PORT_NUM}为可用端口号,如本机IP地址为192.168.0.1,端口号8040,用浏览器打开192.168.0.1:8040,即可看到训练过程中指标的变化情况 其中${HOST_IP}为本机IP地址,${PORT_NUM}为可用端口号,如本机IP地址为192.168.0.1,端口号8040,用浏览器打开192.168.0.1:8040,即可看到训练过程中指标的变化情况
## 模型预测 ## 模型预测
...@@ -176,7 +176,7 @@ $ tensorboard --logdir $CKPT_DIR/visualization --host ${HOST_IP} --port ${PORT_N ...@@ -176,7 +176,7 @@ $ tensorboard --logdir $CKPT_DIR/visualization --host ${HOST_IP} --port ${PORT_N
CKPT_DIR="ckpt_sequence_label/" CKPT_DIR="ckpt_sequence_label/"
python predict.py --checkpoint_dir $CKPT_DIR --max_seq_len 128 python predict.py --checkpoint_dir $CKPT_DIR --max_seq_len 128
``` ```
其中CKPT_DIR为Fine-tune API保存最佳模型的路径, max_seq_len是ERNIE模型的最大序列长度,*请与训练时配置的参数保持一致* 其中CKPT_DIR为Fine-tune API保存最佳模型的路径, max_seq_len是ERNIE模型的最大序列长度,*请与训练时配置的参数保持一致*
参数配置正确后,请执行脚本`sh run_predict.sh`,即可看到以下文本分类预测结果, 以及最终准确率。 参数配置正确后,请执行脚本`sh run_predict.sh`,即可看到以下文本分类预测结果, 以及最终准确率。
如需了解更多预测步骤,请参考`predict.py` 如需了解更多预测步骤,请参考`predict.py`
...@@ -199,4 +199,4 @@ python predict.py --checkpoint_dir $CKPT_DIR --max_seq_len 128 ...@@ -199,4 +199,4 @@ python predict.py --checkpoint_dir $CKPT_DIR --max_seq_len 128
## 超参优化AutoDL Finetuner ## 超参优化AutoDL Finetuner
PaddleHub还提供了超参优化(Hyperparameter Tuning)功能, 自动搜索最优模型超参得到更好的模型效果。详细信息参见[AutoDL Finetuner超参优化功能教程](../../tutorial/autofinetune.md)[使用样例](../autofinetune) PaddleHub还提供了超参优化(Hyperparameter Tuning)功能, 自动搜索最优模型超参得到更好的模型效果。详细信息参见[AutoDL Finetuner超参优化功能教程](../../tutorial/autofinetune.md)
...@@ -11,12 +11,12 @@ $ hub run ssd_mobilenet_v1_pascal --input_path "/PATH/TO/IMAGE" ...@@ -11,12 +11,12 @@ $ hub run ssd_mobilenet_v1_pascal --input_path "/PATH/TO/IMAGE"
$ hub run ssd_mobilenet_v1_pascal --input_file test.txt $ hub run ssd_mobilenet_v1_pascal --input_file test.txt
``` ```
test.txt 存放待检测图片的存放路径 test.txt 存放待检测图片的存放路径
## 通过python API预测 ## 通过python API预测
`ssd_demo.py`给出了使用python API调用SSD预测的示例代码 `ssd_demo.py`给出了使用python API调用SSD预测的示例代码
通过以下命令试验下效果 通过以下命令试验下效果
```shell ```shell
python ssd_demo.py python ssd_demo.py
......
...@@ -9,19 +9,19 @@ ...@@ -9,19 +9,19 @@
其中脚本参数说明如下: 其中脚本参数说明如下:
```bash ```bash
--batch_size: 批处理大小,请结合显存情况进行调整,若出现显存不足,请适当调低这一参数 --batch_size: 批处理大小,请结合显存情况进行调整,若出现显存不足,请适当调低这一参数
--learning_rate: Fine-tune的最大学习率 --learning_rate: Fine-tune的最大学习率
--weight_decay: 控制正则项力度的参数,用于防止过拟合,默认为0.01 --weight_decay: 控制正则项力度的参数,用于防止过拟合,默认为0.01
--warmup_proportion: 学习率warmup策略的比例,如果0.1,则学习率会在前10%训练step的过程中从0慢慢增长到learning_rate, 而后再缓慢衰减,默认为0 --warmup_proportion: 学习率warmup策略的比例,如果0.1,则学习率会在前10%训练step的过程中从0慢慢增长到learning_rate, 而后再缓慢衰减,默认为0
--num_epoch: Fine-tune迭代的轮数 --num_epoch: Fine-tune迭代的轮数
--max_seq_len: ERNIE/BERT模型使用的最大序列长度,最大不能超过512, 若出现显存不足,请适当调低这一参数 --max_seq_len: ERNIE/BERT模型使用的最大序列长度,最大不能超过512, 若出现显存不足,请适当调低这一参数
--use_data_parallel: 是否使用并行计算,默认True。打开该功能依赖nccl库 --use_data_parallel: 是否使用并行计算,默认True。打开该功能依赖nccl库
--checkpoint_dir: 模型保存路径,PaddleHub会自动保存验证集上表现最好的模型 --checkpoint_dir: 模型保存路径,PaddleHub会自动保存验证集上表现最好的模型
``` ```
## 代码步骤 ## 代码步骤
使用PaddleHub Fine-tune API进行Fine-tune可以分为4个步骤 使用PaddleHub Fine-tune API进行Fine-tune可以分为4个步骤
### Step1: 加载预训练模型 ### Step1: 加载预训练模型
...@@ -69,17 +69,17 @@ reader = hub.reader.ClassifyReader( ...@@ -69,17 +69,17 @@ reader = hub.reader.ClassifyReader(
metrics_choices = ["acc"] metrics_choices = ["acc"]
``` ```
`hub.dataset.ChnSentiCorp()` 会自动从网络下载数据集并解压到用户目录下`$HOME/.paddlehub/dataset`目录 `hub.dataset.ChnSentiCorp()` 会自动从网络下载数据集并解压到用户目录下`$HOME/.paddlehub/dataset`目录
`module.get_vocab_path()` 会返回预训练模型对应的词表 `module.get_vocab_path()` 会返回预训练模型对应的词表
`max_seq_len` 需要与Step1中context接口传入的序列长度保持一致 `max_seq_len` 需要与Step1中context接口传入的序列长度保持一致
`module.sp_model_path` 若module为ernie_tiny则返回对应的子词切分模型,否则返回None `module.sp_model_path` 若module为ernie_tiny则返回对应的子词切分模型,否则返回None
`module.word_dict_path` 若module为ernie_tiny则返回对应的词语切分模型,否则返回None `module.word_dict_path` 若module为ernie_tiny则返回对应的词语切分模型,否则返回None
ClassifyReader中的`data_generator`会自动按照模型对应词表对数据进行切词,以迭代器的方式返回ERNIE/BERT所需要的Tensor格式,包括`input_ids``position_ids``segment_id`与序列对应的mask `input_mask`. ClassifyReader中的`data_generator`会自动按照模型对应词表对数据进行切词,以迭代器的方式返回ERNIE/BERT所需要的Tensor格式,包括`input_ids``position_ids``segment_id`与序列对应的mask `input_mask`
**NOTE**: Reader返回tensor的顺序是固定的,默认按照input_ids, position_ids, segment_id, input_mask这一顺序返回。 **NOTE**: Reader返回tensor的顺序是固定的,默认按照input_ids, position_ids, segment_id, input_mask这一顺序返回。
...@@ -106,12 +106,12 @@ ChineseGLUE-INEWS | hub.dataset.INews() | 句对 | roberta_wwm_ext_ ...@@ -106,12 +106,12 @@ ChineseGLUE-INEWS | hub.dataset.INews() | 句对 | roberta_wwm_ext_
ChineseGLUE-TNEWS | hub.dataset.TNews() | 句对 | roberta_wwm_ext_chinese_L-24_H-1024_A-16 | accuracy | ChineseGLUE-TNEWS | hub.dataset.TNews() | 句对 | roberta_wwm_ext_chinese_L-24_H-1024_A-16 | accuracy |
ChinesGLUE-BQ | hub.dataset.BQ() | 句对 | roberta_wwm_ext_chinese_L-24_H-1024_A-16 | accuracy | ChinesGLUE-BQ | hub.dataset.BQ() | 句对 | roberta_wwm_ext_chinese_L-24_H-1024_A-16 | accuracy |
更多数据集信息参考[Dataset](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub-API:-Dataset) 更多数据集信息参考[Dataset](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub-API:-Dataset)
#### 自定义数据集 #### 自定义数据集
如果想加载自定义数据集完成迁移学习,详细参见[自定义数据集](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub%E9%80%82%E9%85%8D%E8%87%AA%E5%AE%9A%E4%B9%89%E6%95%B0%E6%8D%AE%E5%AE%8C%E6%88%90FineTune) 如果想加载自定义数据集完成迁移学习,详细参见[自定义数据集](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub%E9%80%82%E9%85%8D%E8%87%AA%E5%AE%9A%E4%B9%89%E6%95%B0%E6%8D%AE%E5%AE%8C%E6%88%90FineTune)
### Step3:选择优化策略和运行配置 ### Step3:选择优化策略和运行配置
...@@ -129,19 +129,19 @@ config = hub.RunConfig(use_cuda=True, num_epoch=3, batch_size=32, strategy=strat ...@@ -129,19 +129,19 @@ config = hub.RunConfig(use_cuda=True, num_epoch=3, batch_size=32, strategy=strat
#### 优化策略 #### 优化策略
针对ERNIE与BERT类任务,PaddleHub封装了适合这一任务的迁移学习优化策略`AdamWeightDecayStrategy` 针对ERNIE与BERT类任务,PaddleHub封装了适合这一任务的迁移学习优化策略`AdamWeightDecayStrategy`
* `learning_rate`: Fine-tune过程中的最大学习率; * `learning_rate`: Fine-tune过程中的最大学习率
* `weight_decay`: 模型的正则项参数,默认0.01,如果模型有过拟合倾向,可适当调高这一参数; * `weight_decay`: 模型的正则项参数,默认0.01,如果模型有过拟合倾向,可适当调高这一参数
* `warmup_proportion`: 如果warmup_proportion>0, 例如0.1, 则学习率会在前10%的steps中线性增长至最高值learning_rate; * `warmup_proportion`: 如果warmup_proportion>0, 例如0.1, 则学习率会在前10%的steps中线性增长至最高值learning_rate
* `lr_scheduler`: 有两种策略可选(1) `linear_decay`策略学习率会在最高点后以线性方式衰减; `noam_decay`策略学习率会在最高点以多项式形式衰减; * `lr_scheduler`: 有两种策略可选(1) `linear_decay`策略学习率会在最高点后以线性方式衰减; `noam_decay`策略学习率会在最高点以多项式形式衰减;
#### 运行配置 #### 运行配置
`RunConfig` 主要控制Fine-tune的训练,包含以下可控制的参数: `RunConfig` 主要控制Fine-tune的训练,包含以下可控制的参数:
* `use_cuda`: 是否使用GPU训练,默认为False * `use_cuda`: 是否使用GPU训练,默认为False
* `checkpoint_dir`: 模型checkpoint保存路径, 若用户没有指定,程序会自动生成 * `checkpoint_dir`: 模型checkpoint保存路径, 若用户没有指定,程序会自动生成
* `num_epoch`: Fine-tune的轮数 * `num_epoch`: Fine-tune的轮数
* `batch_size`: 训练的批大小,如果使用GPU,请根据实际情况调整batch_size * `batch_size`: 训练的批大小,如果使用GPU,请根据实际情况调整batch_size
* `strategy`: Fine-tune优化策略 * `strategy`: Fine-tune优化策略
### Step4: 构建网络并创建分类迁移任务进行Fine-tune ### Step4: 构建网络并创建分类迁移任务进行Fine-tune
```python ```python
...@@ -167,19 +167,19 @@ cls_task.finetune_and_eval() ...@@ -167,19 +167,19 @@ cls_task.finetune_and_eval()
**NOTE:** **NOTE:**
1. `outputs["pooled_output"]`返回了ERNIE/BERT模型对应的[CLS]向量,可以用于句子或句对的特征表达。 1. `outputs["pooled_output"]`返回了ERNIE/BERT模型对应的[CLS]向量,可以用于句子或句对的特征表达。
2. `feed_list`中的inputs参数指名了ERNIE/BERT中的输入tensor的顺序,与ClassifyReader返回的结果一致。 2. `feed_list`中的inputs参数指名了ERNIE/BERT中的输入tensor的顺序,与ClassifyReader返回的结果一致。
3. `hub.TextClassifierTask`通过输入特征,label与迁移的类别数,可以生成适用于文本分类的迁移任务`TextClassifierTask` 3. `hub.TextClassifierTask`通过输入特征,label与迁移的类别数,可以生成适用于文本分类的迁移任务`TextClassifierTask`
#### 自定义迁移任务 #### 自定义迁移任务
如果想改变迁移任务组网,详细参见[自定义迁移任务](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub:-%E8%87%AA%E5%AE%9A%E4%B9%89Task) 如果想改变迁移任务组网,详细参见[自定义迁移任务](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub:-%E8%87%AA%E5%AE%9A%E4%B9%89Task)
## 可视化 ## 可视化
Fine-tune API训练过程中会自动对关键训练指标进行打点,启动程序后执行下面命令 Fine-tune API训练过程中会自动对关键训练指标进行打点,启动程序后执行下面命令
```bash ```bash
$ tensorboard --logdir $CKPT_DIR/visualization --host ${HOST_IP} --port ${PORT_NUM} $ tensorboard --logdir $CKPT_DIR/visualization --host ${HOST_IP} --port ${PORT_NUM}
``` ```
其中${HOST_IP}为本机IP地址,${PORT_NUM}为可用端口号,如本机IP地址为192.168.0.1,端口号8040,用浏览器打开192.168.0.1:8040,即可看到训练过程中指标的变化情况 其中${HOST_IP}为本机IP地址,${PORT_NUM}为可用端口号,如本机IP地址为192.168.0.1,端口号8040,用浏览器打开192.168.0.1:8040,即可看到训练过程中指标的变化情况
## 模型预测 ## 模型预测
...@@ -192,7 +192,7 @@ python predict.py --checkpoint_dir $CKPT_DIR --max_seq_len 128 ...@@ -192,7 +192,7 @@ python predict.py --checkpoint_dir $CKPT_DIR --max_seq_len 128
其中CKPT_DIR为Fine-tune API保存最佳模型的路径, max_seq_len是ERNIE模型的最大序列长度,*请与训练时配置的参数保持一致* 其中CKPT_DIR为Fine-tune API保存最佳模型的路径, max_seq_len是ERNIE模型的最大序列长度,*请与训练时配置的参数保持一致*
参数配置正确后,请执行脚本`sh run_predict.sh`,即可看到以下文本分类预测结果, 以及最终准确率。 参数配置正确后,请执行脚本`sh run_predict.sh`,即可看到以下文本分类预测结果, 以及最终准确率。
如需了解更多预测步骤,请参考`predict.py` 如需了解更多预测步骤,请参考`predict.py`
``` ```
这个宾馆比较陈旧了,特价的房间也很一般。总体来说一般 predict=0 这个宾馆比较陈旧了,特价的房间也很一般。总体来说一般 predict=0
...@@ -219,4 +219,4 @@ python predict.py --checkpoint_dir $CKPT_DIR --max_seq_len 128 ...@@ -219,4 +219,4 @@ python predict.py --checkpoint_dir $CKPT_DIR --max_seq_len 128
## 超参优化AutoDL Finetuner ## 超参优化AutoDL Finetuner
PaddleHub还提供了超参优化(Hyperparameter Tuning)功能, 自动搜索最优模型超参得到更好的模型效果。详细信息参见[AutoDL Finetuner超参优化功能教程](../../tutorial/autofinetune.md)[使用样例](../autofinetune) PaddleHub还提供了超参优化(Hyperparameter Tuning)功能, 自动搜索最优模型超参得到更好的模型效果。详细信息参见[AutoDL Finetuner超参优化功能教程](../../tutorial/autofinetune.md)
...@@ -8,11 +8,11 @@ PaddleHub AutoDL Finetuner提供两种超参优化算法: ...@@ -8,11 +8,11 @@ PaddleHub AutoDL Finetuner提供两种超参优化算法:
* **HAZero**: 核心思想是通过对正态分布中协方差矩阵的调整来处理变量之间的依赖关系和scaling。算法基本可以分成以下三步: * **HAZero**: 核心思想是通过对正态分布中协方差矩阵的调整来处理变量之间的依赖关系和scaling。算法基本可以分成以下三步:
1. 采样产生新解 1. 采样产生新解
2. 计算目标函数值 2. 计算目标函数值
3. 更新正态分布参数 3. 更新正态分布参数
调整参数的基本思路为,调整参数使得产生更优解的概率逐渐增大。优化过程如下图: 调整参数的基本思路为,调整参数使得产生更优解的概率逐渐增大。优化过程如下图:
...@@ -29,21 +29,21 @@ PaddleHub AutoDL Finetuner提供两种超参优化算法: ...@@ -29,21 +29,21 @@ PaddleHub AutoDL Finetuner提供两种超参优化算法:
PaddleHub AutoDL Finetuner为了评估搜索的超参对于任务的效果,提供两种超参评估策略: PaddleHub AutoDL Finetuner为了评估搜索的超参对于任务的效果,提供两种超参评估策略:
* **Full-Trail**: 给定一组超参,利用这组超参从头开始Fine-tune一个新模型,之后在验证集评估这个模型 * **Full-Trail**: 给定一组超参,利用这组超参从头开始Fine-tune一个新模型,之后在验证集评估这个模型
* **Population-Based**: 给定一组超参,若这组超参是第一轮尝试的超参组合,则从头开始Fine-tune一个新模型;否则基于前几轮已保存的较好模型,在当前的超参数组合下继续Fine-tune并评估 * **Population-Based**: 给定一组超参,若这组超参是第一轮尝试的超参组合,则从头开始Fine-tune一个新模型;否则基于前几轮已保存的较好模型,在当前的超参数组合下继续Fine-tune并评估
## 二、准备工作 ## 二、准备工作
使用PaddleHub AutoDL Finetuner需要准备两个指定格式的文件:待优化的超参数信息yaml文件hparam.yaml和需要Fine-tune的python脚本train.py 使用PaddleHub AutoDL Finetuner需要准备两个指定格式的文件:待优化的超参数信息yaml文件hparam.yaml和需要Fine-tune的python脚本train.py
### 1. hparam.yaml ### 1. hparam.yaml
hparam给出待搜索的超参名字、类型(int或者float)、搜索范围等信息,通过这些信息构建了一个超参空间,PaddleHub将在这个空间内进行超参数的搜索,将搜索到的超参传入train.py获得评估效果,根据评估效果自动调整超参搜索方向,直到满足搜索次数。 hparam给出待搜索的超参名字、类型(int或者float)、搜索范围等信息,通过这些信息构建了一个超参空间,PaddleHub将在这个空间内进行超参数的搜索,将搜索到的超参传入train.py获得评估效果,根据评估效果自动调整超参搜索方向,直到满足搜索次数。
**Note**: **NOTE:**
* yaml文件的最外层级的key必须是param_list * yaml文件的最外层级的key必须是param_list
``` ```
param_list: param_list:
- name : hparam1 - name : hparam1
...@@ -53,13 +53,13 @@ hparam给出待搜索的超参名字、类型(int或者float)、搜索范围 ...@@ -53,13 +53,13 @@ hparam给出待搜索的超参名字、类型(int或者float)、搜索范围
greater_than : 0.00005 greater_than : 0.00005
... ...
``` ```
* 超参名字可以任意指定,PaddleHub会将搜索到的值以指定名称传递给train.py使用 * 超参名字可以任意指定,PaddleHub会将搜索到的值以指定名称传递给train.py使用
* 优化超参策略选择HAZero时,需要提供两个以上的待优化超参 * 优化超参策略选择HAZero时,需要提供两个以上的待优化超参
### 2. train.py ### 2. train.py
train.py用于接受PaddleHub搜索到的超参进行一次优化过程,将优化后的效果返回 train.py用于接受PaddleHub搜索到的超参进行一次优化过程,将优化后的效果返回
<p align="center"> <p align="center">
<img src="https://raw.githubusercontent.com/PaddlePaddle/PaddleHub/release/v1.3/docs/imgs/demo.png" hspace='10'/> <br /> <img src="https://raw.githubusercontent.com/PaddlePaddle/PaddleHub/release/v1.3/docs/imgs/demo.png" hspace='10'/> <br />
...@@ -82,9 +82,9 @@ train.py用于接受PaddleHub搜索到的超参进行一次优化过程,将优 ...@@ -82,9 +82,9 @@ train.py用于接受PaddleHub搜索到的超参进行一次优化过程,将优
### 示例 ### 示例
[PaddleHub AutoDL Finetuner超参优化--NLP情感分类任务](../demo/autofinetune_text_classification) [PaddleHub AutoDL Finetuner超参优化--NLP情感分类任务](../demo/autofinetune_text_classification)
[PaddleHub AutoDL Finetuner超参优化--CV图像分类任务](../demo/autofinetune_image_classification) [PaddleHub AutoDL Finetuner超参优化--CV图像分类任务](../demo/autofinetune_image_classification)
## 三、启动方式 ## 三、启动方式
...@@ -99,25 +99,25 @@ $ hub autofinetune train.py --param_file=hparam.yaml --gpu=0,1 --popsize=5 --rou ...@@ -99,25 +99,25 @@ $ hub autofinetune train.py --param_file=hparam.yaml --gpu=0,1 --popsize=5 --rou
其中,选项 其中,选项
> `--param_file`: 必填,待优化的超参数信息yaml文件,即上述[hparam.yaml](#hparam.yaml)。 * `--param_file`: 必填,待优化的超参数信息yaml文件,即上述[hparam.yaml](#hparam.yaml)
> `--gpu`: 必填,设置运行程序的可用GPU卡号,中间以逗号隔开,不能有空格 * `--gpu`: 必填,设置运行程序的可用GPU卡号,中间以逗号隔开,不能有空格;
> `--popsize`: 可选,设置程序运行每轮产生的超参组合数,默认为5 * `--popsize`: 可选,设置程序运行每轮产生的超参组合数,默认为5;
> `--round`: 可选,设置程序运行的轮数,默认为10 * `--round`: 可选,设置程序运行的轮数,默认为10;
> `--output_dir`: 可选,设置程序运行输出结果存放目录,不指定该选项参数时,在当前运行路径下生成存放程序运行输出信息的文件夹 * `--output_dir`: 可选,设置程序运行输出结果存放目录,不指定该选项参数时,在当前运行路径下生成存放程序运行输出信息的文件夹;
> `--evaluator`: 可选,设置自动优化超参的评价效果方式,可选fulltrail和populationbased, 默认为populationbased * `--evaluator`: 可选,设置自动优化超参的评价效果方式,可选fulltrail和populationbased, 默认为populationbased;
> `--tuning_strategy`: 可选,设置自动优化超参算法,可选hazero和pshe2,默认为pshe2 * `--tuning_strategy`: 可选,设置自动优化超参算法,可选hazero和pshe2,默认为pshe2;
**NOTE**: **NOTE:**
* 进行超参搜索时,一共会进行n轮(--round指定),每轮产生m组超参(--popsize指定)进行搜索。上一轮的优化结果决定下一轮超参数调整方向 * 进行超参搜索时,一共会进行n轮(--round指定),每轮产生m组超参(--popsize指定)进行搜索。上一轮的优化结果决定下一轮超参数调整方向
* 当指定GPU数量不足以同时跑一轮时,AutoDL Finetuner功能自动实现排队为了提高GPU利用率,建议卡数为刚好可以被popsize整除。如popsize=6,gpu=0,1,2,3,则每搜索一轮,AutoDL Finetuner自动起四个进程训练,所以第5/6组超参组合需要排队一次,在搜索第5/6两组超参时,会存在两张卡出现空闲等待的情况,如果设置为3张可用的卡,则可以避免这种情况的出现 * 当指定GPU数量不足以同时跑一轮时,AutoDL Finetuner功能自动实现排队为了提高GPU利用率,建议卡数为刚好可以被popsize整除。如popsize=6,gpu=0,1,2,3,则每搜索一轮,AutoDL Finetuner自动起四个进程训练,所以第5/6组超参组合需要排队一次,在搜索第5/6两组超参时,会存在两张卡出现空闲等待的情况,如果设置为3张可用的卡,则可以避免这种情况的出现
## 四、目录结构 ## 四、目录结构
...@@ -142,21 +142,21 @@ $ hub autofinetune train.py --param_file=hparam.yaml --gpu=0,1 --popsize=5 --rou ...@@ -142,21 +142,21 @@ $ hub autofinetune train.py --param_file=hparam.yaml --gpu=0,1 --popsize=5 --rou
``` ```
其中output_dir为启动autofinetune命令时指定的根目录,目录下: 其中output_dir为启动autofinetune命令时指定的根目录,目录下:
* log_file.txt记录每一轮搜索所有的超参以及整个过程中所搜索到的最优超参 * log_file.txt记录每一轮搜索所有的超参以及整个过程中所搜索到的最优超参
* best_model保存整个搜索训练过程中得到的最优的模型参数 * best_model保存整个搜索训练过程中得到的最优的模型参数
* visualization记录可视化过程的日志文件 * visualization记录可视化过程的日志文件
* round0 ~ roundn记录每一轮的数据,在每个round目录下,还存在以下文件 * round0 ~ roundn记录每一轮的数据,在每个round目录下,还存在以下文件
* log-0.info ~ log-m.info记录每个搜索方向的日志 * log-0.info ~ log-m.info记录每个搜索方向的日志
* model-0 ~ model-m记录对应搜索的参数 * model-0 ~ model-m记录对应搜索的参数
## 五、可视化 ## 五、可视化
AutoDL Finetuner API在优化超参过程中会自动对关键训练指标进行打点,启动程序后执行下面命令 AutoDL Finetuner API在优化超参过程中会自动对关键训练指标进行打点,启动程序后执行下面命令
```shell ```shell
$ tensorboard --logdir ${OUTPUT}/visualization --host ${HOST_IP} --port ${PORT_NUM} $ tensorboard --logdir ${OUTPUT}/visualization --host ${HOST_IP} --port ${PORT_NUM}
......
# 使用Word2Vec进行文本语义相似度计算 # 使用Word2Vec进行文本语义相似度计算
本示例展示利用PaddleHub“端到端地”完成文本相似度计算 本示例展示利用PaddleHub“端到端地”完成文本相似度计算
## 一、准备文本数据 ## 一、准备文本数据
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
``` ```
## 二、分词 ## 二、分词
利用PaddleHub Module LAC对文本数据进行分词 利用PaddleHub Module LAC对文本数据进行分词
```python ```python
# coding:utf-8 # coding:utf-8
...@@ -59,7 +59,7 @@ for text_pair in raw_data: ...@@ -59,7 +59,7 @@ for text_pair in raw_data:
## 三、计算文本语义相似度 ## 三、计算文本语义相似度
将分词文本中的单词相应替换为wordid,之后输入wor2vec module中计算两个文本语义相似度 将分词文本中的单词相应替换为wordid,之后输入wor2vec module中计算两个文本语义相似度
```python ```python
def convert_tokens_to_ids(vocab, text): def convert_tokens_to_ids(vocab, text):
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册