Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
X2Paddle
提交
65565c48
X
X2Paddle
项目概览
PaddlePaddle
/
X2Paddle
大约 1 年 前同步成功
通知
328
Star
698
Fork
167
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
26
列表
看板
标记
里程碑
合并请求
4
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
X
X2Paddle
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
26
Issue
26
列表
看板
标记
里程碑
合并请求
4
合并请求
4
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
65565c48
编写于
9月 05, 2019
作者:
J
jiangjiajun
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix padding and reshape method
上级
a6d546ea
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
49 addition
and
6 deletion
+49
-6
x2paddle/op_mapper/tf_op_mapper.py
x2paddle/op_mapper/tf_op_mapper.py
+28
-6
x2paddle/op_mapper/tf_op_mapper_nhwc.py
x2paddle/op_mapper/tf_op_mapper_nhwc.py
+21
-0
未找到文件。
x2paddle/op_mapper/tf_op_mapper.py
浏览文件 @
65565c48
...
...
@@ -24,6 +24,8 @@ import sys
def
get_same_padding
(
in_size
,
kernel_size
,
stride
):
new_size
=
int
(
math
.
ceil
(
in_size
*
1.0
/
stride
))
pad_size
=
(
new_size
-
1
)
*
stride
+
kernel_size
-
in_size
if
pad_size
<
0
:
pad_size
=
0
pad0
=
int
(
pad_size
/
2
)
pad1
=
pad_size
-
pad0
return
[
pad0
,
pad1
]
...
...
@@ -369,6 +371,7 @@ class TFOpMapper(OpMapper):
pad_w
=
get_same_padding
(
in_shape
[
3
],
k_size
[
3
],
strides
[
3
])
pad_h
=
pad_h
[
0
]
+
pad_h
[
1
]
pad_w
=
pad_w
[
0
]
+
pad_w
[
1
]
if
pad_h
!=
0
or
pad_w
!=
0
:
attr
=
{
"paddings"
:
[
0
,
pad_h
,
0
,
pad_w
],
"pad_value"
:
-
10000.0
}
node
.
fluid_code
.
add_layer
(
"pad2d"
,
inputs
=
input
,
...
...
@@ -551,6 +554,7 @@ class TFOpMapper(OpMapper):
def
Reshape
(
self
,
node
):
input
=
self
.
graph
.
get_node
(
node
.
layer
.
input
[
0
],
copy
=
True
)
param
=
self
.
graph
.
get_node
(
node
.
layer
.
input
[
1
],
copy
=
True
)
is_variable
=
False
if
param
.
layer_type
==
"Const"
:
attr
=
{
"shape"
:
param
.
value
.
tolist
()}
self
.
add_omit_nodes
(
param
.
layer_name
,
node
.
layer_name
)
...
...
@@ -582,6 +586,24 @@ class TFOpMapper(OpMapper):
new_param
+=
(
node
.
layer_name
+
"[{}]"
.
format
(
i
)
+
", "
)
new_param
=
new_param
.
strip
(
", "
)
+
"]"
attr
=
{
"shape"
:
new_param
}
is_variable
=
True
# to change [192, -1]->[-1, 192], allways put -1 in the first dimension
# optimization for Paddle-Lite
in_shape
=
input
.
out_shapes
[
0
]
if
is_variable
and
in_shape
.
count
(
-
1
)
<
1
:
total_size
=
1
for
i
in
range
(
len
(
in_shape
)):
total_size
*=
in_shape
[
i
]
for
i
in
range
(
len
(
attr
[
"shape"
])):
if
attr
[
"shape"
][
i
]
==
0
:
attr
[
"shape"
][
i
]
=
in_shape
[
i
]
if
attr
[
"shape"
][
i
]
!=
-
1
:
total_size
/=
attr
[
"shape"
][
i
]
if
attr
[
"shape"
].
count
(
-
1
)
>
0
:
index
=
attr
[
"shape"
].
index
(
-
1
)
attr
[
"shape"
][
index
]
=
int
(
total_size
)
attr
[
"shape"
][
0
]
=
-
1
if
len
(
input
.
out_shapes
[
0
])
==
4
and
node
.
tf_data_format
==
"NHWC"
:
if
len
(
attr
[
"shape"
])
<
3
:
...
...
x2paddle/op_mapper/tf_op_mapper_nhwc.py
浏览文件 @
65565c48
...
...
@@ -24,6 +24,8 @@ import sys
def
get_same_padding
(
in_size
,
kernel_size
,
stride
):
new_size
=
int
(
math
.
ceil
(
in_size
*
1.0
/
stride
))
pad_size
=
(
new_size
-
1
)
*
stride
+
kernel_size
-
in_size
if
pad_size
<
0
:
pad_size
=
0
pad0
=
int
(
pad_size
/
2
)
pad1
=
pad_size
-
pad0
return
[
pad0
,
pad1
]
...
...
@@ -500,6 +502,7 @@ class TFOpMapperNHWC(OpMapper):
def
Reshape
(
self
,
node
):
input
=
self
.
graph
.
get_node
(
node
.
layer
.
input
[
0
],
copy
=
True
)
param
=
self
.
graph
.
get_node
(
node
.
layer
.
input
[
1
],
copy
=
True
)
is_variable
=
False
if
param
.
layer_type
==
"Const"
:
attr
=
{
"shape"
:
param
.
value
.
tolist
()}
self
.
add_omit_nodes
(
param
.
layer_name
,
node
.
layer_name
)
...
...
@@ -527,6 +530,24 @@ class TFOpMapperNHWC(OpMapper):
new_param
+=
(
node
.
layer_name
+
"[{}]"
.
format
(
i
)
+
", "
)
new_param
=
new_param
.
strip
(
", "
)
+
"]"
attr
=
{
"shape"
:
new_param
}
is_variable
=
True
# to change [192, -1]->[-1, 192], allways put -1 in the first dimension
# optimization for Paddle-Lite
in_shape
=
input
.
out_shapes
[
0
]
if
not
is_variable
and
in_shape
.
count
(
-
1
)
<
1
:
total_size
=
1
for
i
in
range
(
len
(
in_shape
)):
total_size
*=
in_shape
[
i
]
for
i
in
range
(
len
(
attr
[
"shape"
])):
if
attr
[
"shape"
][
i
]
==
0
:
attr
[
"shape"
][
i
]
=
in_shape
[
i
]
if
attr
[
"shape"
][
i
]
!=
-
1
:
total_size
/=
attr
[
"shape"
][
i
]
if
attr
[
"shape"
].
count
(
-
1
)
>
0
:
index
=
attr
[
"shape"
].
index
(
-
1
)
attr
[
"shape"
][
index
]
=
int
(
total_size
)
attr
[
"shape"
][
0
]
=
-
1
node
.
fluid_code
.
add_layer
(
"reshape"
,
inputs
=
input
,
output
=
node
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录