Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
毕竟曾有刹那
Mace
提交
20676cc2
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,发现更多精彩内容 >>
提交
20676cc2
编写于
9月 12, 2018
作者:
F
fuqiang6
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
generate activation histogram and support entropy calibration
上级
416a7885
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
40 addition
and
14 deletion
+40
-14
mace/core/net.cc
mace/core/net.cc
+33
-11
mace/core/net.h
mace/core/net.h
+5
-0
mace/python/tools/converter_tool/transformer.py
mace/python/tools/converter_tool/transformer.py
+2
-3
未找到文件。
mace/core/net.cc
浏览文件 @
20676cc2
...
...
@@ -134,18 +134,40 @@ MaceStatus SerialNet::Run(RunMetadata *run_metadata) {
if
(
EnvEnabled
(
"MACE_LOG_TENSOR_RANGE"
)
&&
device_type
==
CPU
)
{
for
(
int
i
=
0
;
i
<
op
->
OutputSize
();
++
i
)
{
int
data_type
=
op
->
GetOptionalArg
(
"T"
,
static_cast
<
int
>
(
DT_FLOAT
));
if
(
data_type
==
static_cast
<
int
>
(
DT_FLOAT
))
{
float
max_v
=
std
::
numeric_limits
<
float
>::
lowest
();
float
min_v
=
std
::
numeric_limits
<
float
>::
max
();
Tensor
::
MappingGuard
guard
(
op
->
Output
(
i
));
const
float
*
output_data
=
op
->
Output
(
i
)
->
data
<
float
>
();
for
(
index_t
j
=
0
;
j
<
op
->
Output
(
i
)
->
size
();
++
j
)
{
max_v
=
std
::
max
(
max_v
,
output_data
[
j
]);
min_v
=
std
::
min
(
min_v
,
output_data
[
j
]);
if
(
op
->
debug_def
().
quantize_info_size
()
==
0
)
{
int
data_type
=
op
->
GetOptionalArg
(
"T"
,
static_cast
<
int
>
(
DT_FLOAT
));
if
(
data_type
==
static_cast
<
int
>
(
DT_FLOAT
))
{
float
max_v
=
std
::
numeric_limits
<
float
>::
lowest
();
float
min_v
=
std
::
numeric_limits
<
float
>::
max
();
Tensor
::
MappingGuard
guard
(
op
->
Output
(
i
));
const
float
*
output_data
=
op
->
Output
(
i
)
->
data
<
float
>
();
for
(
index_t
j
=
0
;
j
<
op
->
Output
(
i
)
->
size
();
++
j
)
{
max_v
=
std
::
max
(
max_v
,
output_data
[
j
]);
min_v
=
std
::
min
(
min_v
,
output_data
[
j
]);
}
LOG
(
INFO
)
<<
"Tensor range @@"
<<
op
->
debug_def
().
output
(
i
)
<<
"@@"
<<
min_v
<<
","
<<
max_v
;
}
}
else
{
for
(
int
ind
=
0
;
ind
<
op
->
debug_def
().
quantize_info_size
();
++
ind
)
{
float
min_v
=
op
->
debug_def
().
quantize_info
(
ind
).
minval
();
float
max_v
=
op
->
debug_def
().
quantize_info
(
ind
).
maxval
();
std
::
vector
<
int
>
bin_distribution
(
kBinSize
,
0
);
float
bin_v
=
(
max_v
-
min_v
)
/
kBinSize
;
Tensor
::
MappingGuard
guard
(
op
->
Output
(
i
));
const
float
*
output_data
=
op
->
Output
(
i
)
->
data
<
float
>
();
for
(
index_t
j
=
0
;
j
<
op
->
Output
(
i
)
->
size
();
++
j
)
{
int
ind
=
static_cast
<
int
>
((
output_data
[
j
]
-
min_v
)
/
bin_v
);
if
(
ind
<
0
)
ind
=
0
;
else
if
(
ind
>
kBinSize
-
1
)
ind
=
kBinSize
-
1
;
bin_distribution
[
ind
]
++
;
}
LOG
(
INFO
)
<<
"Tensor range @@"
<<
op
->
debug_def
().
output
(
i
)
<<
"@@"
<<
min_v
<<
","
<<
max_v
<<
"@@"
<<
MakeString
(
bin_distribution
);
}
LOG
(
INFO
)
<<
"Tensor range @@"
<<
op
->
debug_def
().
output
(
i
)
<<
"@@"
<<
min_v
<<
","
<<
max_v
;
}
}
}
...
...
mace/core/net.h
浏览文件 @
20676cc2
...
...
@@ -18,8 +18,13 @@
#include <memory>
#include <string>
#include <vector>
#include <unordered_map>
#include <sstream>
#include "mace/core/operator.h"
#include "mace/utils/string_util.h"
#define kBinSize 2048
namespace
mace
{
...
...
mace/python/tools/converter_tool/transformer.py
浏览文件 @
20676cc2
...
...
@@ -1797,9 +1797,6 @@ class Transformer(base_converter.ConverterInterface):
return
False
def
add_quantize_tensor_range
(
self
):
if
not
self
.
_option
.
quantize
:
return
False
# Quantize info from range statistics
print
(
"Add quantize tensor range"
)
range_file
=
self
.
_option
.
quantize_range_file
...
...
@@ -1829,6 +1826,8 @@ class Transformer(base_converter.ConverterInterface):
self
.
_quantize_activation_info
[
output
]
for
output
in
op
.
output
])
if
not
self
.
_option
.
quantize
:
return
False
print
(
"Add default quantize info for ops like Pooling, Softmax"
)
for
op
in
self
.
_model
.
op
:
if
op
.
type
in
[
MaceOp
.
Pooling
.
name
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录