Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
机器未来
Paddle
提交
ff061c25
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看板
体验新版 GitCode,发现更多精彩内容 >>
提交
ff061c25
编写于
9月 29, 2017
作者:
L
Luo Tao
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
refine "Testing Backward Operators" in new_op_cn/en.md
上级
99130c6e
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
21 addition
and
49 deletion
+21
-49
doc/howto/dev/new_op_cn.md
doc/howto/dev/new_op_cn.md
+11
-25
doc/howto/dev/new_op_en.md
doc/howto/dev/new_op_en.md
+10
-24
未找到文件。
doc/howto/dev/new_op_cn.md
浏览文件 @
ff061c25
...
...
@@ -285,41 +285,27 @@ class TestMulGradOp(GradientChecker):
'Y'
:
np
.
random
.
random
((
84
,
100
)).
astype
(
"float32"
)
}
def
test_cpu_gpu_compare
(
self
):
self
.
compare_grad
(
self
.
op
,
self
.
inputs
)
def
test_normal
(
self
):
def
test_check_grad_normal
(
self
):
# mul op will enlarge the relative error
self
.
check_grad
(
self
.
op
,
self
.
inputs
,
[
"X"
,
"Y"
],
"Out"
,
max_relative_error
=
0.5
)
self
.
check_grad
([
'X'
,
'Y'
],
'Out'
,
max_relative_error
=
0.5
)
def
test_
ign
ore_x
(
self
):
def
test_
check_grad_ing
ore_x
(
self
):
self
.
check_grad
(
self
.
op
,
self
.
inputs
,
[
"Y"
],
"Out"
,
max_relative_error
=
0.5
,
no_grad_set
=
{
"X"
})
[
'Y'
],
'Out'
,
max_relative_error
=
0.5
,
no_grad_set
=
set
(
"X"
))
def
test_
ign
ore_y
(
self
):
def
test_
check_grad_ing
ore_y
(
self
):
self
.
check_grad
(
self
.
op
,
self
.
inputs
,
[
"X"
],
"Out"
,
max_relative_error
=
0.5
,
no_grad_set
=
{
"Y"
})
[
'X'
],
'Out'
,
max_relative_error
=
0.5
,
no_grad_set
=
set
(
'Y'
))
```
下面解释代码中一些关键的地方:
-
调用
`create_op("mul")`
创建反向Op对应的前向Op。
-
调用
`compare_grad`
函数对比CPU、GPU计算结果。
-
`test_normal`
中调用
`check_grad`
使用数值法检测梯度正确性和稳定性。
-
第一个参数
`self.op`
: 前向Op。
-
第二个参数
`self.inputs`
: 输入词典,词典的Key和
`ProtoMaker`
定义保持一致。
-
第三个参数
`["X", "Y"]`
: 指定对输入变量
`X`
、
`Y`
做梯度检测。
-
第四个参数
`"Out"`
: 指定前向网络最终的输出目标变量
`Out`
-
`test_ignore_x`
和
`test_ignore_y`
分支用来测试只需要计算一个输入梯度的情况。
-
`test_check_grad_normal`
中调用
`check_grad`
使用数值法检测梯度正确性和稳定性。
-
第一个参数
`["X", "Y"]`
: 指定对输入变量
`X`
、
`Y`
做梯度检测。
-
第二个参数
`"Out"`
: 指定前向网络最终的输出目标变量
`Out`
。
-
第三个参数
`max_relative_error`
:指定检测梯度时能容忍的最大错误值。
-
`test_check_grad_ingore_x`
和
`test_check_grad_ingore_y`
分支用来测试只需要计算一个输入梯度的情况。
### 编译和执行单元测试
...
...
doc/howto/dev/new_op_en.md
浏览文件 @
ff061c25
...
...
@@ -293,41 +293,27 @@ class TestMulGradOp(GradientChecker):
'Y'
:
np
.
random
.
random
((
84
,
100
)).
astype
(
"float32"
)
}
def
test_cpu_gpu_compare
(
self
):
self
.
compare_grad
(
self
.
op
,
self
.
inputs
)
def
test_normal
(
self
):
def
test_check_grad_normal
(
self
):
# mul op will enlarge the relative error
self
.
check_grad
(
self
.
op
,
self
.
inputs
,
[
"X"
,
"Y"
],
"Out"
,
max_relative_error
=
0.5
)
self
.
check_grad
([
'X'
,
'Y'
],
'Out'
,
max_relative_error
=
0.5
)
def
test_
ign
ore_x
(
self
):
def
test_
check_grad_ing
ore_x
(
self
):
self
.
check_grad
(
self
.
op
,
self
.
inputs
,
[
"Y"
],
"Out"
,
max_relative_error
=
0.5
,
no_grad_set
=
{
"X"
})
[
'Y'
],
'Out'
,
max_relative_error
=
0.5
,
no_grad_set
=
set
(
"X"
))
def
test_
ign
ore_y
(
self
):
def
test_
check_grad_ing
ore_y
(
self
):
self
.
check_grad
(
self
.
op
,
self
.
inputs
,
[
"X"
],
"Out"
,
max_relative_error
=
0.5
,
no_grad_set
=
{
"Y"
})
[
'X'
],
'Out'
,
max_relative_error
=
0.5
,
no_grad_set
=
set
(
'Y'
))
```
Some key points in the code above include:
-
`create_op("mul")`
creates the backward operator's corresponding forward operator.
-
`compare_grad`
compares results between utilizing the CPU and the GPU.
-
`test_normal`
calls
`check_grad`
to validate scaling tests' correctness and stability through numeric methods.
-
The first variable
`self.op`
denotes the forward operator.
-
The second variable
`self.inputs`
denotes the input dictionary, which has its key value identical to its
`ProtoMaker`
definitions.
-
The third variable
`["X", "Y"]`
appoints
`X`
and
`Y`
to be scale tested.
-
The fourth variable
`"Out"`
points to the network's final output target
`Out`
.
-
`test_ignore_x`
and
`test_ignore_y`
branches test the cases where there is only one scaling input.
-
The first variable
`["X", "Y"]`
appoints
`X`
and
`Y`
to be scale tested.
-
The second variable
`"Out"`
points to the network's final output target
`Out`
.
-
The third variable
`max_relative_error`
points to the maximum relative tolerance error during scaling tests.
-
`test_check_grad_ingore_x`
and
`test_check_grad_ingore_y`
branches test the cases where there is only one scaling input.
### Compiling and Running
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录