Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
机器未来
Paddle
提交
104a9f1e
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看板
提交
104a9f1e
编写于
3月 20, 2019
作者:
W
Wojciech Uss
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix pattern maching conv2d with(out) ResidualData
test=develop
上级
a3b8028d
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
23 addition
and
4 deletion
+23
-4
paddle/fluid/framework/ir/cpu_quantize_pass.cc
paddle/fluid/framework/ir/cpu_quantize_pass.cc
+1
-1
paddle/fluid/framework/ir/graph_pattern_detector.cc
paddle/fluid/framework/ir/graph_pattern_detector.cc
+19
-3
paddle/fluid/framework/ir/graph_pattern_detector.h
paddle/fluid/framework/ir/graph_pattern_detector.h
+3
-0
未找到文件。
paddle/fluid/framework/ir/cpu_quantize_pass.cc
浏览文件 @
104a9f1e
...
...
@@ -224,8 +224,8 @@ std::unique_ptr<ir::Graph> CPUQuantizePass::ApplyImpl(
PADDLE_ENFORCE
(
param_scope
());
QuantizeConv
(
graph
.
get
(),
false
/* with_residual_data */
);
QuantizeConv
(
graph
.
get
(),
true
/* with_residual_data */
);
QuantizeConv
(
graph
.
get
());
QuantizePool
(
graph
.
get
());
return
graph
;
...
...
paddle/fluid/framework/ir/graph_pattern_detector.cc
浏览文件 @
104a9f1e
...
...
@@ -599,10 +599,19 @@ bool VarLinksToOp(Node *node, const std::string &op_type) {
bool
IsNthInput
(
Node
*
var
,
Node
*
op
,
const
std
::
string
&
argument
,
size_t
nth
)
{
PADDLE_ENFORCE
(
var
->
IsVar
());
PADDLE_ENFORCE
(
op
->
IsOp
());
if
(
op
->
Op
()
->
Input
(
argument
).
size
()
<=
nth
)
return
false
;
if
(
!
HasInput
(
op
,
argument
)
||
op
->
Op
()
->
Input
(
argument
).
size
()
<=
nth
)
return
false
;
return
var
->
Name
()
==
op
->
Op
()
->
Input
(
argument
)[
nth
];
}
bool
HasInput
(
Node
*
op
,
const
std
::
string
&
argument
)
{
PADDLE_ENFORCE
(
op
->
IsOp
());
auto
const
&
names
=
op
->
Op
()
->
InputNames
();
if
(
std
::
find
(
names
.
begin
(),
names
.
end
(),
argument
)
==
names
.
end
())
return
false
;
return
true
;
}
bool
IsNthOutput
(
Node
*
var
,
Node
*
op
,
const
std
::
string
&
argument
,
size_t
nth
)
{
PADDLE_ENFORCE
(
var
->
IsVar
());
PADDLE_ENFORCE
(
op
->
IsOp
());
...
...
@@ -1082,8 +1091,15 @@ PDNode *patterns::Conv::operator()() {
PDNode
*
patterns
::
ConvResidual
::
operator
()(
bool
with_residual_data
)
{
auto
conv_op
=
pattern
->
NewNode
(
conv_op_repr
())
->
assert_is_op
(
"conv2d"
);
if
(
!
with_residual_data
)
conv_op
->
assert_op_attr
(
"fuse_residual_connection"
,
false
);
if
(
!
with_residual_data
)
{
conv_op
->
assert_more
([
&
](
Node
*
x
)
{
auto
node_names
=
x
->
Op
()
->
InputNames
();
if
(
!
HasInput
(
x
,
"ResidualData"
)
||
x
->
Op
()
->
Input
(
"ResidualData"
).
size
()
==
0
)
return
true
;
return
false
;
});
}
auto
input_var
=
pattern
->
NewNode
(
conv_input_repr
())
->
AsInput
()
...
...
paddle/fluid/framework/ir/graph_pattern_detector.h
浏览文件 @
104a9f1e
...
...
@@ -305,6 +305,9 @@ bool VarLinksFromOp(Node* node, const std::string& op_type);
// Check whether a var node is a op node's nth input.
bool
IsNthInput
(
Node
*
var
,
Node
*
op
,
const
std
::
string
&
argument
,
size_t
nth
);
// Check whether the op node has input of given name.
bool
HasInput
(
Node
*
op
,
const
std
::
string
&
argument
);
// Tell whether a var node is a op node's nth output.
bool
IsNthOutput
(
Node
*
var
,
Node
*
op
,
const
std
::
string
&
argument
,
size_t
nth
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录