Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
as350144
Mace
提交
3738481f
Mace
项目概览
as350144
/
Mace
与 Fork 源项目一致
Fork自
Xiaomi / Mace
通知
2
Star
1
Fork
1
代码
文件
提交
分支
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,发现更多精彩内容 >>
提交
3738481f
编写于
11月 22, 2017
作者:
吴
吴承辉
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' into 'master'
QuantizedAdd test See merge request !110
上级
d109fac3
2d2f387d
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
186 addition
and
0 deletion
+186
-0
mace/dsp/test/quantized_add_test.cc
mace/dsp/test/quantized_add_test.cc
+186
-0
未找到文件。
mace/dsp/test/quantized_add_test.cc
0 → 100644
浏览文件 @
3738481f
//
// Copyright (c) 2017 XiaoMi All rights reserved.
//
#include "mace/dsp/hexagon_control_wrapper.h"
#include "gtest/gtest.h"
#include <math.h>
using
namespace
mace
;
static
NetDef
BuildNetDef
()
{
NetDef
net
;
net
.
set_name
(
"quantized_add_test"
);
// input op
OperatorDef
*
input_op
=
net
.
add_op
();
input_op
->
set_name
(
"input_node"
);
input_op
->
set_type
(
"INPUT"
);
input_op
->
set_node_id
(
0
);
input_op
->
set_padding
(
0
);
input_op
->
add_out_max_byte_size
(
1000
);
// add op
OperatorDef
*
add_op
=
net
.
add_op
();
add_op
->
set_name
(
"add"
);
add_op
->
set_type
(
"QuantizedAdd_8p8to8"
);
add_op
->
set_node_id
(
1
);
add_op
->
set_padding
(
0
);
add_op
->
add_input
(
"input_node"
);
add_op
->
add_input
(
"add_num"
);
add_op
->
add_input
(
"input_min"
);
add_op
->
add_input
(
"input_max"
);
add_op
->
add_input
(
"add_num_min"
);
add_op
->
add_input
(
"add_num_max"
);
add_op
->
add_output
(
"add:0"
);
add_op
->
add_output
(
"add:1"
);
add_op
->
add_output
(
"add:2"
);
NodeInput
*
input_node_input
=
add_op
->
add_node_input
();
input_node_input
->
set_node_id
(
0
);
input_node_input
->
set_output_port
(
0
);
input_node_input
=
add_op
->
add_node_input
();
input_node_input
->
set_node_id
(
10
);
input_node_input
->
set_output_port
(
0
);
input_node_input
=
add_op
->
add_node_input
();
input_node_input
->
set_node_id
(
11
);
input_node_input
->
set_output_port
(
0
);
input_node_input
=
add_op
->
add_node_input
();
input_node_input
->
set_node_id
(
12
);
input_node_input
->
set_output_port
(
0
);
input_node_input
=
add_op
->
add_node_input
();
input_node_input
->
set_node_id
(
13
);
input_node_input
->
set_output_port
(
0
);
input_node_input
=
add_op
->
add_node_input
();
input_node_input
->
set_node_id
(
14
);
input_node_input
->
set_output_port
(
0
);
input_node_input
=
add_op
->
add_node_input
();
input_node_input
->
set_node_id
(
15
);
input_node_input
->
set_output_port
(
0
);
input_node_input
=
add_op
->
add_node_input
();
input_node_input
->
set_node_id
(
16
);
input_node_input
->
set_output_port
(
0
);
add_op
->
add_out_max_byte_size
(
1000
);
add_op
->
add_out_max_byte_size
(
1000
);
add_op
->
add_out_max_byte_size
(
1000
);
// output op
OperatorDef
*
output_op
=
net
.
add_op
();
output_op
->
set_name
(
"__output__"
);
output_op
->
set_type
(
"OUTPUT"
);
output_op
->
set_op_id
(
2
);
input_node_input
=
output_op
->
add_node_input
();
input_node_input
->
set_node_id
(
1
);
input_node_input
->
set_output_port
(
0
);
// tensor
TensorProto
*
add_num_tensor
=
net
.
add_tensors
();
add_num_tensor
->
set_name
(
"add_num"
);
add_num_tensor
->
add_dims
(
3
);
add_num_tensor
->
set_data_type
(
DataType
::
DT_UINT8
);
add_num_tensor
->
set_node_id
(
10
);
add_num_tensor
->
add_int32_data
(
0
);
add_num_tensor
->
add_int32_data
(
127
);
add_num_tensor
->
add_int32_data
(
255
);
TensorProto
*
input_min_tensor
=
net
.
add_tensors
();
input_min_tensor
->
set_name
(
"input_min"
);
input_min_tensor
->
add_dims
(
1
);
input_min_tensor
->
set_data_type
(
DataType
::
DT_FLOAT
);
input_min_tensor
->
set_node_id
(
11
);
input_min_tensor
->
add_float_data
(
-
100
);
TensorProto
*
input_max_tensor
=
net
.
add_tensors
();
input_max_tensor
->
set_name
(
"input_max"
);
input_max_tensor
->
add_dims
(
1
);
input_max_tensor
->
set_data_type
(
DataType
::
DT_FLOAT
);
input_max_tensor
->
set_node_id
(
12
);
input_max_tensor
->
add_float_data
(
50.0
);
TensorProto
*
add_num_min_tensor
=
net
.
add_tensors
();
add_num_min_tensor
->
set_name
(
"add_num_min"
);
add_num_min_tensor
->
add_dims
(
1
);
add_num_min_tensor
->
set_data_type
(
DataType
::
DT_FLOAT
);
add_num_min_tensor
->
set_node_id
(
13
);
add_num_min_tensor
->
add_float_data
(
0
);
TensorProto
*
add_num_max_tensor
=
net
.
add_tensors
();
add_num_max_tensor
->
set_name
(
"add_num_max"
);
add_num_max_tensor
->
add_dims
(
1
);
add_num_max_tensor
->
set_data_type
(
DataType
::
DT_FLOAT
);
add_num_max_tensor
->
set_node_id
(
14
);
add_num_max_tensor
->
add_float_data
(
100.0
);
TensorProto
*
output_min_tensor
=
net
.
add_tensors
();
output_min_tensor
->
set_name
(
"output_min"
);
output_min_tensor
->
add_dims
(
1
);
output_min_tensor
->
set_data_type
(
DataType
::
DT_FLOAT
);
output_min_tensor
->
set_node_id
(
15
);
output_min_tensor
->
add_float_data
(
-
INFINITY
);
TensorProto
*
output_max_tensor
=
net
.
add_tensors
();
output_max_tensor
->
set_name
(
"output_max"
);
output_max_tensor
->
add_dims
(
1
);
output_max_tensor
->
set_data_type
(
DataType
::
DT_FLOAT
);
output_max_tensor
->
set_node_id
(
16
);
output_max_tensor
->
add_float_data
(
INFINITY
);
// input & output info
InputInfo
*
input_info
=
net
.
add_input_info
();
input_info
->
set_name
(
"input_node"
);
input_info
->
set_node_id
(
0
);
input_info
->
add_dims
(
1
);
input_info
->
add_dims
(
1
);
input_info
->
add_dims
(
1
);
input_info
->
add_dims
(
3
);
input_info
->
set_data_type
(
DataType
::
DT_UINT8
);
input_info
->
set_max_byte_size
(
1000
);
OutputInfo
*
output_info
=
net
.
add_output_info
();
output_info
->
set_name
(
"output_node"
);
output_info
->
set_node_id
(
1
);
output_info
->
add_dims
(
1
);
output_info
->
add_dims
(
1
);
output_info
->
add_dims
(
1
);
output_info
->
add_dims
(
3
);
output_info
->
set_data_type
(
DataType
::
DT_UINT8
);
output_info
->
set_max_byte_size
(
1000
);
return
net
;
}
TEST
(
QuantizedAddTest
,
QuantizedAdd
)
{
testing
::
internal
::
LogToStderr
();
HexagonControlWrapper
wrapper
;
wrapper
.
Init
();
wrapper
.
SetDebugLevel
(
10
);
wrapper
.
Config
();
NetDef
net
=
BuildNetDef
();
wrapper
.
SetupGraph
(
net
);
Allocator
*
cpu_allocator
=
GetDeviceAllocator
(
DeviceType
::
CPU
);
Tensor
input_tensor
(
cpu_allocator
,
DT_UINT8
);
Tensor
output_tensor
(
cpu_allocator
,
DT_UINT8
);
input_tensor
.
Resize
({
1
,
1
,
1
,
3
});
output_tensor
.
Resize
({
1
,
1
,
1
,
3
});
uint8_t
*
input_data
=
input_tensor
.
mutable_data
<
uint8_t
>
();
const
uint8_t
*
output_data
=
output_tensor
.
data
<
uint8_t
>
();
// [-100.0 0 50] + [0.0, 50.0, 100.0] = [-100.0, 50.0, 150.0]
// s=0.5859, q0=170, [0, 170, 255]
// s=0.3906, q0=0, [0, 127, 255]
input_data
[
0
]
=
0
;
input_data
[
1
]
=
170
;
input_data
[
2
]
=
250
;
VLOG
(
0
)
<<
wrapper
.
ExecuteGraph
(
input_tensor
,
&
output_tensor
);
wrapper
.
PrintLog
();
// -120.0~176.47, [17, 146,232]
for
(
int
i
=
0
;
i
<
output_tensor
.
size
();
++
i
)
{
std
::
cout
<<
(
int32_t
)
output_data
[
i
]
<<
" "
;
}
std
::
cout
<<
std
::
endl
;
VLOG
(
0
)
<<
wrapper
.
TeardownGraph
();
wrapper
.
Finalize
();
}
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录