Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
项目经理老王
Mace
提交
4ea191e1
Mace
项目概览
项目经理老王
/
Mace
与 Fork 源项目一致
Fork自
Xiaomi / Mace
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Mace
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
4ea191e1
编写于
8月 22, 2018
作者:
L
liuqi
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix transpose filter repeatly when different ops reuse same tensor.
上级
e62ea9b1
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
20 addition
and
9 deletion
+20
-9
mace/python/tools/converter_tool/transformer.py
mace/python/tools/converter_tool/transformer.py
+20
-9
未找到文件。
mace/python/tools/converter_tool/transformer.py
浏览文件 @
4ea191e1
...
...
@@ -983,6 +983,7 @@ class Transformer(base_converter.ConverterInterface):
def
transpose_filters
(
self
):
net
=
self
.
_model
filter_format
=
self
.
filter_format
()
transposed_filter
=
set
()
if
self
.
_option
.
quantize
:
print
(
"Transpose filters to OHWI"
)
...
...
@@ -995,14 +996,16 @@ class Transformer(base_converter.ConverterInterface):
"filter format: %s"
%
filter_format
.
name
)
for
op
in
net
.
op
:
if
op
.
type
==
MaceOp
.
Conv2D
.
name
\
or
op
.
type
==
MaceOp
.
Deconv2D
.
name
:
if
(
op
.
type
==
MaceOp
.
Conv2D
.
name
or
op
.
type
==
MaceOp
.
Deconv2D
.
name
)
\
and
op
.
input
[
1
]
not
in
transposed_filter
:
filter
=
self
.
_consts
[
op
.
input
[
1
]]
filter_data
=
np
.
array
(
filter
.
float_data
).
reshape
(
filter
.
dims
)
filter_data
=
filter_data
.
transpose
(
transpose_order
)
filter
.
float_data
[:]
=
filter_data
.
flat
filter
.
dims
[:]
=
filter_data
.
shape
transposed_filter
.
add
(
op
.
input
[
1
])
self
.
set_filter_format
(
FilterFormat
.
OHWI
)
else
:
...
...
@@ -1010,24 +1013,29 @@ class Transformer(base_converter.ConverterInterface):
# transpose filter to OIHW/MIHW for tensorflow (HWIO/HWIM)
if
filter_format
==
FilterFormat
.
HWIO
:
for
op
in
net
.
op
:
if
op
.
type
==
MaceOp
.
Conv2D
.
name
\
or
op
.
type
==
MaceOp
.
Deconv2D
.
name
\
or
op
.
type
==
MaceOp
.
DepthwiseConv2d
.
name
:
if
(
op
.
type
==
MaceOp
.
Conv2D
.
name
or
op
.
type
==
MaceOp
.
Deconv2D
.
name
or
op
.
type
==
MaceOp
.
DepthwiseConv2d
.
name
)
\
and
op
.
input
[
1
]
not
in
transposed_filter
:
filter
=
self
.
_consts
[
op
.
input
[
1
]]
filter_data
=
np
.
array
(
filter
.
float_data
).
reshape
(
filter
.
dims
)
filter_data
=
filter_data
.
transpose
(
3
,
2
,
0
,
1
)
filter
.
float_data
[:]
=
filter_data
.
flat
filter
.
dims
[:]
=
filter_data
.
shape
if
(
op
.
type
==
MaceOp
.
MatMul
.
name
and
ConverterUtil
.
get_arg
(
op
,
MaceKeyword
.
mace_winograd_filter_transformed
)
is
not
None
):
# noqa
transposed_filter
.
add
(
op
.
input
[
1
])
if
(
op
.
type
==
MaceOp
.
MatMul
.
name
and
(
ConverterUtil
.
get_arg
(
op
,
MaceKeyword
.
mace_winograd_filter_transformed
)
is
not
None
)
# noqa
and
op
.
input
[
1
]
not
in
transposed_filter
):
filter
=
self
.
_consts
[
op
.
input
[
0
]]
filter_data
=
np
.
array
(
filter
.
float_data
).
reshape
(
filter
.
dims
)
filter_data
=
filter_data
.
transpose
(
3
,
2
,
0
,
1
)
filter
.
float_data
[:]
=
filter_data
.
flat
filter
.
dims
[:]
=
filter_data
.
shape
if
op
.
type
==
MaceOp
.
FullyConnected
.
name
:
transposed_filter
.
add
(
op
.
input
[
0
])
if
op
.
type
==
MaceOp
.
FullyConnected
.
name
\
and
op
.
input
[
1
]
not
in
transposed_filter
:
weight
=
self
.
_consts
[
op
.
input
[
1
]]
if
len
(
weight
.
dims
)
==
4
:
weight_data
=
np
.
array
(
weight
.
float_data
).
reshape
(
...
...
@@ -1035,16 +1043,19 @@ class Transformer(base_converter.ConverterInterface):
weight_data
=
weight_data
.
transpose
(
3
,
2
,
0
,
1
)
weight
.
float_data
[:]
=
weight_data
.
flat
weight
.
dims
[:]
=
weight_data
.
shape
transposed_filter
.
add
(
op
.
input
[
1
])
self
.
set_filter_format
(
FilterFormat
.
OIHW
)
for
op
in
net
.
op
:
if
op
.
type
==
MaceOp
.
Deconv2D
.
name
:
if
op
.
type
==
MaceOp
.
Deconv2D
.
name
\
and
op
.
input
[
1
]
not
in
transposed_filter
:
filter
=
self
.
_consts
[
op
.
input
[
1
]]
filter_data
=
np
.
array
(
filter
.
float_data
).
reshape
(
filter
.
dims
)
filter_data
=
filter_data
.
transpose
(
1
,
0
,
2
,
3
)
filter
.
float_data
[:]
=
filter_data
.
flat
filter
.
dims
[:]
=
filter_data
.
shape
transposed_filter
.
add
(
op
.
input
[
1
])
return
False
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录