Skip to content

Commit ad78981

Browse files
authored
Merge pull request #1985 from QiJune/feature/refactor_use_concepts_doc
Feature/refactor use concepts doc
2 parents 6b686c4 + e7ae0ec commit ad78981

File tree

7 files changed

+203
-237
lines changed

7 files changed

+203
-237
lines changed

doc/getstarted/concepts/src/train.py

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import paddle.v2 as paddle
2+
import numpy as np
3+
4+
# init paddle
5+
paddle.init(use_gpu=False)
6+
7+
# network config
8+
x = paddle.layer.data(name='x', type=paddle.data_type.dense_vector(2))
9+
y_predict = paddle.layer.fc(input=x, size=1, act=paddle.activation.Linear())
10+
y = paddle.layer.data(name='y', type=paddle.data_type.dense_vector(1))
11+
cost = paddle.layer.mse_cost(input=y_predict, label=y)
12+
13+
# create parameters
14+
parameters = paddle.parameters.create(cost)
15+
# create optimizer
16+
optimizer = paddle.optimizer.Momentum(momentum=0)
17+
# create trainer
18+
trainer = paddle.trainer.SGD(cost=cost,
19+
parameters=parameters,
20+
update_equation=optimizer)
21+
22+
23+
# event_handler to print training info
24+
def event_handler(event):
25+
if isinstance(event, paddle.event.EndIteration):
26+
if event.batch_id % 1 == 0:
27+
print "Pass %d, Batch %d, Cost %f" % (event.pass_id, event.batch_id,
28+
event.cost)
29+
30+
31+
# define training dataset reader
32+
def train_reader():
33+
train_x = np.array([[1, 1], [1, 2], [3, 4], [5, 2]])
34+
train_y = np.array([-2, -3, -7, -7])
35+
36+
def reader():
37+
for i in xrange(train_y.shape[0]):
38+
yield train_x[i], train_y[i]
39+
40+
return reader
41+
42+
43+
# define feeding map
44+
feeding = {'x': 0, 'y': 1}
45+
46+
# training
47+
trainer.train(
48+
reader=paddle.batch(
49+
train_reader(), batch_size=1),
50+
feeding=feeding,
51+
event_handler=event_handler,
52+
num_passes=100)
Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
1+
############
2+
基本使用概念
3+
############
4+
5+
PaddlePaddle是源于百度的一个深度学习平台。PaddlePaddle为深度学习研究人员提供了丰富的API,可以轻松地完成神经网络配置,模型训练等任务。
6+
这里将介绍PaddlePaddle的基本使用概念,并且展示了如何利用PaddlePaddle来解决一个经典的线性回归问题。
7+
在使用该文档之前,请参考 `安装文档 <../build_and_install/index_cn.html>`_ 完成PaddlePaddle的安装。
8+
9+
10+
配置网络
11+
============
12+
13+
加载PaddlePaddle
14+
----------------------
15+
16+
在进行网络配置之前,首先需要加载相应的Python库,并进行初始化操作。
17+
18+
.. code-block:: bash
19+
20+
import paddle.v2 as paddle
21+
import numpy as np
22+
paddle.init(use_gpu=False)
23+
24+
25+
搭建神经网络
26+
-----------------------
27+
28+
搭建神经网络就像使用积木搭建宝塔一样。在PaddlePaddle中,layer是我们的积木,而神经网络是我们要搭建的宝塔。我们使用不同的layer进行组合,来搭建神经网络。
29+
宝塔的底端需要坚实的基座来支撑,同样,神经网络也需要一些特定的layer作为输入接口,来完成网络的训练。
30+
31+
例如,我们可以定义如下layer来描述神经网络的输入:
32+
33+
.. code-block:: bash
34+
35+
x = paddle.layer.data(name='x', type=paddle.data_type.dense_vector(2))
36+
y = paddle.layer.data(name='y', type=paddle.data_type.dense_vector(1))
37+
38+
其中x表示输入数据是一个维度为2的稠密向量,y表示输入数据是一个维度为1的稠密向量。
39+
40+
PaddlePaddle支持不同类型的输入数据,主要包括四种类型,和三种序列模式。
41+
42+
四种数据类型:
43+
44+
* dense_vector:稠密的浮点数向量。
45+
* sparse_binary_vector:稀疏的01向量,即大部分值为0,但有值的地方必须为1。
46+
* sparse_float_vector:稀疏的向量,即大部分值为0,但有值的部分可以是任何浮点数。
47+
* integer:整数标签。
48+
49+
三种序列模式:
50+
51+
* SequenceType.NO_SEQUENCE:不是一条序列
52+
* SequenceType.SEQUENCE:是一条时间序列
53+
* SequenceType.SUB_SEQUENCE: 是一条时间序列,且序列的每一个元素还是一个时间序列。
54+
55+
不同的数据类型和序列模式返回的格式不同,列表如下:
56+
57+
+----------------------+---------------------+-----------------------------------+------------------------------------------------+
58+
| | NO_SEQUENCE | SEQUENCE | SUB_SEQUENCE |
59+
+======================+=====================+===================================+================================================+
60+
| dense_vector | [f, f, ...] | [[f, ...], [f, ...], ...] | [[[f, ...], ...], [[f, ...], ...],...] |
61+
+----------------------+---------------------+-----------------------------------+------------------------------------------------+
62+
| sparse_binary_vector | [i, i, ...] | [[i, ...], [i, ...], ...] | [[[i, ...], ...], [[i, ...], ...],...] |
63+
+----------------------+---------------------+-----------------------------------+------------------------------------------------+
64+
| sparse_float_vector | [(i,f), (i,f), ...] | [[(i,f), ...], [(i,f), ...], ...] | [[[(i,f), ...], ...], [[(i,f), ...], ...],...] |
65+
+----------------------+---------------------+-----------------------------------+------------------------------------------------+
66+
| integer_value | i | [i, i, ...] | [[i, ...], [i, ...], ...] |
67+
+----------------------+---------------------+-----------------------------------+------------------------------------------------+
68+
69+
其中,f代表一个浮点数,i代表一个整数。
70+
71+
注意:对sparse_binary_vector和sparse_float_vector,PaddlePaddle存的是有值位置的索引。例如,
72+
73+
- 对一个5维非序列的稀疏01向量 ``[0, 1, 1, 0, 0]`` ,类型是sparse_binary_vector,返回的是 ``[1, 2]`` 。
74+
- 对一个5维非序列的稀疏浮点向量 ``[0, 0.5, 0.7, 0, 0]`` ,类型是sparse_float_vector,返回的是 ``[(1, 0.5), (2, 0.7)]`` 。
75+
76+
77+
在定义输入layer之后,我们可以使用其他layer进行组合。在组合时,需要指定layer的输入来源。
78+
79+
例如,我们可以定义如下的layer组合:
80+
81+
.. code-block:: bash
82+
83+
y_predict = paddle.layer.fc(input=x, size=1, act=paddle.activation.Linear())
84+
cost = paddle.layer.mse_cost(input=y_predict, label=y)
85+
86+
其中,x与y为之前描述的输入层;而y_predict是接收x作为输入,接上一个全连接层;cost接收y_predict与y作为输入,接上均方误差层。
87+
88+
最后一层cost中记录了神经网络的所有拓扑结构,通过组合不同的layer,我们即可完成神经网络的搭建。
89+
90+
91+
训练模型
92+
============
93+
94+
在完成神经网络的搭建之后,我们首先需要根据神经网络结构来创建所需要优化的parameters,并创建optimizer。
95+
之后,我们可以创建trainer来对网络进行训练。
96+
97+
.. code-block:: bash
98+
99+
parameters = paddle.parameters.create(cost)
100+
optimizer = paddle.optimizer.Momentum(momentum=0)
101+
trainer = paddle.trainer.SGD(cost=cost,
102+
parameters=parameters,
103+
update_equation=optimizer)
104+
105+
其中,trainer接收三个参数,包括神经网络拓扑结构、神经网络参数以及迭代方程。
106+
107+
在搭建神经网络的过程中,我们仅仅对神经网络的输入进行了描述。而trainer需要读取训练数据进行训练,PaddlePaddle中通过reader来加载数据。
108+
109+
.. code-block:: bash
110+
111+
# define training dataset reader
112+
def train_reader():
113+
train_x = np.array([[1, 1], [1, 2], [3, 4], [5, 2]])
114+
train_y = np.array([-2, -3, -7, -7])
115+
def reader():
116+
for i in xrange(train_y.shape[0]):
117+
yield train_x[i], train_y[i]
118+
return reader
119+
120+
最终我们可以调用trainer的train方法启动训练:
121+
122+
.. code-block:: bash
123+
124+
# define feeding map
125+
feeding = {'x': 0, 'y': 1}
126+
127+
# event_handler to print training info
128+
def event_handler(event):
129+
if isinstance(event, paddle.event.EndIteration):
130+
if event.batch_id % 1 == 0:
131+
print "Pass %d, Batch %d, Cost %f" % (
132+
event.pass_id, event.batch_id, event.cost)
133+
# training
134+
trainer.train(
135+
reader=paddle.batch(train_reader(), batch_size=1),
136+
feeding=feeding,
137+
event_handler=event_handler,
138+
num_passes=100)
139+
140+
关于PaddlePaddle的更多使用方法请参考 `进阶指南 <../../howto/index_cn.html>`_。
141+
142+
线性回归完整示例
143+
==============
144+
145+
下面给出在三维空间中使用线性回归拟合一条直线的例子:
146+
147+
.. literalinclude:: src/train.py
148+
:linenos:
149+
150+
有关线性回归的实际应用,可以参考PaddlePaddle book的 `第一章节 <http://book.paddlepaddle.org/index.html>`_。

doc/getstarted/index_cn.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,6 @@
55
:maxdepth: 1
66

77
build_and_install/index_cn.rst
8+
concepts/use_concepts_cn.rst
89

910
- `深度学习入门课程 <http://book.paddlepaddle.org/>`_

doc/howto/index_cn.rst

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
:maxdepth: 1
99

1010
usage/cmd_parameter/index_cn.rst
11-
usage/concepts/use_concepts_cn.rst
1211
usage/cluster/cluster_train_cn.md
1312
usage/k8s/k8s_basis_cn.md
1413
usage/k8s/k8s_cn.md

doc/howto/usage/concepts/src/pserver_topology.dot

Lines changed: 0 additions & 68 deletions
This file was deleted.

doc/howto/usage/concepts/src/trainer_config.py

Lines changed: 0 additions & 29 deletions
This file was deleted.

0 commit comments

Comments
 (0)