24.02.1
MeanStdDevNormalizationLayer.cpp
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2019, 2022 Arm Limited.
3
*
4
* SPDX-License-Identifier: MIT
5
*
6
* Permission is hereby granted, free of charge, to any person obtaining a copy
7
* of this software and associated documentation files (the "Software"), to
8
* deal in the Software without restriction, including without limitation the
9
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
10
* sell copies of the Software, and to permit persons to whom the Software is
11
* furnished to do so, subject to the following conditions:
12
*
13
* The above copyright notice and this permission notice shall be included in all
14
* copies or substantial portions of the Software.
15
*
16
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
* SOFTWARE.
23
*/
24
#include "
MeanStdDevNormalizationLayer.h
"
25
26
#include "
arm_compute/core/Types.h
"
27
28
namespace
arm_compute
29
{
30
namespace
test
31
{
32
namespace
validation
33
{
34
namespace
reference
35
{
36
template
<
typename
T>
37
SimpleTensor<T>
mean_std_normalization_layer
(
const
SimpleTensor<T>
&
src
,
float
epsilon
)
38
{
39
// Create reference
40
SimpleTensor<T>
dst
{
src
.shape(),
src
.data_type(), 1 };
41
42
const
int
cols
=
src
.shape()[0];
43
const
int
batch_size =
src
.shape()[1];
44
45
for
(
int
i = 0; i < batch_size; ++i)
46
{
47
T sum =
static_cast<
T
>
(0.f);
48
T sum_sq =
static_cast<
T
>
(0.f);
49
for
(
int
j = 0; j <
cols
; ++j)
50
{
51
const
T value =
src
[j + i *
cols
];
52
sum += value;
53
sum_sq += value * value;
54
}
55
const
T mean = sum /
static_cast<
T
>
(
cols
);
56
const
T var = ((sum_sq /
static_cast<
T
>
(
cols
)) - (mean * mean)) +
static_cast<
T
>
(
epsilon
);
57
const
T stddev_inv =
static_cast<
T
>
(1.f) /
static_cast<
T
>
(std::sqrt(var));
58
for
(
int
j = 0; j <
cols
; ++j)
59
{
60
dst
[j + i *
cols
] = (
src
[j + i *
cols
] - mean) * stddev_inv;
61
}
62
}
63
return
dst
;
64
}
65
66
template
<>
67
SimpleTensor<uint8_t>
mean_std_normalization_layer
(
const
SimpleTensor<uint8_t>
&
src
,
float
epsilon
)
68
{
69
SimpleTensor<float>
src_tmp =
convert_from_asymmetric
(
src
);
70
SimpleTensor<float>
dst_tmp = mean_std_normalization_layer<float>(src_tmp,
epsilon
);
71
SimpleTensor<uint8_t>
dst
= convert_to_asymmetric<uint8_t>(dst_tmp,
src
.quantization_info());
72
return
dst
;
73
}
74
75
template
SimpleTensor<float>
mean_std_normalization_layer
(
const
SimpleTensor<float>
&
src
,
float
epsilon
);
76
template
SimpleTensor<half>
mean_std_normalization_layer
(
const
SimpleTensor<half>
&
src
,
float
epsilon
);
77
}
// namespace reference
78
}
// namespace validation
79
}
// namespace test
80
}
// namespace arm_compute
arm_compute::test::validation::src
SimpleTensor< float > src
Definition:
DFT.cpp:155
arm_compute::test::validation::dst
auto dst
Definition:
DFT.cpp:170
Types.h
caffe_mnist_image_extractor.cols
cols
Definition:
caffe_mnist_image_extractor.py:30
arm_compute::test::validation::convert_from_asymmetric
SimpleTensor< float > convert_from_asymmetric(const SimpleTensor< uint8_t > &src)
Definition:
Helpers.cpp:39
MeanStdDevNormalizationLayer.h
arm_compute::test::SimpleTensor
Simple tensor object that stores elements in a consecutive chunk of memory.
Definition:
SimpleTensor.h:58
arm_compute::test::validation::reference::mean_std_normalization_layer
SimpleTensor< T > mean_std_normalization_layer(const SimpleTensor< T > &src, float epsilon)
Definition:
MeanStdDevNormalizationLayer.cpp:37
arm_compute
Copyright (c) 2017-2024 Arm Limited.
Definition:
introduction.dox:24
arm_compute::quantization::epsilon
constexpr float epsilon
Definition:
AsymmHelpers.cpp:41
tests
validation
reference
MeanStdDevNormalizationLayer.cpp
Generated on Mon Mar 18 2024 11:32:05 for Compute Library by
1.8.17