Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
s920243400
PaddleDetection
提交
caf4b937
P
PaddleDetection
项目概览
s920243400
/
PaddleDetection
与 Fork 源项目一致
Fork自
PaddlePaddle / PaddleDetection
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
PaddleDetection
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
caf4b937
编写于
11月 27, 2018
作者:
B
baojun-nervana
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Added RunInferShape
test=develop
上级
1d19eb2b
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
28 addition
and
33 deletion
+28
-33
paddle/fluid/framework/ngraph_operator.cc
paddle/fluid/framework/ngraph_operator.cc
+15
-32
paddle/fluid/framework/operator.cc
paddle/fluid/framework/operator.cc
+7
-1
paddle/fluid/framework/operator.h
paddle/fluid/framework/operator.h
+6
-0
未找到文件。
paddle/fluid/framework/ngraph_operator.cc
浏览文件 @
caf4b937
...
...
@@ -278,39 +278,22 @@ std::shared_ptr<ngraph::runtime::Backend> NgraphOperator::backend_ =
ngraph
::
runtime
::
Backend
::
create
(
"CPU"
);
void
NgraphOperator
::
GetNgInputShape
(
std
::
shared_ptr
<
OperatorBase
>
op
)
{
RuntimeInferShapeContext
infer_shape_ctx
(
*
op
,
scope_
);
std
::
shared_ptr
<
OperatorWithKernel
>
op_k
=
std
::
dynamic_pointer_cast
<
OperatorWithKernel
>
(
op
);
op_k
->
InferShape
(
&
infer_shape_ctx
);
op
->
RunInferShape
(
scope_
,
place_
);
for
(
auto
&
var_name_item
:
op
->
Inputs
())
{
std
::
vector
<
ngraph
::
Shape
>
vshape
;
auto
&
var_prm_name
=
var_name_item
.
first
;
auto
var_name_size
=
var_name_item
.
second
.
size
();
if
(
var_name_size
==
1
)
{
auto
dim
=
infer_shape_ctx
.
GetInputDim
(
var_prm_name
);
vshape
.
push_back
(
Ddim2Shape
(
dim
));
}
else
if
(
var_name_item
.
second
.
size
()
>
1
)
{
auto
vdim
=
infer_shape_ctx
.
GetInputsDim
(
var_prm_name
);
PADDLE_ENFORCE_EQ
(
vdim
.
size
(),
var_name_item
.
second
.
size
(),
"Need dim info for each var"
);
for
(
auto
&
dim
:
vdim
)
{
vshape
.
push_back
(
Ddim2Shape
(
dim
));
}
}
else
{
// 0 size : conv2d Bias
}
for
(
size_t
i
=
0
;
i
<
var_name_item
.
second
.
size
();
++
i
)
{
auto
var_name
=
var_name_item
.
second
.
at
(
i
);
if
(
std
::
find
(
var_in_
.
begin
(),
var_in_
.
end
(),
var_name
)
!=
var_in_
.
end
())
{
if
(
var_node_map_
->
find
(
var_name
)
==
var_node_map_
->
end
())
{
auto
ng_type
=
var_type_map_
.
at
(
var_name
);
auto
prm
=
std
::
make_shared
<
ngraph
::
op
::
Parameter
>
(
ng_type
,
vshape
.
at
(
i
),
true
);
(
*
var_node_map_
)[
var_name
]
=
prm
;
(
*
var_in_node_map_
)[
var_name
]
=
prm
;
for
(
auto
&
var_name
:
var_name_item
.
second
)
{
auto
*
var
=
scope_
.
FindVar
(
var_name
);
if
(
var
&&
VarIsTensor
(
*
var
))
{
auto
*
tensor_pd
=
GetLoDTensorOrSelectedRowsValueFromVar
(
*
var
);
auto
sp
=
Ddim2Shape
(
tensor_pd
->
dims
());
if
(
std
::
find
(
var_in_
.
begin
(),
var_in_
.
end
(),
var_name
)
!=
var_in_
.
end
())
{
if
(
var_node_map_
->
find
(
var_name
)
==
var_node_map_
->
end
())
{
auto
ng_type
=
var_type_map_
.
at
(
var_name
);
auto
prm
=
std
::
make_shared
<
ngraph
::
op
::
Parameter
>
(
ng_type
,
sp
,
true
);
(
*
var_node_map_
)[
var_name
]
=
prm
;
(
*
var_in_node_map_
)[
var_name
]
=
prm
;
}
}
}
}
...
...
paddle/fluid/framework/operator.cc
浏览文件 @
caf4b937
...
...
@@ -355,7 +355,7 @@ void OperatorBase::GenerateTemporaryNames() {
}
}
static
bool
VarIsTensor
(
const
Variable
&
var
)
{
bool
VarIsTensor
(
const
Variable
&
var
)
{
return
var
.
IsType
<
LoDTensor
>
()
||
var
.
IsType
<
SelectedRows
>
();
}
...
...
@@ -695,6 +695,12 @@ static void CheckTensorNANOrInf(const std::string& name,
"Tensor %s contains NAN"
,
name
);
}
void
OperatorWithKernel
::
RunInferShape
(
const
Scope
&
scope
,
const
platform
::
Place
&
place
)
const
{
RuntimeInferShapeContext
infer_shape_ctx
(
*
this
,
scope
);
this
->
InferShape
(
&
infer_shape_ctx
);
}
void
OperatorWithKernel
::
RunImpl
(
const
Scope
&
scope
,
const
platform
::
Place
&
place
)
const
{
RuntimeInferShapeContext
infer_shape_ctx
(
*
this
,
scope
);
...
...
paddle/fluid/framework/operator.h
浏览文件 @
caf4b937
...
...
@@ -64,6 +64,7 @@ inline std::string GradVarName(const std::string& var_name) {
}
proto
::
VarType
::
Type
GetDataTypeOfVar
(
const
Variable
*
var
);
bool
VarIsTensor
(
const
Variable
&
var
);
const
Tensor
*
GetLoDTensorOrSelectedRowsValueFromVar
(
const
Variable
&
var
);
Tensor
*
GetMutableLoDTensorOrSelectedRowsValueFromVar
(
Variable
*
var
);
...
...
@@ -128,6 +129,8 @@ class OperatorBase {
virtual
std
::
vector
<
std
::
string
>
OutputVars
(
bool
has_intermediate
)
const
;
void
SetIsCalledByExecutor
(
bool
x
)
{
run_by_executor_
=
x
;
}
virtual
void
RunInferShape
(
const
Scope
&
scope
,
const
platform
::
Place
&
place
)
const
{}
protected:
std
::
string
type_
;
...
...
@@ -348,6 +351,9 @@ class OperatorWithKernel : public OperatorBase {
OpInfoMap
::
Instance
().
Get
(
Type
()).
infer_shape_
(
ctx
);
}
void
RunInferShape
(
const
Scope
&
scope
,
const
platform
::
Place
&
place
)
const
override
;
protected:
virtual
OpKernelType
GetExpectedKernelType
(
const
ExecutionContext
&
ctx
)
const
;
virtual
OpKernelType
GetKernelTypeForVar
(
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录