Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
PLSC
提交
d6fdb72c
P
PLSC
项目概览
PaddlePaddle
/
PLSC
通知
10
Star
3
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
5
列表
看板
标记
里程碑
合并请求
4
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
PLSC
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
5
Issue
5
列表
看板
标记
里程碑
合并请求
4
合并请求
4
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
d6fdb72c
编写于
12月 18, 2019
作者:
L
lilong12
提交者:
GitHub
12月 18, 2019
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Update docs, requirements.txt and setup.py (#8)
* update docs
上级
9d1fbf20
变更
11
隐藏空白更改
内联
并排
Showing
11 changed file
with
71 addition
and
80 deletion
+71
-80
README.md
README.md
+3
-3
docs/api_intro.md
docs/api_intro.md
+8
-7
docs/base64_preprocessor.md
docs/base64_preprocessor.md
+6
-1
docs/custom_models.md
docs/custom_models.md
+9
-5
docs/distributed_params.md
docs/distributed_params.md
+5
-10
docs/export_for_infer.md
docs/export_for_infer.md
+7
-3
docs/installation.md
docs/installation.md
+7
-1
docs/mixed_precision.md
docs/mixed_precision.md
+0
-28
docs/usage.md
docs/usage.md
+25
-19
requirements.txt
requirements.txt
+0
-1
setup.py
setup.py
+1
-2
未找到文件。
README.md
浏览文件 @
d6fdb72c
...
...
@@ -94,18 +94,18 @@ softmax的计算公示如下图所示:
我们提供了一系列使用教程,来帮助用户完成使用PLSC大规模分类库进行训练、评估和部署。
这一系列文档分为__快速入门__、__基础功能__、__预测部署__和__高级功能__四个部分,由浅入深地介绍PLSC大规模分类库的设计思路和使用方法。
这一系列文档分为
**快速入门**
、
**基础功能**
、
**预测部署**
和
**高级功能**
四个部分,
由浅入深地介绍PLSC大规模分类库的使用方法。
### 快速入门
*
[
安装说明
](
docs/installation.md
)
*
[
训练
/评估/部署
](
docs/usage.md
)
*
[
训练
和验证
](
docs/usage.md
)
### 基础功能
*
[
API简介
](
docs/api_intro.md
)
*
[
自定义模型
](
docs/custom_models.md
)
*
[自定义Reader接口]
### 预测部署
...
...
docs/api_intro.md
浏览文件 @
d6fdb72c
...
...
@@ -2,7 +2,8 @@
## 默认配置参数
PLSC大规模分类库提供了默认配置参数,用于设置训练、评估和模型相关的信息,如训练数据集目录、训练轮数等。
PLSC大规模分类库提供了默认配置参数,用于设置训练、评估和模型相关的信息,如训练数
据集目录、训练轮数等。
这些参数信息位于plsc.config模块中,下面给出这些参数的含义和默认值。
...
...
@@ -64,19 +65,19 @@ PLSC大规模分类库提供了默认配置参数,用于设置训练、评估
| set_checkpoint_dir(dir) | 设置用于加载的预训练模型的目录 | 类型为字符串 |
| set_warmup_epochs(num) | 设置warmup的轮数 | 类型为int |
| set_loss_type(loss_type) | 设置模型的loss类型 | 类型为字符串 |
| set_image_s
iz
e(size) | 设置图像尺寸,格式为CHW | 类型为元组 |
| set_image_s
hap
e(size) | 设置图像尺寸,格式为CHW | 类型为元组 |
| set_optimizer(optimizer) | 设置训练阶段的optimizer | Optimizer类实例 |
| convert_for_prediction() | 将预训练模型转换为预测模型 | None |
| predict() | 离线预测接口,用于验证线上模型的正确性 | None |
| test() | 模型评估 | None |
| train() | 模型训练 | None |
备注:上述API均为PaddlePaddle大规模分类库PLSC的plsc.entry.Entry类的方法,需要通过该类的实例调用,例如:
备注:上述API均为PaddlePaddle大规模分类库PLSC的Entry类的方法,需要通过该类的实例
调用,例如:
```
shell
import plsc.entry as e
ntry
```
python
from
plsc
import
E
ntry
ins
=
entry.
Entry
()
ins
=
Entry
()
ins
.
set_class_num
(
85742
)
ins
.
train
()
```
docs/base64_preprocessor.md
浏览文件 @
d6fdb72c
...
...
@@ -37,7 +37,12 @@ dataset.part10
## 工具使用方法
工具位于tools目录下。
工具位于tools目录下。使用该工具时,需要安装sqlite3模块,可以通过下面的命令安装:
```
shell
pip
install
sqlite3
```
可以通过下面的命令行查看工具的使用帮助信息:
```
python
...
...
docs/custom_models.md
浏览文件 @
d6fdb72c
...
...
@@ -2,12 +2,14 @@
默认地,PaddlePaddle大规模分类库构建基于ResNet50模型的训练模型。
PLSC提供了模型基类plsc.models.base_model.BaseModel,用户可以基于该基类构建自己的网络模型。用户自定义的模型类需要继承自该基类,并实现build_network方法,该方法用于构建用户自定义模型。
PLSC提供了模型基类plsc.models.base_model.BaseModel,用户可以基于该基类构建自己的
网络模型。用户自定义的模型类需要继承自该基类,并实现build_network方法,该方法用
于构建用户自定义模型。
下面的例子给出如何使用BaseModel基类定义用户自己的网络模型, 以及如何使用。
```
python
import
paddle.fluid
as
fluid
import
plsc.entry
as
e
ntry
from
plsc
import
E
ntry
from
plsc.models.base_model
import
BaseModel
class
ResNet
(
BaseModel
):
...
...
@@ -64,20 +66,22 @@ class ResNet(BaseModel):
is_test
=
False
if
is_train
else
True
)
return
emb
def
conv_bn_layer
(
...
...
if
__name__
==
"__main__"
:
ins
=
entry
.
Entry
()
ins
=
Entry
()
ins
.
set_model
(
ResNet
())
ins
.
train
()
```
用户自定义模型类需要继承自基类BaseModel,并实现build_network方法,实现用户的自定义模型。
用户自定义模型类需要继承自基类BaseModel,并实现build_network方法,实现用户的自定
义模型。
build_network方法的输入如下:
*
input: 输入图像数据
*
label: 图像类别
*
is_train: 表示训练阶段还是测试/预测阶段
build_network方法返回用户自定义组网的输出变量
,BaseModel类的get_output方法将调用该方法获取用户自定义组网的输出,并自动在其后添加分布式FC层
。
build_network方法返回用户自定义组网的输出变量。
docs/distributed_params.md
浏览文件 @
d6fdb72c
...
...
@@ -2,20 +2,15 @@
## 简介
对于最后一层全连接层参数(W和b,假设参数b存在,否则,全连接参数仅为W),通常切分到所有训练GPU卡。例如,
假设训练阶段使用的GPU卡数为N,那么
$$W = [W_{1}, W_{2},..., W_{N}$$
$$b = [b_{1}, b_{2},..., b_{N}$$
并且,参数$W_{i}$和$b_{i}$保存在第i个GPU。
对于最后一层全连接层参数(W和b,假设参数b存在,否则,全连接参数仅为W),通常切分到
所有训练GPU卡。那么,每个GPU卡上只保存部分全连接层参数。
当保存模型时,各个GPU卡的分布式参数均会得到保存。
在热启动或fine-tuning阶段,如果训练GPU卡数和热启动前或者预训练阶段使用的GPU卡数
不同时,需要
对分布式参数进行转换,以保证分布式参数的数量和训练使用的GPU卡数相同。
在热启动或fine-tuning阶段,如果训练GPU卡数和热启动前或者预训练阶段使用的GPU卡数
不同时,需要
对分布式参数进行转换,以保证分布式参数的数量和训练使用的GPU卡数相同。
默认地,当使用
plsc.entry.Entry.
train()方法时,会自动进行分布式参数的转换。
默认地,当使用train()方法时,会自动进行分布式参数的转换。
## 工具使用方法
...
...
docs/export_for_infer.md
浏览文件 @
d6fdb72c
...
...
@@ -2,17 +2,21 @@
通常,PaddlePaddle大规模分类库在训练过程中保存的模型只保存模型参数信息,
而不包括预测模型结构。为了部署PLSC预测库,需要将预训练模型导出为预测模型。
预测模型包括预测所需要的模型参数和模型结构,用于后续地预测任务(参见[C++预测库使用])
预测模型包括预测所需要的模型参数和模型结构,用于后续地预测任务(
参见
[
C++预测库使用
](
./serving.md
)
可以通过下面的代码将预训练模型导出为预测模型:
```
python
import
plsc.entry
as
e
ntry
from
plsc
import
E
ntry
if
__name__
==
"__main__"
:
ins
=
entry
.
Entry
()
ins
=
Entry
()
ins
.
set_checkpoint_dir
(
'./pretrain_model'
)
ins
.
set_model_save_dir
(
'./inference_model'
)
ins
.
convert_for_prediction
()
```
其中'./pretrain_model'目录为预训练模型目录,'./inference_model'为用于预测的模型
目录。
docs/installation.md
浏览文件 @
d6fdb72c
...
...
@@ -29,7 +29,13 @@ conda install -c paddle paddlepaddle-gpu cudatoolkit=9.0
更多安装方式和信息请参考
[
PaddlePaddle安装说明
](
https://www.paddlepaddle.org.cn/documentation/docs/zh/beginners_guide/install/index_cn.html
)
## 2. 安装大规模分类库
## 2. 安装依赖包
```
shell
pip
install
-r
requirements.txt
```
## 3. 安装大规模分类库
```
shell
pip
install
plsc
...
...
docs/mixed_precision.md
已删除
100755 → 0
浏览文件 @
9d1fbf20
# 混合精度训练
PLSC支持混合精度训练。使用混合精度训练可以提升训练的速度,同时减少训练使用的内存。
可以通过下面的代码设置开启混合精度训练:
```
python
from
__future__
import
print_function
import
plsc.entry
as
entry
def
main
():
ins
=
entry
.
Entry
()
ins
.
set_mixed_precision
(
True
,
1.0
)
ins
.
train
()
if
__name__
==
"__main__"
:
main
()
```
其中,
`set_mixed_precision`
函数介绍如下:
| API | 描述 | 参数说明 |
| :------------------- | :--------------------| :---------------------- |
| set_mixed_precision(use_fp16, loss_scaling) | 设置混合精度训练 |
`use_fp16`
为是否开启混合精度训练,默认为False;
`loss_scaling`
为初始的损失缩放值,默认为1.0|
-
`use_fp16`
:bool类型,当想要开启混合精度训练时,可将此参数设为True即可。
-
`loss_scaling`
:float类型,为初始的损失缩放值,这个值有可能会影响混合精度训练的精度,建议设为默认值1.0。
为了提高混合精度训练的稳定性和精度,默认开启了动态损失缩放机制。更多关于混合精度训练的介绍可参考:
[
混合精度训练
](
https://arxiv.org/abs/1710.03740
)
docs/usage.md
浏览文件 @
d6fdb72c
#
训练、评估和部署
#
模型训练和评估
PaddlePaddle大规模分类提供了从训练、评估到预测部署的全流程解决方案。本文档介绍如何使用PaddlePaddle大规模分类库快速完成训练、评估和预测部署。
PaddlePaddle大规模分类提供了从训练、评估到预测部署的全流程解决方案。本文档介绍如
何使用PaddlePaddle大规模分类库快速完成训练、评估和预测部署。
## 数据准备
...
...
@@ -16,7 +17,11 @@ train_data/
`
--
lfw.bin
```
其中,
*train_data*
是用户数据的根目录,
*agedb_30.bin*
、
*cfp_ff.bin*
、
*cfp_fp.bin*
和
*lfw.bin*
分别是不同的验证数据集,且这些验证数据集不是全部必须的。本文档教程默认使用lfw.bin作为验证数据集,因此在浏览本教程时,请确保lfw.bin验证数据集可用。
*images*
目录包含JPEG格式的训练图像,
*label.txt*
中的每一行对应一张训练图像以及该图像的类别。
其中,
*train_data*
是用户数据的根目录,
*agedb_30.bin*
、
*cfp_ff.bin*
、
*cfp_fp.bin*
和
*lfw.bin*
分别是不同的验证数据集,且这些验证数据集不是全部必须的。本文档教程默认
使用lfw.bin作为验证数据集,因此在浏览本教程时,请确保lfw.bin验证数据集可用。
*images*
目录包含JPEG格式的训练图像,
*label.txt*
中的每一行对应一张训练图像以及该
图像的类别。
*label.txt*
文件的内容示例如下:
...
...
@@ -37,24 +42,27 @@ images/00000007.jpg 0
### 训练代码
下面的例子给出使用PLSC完成大规模分类训练的脚本
*train.py*
:
```
python
import
plsc.entry
as
e
ntry
from
plsc
import
E
ntry
if
__name__
==
"__main__"
:
ins
=
entry
.
Entry
()
ins
=
Entry
()
ins
.
train
()
```
1.
从plsc包导入
entry.
Entry类,其是使用PLCS大规模分类库功能的接口类。
1.
从plsc包导入Entry类,其是使用PLCS大规模分类库功能的接口类。
2.
生成Entry类的实例。
3.
调用Entry类的train方法,即可开始训练。
默认地,训练阶段每个训练轮次的之后会使用验证集验证模型的效果,当没有验证数据集时,
可以使用
*set_with_test(False)*
API关闭验证功能。
### 开始训练
下面的例子给出如何使用上述脚本启动训练任务:
```
shell
python
-m
paddle.distributed.launch
\
--cluster_ips
=
"127.0.0.1"
\
--cluster_
node_
ips
=
"127.0.0.1"
\
--node_ip
=
"127.0.0.1"
\
--selected_gpus
=
0,1,2,3,4,5,6,7
\
train.py
...
...
@@ -62,31 +70,29 @@ python -m paddle.distributed.launch \
paddle.distributed.launch模块用于启动多机/多卡分布式训练任务脚本,简化分布式训练任务启动过程,各个参数的含义如下:
*
cluster_ips: 参与训练的节点的ip地址列表,以逗号分隔;
*
cluster_
node_
ips: 参与训练的节点的ip地址列表,以逗号分隔;
*
node_ip: 当前训练节点的ip地址;
*
selected_gpus: 每个训练节点所使用的gpu设备列表,以逗号分隔。
## 模型
评估
## 模型
验证
本教程中,我们使用lfw.bin验证数据集评估训练模型的效果。
###
评估
代码
###
验证
代码
下面的例子给出使用PLSC完成大规模分类
训练
的脚本
*val.py*
:
下面的例子给出使用PLSC完成大规模分类
验证
的脚本
*val.py*
:
```
python
import
plsc.entry
as
e
ntry
from
plsc
import
E
ntry
if
__name__
==
"__main__"
:
ins
=
entry
.
Entry
()
ins
=
Entry
()
ins
.
set_checkpoint
(
"output/0"
)
ins
.
test
()
```
默认地,PLSC将训练脚本保存在'./ouput'目录下,并以pass_id作为区分不同训练轮次模型的子目录,例如'./output/0'目录下保存完成第一个轮次的训练后保存的模型。
在模型评估阶段,我们首先需要设置训练模型的目录,接着调用Entry类的test方法开始模型评估。
## 预测部署
默认地,PLSC将训练脚本保存在'./ouput'目录下,并以pass作为区分不同训练轮次模型
的子目录,例如'./output/0'目录下保存完成第一个轮次的训练后保存的模型。
TBD
在模型评估阶段,我们首先需要设置训练模型的目录,接着调用Entry类的test方法开始模
型验证。
requirements.txt
浏览文件 @
d6fdb72c
numpy
>=1.12, <=1.16.4 ; python_version<"3.5"
numpy
>=1.12 ; python_version>="3.5"
scipy
>=0.19.0, <=1.2.1 ; python_version<"3.5"
paddlepaddle
>=1.6.2
scipy
; python_version>="3.5"
Pillow
sklearn
...
...
setup.py
浏览文件 @
d6fdb72c
...
...
@@ -23,8 +23,7 @@ from plsc.version import plsc_version
REQUIRED_PACKAGES
=
[
'sklearn'
,
'easydict'
,
'paddlepaddle>=1.6.2'
,
'Pillow'
,
'numpy'
,
'scipy'
'sklearn'
,
'easydict'
,
'Pillow'
,
'numpy'
,
'scipy'
]
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录