Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
book
提交
e85a459c
B
book
项目概览
PaddlePaddle
/
book
通知
16
Star
4
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
40
列表
看板
标记
里程碑
合并请求
37
Wiki
5
Wiki
分析
仓库
DevOps
项目成员
Pages
B
book
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
40
Issue
40
列表
看板
标记
里程碑
合并请求
37
合并请求
37
Pages
分析
分析
仓库分析
DevOps
Wiki
5
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
e85a459c
编写于
2月 15, 2019
作者:
C
ceci
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update fit a line
上级
d13cdb14
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
28 addition
and
22 deletion
+28
-22
01.fit_a_line/README.cn.md
01.fit_a_line/README.cn.md
+14
-11
01.fit_a_line/index.cn.html
01.fit_a_line/index.cn.html
+14
-11
未找到文件。
01.fit_a_line/README.cn.md
浏览文件 @
e85a459c
...
...
@@ -148,7 +148,7 @@ data = numpy.fromfile(filename, sep=' ') # 读取原始数据
data
=
data
.
reshape
(
data
.
shape
[
0
]
//
feature_num
,
feature_num
)
maximums
,
minimums
,
avgs
=
data
.
max
(
axis
=
0
),
data
.
min
(
axis
=
0
),
data
.
sum
(
axis
=
0
)
/
data
.
shape
[
0
]
for
i
in
six
.
moves
.
range
(
feature_num
-
1
):
for
i
in
six
.
moves
.
range
(
feature_num
-
1
):
# six.moves可以兼容python2和python3
data
[:,
i
]
=
(
data
[:,
i
]
-
avgs
[
i
])
/
(
maximums
[
i
]
-
minimums
[
i
])
ratio
=
0.8
# 训练集和验证集的划分比例
...
...
@@ -165,12 +165,15 @@ x = fluid.layers.data(name='x', shape=[13], dtype='float32') # 定义输入的
y
=
fluid
.
layers
.
data
(
name
=
'y'
,
shape
=
[
1
],
dtype
=
'float32'
)
# 定义输出的形状和数据类型
y_predict
=
fluid
.
layers
.
fc
(
input
=
x
,
size
=
1
,
act
=
None
)
# 连接输入和输出的全连接层
main_program
=
fluid
.
[
default_main_program
](
http
:
//
www
.
paddlepaddle
.
org
/
documentation
/
docs
/
zh
/
develop
/
api_cn
/
fluid_cn
.
html
#default-main-program)()
startup_program
=
fluid
.
[
default_startup_program
](
http
:
//
www
.
paddlepaddle
.
org
/
documentation
/
docs
/
zh
/
develop
/
api_cn
/
fluid_cn
.
html
#default-startup-program)()
main_program
=
fluid
.
default_main_program
()
# 获取默认/全局主函数
startup_program
=
fluid
.
default_startup_program
()
# 获取默认/全局启动程序
cost
=
fluid
.
layers
.
square_error_cost
(
input
=
y_predict
,
label
=
y
)
# 利用标签数据和输出的预测数据估计方差
avg_loss
=
fluid
.
layers
.
mean
(
cost
)
# 对方差求均值,得到平均损失
```
详细资料请参考:
[
fluid.default_main_program
](
http://www.paddlepaddle.org/documentation/docs/zh/develop/api_cn/fluid_cn.html#default-main-program
)
[
fluid.default_startup_program
](
http://www.paddlepaddle.org/documentation/docs/zh/develop/api_cn/fluid_cn.html#default-startup-program
)
### Optimizer Function 配置
...
...
@@ -180,7 +183,9 @@ avg_loss = fluid.layers.mean(cost) # 对方差求均值,得到平均损失
sgd_optimizer
=
fluid
.
optimizer
.
SGD
(
learning_rate
=
0.001
)
sgd_optimizer
.
minimize
(
avg_loss
)
#克隆main_program得到test_program,有些operator在训练和测试之间的操作是不同的,例如batch_norm,使用参数for_test来区分该程序是用来训练还是用来测试,该api不会删除任何操作符,请在backward和optimization之前使用。
#克隆main_program得到test_program
#有些operator在训练和测试之间的操作是不同的,例如batch_norm,使用参数for_test来区分该程序是用来训练还是用来测试
#该api不会删除任何操作符,请在backward和optimization之前使用
test_program
=
main_program
.
clone
(
for_test
=
True
)
```
...
...
@@ -191,10 +196,12 @@ test_program = main_program.clone(for_test=True)
use_cuda
=
False
place
=
fluid
.
CUDAPlace
(
0
)
if
use_cuda
else
fluid
.
CPUPlace
()
# 指明executor的执行场所
###executor可以接受传入的program,并根据feed map(输入映射表)和fetch list(结果获取表)向program中添加数据输入算子和结果获取算子。使用close()关闭该executor,调用run(...)执行program
,更多使用详情请参考[fluid.executor](http://www.paddlepaddle.org/documentation/docs/zh/develop/api_cn/fluid_cn.html#permalink-15-executor)
###executor可以接受传入的program,并根据feed map(输入映射表)和fetch list(结果获取表)向program中添加数据输入算子和结果获取算子。使用close()关闭该executor,调用run(...)执行program
。
exe
=
fluid
.
Executor
(
place
)
```
详细资料请参考:
[
fluid.executor
](
http://www.paddlepaddle.org/documentation/docs/zh/develop/api_cn/fluid_cn.html#permalink-15-executor
)
### 创建训练过程
训练需要有一个训练程序和一些必要参数,并构建了一个获取训练过程中测试误差的函数。必要参数有executor,program,reader,feeder,fetch_list,executor表示之前创建的执行器,program表示执行器所执行的program,是之前创建的program,如果该项参数没有给定的话则默认使用defalut_main_program,reader表示读取到的数据,feeder表示前向输入的变量,fetch_list表示用户想得到的变量或者命名的结果。
...
...
@@ -202,7 +209,6 @@ exe = fluid.Executor(place)
```
python
num_epochs
=
100
# For training test cost
def
train_test
(
executor
,
program
,
reader
,
feeder
,
fetch_list
):
accumulated
=
1
*
[
0
]
count
=
0
...
...
@@ -228,7 +234,6 @@ print("%s', out %f" % (test_prompt, out))
除此之外,还可以通过画图,来展现
`训练进程`
:
```
python
# plot data
from
paddle.utils.plot
import
ploter
plot_prompt
=
ploter
(
train_prompt
,
test_prompt
)
...
...
@@ -241,7 +246,6 @@ plot_prompt = ploter(train_prompt, test_prompt)
```
python
%
matplotlib
inline
# Specify the directory to save the parameters
params_dirname
=
"fit_a_line.inference.model"
feeder
=
fluid
.
DataFeeder
(
place
=
place
,
feed_list
=
[
x
,
y
])
naive_exe
=
fluid
.
Executor
(
place
)
...
...
@@ -260,10 +264,10 @@ for pass_id in range(num_epochs):
avg_loss_value
,
=
exe
.
run
(
main_program
,
feed
=
feeder
.
feed
(
data_train
),
fetch_list
=
[
avg_loss
])
if
step
%
10
==
0
:
# record a train cost every 10 batches
if
step
%
10
==
0
:
# 每10个批次记录一下训练损失
plot_prompt
.
append
(
train_prompt
,
step
,
avg_loss_value
[
0
])
plot_prompt
.
plot
()
if
step
%
100
==
0
:
#
record a test cost every 100 batches
if
step
%
100
==
0
:
#
每100批次记录一下测试损失
test_metics
=
train_test
(
executor
=
exe_test
,
program
=
test_program
,
reader
=
test_reader
,
...
...
@@ -271,7 +275,6 @@ for pass_id in range(num_epochs):
feeder
=
feeder
)
plot_prompt
.
append
(
test_prompt
,
step
,
test_metics
[
0
])
plot_prompt
.
plot
()
# If the accuracy is good enough, we can stop the training.
if
test_metics
[
0
]
<
10.0
:
# 如果准确率达到要求,则停止训练
break
...
...
01.fit_a_line/index.cn.html
浏览文件 @
e85a459c
...
...
@@ -190,7 +190,7 @@ data = numpy.fromfile(filename, sep=' ') # 读取原始数据
data = data.reshape(data.shape[0] // feature_num, feature_num)
maximums, minimums, avgs = data.max(axis=0), data.min(axis=0), data.sum(axis=0)/data.shape[0]
for i in six.moves.range(feature_num-1):
for i in six.moves.range(feature_num-1):
# six.moves可以兼容python2和python3
data[:, i] = (data[:, i] - avgs[i]) / (maximums[i] - minimums[i])
ratio = 0.8 # 训练集和验证集的划分比例
...
...
@@ -207,12 +207,15 @@ x = fluid.layers.data(name='x', shape=[13], dtype='float32') # 定义输入的
y = fluid.layers.data(name='y', shape=[1], dtype='float32') # 定义输出的形状和数据类型
y_predict = fluid.layers.fc(input=x, size=1, act=None) # 连接输入和输出的全连接层
main_program = fluid.
[default_main_program](http://www.paddlepaddle.org/documentation/docs/zh/develop/api_cn/fluid_cn.html#default-main-program)()
startup_program = fluid.
[default_startup_program](http://www.paddlepaddle.org/documentation/docs/zh/develop/api_cn/fluid_cn.html#default-startup-program)()
main_program = fluid.
default_main_program() # 获取默认/全局主函数
startup_program = fluid.
default_startup_program() # 获取默认/全局启动程序
cost = fluid.layers.square_error_cost(input=y_predict, label=y) # 利用标签数据和输出的预测数据估计方差
avg_loss = fluid.layers.mean(cost) # 对方差求均值,得到平均损失
```
详细资料请参考:
[fluid.default_main_program](http://www.paddlepaddle.org/documentation/docs/zh/develop/api_cn/fluid_cn.html#default-main-program)
[fluid.default_startup_program](http://www.paddlepaddle.org/documentation/docs/zh/develop/api_cn/fluid_cn.html#default-startup-program)
### Optimizer Function 配置
...
...
@@ -222,7 +225,9 @@ avg_loss = fluid.layers.mean(cost) # 对方差求均值,得到平均损失
sgd_optimizer = fluid.optimizer.SGD(learning_rate=0.001)
sgd_optimizer.minimize(avg_loss)
#克隆main_program得到test_program,有些operator在训练和测试之间的操作是不同的,例如batch_norm,使用参数for_test来区分该程序是用来训练还是用来测试,该api不会删除任何操作符,请在backward和optimization之前使用。
#克隆main_program得到test_program
#有些operator在训练和测试之间的操作是不同的,例如batch_norm,使用参数for_test来区分该程序是用来训练还是用来测试
#该api不会删除任何操作符,请在backward和optimization之前使用
test_program = main_program.clone(for_test=True)
```
...
...
@@ -233,10 +238,12 @@ test_program = main_program.clone(for_test=True)
use_cuda = False
place = fluid.CUDAPlace(0) if use_cuda else fluid.CPUPlace() # 指明executor的执行场所
###executor可以接受传入的program,并根据feed map(输入映射表)和fetch list(结果获取表)向program中添加数据输入算子和结果获取算子。使用close()关闭该executor,调用run(...)执行program
,更多使用详情请参考[fluid.executor](http://www.paddlepaddle.org/documentation/docs/zh/develop/api_cn/fluid_cn.html#permalink-15-executor)
###executor可以接受传入的program,并根据feed map(输入映射表)和fetch list(结果获取表)向program中添加数据输入算子和结果获取算子。使用close()关闭该executor,调用run(...)执行program
。
exe = fluid.Executor(place)
```
详细资料请参考:
[fluid.executor](http://www.paddlepaddle.org/documentation/docs/zh/develop/api_cn/fluid_cn.html#permalink-15-executor)
### 创建训练过程
训练需要有一个训练程序和一些必要参数,并构建了一个获取训练过程中测试误差的函数。必要参数有executor,program,reader,feeder,fetch_list,executor表示之前创建的执行器,program表示执行器所执行的program,是之前创建的program,如果该项参数没有给定的话则默认使用defalut_main_program,reader表示读取到的数据,feeder表示前向输入的变量,fetch_list表示用户想得到的变量或者命名的结果。
...
...
@@ -244,7 +251,6 @@ exe = fluid.Executor(place)
```python
num_epochs = 100
# For training test cost
def train_test(executor, program, reader, feeder, fetch_list):
accumulated = 1 * [0]
count = 0
...
...
@@ -270,7 +276,6 @@ print("%s', out %f" % (test_prompt, out))
除此之外,还可以通过画图,来展现`训练进程`:
```python
# plot data
from paddle.utils.plot import ploter
plot_prompt = ploter(train_prompt, test_prompt)
...
...
@@ -283,7 +288,6 @@ plot_prompt = ploter(train_prompt, test_prompt)
```python
%matplotlib inline
# Specify the directory to save the parameters
params_dirname = "fit_a_line.inference.model"
feeder = fluid.DataFeeder(place=place, feed_list=[x, y])
naive_exe = fluid.Executor(place)
...
...
@@ -302,10 +306,10 @@ for pass_id in range(num_epochs):
avg_loss_value, = exe.run(main_program,
feed=feeder.feed(data_train),
fetch_list=[avg_loss])
if step % 10 == 0:
# record a train cost every 10 batches
if step % 10 == 0:
# 每10个批次记录一下训练损失
plot_prompt.append(train_prompt, step, avg_loss_value[0])
plot_prompt.plot()
if step % 100 == 0: #
record a test cost every 100 batches
if step % 100 == 0: #
每100批次记录一下测试损失
test_metics = train_test(executor=exe_test,
program=test_program,
reader=test_reader,
...
...
@@ -313,7 +317,6 @@ for pass_id in range(num_epochs):
feeder=feeder)
plot_prompt.append(test_prompt, step, test_metics[0])
plot_prompt.plot()
# If the accuracy is good enough, we can stop the training.
if test_metics[0]
<
10.0
:
#
如果准确率达到要求
,
则停止训练
break
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录