Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
Paddle
提交
926f10b8
P
Paddle
项目概览
PaddlePaddle
/
Paddle
1 年多 前同步成功
通知
2302
Star
20931
Fork
5422
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1423
列表
看板
标记
里程碑
合并请求
543
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
Paddle
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1,423
Issue
1,423
列表
看板
标记
里程碑
合并请求
543
合并请求
543
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
926f10b8
编写于
11月 21, 2016
作者:
T
tianbingsz
提交者:
GitHub
11月 21, 2016
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Update index.md
Thanks for @wangkuiyi comments.
上级
b34ab48b
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
11 addition
and
14 deletion
+11
-14
doc_cn/introduction/index.md
doc_cn/introduction/index.md
+11
-14
未找到文件。
doc_cn/introduction/index.md
浏览文件 @
926f10b8
# 简介
PaddlePaddle 源于百度的开源深度学习平台,有如下几个特点。首先,简单易用的:用户可以通过简单的十几行配置脚本搭建经典的神经网络模型。其次,高效强大的:PaddlePaddle可以支撑复杂集群环境下超大模型的训练,令你受益于深度学习的前沿成果。最后,在百度内部,已经有大量产品线使用了基于PaddlePaddle的深度学习技术。
这份简短的介绍将像你展示如何利用PaddlePaddle来解决一个经典的机器学习问题。
PaddlePaddle是源于百度的一个深度学习平台。这份简短的介绍将向你展示如何利用PaddlePaddle来解决一个经典的线性回归问题。
## 1. 一个经典的任务
让我们从一个基础问题开始:
<a
href=
"https://www.baidu.com/s?wd=单变量线性回归"
>
单变量的线性回归
</a>
。问题假定观测到了一批二维空间上的点
`(x, y) `
,并且已知
`x`
和
`y`
之间存在着某种线性关系,我们的目标是通过观测数据来学习这个线性关系。作为一个简单基础的模型,线性回归有着广泛的应用场景。以一个资产定价的问题为例,
`x`
对应于房屋的大小,
`y`
对应于房屋价格。我们可以通过观察市场上房屋销售的情况拟合
`x`
和
`y`
之间的关系,从而为新房屋的定价提供预测和参考
。
我们展示如何用PaddlePaddle解决
<a
href=
"https://www.baidu.com/s?wd=单变量线性回归"
>
单变量的线性回归
</a>
问题。线性回归的输入是一批点
`(x, y) `
,其中
`y = wx + b + ε`
, 而 ε 是一个符合高斯分布的随机变量。线性回归的输出是从这批点估计出来的参数 w 和 b
。
一个例子是房产估值。我们假设房产的价格(y)是其大小(x)的一个线性函数,那么我们可以通过收集市场上房子的大小和价格,用来估计线性函数的参数w 和 b。
## 2. 准备数据
假设变量
`
X`
和
`Y`
的真实关系为:
`Y = 2X + 0.3`
,这里展示如何使用观测数据来拟合这一线性关系。首先,Python代码将随机产生2000个观测点,作为PaddlePaddle的输入。产生PaddlePaddle的输入数据和写一段普通的Python脚本几乎一样,你唯一需要增加的就是定义输入数据的类型
。
假设变量
`
x`
和
`y`
的真实关系为:
`y = 2x + 0.3 + ε`
,这里展示如何使用观测数据来拟合这一线性关系。首先,Python代码将随机产生2000个观测点,作为线性回归的输入。下面脚本符合PaddlePaddle期待的读取数据的Python程序的模式
。
```
python
# -*- coding:utf-8 -*-
# dataprovider.py
from
paddle.trainer.PyDataProvider2
import
*
import
random
...
...
@@ -29,12 +27,11 @@ def process(settings, input_file):
## 3. 训练模型
为了还原
`
Y = 2X + 0.3`
,我们先从一条随机的直线
`Y' = wX + b`
开始,然后利用观测数据调整
`w`
和
`b`
使得
`Y'`
和
`Y
`
的差距不断减小,最终趋于接近。这个过程就是模型的训练过程,而
`w`
和
`b`
就是模型的参数,即我们的训练目标。
为了还原
`
y = 2x + 0.3`
,我们先从一条随机的直线
`y' = wx + b`
开始,然后利用观测数据调整
`w`
和
`b`
使得
`y'`
和
`y
`
的差距不断减小,最终趋于接近。这个过程就是模型的训练过程,而
`w`
和
`b`
就是模型的参数,即我们的训练目标。
在PaddlePaddle里,该模型的网络配置如下。
```
python
# -*- coding:utf-8 -*-
# trainer_config.py
from
paddle.trainer_config_helpers
import
*
...
...
@@ -50,10 +47,10 @@ settings(batch_size=12, learning_rate=1e-3, learning_method=MomentumOptimizer())
# 3. 神经网络配置
x
=
data_layer
(
name
=
'x'
,
size
=
1
)
y
=
data_layer
(
name
=
'y'
,
size
=
1
)
# 线性计算网络层:
y_predict
= wx + b
y_predict
=
fc_layer
(
input
=
x
,
param_attr
=
ParamAttr
(
name
=
'w'
),
size
=
1
,
act
=
LinearActivation
(),
bias_attr
=
ParamAttr
(
name
=
'b'
))
# 计算误差函数,即
y_predict
和真实 y 之间的距离
cost
=
regression_cost
(
input
=
y_predict
,
label
=
y
)
# 线性计算网络层:
ȳ
= wx + b
ȳ
=
fc_layer
(
input
=
x
,
param_attr
=
ParamAttr
(
name
=
'w'
),
size
=
1
,
act
=
LinearActivation
(),
bias_attr
=
ParamAttr
(
name
=
'b'
))
# 计算误差函数,即
ȳ
和真实 y 之间的距离
cost
=
regression_cost
(
input
=
ȳ
,
label
=
y
)
outputs
(
cost
)
```
这段简短的配置展示了PaddlePaddle的基本用法:
...
...
@@ -63,7 +60,7 @@ outputs(cost)
-
第二部分主要是选择学习算法,它定义了模型参数改变的规则。PaddlePaddle提供了很多优秀的学习算法,这里使用一个基于momentum的随机梯度下降(SGD)算法,该算法每批量(batch)读取12个采样数据进行随机梯度计算来更新更新。
-
最后一部分是神经网络的配置。由于PaddlePaddle已经实现了丰富的网络层,所以很多时候你需要做的只是定义正确的网络层并把它们连接起来。这里使用了三种网络单元:
-
**数据层**
:数据层
`data_layer`
是神经网络的入口,它读入数据并将它们传输到接下来的网络层。这里数据层有两个,分别对应于变量
`
X`
和
`Y
`
。
-
**数据层**
:数据层
`data_layer`
是神经网络的入口,它读入数据并将它们传输到接下来的网络层。这里数据层有两个,分别对应于变量
`
x`
和
`y
`
。
-
**全连接层**
:全连接层
`fc_layer`
是基础的计算单元,这里利用它建模变量之间的线性关系。计算单元是神经网络的核心,PaddlePaddle支持大量的计算单元和任意深度的网络连接,从而可以拟合任意的函数来学习复杂的数据关系。
-
**回归误差代价层**
:回归误差代价层
`regression_cost`
是众多误差代价函数层的一种,它们在训练过程作为网络的出口,用来计算模型的误差,是模型参数优化的目标函数。
...
...
@@ -72,7 +69,7 @@ outputs(cost)
paddle train --config=trainer_config.py --save_dir=./output --num_passes=30
```
PaddlePaddle将在观测数据集上迭代训练30轮,并将每轮的模型结果存放在
`./output`
路径下。从输出日志可以看到,随着轮数增加误差代价函数的输出在不断的减小,这意味着模型在训练数据上不断的改进,直到逼近真实解:
`
Y = 2X
+ 0.3 `
PaddlePaddle将在观测数据集上迭代训练30轮,并将每轮的模型结果存放在
`./output`
路径下。从输出日志可以看到,随着轮数增加误差代价函数的输出在不断的减小,这意味着模型在训练数据上不断的改进,直到逼近真实解:
`
y = 2x
+ 0.3 `
## 4. 模型检验
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录