Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
机器未来
Paddle
提交
36080ae8
P
Paddle
项目概览
机器未来
/
Paddle
与 Fork 源项目一致
Fork自
PaddlePaddle / Paddle
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
Paddle
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
36080ae8
编写于
7月 14, 2021
作者:
A
Aurelius84
提交者:
GitHub
7月 14, 2021
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[Dy2Stat] Ignore to convert paddle.no_grad (#34136)
* fix paddle.no_grad * fix paddle.no_grad
上级
b724703b
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
37 addition
and
6 deletion
+37
-6
python/paddle/fluid/dygraph/dygraph_to_static/grad_transformer.py
...addle/fluid/dygraph/dygraph_to_static/grad_transformer.py
+5
-0
python/paddle/fluid/tests/unittests/dygraph_to_static/test_grad.py
...ddle/fluid/tests/unittests/dygraph_to_static/test_grad.py
+32
-6
未找到文件。
python/paddle/fluid/dygraph/dygraph_to_static/grad_transformer.py
浏览文件 @
36080ae8
...
@@ -83,5 +83,10 @@ def is_grad_api_node(node):
...
@@ -83,5 +83,10 @@ def is_grad_api_node(node):
assert
isinstance
(
node
,
gast
.
Call
)
assert
isinstance
(
node
,
gast
.
Call
)
api_name
=
utils
.
ast_to_source_code
(
node
.
func
).
strip
()
api_name
=
utils
.
ast_to_source_code
(
node
.
func
).
strip
()
if
utils
.
is_paddle_api
(
node
):
if
utils
.
is_paddle_api
(
node
):
if
'no_grad'
in
api_name
:
warnings
.
warn
(
"paddle.no_grad is only supported for inference model, and not supported for training under @to_static."
)
return
False
return
api_name
.
endswith
(
"grad"
)
return
api_name
.
endswith
(
"grad"
)
return
False
return
False
python/paddle/fluid/tests/unittests/dygraph_to_static/test_grad.py
浏览文件 @
36080ae8
...
@@ -48,6 +48,22 @@ class GradLinearLayer(paddle.nn.Layer):
...
@@ -48,6 +48,22 @@ class GradLinearLayer(paddle.nn.Layer):
return
dx
return
dx
class
NoGradLinearLayer
(
paddle
.
nn
.
Layer
):
def
__init__
(
self
):
super
(
NoGradLinearLayer
,
self
).
__init__
()
self
.
linear
=
paddle
.
nn
.
Linear
(
5
,
5
,
bias_attr
=
False
)
@
paddle
.
jit
.
to_static
def
forward
(
self
,
x
):
x
.
stop_gradient
=
False
with
paddle
.
no_grad
():
y
=
self
.
linear
(
x
)
out
=
y
+
x
return
out
class
TestGrad
(
unittest
.
TestCase
):
class
TestGrad
(
unittest
.
TestCase
):
def
setUp
(
self
):
def
setUp
(
self
):
self
.
func
=
GradLayer
()
self
.
func
=
GradLayer
()
...
@@ -72,15 +88,16 @@ class TestGradLinear(TestGrad):
...
@@ -72,15 +88,16 @@ class TestGradLinear(TestGrad):
self
.
func
=
GradLinearLayer
()
self
.
func
=
GradLinearLayer
()
self
.
x
=
paddle
.
ones
(
shape
=
[
10
,
2
,
5
],
dtype
=
'float32'
)
self
.
x
=
paddle
.
ones
(
shape
=
[
10
,
2
,
5
],
dtype
=
'float32'
)
self
.
x
.
stop_gradient
=
False
self
.
x
.
stop_gradient
=
False
self
.
infer_model_path
=
"double_grad_infer_model"
self
.
train_model_path
=
"double_grad_train_model"
def
test_save_infer_program
(
self
):
def
test_save_infer_program
(
self
):
path
=
"double_grad_infer_model"
input_spec
=
[
input_spec
=
[
paddle
.
static
.
InputSpec
(
paddle
.
static
.
InputSpec
(
shape
=
[
10
,
2
,
5
],
dtype
=
'float32'
)
shape
=
[
10
,
2
,
5
],
dtype
=
'float32'
)
]
]
paddle
.
jit
.
save
(
self
.
func
,
path
,
input_spec
=
input_spec
)
paddle
.
jit
.
save
(
self
.
func
,
self
.
infer_model_
path
,
input_spec
=
input_spec
)
load_func
=
paddle
.
jit
.
load
(
path
)
load_func
=
paddle
.
jit
.
load
(
self
.
infer_model_
path
)
origin_res
=
self
.
func
(
self
.
x
).
numpy
()
origin_res
=
self
.
func
(
self
.
x
).
numpy
()
load_res
=
load_func
(
self
.
x
).
numpy
()
load_res
=
load_func
(
self
.
x
).
numpy
()
...
@@ -96,16 +113,25 @@ class TestGradLinear(TestGrad):
...
@@ -96,16 +113,25 @@ class TestGradLinear(TestGrad):
avg_loss
=
paddle
.
mean
(
paddle
.
abs
(
out
-
1
))
avg_loss
=
paddle
.
mean
(
paddle
.
abs
(
out
-
1
))
avg_loss
.
backward
()
avg_loss
.
backward
()
optimizer
.
minimize
(
avg_loss
)
optimizer
.
minimize
(
avg_loss
)
print
(
self
.
x
.
grad
.
mean
())
self
.
func
.
clear_gradients
()
self
.
func
.
clear_gradients
()
path
=
"double_grad_train_model"
paddle
.
jit
.
save
(
self
.
func
,
self
.
train_model_path
)
paddle
.
jit
.
save
(
self
.
func
,
path
)
load_func
=
paddle
.
jit
.
load
(
self
.
train_model_path
)
load_func
=
paddle
.
jit
.
load
(
path
)
origin_res
=
self
.
func
(
self
.
x
).
numpy
()
origin_res
=
self
.
func
(
self
.
x
).
numpy
()
load_res
=
load_func
(
self
.
x
).
numpy
()
load_res
=
load_func
(
self
.
x
).
numpy
()
self
.
assertTrue
(
np
.
allclose
(
origin_res
,
load_res
))
self
.
assertTrue
(
np
.
allclose
(
origin_res
,
load_res
))
class
TestNoGradLinear
(
TestGradLinear
):
def
setUp
(
self
):
self
.
func
=
NoGradLinearLayer
()
self
.
x
=
paddle
.
ones
(
shape
=
[
10
,
2
,
5
],
dtype
=
'float32'
)
self
.
x
.
stop_gradient
=
False
self
.
infer_model_path
=
"no_grad_infer_model"
self
.
train_model_path
=
"no_grad_train_model"
if
__name__
==
'__main__'
:
if
__name__
==
'__main__'
:
unittest
.
main
()
unittest
.
main
()
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录