Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
PaddleDetection
提交
e82fda25
P
PaddleDetection
项目概览
PaddlePaddle
/
PaddleDetection
大约 1 年 前同步成功
通知
695
Star
11112
Fork
2696
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
184
列表
看板
标记
里程碑
合并请求
40
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
PaddleDetection
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
184
Issue
184
列表
看板
标记
里程碑
合并请求
40
合并请求
40
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
e82fda25
编写于
9月 29, 2017
作者:
Y
Yiqun Liu
提交者:
GitHub
9月 29, 2017
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #4505 from luotao1/new_op_md
refine "Testing Backward Operators" in new_op_cn/en.md
上级
036ac8a3
ff061c25
变更
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
浏览文件 @
e82fda25
...
@@ -285,41 +285,27 @@ class TestMulGradOp(GradientChecker):
...
@@ -285,41 +285,27 @@ class TestMulGradOp(GradientChecker):
'Y'
:
np
.
random
.
random
((
84
,
100
)).
astype
(
"float32"
)
'Y'
:
np
.
random
.
random
((
84
,
100
)).
astype
(
"float32"
)
}
}
def
test_cpu_gpu_compare
(
self
):
def
test_check_grad_normal
(
self
):
self
.
compare_grad
(
self
.
op
,
self
.
inputs
)
def
test_normal
(
self
):
# mul op will enlarge the relative error
# mul op will enlarge the relative error
self
.
check_grad
(
self
.
check_grad
([
'X'
,
'Y'
],
'Out'
,
max_relative_error
=
0.5
)
self
.
op
,
self
.
inputs
,
[
"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
.
check_grad
(
self
.
op
,
[
'Y'
],
'Out'
,
max_relative_error
=
0.5
,
no_grad_set
=
set
(
"X"
))
self
.
inputs
,
[
"Y"
],
"Out"
,
max_relative_error
=
0.5
,
no_grad_set
=
{
"X"
})
def
test_
ign
ore_y
(
self
):
def
test_
check_grad_ing
ore_y
(
self
):
self
.
check_grad
(
self
.
check_grad
(
self
.
op
,
[
'X'
],
'Out'
,
max_relative_error
=
0.5
,
no_grad_set
=
set
(
'Y'
))
self
.
inputs
,
[
"X"
],
"Out"
,
max_relative_error
=
0.5
,
no_grad_set
=
{
"Y"
})
```
```
下面解释代码中一些关键的地方:
下面解释代码中一些关键的地方:
-
调用
`create_op("mul")`
创建反向Op对应的前向Op。
-
调用
`create_op("mul")`
创建反向Op对应的前向Op。
-
调用
`compare_grad`
函数对比CPU、GPU计算结果。
-
`test_check_grad_normal`
中调用
`check_grad`
使用数值法检测梯度正确性和稳定性。
-
`test_normal`
中调用
`check_grad`
使用数值法检测梯度正确性和稳定性。
-
第一个参数
`["X", "Y"]`
: 指定对输入变量
`X`
、
`Y`
做梯度检测。
-
第一个参数
`self.op`
: 前向Op。
-
第二个参数
`"Out"`
: 指定前向网络最终的输出目标变量
`Out`
。
-
第二个参数
`self.inputs`
: 输入词典,词典的Key和
`ProtoMaker`
定义保持一致。
-
第三个参数
`max_relative_error`
:指定检测梯度时能容忍的最大错误值。
-
第三个参数
`["X", "Y"]`
: 指定对输入变量
`X`
、
`Y`
做梯度检测。
-
`test_check_grad_ingore_x`
和
`test_check_grad_ingore_y`
分支用来测试只需要计算一个输入梯度的情况。
-
第四个参数
`"Out"`
: 指定前向网络最终的输出目标变量
`Out`
-
`test_ignore_x`
和
`test_ignore_y`
分支用来测试只需要计算一个输入梯度的情况。
### 编译和执行单元测试
### 编译和执行单元测试
...
...
doc/howto/dev/new_op_en.md
浏览文件 @
e82fda25
...
@@ -293,41 +293,27 @@ class TestMulGradOp(GradientChecker):
...
@@ -293,41 +293,27 @@ class TestMulGradOp(GradientChecker):
'Y'
:
np
.
random
.
random
((
84
,
100
)).
astype
(
"float32"
)
'Y'
:
np
.
random
.
random
((
84
,
100
)).
astype
(
"float32"
)
}
}
def
test_cpu_gpu_compare
(
self
):
def
test_check_grad_normal
(
self
):
self
.
compare_grad
(
self
.
op
,
self
.
inputs
)
def
test_normal
(
self
):
# mul op will enlarge the relative error
# mul op will enlarge the relative error
self
.
check_grad
(
self
.
check_grad
([
'X'
,
'Y'
],
'Out'
,
max_relative_error
=
0.5
)
self
.
op
,
self
.
inputs
,
[
"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
.
check_grad
(
self
.
op
,
[
'Y'
],
'Out'
,
max_relative_error
=
0.5
,
no_grad_set
=
set
(
"X"
))
self
.
inputs
,
[
"Y"
],
"Out"
,
max_relative_error
=
0.5
,
no_grad_set
=
{
"X"
})
def
test_
ign
ore_y
(
self
):
def
test_
check_grad_ing
ore_y
(
self
):
self
.
check_grad
(
self
.
check_grad
(
self
.
op
,
[
'X'
],
'Out'
,
max_relative_error
=
0.5
,
no_grad_set
=
set
(
'Y'
))
self
.
inputs
,
[
"X"
],
"Out"
,
max_relative_error
=
0.5
,
no_grad_set
=
{
"Y"
})
```
```
Some key points in the code above include:
Some key points in the code above include:
-
`create_op("mul")`
creates the backward operator's corresponding forward operator.
-
`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.
-
`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 first variable
`["X", "Y"]`
appoints
`X`
and
`Y`
to be scale tested.
-
The second variable
`self.inputs`
denotes the input dictionary, which has its key value identical to its
`ProtoMaker`
definitions.
-
The second variable
`"Out"`
points to the network's final output target
`Out`
.
-
The third variable
`["X", "Y"]`
appoints
`X`
and
`Y`
to be scale tested.
-
The third variable
`max_relative_error`
points to the maximum relative tolerance error during scaling tests.
-
The fourth variable
`"Out"`
points to the network's final output target
`Out`
.
-
`test_check_grad_ingore_x`
and
`test_check_grad_ingore_y`
branches test the cases where there is only one scaling input.
-
`test_ignore_x`
and
`test_ignore_y`
branches test the cases where there is only one scaling input.
### Compiling and Running
### Compiling and Running
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录