Files
openvino/ngraph/test/backend/batch_norm.in.cpp
Ilya Churaev faeaf045a9 Graph comparator to ngraph util (#7729)
* Moved FrameworkNode to nGraph

* Moved graph comparator to ngraph test util

* Fixed build

* Try to fix centos

* Fix export target

* Moved engine utils to separate library

* Removed ONNX util from common library

* Fixed build

* Fixed code style
2021-10-01 07:24:28 +03:00

115 lines
4.8 KiB
C++

// Copyright (C) 2018-2021 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "engines_util/test_case.hpp"
#include "engines_util/test_engines.hpp"
#include "gtest/gtest.h"
#include "ngraph/ngraph.hpp"
#include "util/test_control.hpp"
using namespace std;
using namespace ngraph;
static string s_manifest = "${MANIFEST}";
using TestEngine = test::ENGINE_CLASS_NAME(${BACKEND_NAME});
template <typename T>
struct BatchNormTestParams {
std::vector<T> in;
Shape in_shape;
std::vector<T> in_g;
std::vector<T> in_b;
std::vector<T> in_m;
std::vector<T> in_v;
float epsilon;
std::vector<T> out;
};
template <typename T>
static void BatchNormInferenceTest(const BatchNormTestParams<T>& p) {
const Shape ch_shape{p.in_shape.at(1)};
auto input = make_shared<op::Parameter>(element::from<T>(), p.in_shape);
auto gamma = make_shared<op::Parameter>(element::from<T>(), ch_shape);
auto beta = make_shared<op::Parameter>(element::from<T>(), ch_shape);
auto mean = make_shared<op::Parameter>(element::from<T>(), ch_shape);
auto variance = make_shared<op::Parameter>(element::from<T>(), ch_shape);
auto batch_norm = make_shared<op::v5::BatchNormInference>(input, gamma, beta, mean, variance, p.epsilon);
auto f = make_shared<Function>(batch_norm, ParameterVector{input, gamma, beta, mean, variance});
auto test_case = test::TestCase<TestEngine>(f);
test_case.add_input<T>(p.in_shape, p.in);
test_case.add_input<T>(ch_shape, p.in_g);
test_case.add_input<T>(ch_shape, p.in_b);
test_case.add_input<T>(ch_shape, p.in_m);
test_case.add_input<T>(ch_shape, p.in_v);
test_case.add_expected_output<T>(p.in_shape, p.out);
test_case.run_with_tolerance_as_fp(1e-4f);
}
NGRAPH_TEST(${BACKEND_NAME}, batch_norm_inference_2d_f32) {
const std::vector<BatchNormTestParams<float>> batch_norm_tests{
BatchNormTestParams<float>{{1.0, 2.0, 3.0, -1.0, -2.0, -3.0},
Shape{2, 3},
{2.0, 3.0, 4.0},
{0.0, 0.0, 0.0},
{0.0, 0.0, 0.0},
{0.75, 0.75, 0.75},
0.25,
{2.0, 6.0, 12.0, -2.0, -6.0, -12.0}},
BatchNormTestParams<float>{{1.0, 2.0, 3.0, -1.0, -2.0, -3.0},
Shape{2, 3},
{1.0, 1.0, 1.0},
{2.0, -2.0, 3.0},
{0.0, 0.0, 0.0},
{0.75, 0.75, 0.75},
0.25,
{3.0, 0.0, 6.0, 1.0, -4.0, 0.0}},
BatchNormTestParams<float>{{1.0, 2.0, 3.0, -1.0, -2.0, -3.0},
Shape{2, 3},
{1.0, 1.0, 1.0},
{0.0, 0.0, 0.0},
{-2.0, 2.0, -3.0},
{0.75, 0.75, 0.75},
0.25,
{3.0, 0.0, 6.0, 1.0, -4.0, 0.0}},
BatchNormTestParams<float>{{3.0, 5.0, 1.0, -3.0, -5.0, -1.0},
Shape{2, 3},
{1.0, 1.0, 1.0},
{0.0, 0.0, 0.0},
{0.0, 0.0, 0.0},
{2.0, 6.0, 0.0},
0.25,
{2.0, 2.0, 2.0, -2.0, -2.0, -2.0}},
};
for (const auto& test_case : batch_norm_tests) {
BatchNormInferenceTest(test_case);
}
}
NGRAPH_TEST(${BACKEND_NAME}, batch_norm_inference_4d_f32) {
float eps = 0.001;
Shape in_shape{2, 2, 2, 1};
std::vector<float>
in{0.54881352f, 0.71518934f, 0.60276335f, 0.54488319f, 0.42365479f, 0.64589411f, 0.4375872f, 0.89177299f};
std::vector<std::vector<float>> ch_in_1{{1.0, 1.0}, {1.0, 1.0}, {1.0, 1.0}, {1.0, 1.0}};
std::vector<float>
out_1{0.54903894f, 0.71533161f, 0.60296183f, 0.54511058f, 0.42394274f, 0.64607101f, 0.43786817f, 0.89182704f};
std::vector<std::vector<float>> ch_in_2{{1.0, 1.0}, {0.0f, 0.0f}, {0.583388f, 0.619252f}, {0.0119972f, 0.0282681f}};
std::vector<float> out_2{-0.30327f, 1.1561f, -0.096382f, -0.434702f, -1.4011f, 0.548275f, -1.06187f, 1.59295f};
const std::vector<BatchNormTestParams<float>> batch_norm_tests{
BatchNormTestParams<float>{in, in_shape, ch_in_1[0], ch_in_1[1], ch_in_1[2], ch_in_1[3], eps, out_1},
BatchNormTestParams<float>{in, in_shape, ch_in_2[0], ch_in_2[1], ch_in_2[2], ch_in_2[3], eps, out_2}};
for (const auto& test_case : batch_norm_tests) {
BatchNormInferenceTest(test_case);
}
}