提交 b84aab3b 编写于 作者: A adaxiadaxi

update_docs

上级 68d55d77
......@@ -30,11 +30,17 @@ release = "v1.5"
# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
extensions = [
'sphinx.ext.autodoc',
'sphinx.ext.napoleon',
'sphinx.ext.coverage',
'sphinx.ext.viewcode',
'sphinx.ext.mathjax',
'sphinx_markdown_tables',
'sphinx.ext.githubpages',
'sphinx.ext.napoleon',
'recommonmark',
'sphinx_markdown_tables',
]
# Add any paths that contain templates here, relative to this directory.
......
# 常见问题
## 使用pip install paddlehub时提示`Could not find a version that satisfies the requirement paddlehub (from versions: )`
## 使用pip install paddlehub时提示
`Could not find a version that satisfies the requirement paddlehub (from versions: )`
这可能是因为pip指向了一个pypi的镜像源,该镜像源没有及时同步paddlehub版本导致。
......@@ -10,7 +11,8 @@
$ pip install -i https://pypi.org/simple/ paddlehub
```
## 使用paddlehub时,提示`ModuleNotFoundError: No module named 'paddle'`
## 使用paddlehub时,提示
`ModuleNotFoundError: No module named 'paddle'`
这是因为PaddleHub依赖于PaddlePaddle,用户需要自行安装合适的PaddlePaddle版本。
如果机器不支持GPU,那么使用如下命令来安装PaddlePaddle的CPU版本:
......@@ -23,7 +25,8 @@ $ pip install paddlepaddle
$ pip install paddlepaddle-gpu
```
## 利用PaddleHub ernie/bert进行Finetune时,提示`paddle.fluid.core_avx.EnforceNotMet: Input ShapeTensor cannot be found in Op reshape2`等信息
## 利用PaddleHub ernie/bert进行Finetune时,提示
`paddle.fluid.core_avx.EnforceNotMet: Input ShapeTensor cannot be found in Op reshape2`等信息
这是因为ernie/bert module的创建时和此时运行环境中PaddlePaddle版本不对应。
首先将PaddleHub升级至最新版本,同时将ernie卸载。
......@@ -54,7 +57,7 @@ results = lac.lexical_analysis(data=inputs, use_gpu=True, batch_size=10)
## 如何获取输入句子经过ERNIE编码后的句子表示Embedding?
具体参考[BERT Services]()使用说明
具体参考[BERT Services](./tutorial/bert_service.md)使用说明
## 在虚拟机Python2环境中使用hub命令报错“Illegal instruction”
......
欢迎使用**PaddleHub**
# 概述
## PaddleHub是什么
......@@ -8,46 +6,44 @@ PaddleHub是飞桨生态的预训练模型应用工具,开发者可以便捷
PaddleHub以预训练模型应用为核心具备以下特点:
* **[模型即软件](#模型即软件)**通过Python API或命令行实现模型调用,可快速体验或集成飞桨特色预训练模型。
* **模型即软件:** 通过Python API或命令行实现模型调用,可快速体验或集成飞桨特色预训练模型。
* **[易用的迁移学习](#易用的迁移学习)**通过Fine-tune API,内置多种优化策略,只需少量代码即可完成预训练模型的Fine-tuning。
* **易用的迁移学习:** 通过Fine-tune API,内置多种优化策略,只需少量代码即可完成预训练模型的Fine-tuning。
* **[一键模型转服务](#一键模型转服务)**简单一行命令即可搭建属于自己的深度学习模型API服务完成部署。
* **一键模型转服务:** 简单一行命令即可搭建属于自己的深度学习模型API服务完成部署。
* **[自动超参优化](#自动超参优化)**内置AutoDL Finetuner能力,一键启动自动化超参搜索。
* **自动超参优化:** 内置AutoDL Finetuner能力,一键启动自动化超参搜索。
<p align="center">
<img src="imgs/paddlehub_figure.jpg" width='70%' align="middle"
</p>
![](./imgs/paddlehub_figure.jpg)
<p align='center'>
PaddleHub全景图
</p>
## PaddleHub特性
### 一、模型即软件
PaddleHub采用模型即软件的设计理念,所有的预训练模型与Python软件包类似,具备版本的概念,通过`hub install/uninstall` 可以便捷完成模型的升级和卸载。此外,还可以通过Python的API或命令行实现快速预测的软件集成,更方便地应用和管理深度学习模型,完成模型的搜索、下载、安装、升级、预测等功能。更加详细的使用说明可以参考[PaddleHub命令行工具](tutorial/cmdintro.md)
PaddleHub采用模型即软件的设计理念,所有的预训练模型与Python软件包类似,具备版本的概念,通过`hub install/uninstall` 可以便捷完成模型的升级和卸载。此外,还可以通过Python的API或命令行实现快速预测的软件集成,更方便地应用和管理深度学习模型,完成模型的搜索、下载、安装、升级、预测等功能。更加详细的使用说明可以参考[PaddleHub命令行工具](./tutorial/cmdintro.md)
目前的预训练模型覆盖了图像分类、语义模型、视频分类、图像生成、图像分割、文本审核、关键点检测等业界主流模型,更多PaddleHub已经发布的模型,请前往 [PaddleHub官网](https://www.paddlepaddle.org.cn/hub) 查看。也可以使用[快速体验](quickstart.md)通过命令行即可调用预训练模型进行预测。
目前的预训练模型覆盖了图像分类、语义模型、视频分类、图像生成、图像分割、文本审核、关键点检测等业界主流模型,更多PaddleHub已经发布的模型,请前往 [PaddleHub官网](https://www.paddlepaddle.org.cn/hub) 查看。也可以使用[快速体验](./quickstart.md)通过命令行即可调用预训练模型进行预测。
### 二、易用的迁移学习
迁移学习(Transfer Learning)通俗来讲,就是运用已有的知识来学习新的知识,核心是找到已有知识和新知识之间的相似性。PaddleHub提供了Fine-tune API,只需要少量代码即可完成深度学习模型在自然语言处理和计算机视觉场景下的迁移学习,可以在更短的时间完成模型的训练,同时模型具备更好的泛化能力。
迁移学习(Transfer Learning)通俗来讲,就是运用已有的知识来学习新的知识,核心是找到已有知识和新知识之间的相似性。PaddleHub提供了Fine-tune API,只需要少量代码即可完成深度学习模型在自然语言处理和计算机视觉场景下的迁移学习,可以在更短的时间完成模型的训练,同时模型具备更好的泛化能力。下图所示是基于PaddleHub,通过数十行代码完成ERNIE工业级文本分类示例:
<p align="center">
<img src="imgs/paddlehub_finetune.jpg" width='70%' align="middle"
</p>
<p align="center">
<img src="imgs/paddlehub_finetune.gif" align="middle"
</p>
![](./imgs/paddlehub_finetune.gif)
<p align='center'>
十行代码完成ERNIE工业级文本分类
</p>
PaddleHub提供了使用Finetune-API和预训练模型完成[文本分类](https://github.com/PaddlePaddle/PaddleHub/tree/release/v1.7/demo/text_classification)[序列标注](https://github.com/PaddlePaddle/PaddleHub/tree/release/v1.7/demo/sequence_labeling)[多标签分类](https://github.com/PaddlePaddle/PaddleHub/tree/release/v1.7/demo/multi_label_classification)[图像分类](https://github.com/PaddlePaddle/PaddleHub/tree/release/v1.7/demo/image_classification)[检索式问答任务](https://github.com/PaddlePaddle/PaddleHub/tree/release/v1.7/demo/qa_classification)[回归任务](https://github.com/PaddlePaddle/PaddleHub/tree/release/v1.7/demo/regression)[句子语义相似度计算](https://github.com/PaddlePaddle/PaddleHub/tree/release/v1.7/demo/sentence_similarity)[阅读理解任务](https://github.com/PaddlePaddle/PaddleHub/tree/release/v1.7/demo/reading_comprehension)等迁移任务的使用示例,详细参见[demo](https://github.com/PaddlePaddle/PaddleHub/tree/release/v1.7/demo)
PaddleHub提供了使用Finetune-API和预训练模型完成[文本分类](https://github.com/PaddlePaddle/PaddleHub/tree/release/v1.7/demo/text_classification)[序列标注](https://github.com/PaddlePaddle/PaddleHub/tree/release/v1.7/demo/sequence_labeling)[多标签分类](https://github.com/PaddlePaddle/PaddleHub/tree/release/v1.7/demo/multi_label_classification)[图像分类](https://github.com/PaddlePaddle/PaddleHub/tree/release/v1.7/demo/image_classification)[检索式问答任务](https://github.com/PaddlePaddle/PaddleHub/tree/release/v1.7/demo/qa_classification)[回归任务](https://github.com/PaddlePaddle/PaddleHub/tree/release/v1.7/demo/regression)[句子语义相似度计算](https://github.com/PaddlePaddle/PaddleHub/tree/release/v1.7/demo/sentence_similarity)[阅读理解任务](https://github.com/PaddlePaddle/PaddleHub/tree/release/v1.7/demo/reading_comprehension)等迁移任务的使用示例,详细参见[demo](https://github.com/PaddlePaddle/PaddleHub/tree/release/v1.7/demo)。下图是PaddleHub的迁移学习全景图:
![](./imgs/paddlehub_finetune.jpg)
* 场景化使用
......@@ -55,6 +51,12 @@ PaddleHub采用模型即软件的设计理念,所有的预训练模型与Pytho
|预训练模型|任务类型|数据集|AIStudio链接|备注|
|-|-|-|-|-|
|chinese_text_detection_db_mobile|ocr中文识别|icdar2015数据集|[点击体验](https://aistudio.baidu.com/aistudio/projectdetail/507159)|超轻量9M模型,火爆|
|video_tag_lstm|短视频分类|百度自建数据集|[点击体验](https://aistudio.baidu.com/aistudio/projectdetail/509776)|大规模,多标签|
|resnet50_vd_animals|动物识别|百度自建动物数据集|[点击体验](https://aistudio.baidu.com/aistudio/projectdetail/437648)|八千种动物识别|
|face_landmark_localization|AI川剧变脸|AFW/AFLW|[点击体验](https://aistudio.baidu.com/aistudio/projectdetail/402892)||
|face_landmark_localization|人像美颜|AFW/AFLW|[点击体验](https://aistudio.baidu.com/aistudio/projectdetail/389512)||
|DeepLabv3+|人像抠图|百度自建数据集|[点击体验](https://aistudio.baidu.com/aistudio/projectdetail/341116)||
|ResNet|图像分类|猫狗数据集DogCat|[点击体验](https://aistudio.baidu.com/aistudio/projectdetail/147010)||
|ERNIE|文本分类|中文情感分类数据集ChnSentiCorp|[点击体验](https://aistudio.baidu.com/aistudio/projectdetail/147006)||
|ERNIE|文本分类|中文新闻分类数据集THUNEWS|[点击体验](https://aistudio.baidu.com/aistudio/projectdetail/221999)|本教程讲述了如何将自定义数据集加载,并利用Fine-tune API完成文本分类迁移学习。|
......@@ -70,7 +72,7 @@ PaddleHub采用模型即软件的设计理念,所有的预训练模型与Pytho
关于PaddleHub快捷完成迁移学习,更多信息参考:
[API](reference)
[API](./reference/ref_index.md)
[自定义数据集如何Fine-tune](tutorial/how_to_load_data.md)
......
......@@ -2,6 +2,10 @@
安装PaddleHub成功后,执行命令[hub run](tutorial/cmdintro.md),可以快速体验PaddleHub无需代码、一键预测的命令行功能,如下几个示例:
## 视觉领域场景体验
* 使用[文字识别](https://www.paddlepaddle.org.cn/hublist?filter=en_category&value=TextRecognition)轻量级中文OCR模型chinese_ocr_db_crnn_mobile即可一键快速识别图片中的文字。
```shell
$ wget https://paddlehub.bj.bcebos.com/model/image/ocr/test_ocr.jpg
......@@ -10,34 +14,22 @@ $ hub run chinese_ocr_db_crnn_mobile --input_path test_ocr.jpg --visualization=T
预测结果图片保存在当前运行路径下ocr_result文件夹中,如下图所示。
<p align="center">
<img src="imgs/ocr_res.jpg" width='70%' align="middle"
</p>
![](./imgs/ocr_res.jpg)
* 使用[词法分析](https://www.paddlepaddle.org.cn/hublist?filter=en_category&value=LexicalAnalysis)模型LAC进行分词
```shell
$ hub run lac --input_text "现在,慕尼黑再保险公司不仅是此类行动的倡议者,更是将其大量气候数据整合进保险产品中,并与公众共享大量天气信息,参与到新能源领域的保障中。"
[{
'word': ['现在', ',', '慕尼黑再保险公司', '不仅', '是', '此类', '行动', '的', '倡议者', ',', '更是', '将', '其', '大量', '气候', '数据', '整合', '进', '保险', '产品', '中', ',', '并', '与', '公众', '共享', '大量', '天气', '信息', ',', '参与', '到', '新能源', '领域', '的', '保障', '中', '。'],
'tag': ['TIME', 'w', 'ORG', 'c', 'v', 'r', 'n', 'u', 'n', 'w', 'd', 'p', 'r', 'a', 'n', 'n', 'v', 'v', 'n', 'n', 'f', 'w', 'c', 'p', 'n', 'v', 'a', 'n', 'n', 'w', 'v', 'v', 'n', 'n', 'u', 'vn', 'f', 'w']
}]
```
* 使用[情感分析](https://www.paddlepaddle.org.cn/hublist?filter=en_category&value=SentimentAnalysis)模型Senta对句子进行情感预测
```shell
$ hub run senta_bilstm --input_text "今天天气真好"
{'text': '今天天气真好', 'sentiment_label': 1, 'sentiment_key': 'positive', 'positive_probs': 0.9798, 'negative_probs': 0.0202}]
```
* 使用[目标检测](http://www.paddlepaddle.org.cn/hub?filter=category&value=ObjectDetection)模型Ultra-Light-Fast-Generic-Face-Detector-1MB对图片进行人脸识别
* 使用[目标检测](https://www.paddlepaddle.org.cn/hublist?filter=en_category&value=ObjectDetection)模型Ultra-Light-Fast-Generic-Face-Detector-1MB对图片进行人脸识别
```shell
$ wget https://paddlehub.bj.bcebos.com/resources/test_image.jpg
$ hub run ultra_light_fast_generic_face_detector_1mb_640 --input_path test_image.jpg
```
<p align="center">
<img src="imgs/face_detection_result.jpeg" align="middle"
</p>
![](./imgs/face_detection_result.jpeg)
* 使用[目标检测](https://www.paddlepaddle.org.cn/hublist?filter=en_category&value=ObjectDetection)模型pyramidbox_lite_mobile_mask对图片进行口罩检测
```shell
$ wget https://paddlehub.bj.bcebos.com/resources/test_mask_detection.jpg
$ hub run pyramidbox_lite_mobile_mask --input_path test_mask_detection.jpg
```
![](./imgs/test_mask_detection_result.jpg)
* 使用[图像分割](https://www.paddlepaddle.org.cn/hublist?filter=en_category&value=ImageSegmentation)模型进行人像扣图和人体部件识别
......@@ -46,16 +38,28 @@ $ wget https://paddlehub.bj.bcebos.com/resources/test_image.jpg
$ hub run ace2p --input_path test_image.jpg
$ hub run deeplabv3p_xception65_humanseg --input_path test_image.jpg
```
<p align="center">
<img src="imgs/img_seg_result.jpeg" width="35%" />
<img src="imgs/humanseg_test_res.png" width="35%" />
</p>
![](./imgs/img_seg_result.jpeg) ![](./imgs/humanseg_test_res.png)
<p align='center'>
&#8194;&#8194;&#8194&#8194;&#8194;&#8194;&#8194;&#8194;&#8194;ACE2P人体部件分割&#8194;&#8194;&#8194;&#8194;&#8194;&#8194;&#8194;&#8194;&#8194;&#8194;&#8194;&#8194;&#8194;&#8194;&#8194;&#8194;
HumanSeg人像分割&#8194;&#8194;&#8194;
</p>
## NLP领域场景体验
* 使用[词法分析](https://www.paddlepaddle.org.cn/hublist?filter=en_category&value=LexicalAnalysis)模型LAC进行分词
```shell
$ hub run lac --input_text "现在,慕尼黑再保险公司不仅是此类行动的倡议者,更是将其大量气候数据整合进保险产品中,并与公众共享大量天气信息,参与到新能源领域的保障中。"
[{
'word': ['现在', ',', '慕尼黑再保险公司', '不仅', '是', '此类', '行动', '的', '倡议者', ',', '更是', '将', '其', '大量', '气候', '数据', '整合', '进', '保险', '产品', '中', ',', '并', '与', '公众', '共享', '大量', '天气', '信息', ',', '参与', '到', '新能源', '领域', '的', '保障', '中', '。'],
'tag': ['TIME', 'w', 'ORG', 'c', 'v', 'r', 'n', 'u', 'n', 'w', 'd', 'p', 'r', 'a', 'n', 'n', 'v', 'v', 'n', 'n', 'f', 'w', 'c', 'p', 'n', 'v', 'a', 'n', 'n', 'w', 'v', 'v', 'n', 'n', 'u', 'vn', 'f', 'w']
}]
```
* 使用[情感分析](https://www.paddlepaddle.org.cn/hublist?filter=en_category&value=SentimentAnalysis)模型Senta对句子进行情感预测
```shell
$ hub run senta_bilstm --input_text "今天天气真好"
{'text': '今天天气真好', 'sentiment_label': 1, 'sentiment_key': 'positive', 'positive_probs': 0.9798, 'negative_probs': 0.0202}]
```
除了上述几类模型外,PaddleHub还发布了图像分类、语义模型、视频分类、图像生成、图像分割、文本审核、关键点检测等业界主流模型,更多PaddleHub已经发布的模型,请前往 [PaddleHub官网](https://www.paddlepaddle.org.cn/hub) 查看
......@@ -82,9 +82,9 @@ train.py用于接受PaddleHub搜索到的超参进行一次优化过程,将优
### 示例
[PaddleHub AutoDL Finetuner超参优化--NLP情感分类任务](https://github.com/PaddlePaddle/PaddleHub/tree/release/v1.5/demo/autofinetune_text_classification)
[PaddleHub AutoDL Finetuner超参优化--NLP情感分类任务](https://github.com/PaddlePaddle/PaddleHub/tree/release/v1.7/demo/autofinetune_text_classification)
[PaddleHub AutoDL Finetuner超参优化--CV图像分类任务](https://github.com/PaddlePaddle/PaddleHub/tree/release/v1.5/demo/autofinetune_image_classification)
[PaddleHub AutoDL Finetuner超参优化--CV图像分类任务](https://github.com/PaddlePaddle/PaddleHub/tree/release/v1.7/demo/autofinetune_image_classification)
## 三、启动方式
......@@ -99,7 +99,7 @@ $ hub autofinetune train.py --param_file=hparam.yaml --gpu=0,1 --popsize=5 --rou
其中,选项
* `--param_file`: 必填,待优化的超参数信息yaml文件,即上述[hparam.yaml](#1-hparamyaml)
* `--param_file`: 必填,待优化的超参数信息yaml文件,即上述**hparam.yaml**
* `--gpu`: 必填,设置运行程序的可用GPU卡号,中间以逗号隔开,不能有空格;
......@@ -167,7 +167,7 @@ $ visualdl --logdir ${OUTPUT}/visualization --host ${HOST_IP} --port ${PORT_NUM}
## 六、args参数传递
PaddleHub AutoDL Finetuner 支持将train.py中的args其余不需要搜索的参数通过autofinetune remainder方式传入。这个不需要搜索的选项参数名称应该和通过hub autofinetune的传入选项参数名称保持一致。如[PaddleHub AutoDL Finetuner超参优化--NLP情感分类任务](../demo/autofinetune_text_classification)示例中的max_seq_len选项,可以参照以下方式传入。
PaddleHub AutoDL Finetuner 支持将train.py中的args其余不需要搜索的参数通过autofinetune remainder方式传入。这个不需要搜索的选项参数名称应该和通过hub autofinetune的传入选项参数名称保持一致。如[PaddleHub AutoDL Finetuner超参优化--NLP情感分类任务](https://github.com/PaddlePaddle/PaddleHub/tree/release/v1.7/demo/autofinetune_text_classification)示例中的max_seq_len选项,可以参照以下方式传入。
```shell
$ OUTPUT=result/
......
......@@ -7,11 +7,8 @@
整体流程图如下:
<div align="center">
![](../imgs/bs.png)
<img src="../imgs/bs.png" aligh="center" width="100%" alt="BS流程图" />
</div>
### Bert Service的特点
使用`Bert Service`能够帮助开发者在限制性较强的环境中有效获取embedding,常用于以下情景:
......@@ -101,14 +98,7 @@ $ hub serving start bert_service -m ernie_tiny -p 8866 --use_gpu --gpu 0
```shell
Server[baidu::paddle_serving::predictor::bert_service::BertServiceImpl] is serving on port=8866.
```
整个启动过程如下图:
<div align="center">
&emsp;&emsp;<img src="https://github.com/ShenYuhan/ml-python/blob/master/short_start_fast.gif" aligh="center" width="70%" alt="启动BS" />
</div>
[整个启动过程动态图](https://github.com/ShenYuhan/ml-python/blob/master/short_start_fast.gif)
其中各参数说明如下表:
......@@ -203,19 +193,14 @@ result = bc.get_result(input_text=input_text)
```python
[[0.9993321895599361, 0.9994612336158751, 0.9999646544456481, 0.732795298099517, -0.34387934207916204, ... ]]
```
客户端代码demo文件见[示例](../../demo/serving/bert_service/bert_service_client.py)
客户端代码demo文件见[示例](https://github.com/PaddlePaddle/PaddleHub/blob/release/v1.7/demo/serving/bert_service/bert_service_client.py)
运行命令如下:
```shell
$ python bert_service_client.py
```
运行过程如下图:
<div align="center">
&emsp;&emsp;<img src="https://github.com/ShenYuhan/ml-python/blob/master/short_client_fast.gif" aligh="center" width="70%" alt="启动BS" />
[运行过程动态图](https://github.com/ShenYuhan/ml-python/blob/master/short_client_fast.gif)
</div>
### Step4:关闭Bert Service服务端
如要停止`Bert Service`服务端程序,可在其启动命令行页面使用Ctrl+C方式关闭,关闭成功会打印如下日志:
......@@ -237,7 +222,7 @@ $ hub serving start bert_service -m bert_chinese_L-12_H-768_A-12 -p 8867
Q : 启动时显示"Check out http://yq01-gpu-255-129-12-00.epc.baidu.com:8887 in web
browser.",这个页面有什么作用。
A : 这是`BRPC`的内置服务,主要用于查看请求数、资源占用等信息,可对server端性能有大致了解,具体信息可查看[BRPC内置服务](https://github.com/apache/incubator-brpc/blob/master/docs/cn/builtin_service.md)
A : 这是`BRPC`的内置服务,主要用于查看请求数、资源占用等信息,可对server端性能有大致了解,具体信息可查看[BRPC内置服务](https://github.com/apache/incubator-brpc/tree/master/docs/cn)
Q : 为什么输入文本的格式为[["文本1"], ["文本2"], ],而不是["文本1", "文本2", ]?
A : 因为Bert模型可以对一轮对话生成向量表示,例如[["问题1","回答1"],["问题2","回答2"]],为了防止使用时混乱,每个样本使用一个list表示,一个样本list内部可以是1条string或2条string,如下面的文本:
......
......@@ -60,7 +60,7 @@ PaddleHub在使用过程中会产生一些缓存数据,这部分数据默认
## `hub autofinetune`
用于自动调整Fine-tune任务的超参数,具体使用详情参考[PaddleHub AutoDL Finetuner使用教程](https://github.com/PaddlePaddle/PaddleHub/blob/release/v1.4/tutorial/autofinetune.md)
用于自动调整Fine-tune任务的超参数,具体使用详情参考[PaddleHub AutoDL Finetuner使用教程](./autofinetune.md)
`选项`
* `--param_file`: 需要搜索的超参数信息yaml文件
......@@ -96,7 +96,7 @@ PaddleHub在使用过程中会产生一些缓存数据,这部分数据默认
**NOTE:**
1. 在PaddleHub中,Module表示一个`可执行的神经网络模型`,一个Module可以支持直接命令行预测,也可以配合PaddleHub Finetune API,通过少量代码实现迁移学习。不是所有的Module都支持命令行预测 (例如BERT/ERNIE Transformer类模型,一般需要搭配任务进行finetune),也不是所有的Module都可用于finetune(例如LAC词法分析模型,我们不建议用户用于finetune)。
在PaddleHub中,Module表示一个`可执行的神经网络模型`,一个Module可以支持直接命令行预测,也可以配合PaddleHub Finetune API,通过少量代码实现迁移学习。不是所有的Module都支持命令行预测 (例如BERT/ERNIE Transformer类模型,一般需要搭配任务进行finetune),也不是所有的Module都可用于finetune(例如LAC词法分析模型,我们不建议用户用于finetune)。
PaddleHub尽量简化了用户在使用命令行预测时的理解成本,一般来讲,我们将预测分为NLP和CV两大类
......
......@@ -12,7 +12,7 @@ author_email:
type: nlp/semantic_model
```
**本示例代码可以参考[finetuned_model_to_module](../../demo/text_classification/finetuned_model_to_module/)**
**本示例代码可以参考[finetuned_model_to_module](https://github.com/PaddlePaddle/PaddleHub/tree/release/v1.7/demo/text_classification/finetuned_model_to_module)**
Module存在一个接口predict,用于接收带预测,并给出文本的情感倾向(正面/负面),支持python接口调用和命令行调用。
```python
......@@ -200,9 +200,9 @@ def predict(self, data, return_result=False, accelerate_mode=True):
### 完整代码
* [module.py](../../demo/text_classification/finetuned_model_to_module/module.py)
* [module.py](https://github.com/PaddlePaddle/PaddleHub/blob/release/v1.7/demo/text_classification/finetuned_model_to_module/module.py)
* [__init__.py](../../demo/text_classification/finetuned_model_to_module/__init__.py)
* [__init__.py](https://github.com/PaddlePaddle/PaddleHub/blob/release/v1.7/demo/text_classification/finetuned_model_to_module/__init__.py)
**NOTE:** `__init__.py`是空文件
......@@ -305,4 +305,4 @@ r = requests.post(url=url, headers=headers, data=json.dumps(data))
print(json.dumps(r.json(), indent=4, ensure_ascii=False))
```
关与PaddleHub Serving更多信息参见[Hub Serving教程](../../docs/tutorial/serving.md)以及[Demo](../../demo/serving/README.md)
关与PaddleHub Serving更多信息参见[Hub Serving教程](./serving.md)以及[Demo](https://github.com/PaddlePaddle/PaddleHub/tree/release/v1.7/demo/serving)
......@@ -3,16 +3,15 @@
了解如何修改Task内置方法,我们首先了解下Task中的事件。
Task定义了[组网事件]()和[运行事件]()。其中运行事件的工作流程如下图。
Task定义了[组网事件](./how_to_define_task.md)[运行事件](./how_to_define_task.md)。其中运行事件的工作流程如下图。
<p align="center">
<img src="./imgs/task_event_workflow.png" width='70%' align="middle"
</p>
![](../imgs/task_event_workflow.png)
**NOTE:**
* 图中提到的运行设置config参见[RunConfig说明]()
* "finetune_start_event","finetune_end_event","predict_start_event","predict_end_event","eval_start_event","eval_end_event"等事件是用于打印相应阶段的日志信息。"save_ckpt_interval_event"事件用于保存当前训练的模型参数。"log_interval_event"事件用于计算模型评价指标以及可视化这些指标。
* 图中提到的运行设置config参见[RunConfig说明](../reference/config.md)
* "finetune_start_event","finetune_end_event","predict_start_event","predict_end_event",
"eval_start_event","eval_end_event"等事件是用于打印相应阶段的日志信息。"save_ckpt_interval_event"事件用于保存当前训练的模型参数。"log_interval_event"事件用于计算模型评价指标以及可视化这些指标。
如果您需要对图中提到的事件的具体实现进行修改,可以通过Task提供的事件回调hook机制进行改写。
......@@ -113,10 +112,12 @@ task.hook_info()
```
**NOTE:**
* 关于上述提到的run_states参见[RunEnv说明]()
* tb-paddle详细信息参见[官方文档](https://github.com/linshuliang/tb-paddle)
* 关于上述提到的run_states参见[RunEnv说明](../reference/task/runenv.md)
* tb-paddle详细信息参见[官方文档](https://github.com/ShenYuhan/tb-paddle)
* 改写的事件方法,参数列表务必与PaddleHub内置的相应方法保持一致。
* 只支持改写/删除以下事件hook类型:
"build_env_start_event","build_env_end_event","finetune_start_event","finetune_end_event","predict_start_event","predict_end_event","eval_start_event","eval_end_event","log_interval_event","save_ckpt_interval_event","eval_interval_event","run_step_event"。
* 如果想要改写组网事件,Hook不支持。改写组网事件参见[自定义Task]()。
"build_env_start_event","build_env_end_event","finetune_start_event","finetune_end_event",
"predict_start_event","predict_end_event","eval_start_event","eval_end_event",
"log_interval_event","save_ckpt_interval_event","eval_interval_event","run_step_event"。
* 如果想要改写组网事件,Hook不支持。改写组网事件参见[自定义Task](./how_to_define_task.md)
* 如何创建Task,参见[PaddleHub迁移学习示例](https://github.com/PaddlePaddle/PaddleHub/tree/develop/demo)
......@@ -139,7 +139,7 @@ def _predict_end_event(self):
```
### `_log_interval_event`
调用*finetune* 或者 *finetune_and_eval*接口时,每当命中用户设置的日志打印周期时([RunConfig.log_interval](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub-API:-RunConfig#log_interval))。通过继承实现该函数,用户可以在finetune过程中定期打印所需数据,例如计算运行速度、loss、准确率等
调用*finetune* 或者 *finetune_and_eval*接口时,每当命中用户设置的日志打印周期时([RunConfig.log_interval](../reference/config.md))。通过继承实现该函数,用户可以在finetune过程中定期打印所需数据,例如计算运行速度、loss、准确率等
```python
# 代码示例
......@@ -153,7 +153,7 @@ def _log_interval_event(self, run_states):
* `run_states`: 一个list对象,list中的每一个元素都是RunState对象,该list包含了整个从上一次该事件被触发到本次被触发的状态数据
### `_save_ckpt_interval_event`
调用*finetune* 或者 *finetune_and_eval*接口时,每当命中用户设置的保存周期时([RunConfig.save_ckpt_interval](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub-API:-RunConfig#save_ckpt_interval)),该事件被触发。通过继承实现该函数,用户可以在定期保存checkpoint
调用*finetune* 或者 *finetune_and_eval*接口时,每当命中用户设置的保存周期时([RunConfig.save_ckpt_interval](../reference/config.md)),该事件被触发。通过继承实现该函数,用户可以在定期保存checkpoint
```python
# 代码示例
......@@ -162,7 +162,7 @@ def _save_ckpt_interval_event(self):
```
### `_eval_interval_event`
调用*finetune_and_eval*接口时,每当命中用户设置的评估周期时([RunConfig.eval_interval](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub-API:-RunConfig#eval_interval)),该事件被触发。通过继承实现该函数,用户可以实现自定义的评估指标计算
调用*finetune_and_eval*接口时,每当命中用户设置的评估周期时([RunConfig.eval_interval](../reference/config.md)),该事件被触发。通过继承实现该函数,用户可以实现自定义的评估指标计算
```python
# 代码示例
......
......@@ -92,11 +92,8 @@ http://127.0.0.1:8866/predict/<CATEGORY\>/\<MODULE>
### Step3:利用PaddleHub Serving进行个性化开发
使用PaddleHub Serving进行模型服务部署后,可以利用得到的接口进行开发,如对外提供web服务,或接入到应用程序中,以降低客户端预测压力,提高性能,下面展示了一个web页面demo:
<p align="center">
![](../imgs/web_demo.png)
<img src="../imgs/web_demo.png" width="60%" />
</p>
### Step4:关闭serving
使用关闭命令即可关闭启动的serving,
......@@ -143,11 +140,7 @@ $ hub serving start -c serving_config.json
```
启动成功界面如图:
<p align="center">
<img src="../imgs/start_serving_lac.png" width="100%" />
</p>
![](../imgs/start_serving_lac.png)
这样我们就在8866端口成功部署了lac的在线分词服务。
*此处warning为Flask提示,不影响使用*
......@@ -215,41 +208,41 @@ $ PaddleHub Serving will stop.
```
则serving服务已经停止。
此Demo的具体信息和代码请参见[LAC Serving](../../demo/serving/module_serving/lexical_analysis_lac)。另外,下面展示了一些其他的一键服务部署Demo。
此Demo的具体信息和代码请参见[LAC Serving](https://github.com/PaddlePaddle/PaddleHub/tree/release/v1.7/demo/serving/module_serving/lexical_analysis_lac)。另外,下面展示了一些其他的一键服务部署Demo。
## Demo——其他模型的一键部署服务
获取其他PaddleHub Serving的一键服务部署场景示例,可参见下列demo
* [图像分类-基于vgg11_imagent](../../demo/serving/module_serving/classification_vgg11_imagenet)
* [图像分类-基于vgg11_imagent](https://github.com/PaddlePaddle/PaddleHub/tree/release/v1.7/demo/serving/module_serving/classification_vgg11_imagenet)
&emsp;&emsp;该示例展示了利用vgg11_imagent完成图像分类服务化部署和在线预测,获取图像分类结果。
* [图像生成-基于stgan_celeba](../../demo/serving/module_serving/GAN_stgan_celeba)
* [图像生成-基于stgan_celeba](https://github.com/PaddlePaddle/PaddleHub/tree/release/v1.7/demo/serving/module_serving/GAN_stgan_celeba)
&emsp;&emsp;该示例展示了利用stgan_celeba生成图像服务化部署和在线预测,获取指定风格的生成图像。
* [文本审核-基于porn_detection_lstm](../../demo/serving/module_serving/text_censorship_porn_detection_lstm)
* [文本审核-基于porn_detection_lstm](https://github.com/PaddlePaddle/PaddleHub/tree/release/v1.7/demo/serving/module_serving/text_censorship_porn_detection_lstm)
&emsp;&emsp;该示例展示了利用porn_detection_lstm完成中文文本黄色敏感信息鉴定的服务化部署和在线预测,获取文本是否敏感及其置信度。
* [中文词法分析-基于lac](../../demo/serving/module_serving/lexical_analysis_lac)
* [中文词法分析-基于lac](https://github.com/PaddlePaddle/PaddleHub/tree/release/v1.7/demo/serving/module_serving/lexical_analysis_lac)
&emsp;&emsp;该示例展示了利用lac完成中文文本分词服务化部署和在线预测,获取文本的分词结果,并可通过用户自定义词典干预分词结果。
* [目标检测-基于yolov3_darknet53_coco2017](../../demo/serving/module_serving/object_detection_yolov3_darknet53_coco2017)
* [目标检测-基于yolov3_darknet53_coco2017](https://github.com/PaddlePaddle/PaddleHub/tree/release/v1.7/demo/serving/module_serving/object_detection_yolov3_darknet53_coco2017)
&emsp;&emsp;该示例展示了利用yolov3_darknet53_coco2017完成目标检测服务化部署和在线预测,获取检测结果和覆盖识别框的图片。
* [中文语义分析-基于simnet_bow](../../demo/serving/module_serving/semantic_model_simnet_bow)
* [中文语义分析-基于simnet_bow](https://github.com/PaddlePaddle/PaddleHub/tree/release/v1.7/demo/serving/module_serving/semantic_model_simnet_bow)
&emsp;&emsp;该示例展示了利用simnet_bow完成中文文本相似度检测服务化部署和在线预测,获取文本的相似程度。
* [图像分割-基于deeplabv3p_xception65_humanseg](../../demo/serving/module_serving/semantic_segmentation_deeplabv3p_xception65_humanseg)
* [图像分割-基于deeplabv3p_xception65_humanseg](https://github.com/PaddlePaddle/PaddleHub/tree/release/v1.7/demo/serving/module_serving/semantic_segmentation_deeplabv3p_xception65_humanseg)
&emsp;&emsp;该示例展示了利用deeplabv3p_xception65_humanseg完成图像分割服务化部署和在线预测,获取识别结果和分割后的图像。
* [中文情感分析-基于senta_lstm](../../demo/serving/module_serving/sentiment_analysis_senta_lstm)
* [中文情感分析-基于senta_lstm](https://github.com/PaddlePaddle/PaddleHub/tree/release/v1.7/demo/serving/module_serving/sentiment_analysis_senta_lstm)
&emsp;&emsp;该示例展示了利用senta_lstm完成中文文本情感分析服务化部署和在线预测,获取文本的情感分析结果。
......@@ -284,7 +277,7 @@ if __name__ == "__main__":
print(json.dumps(r.json(), indent=4, ensure_ascii=False))
```
此Demo的具体信息和代码请参见[LAC Serving_2.1.0](../../demo/serving/module_serving/lexical_analysis_lac/lac_2.1.0_serving_demo.py)
此Demo的具体信息和代码请参见[LAC Serving_2.1.0](https://github.com/PaddlePaddle/PaddleHub/blob/release/v1.7/demo/serving/module_serving/lexical_analysis_lac/lac_2.1.0_serving_demo.py)
## Bert Service
除了预训练模型一键服务部署功能之外,PaddleHub Serving还具有`Bert Service`功能,支持ernie_tiny、bert等模型快速部署,对外提供可靠的在线embedding服务,具体信息请参见[Bert Service](./bert_service.md)
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册