diff --git a/docs/conf.py b/docs/conf.py index 4bf19c29946a83d9c6dfaa841f3320dc7751ec79..e13c09a916dbfbfd773363e62ce9093fa7ce5431 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -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. diff --git a/docs/faq.md b/docs/faq.md index c507e163673cac1ea016d67a2db58fdaedfb5f97..53f9f432b366d37a68bfa54da9677aedfa7b567b 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -1,6 +1,7 @@ # 常见问题 -## 使用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” diff --git a/docs/overview.md b/docs/overview.md index 7f3e15a604fd8d190f9cac14c2f4e2f6356f3eb9..468d75fd7738db6a9d247c58953e41dfb8d3d40b 100644 --- a/docs/overview.md +++ b/docs/overview.md @@ -1,5 +1,3 @@ -欢迎使用**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能力,一键启动自动化超参搜索。 -
- +![](./imgs/paddlehub_figure.jpg) +
+ PaddleHub全景图 +
## 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工业级文本分类示例: -- - -
- +![](./imgs/paddlehub_finetune.gif)
十行代码完成ERNIE工业级文本分类
- 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) diff --git a/docs/quickstart.md b/docs/quickstart.md index cf8b2b3b04d144616b9274dc3fabf23e76db52ca..b5e14a5fba7dd5dedfdad0d56587456107f4935c 100644 --- a/docs/quickstart.md +++ b/docs/quickstart.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文件夹中,如下图所示。 -- +![](./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 ``` -
- +![](./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 ``` - -
- - -
+![](./imgs/img_seg_result.jpeg) ![](./imgs/humanseg_test_res.png)ACE2P人体部件分割 HumanSeg人像分割
+## 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) 查看 diff --git a/docs/tutorial/autofinetune.md b/docs/tutorial/autofinetune.md index 325888a1c4490fa131ac44c97158cbf3241d6bb3..6fa09a7cb2053d0c122e46ac605fdfb738bb7953 100644 --- a/docs/tutorial/autofinetune.md +++ b/docs/tutorial/autofinetune.md @@ -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/ diff --git a/docs/tutorial/bert_service.md b/docs/tutorial/bert_service.md index 3f96e155dab73d69d3fed97f891653f24db6a585..8485f52e53487d50619a704d06731c69345ffa73 100644 --- a/docs/tutorial/bert_service.md +++ b/docs/tutorial/bert_service.md @@ -7,11 +7,8 @@ 整体流程图如下: -
-
+![](../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)
diff --git a/docs/tutorial/how_to_define_task.md b/docs/tutorial/how_to_define_task.md
index 6096f842f18761144676235b1f340dd45b436fa4..1025e0c9d2ed16c246cf11351babc6a45af6a77a 100644
--- a/docs/tutorial/how_to_define_task.md
+++ b/docs/tutorial/how_to_define_task.md
@@ -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
# 代码示例
diff --git a/docs/tutorial/serving.md b/docs/tutorial/serving.md
index cbaf2b7fa73591e148f8dffae3524fc5934260af..46868cbbca540d98045e2da76cf99f8d78348364 100644
--- a/docs/tutorial/serving.md
+++ b/docs/tutorial/serving.md
@@ -92,11 +92,8 @@ http://127.0.0.1:8866/predict/
+![](../imgs/web_demo.png)
-
-
-
-
-
-
-