Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
FluidDoc
提交
a4200520
F
FluidDoc
项目概览
PaddlePaddle
/
FluidDoc
通知
5
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
23
列表
看板
标记
里程碑
合并请求
111
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
F
FluidDoc
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
23
Issue
23
列表
看板
标记
里程碑
合并请求
111
合并请求
111
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
a4200520
编写于
4月 22, 2019
作者:
J
Jiabin Yang
提交者:
GitHub
4月 22, 2019
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #829 from JiabinYang/add_dy_graph
Add dy graph
上级
925bd9de
d55f1fe4
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
44 addition
and
60 deletion
+44
-60
doc/fluid/user_guides/howto/dygraph/DyGraph.md
doc/fluid/user_guides/howto/dygraph/DyGraph.md
+44
-59
doc/fluid/user_guides/index_cn.rst
doc/fluid/user_guides/index_cn.rst
+0
-1
未找到文件。
doc/fluid/user_guides/howto/dygraph/DyGraph.md
浏览文件 @
a4200520
# 动态图机制-DyGraph
# 动态图机制-DyGraph
PaddlePaddle的DyGraph模式是一种动态的图执行机制,可以立即执行结果,无需构建整个图。同时,和以往静态的执行计算图不同,DyGraph模式下您的所有操作可以立即获得执行结果,而不必等待所构建的计算图全部执行完成,这样可以让您更加直观地构建PaddlePaddle下的深度学习任务,以及进行模型的调试,同时还减少了大量用于构建静态计算图的代码,使得您编写、调试网络的过程变得更加便捷。
PaddlePaddle的DyGraph模式是一种动态的图执行机制,可以立即执行结果,无需构建整个图。同时,和以往静态的执行计算图不同,DyGraph模式下您的所有操作可以立即获得执行结果,而不必等待所构建的计算图全部执行完成,这样可以让您更加直观地构建PaddlePaddle下的深度学习任务,以及进行模型的调试,同时还减少了大量用于构建静态计算图的代码,使得您编写、调试网络的过程变得更加便捷。
...
@@ -313,7 +315,6 @@ PaddlePaddle DyGraph是一个更加灵活易用的模式,可提供:
...
@@ -313,7 +315,6 @@ PaddlePaddle DyGraph是一个更加灵活易用的模式,可提供:
train_reader = paddle.batch(
train_reader = paddle.batch(
paddle.dataset.mnist.train(), batch_size= BATCH_SIZE, drop_last=True)
paddle.dataset.mnist.train(), batch_size= BATCH_SIZE, drop_last=True)
dy_param_init_value = {}
np.set_printoptions(precision=3, suppress=True)
np.set_printoptions(precision=3, suppress=True)
for epoch in range(epoch_num):
for epoch in range(epoch_num):
for batch_id, data in enumerate(train_reader()):
for batch_id, data in enumerate(train_reader()):
...
@@ -333,10 +334,6 @@ PaddlePaddle DyGraph是一个更加灵活易用的模式,可提供:
...
@@ -333,10 +334,6 @@ PaddlePaddle DyGraph是一个更加灵活易用的模式,可提供:
dy_out = avg_loss.numpy()
dy_out = avg_loss.numpy()
if epoch == 0 and batch_id == 0:
for param in mnist.parameters():
dy_param_init_value[param.name] = param.numpy()
avg_loss.backward()
avg_loss.backward()
sgd.minimize(avg_loss)
sgd.minimize(avg_loss)
mnist.clear_gradients()
mnist.clear_gradients()
...
@@ -390,11 +387,15 @@ PaddlePaddle DyGraph是一个更加灵活易用的模式,可提供:
...
@@ -390,11 +387,15 @@ PaddlePaddle DyGraph是一个更加灵活易用的模式,可提供:
在模型训练中可以使用
` fluid.dygraph.save_persistables(your_model_object.state_dict(), "save_dir")`
来保存
`your_model_object`
中所有的模型参数。也可以自定义需要保存的“参数名” - “参数对象”的Python Dictionary传入。
在模型训练中可以使用
` fluid.dygraph.save_persistables(your_model_object.state_dict(), "save_dir")`
来保存
`your_model_object`
中所有的模型参数。也可以自定义需要保存的“参数名” - “参数对象”的Python Dictionary传入。
同样可以使用
`your_modle_object.load_dict(
同样可以使用
`your_modle_object.load_dict(fluid.dygraph.load_persistables("save_dir"))`
接口来恢复保存的模型参数从而达到继续训练的目的。
fluid.dygraph.load_persistables("save_dir"))`
接口来恢复保存的模型参数从而达到继续训练的目的。
下面的代码展示了如何在“手写数字识别”任务中保存参数并且读取已经保存的参数来继续训练。
下面的代码展示了如何在“手写数字识别”任务中保存参数并且读取已经保存的参数来继续训练。
dy_param_init_value={}
for epoch in range(epoch_num):
for epoch in range(epoch_num):
for batch_id, data in enumerate(train_reader()):
for batch_id, data in enumerate(train_reader()):
dy_x_data = np.array(
dy_x_data = np.array(
...
@@ -420,9 +421,8 @@ PaddlePaddle DyGraph是一个更加灵活易用的模式,可提供:
...
@@ -420,9 +421,8 @@ PaddlePaddle DyGraph是一个更加灵活易用的模式,可提供:
for param in mnist.parameters():
for param in mnist.parameters():
dy_param_init_value[param.name] = param.numpy()
dy_param_init_value[param.name] = param.numpy()
mnist.load_dict(fluid.dygraph.load_persistables("save_dir"))
mnist.load_dict(fluid.dygraph.load_persistables("save_dir"))
restore = mnist.parameters()
restore = mnist.parameters()
# check save and load
# check save and load
success = True
success = True
for value in restore:
for value in restore:
...
@@ -536,56 +536,41 @@ PaddlePaddle DyGraph是一个更加灵活易用的模式,可提供:
...
@@ -536,56 +536,41 @@ PaddlePaddle DyGraph是一个更加灵活易用的模式,可提供:
## 编写兼容的模型
## 编写兼容的模型
以上一步中手写数字识别的例子为例,相同的模型代码可以直接在PaddlePaddle的
`Executor`
中执行:
以上一步中手写数字识别的例子为例,相同的模型代码可以直接在PaddlePaddle的
`Executor`
中执行:
exe = fluid.Executor(fluid.CPUPlace(
exe = fluid.Executor(fluid.CPUPlace(
) if not core.is_compiled_with_cuda() else fluid.CUDAPlace(0))
) if not core.is_compiled_with_cuda() else fluid.CUDAPlace(0))
mnist = MNIST("mnist")
mnist = MNIST("mnist")
sgd = SGDOptimizer(learning_rate=1e-3)
sgd = SGDOptimizer(learning_rate=1e-3)
train_reader = paddle.batch(
train_reader = paddle.batch(
paddle.dataset.mnist.train(), batch_size= BATCH_SIZE, drop_last=True)
paddle.dataset.mnist.train(), batch_size= BATCH_SIZE, drop_last=True)
img = fluid.layers.data(
img = fluid.layers.data(
name='pixel', shape=[1, 28, 28], dtype='float32')
name='pixel', shape=[1, 28, 28], dtype='float32')
label = fluid.layers.data(name='label', shape=[1], dtype='int64')
label = fluid.layers.data(name='label', shape=[1], dtype='int64')
cost = mnist(img)
cost = mnist(img)
loss = fluid.layers.cross_entropy(cost, label)
loss = fluid.layers.cross_entropy(cost, label)
avg_loss = fluid.layers.mean(loss)
avg_loss = fluid.layers.mean(loss)
sgd.minimize(avg_loss)
sgd.minimize(avg_loss)
# initialize params and fetch them
out = exe.run(fluid.default_startup_program())
static_param_init_value = {}
static_param_name_list = []
for epoch in range(epoch_num):
for param in mnist.parameters():
for batch_id, data in enumerate(train_reader()):
static_param_name_list.append(param.name)
static_x_data = np.array(
[x[0].reshape(1, 28, 28)
out = exe.run(fluid.default_startup_program(),
for x in data]).astype('float32')
fetch_list=static_param_name_list)
y_data = np.array(
[x[1] for x in data]).astype('int64').reshape([BATCH_SIZE, 1])
for i in range(len(static_param_name_list)):
static_param_init_value[static_param_name_list[i]] = out[i]
fetch_list = [avg_loss.name]
out = exe.run(
for epoch in range(epoch_num):
fluid.default_main_program(),
for batch_id, data in enumerate(train_reader()):
feed={"pixel": static_x_data,
static_x_data = np.array(
"label": y_data},
[x[0].reshape(1, 28, 28)
fetch_list=fetch_list)
for x in data]).astype('float32')
y_data = np.array(
static_out = out[0]
[x[1] for x in data]).astype('int64').reshape([BATCH_SIZE, 1])
fetch_list = [avg_loss.name]
fetch_list.extend(static_param_name_list)
out = exe.run(
fluid.default_main_program(),
feed={"pixel": static_x_data,
"label": y_data},
fetch_list=fetch_list)
static_param_value = {}
static_out = out[0]
for i in range(1, len(out)):
static_param_value[static_param_name_list[i - 1]] = out[
i]
doc/fluid/user_guides/index_cn.rst
浏览文件 @
a4200520
...
@@ -14,7 +14,6 @@
...
@@ -14,7 +14,6 @@
- `训练神经网络 <../user_guides/howto/training/index_cn.html>`_:介绍如何使用 Fluid 进行单机训练、多机训练、以及保存和载入模型变量
- `训练神经网络 <../user_guides/howto/training/index_cn.html>`_:介绍如何使用 Fluid 进行单机训练、多机训练、以及保存和载入模型变量
- `DyGraph模式 <../user_guides/howto/dygraph/DyGraph.html>`_:介绍在 Fluid 下使用DyGraph
- `DyGraph模式 <../user_guides/howto/dygraph/DyGraph.html>`_:介绍在 Fluid 下使用DyGraph
- `模型评估与调试 <../user_guides/howto/evaluation_and_debugging/index_cn.html>`_:介绍在 Fluid 下进行模型评估和调试的方法,包括:
- `模型评估与调试 <../user_guides/howto/evaluation_and_debugging/index_cn.html>`_:介绍在 Fluid 下进行模型评估和调试的方法,包括:
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录