From 16cf3c2318978580006633ea4d5eccdd8ba1194a Mon Sep 17 00:00:00 2001 From: Georgios Pinitas Date: Thu, 10 Sep 2020 20:26:48 +0100 Subject: COMPMID-3764: Failures on fp16 for L2NormalizationLayer when zero inputs Alter the default lower bound used for the norm from 1e-12 to 1e-6 to be representable by the half precision dynamic range. Signed-off-by: Georgios Pinitas Change-Id: I8d3103b8345eb4c464a76b4f4ba5ef596d81da93 Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/3960 Tested-by: Arm Jenkins Reviewed-by: Michele Di Giorgio Comments-Addressed: Arm Jenkins --- arm_compute/runtime/NEON/functions/NEL2NormalizeLayer.h | 6 +++--- tests/validation/NEON/L2NormalizeLayer.cpp | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/arm_compute/runtime/NEON/functions/NEL2NormalizeLayer.h b/arm_compute/runtime/NEON/functions/NEL2NormalizeLayer.h index 31e0c61409..66750a5411 100644 --- a/arm_compute/runtime/NEON/functions/NEL2NormalizeLayer.h +++ b/arm_compute/runtime/NEON/functions/NEL2NormalizeLayer.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017-2019 Arm Limited. + * Copyright (c) 2017-2020 Arm Limited. * * SPDX-License-Identifier: MIT * @@ -55,7 +55,7 @@ public: * @param[in] axis Axis along which to reduce. Negative values wrap around. Maximum supported actual reduction axis : 2 * @param[in] epsilon (Optional) Lower bound value for the normalization. */ - void configure(ITensor *input, ITensor *output, int axis, float epsilon = 1e-12f); + void configure(ITensor *input, ITensor *output, int axis, float epsilon = 1e-6f); /** Static function to check if given info will lead to a valid configuration of @ref NEL2NormalizeLayer. * @@ -66,7 +66,7 @@ public: * * @return a status */ - static Status validate(const ITensorInfo *input, const ITensorInfo *output, int axis, float epsilon = 1e-12f); + static Status validate(const ITensorInfo *input, const ITensorInfo *output, int axis, float epsilon = 1e-6f); // Inherited methods overridden: void run() override; diff --git a/tests/validation/NEON/L2NormalizeLayer.cpp b/tests/validation/NEON/L2NormalizeLayer.cpp index 37146f4015..82e4beb05a 100644 --- a/tests/validation/NEON/L2NormalizeLayer.cpp +++ b/tests/validation/NEON/L2NormalizeLayer.cpp @@ -100,7 +100,7 @@ TEST_SUITE(FP32) FIXTURE_DATA_TEST_CASE(RunSmall, NEL2NormalizeLayerFixture, framework::DatasetMode::PRECOMMIT, combine(combine(combine(combine(datasets::SmallShapes(), framework::dataset::make("DataType", DataType::F32)), framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })), framework::dataset::make("Axis", { -1, 0, 1, 2 })), - framework::dataset::make("Epsilon", { 1e-12 }))) + framework::dataset::make("Epsilon", { 1e-6 }))) { // Validate output validate(Accessor(_target), _reference, tolerance_f32); @@ -109,7 +109,7 @@ FIXTURE_DATA_TEST_CASE(RunSmall, NEL2NormalizeLayerFixture, framework::Da FIXTURE_DATA_TEST_CASE(RunLarge, NEL2NormalizeLayerFixture, framework::DatasetMode::NIGHTLY, combine(combine(combine(combine(datasets::LargeShapes(), framework::dataset::make("DataType", DataType::F32)), framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })), framework::dataset::make("Axis", { -1, 0, 2 })), - framework::dataset::make("Epsilon", { 1e-12 }))) + framework::dataset::make("Epsilon", { 1e-6 }))) { // Validate output validate(Accessor(_target), _reference, tolerance_f32); @@ -121,7 +121,7 @@ TEST_SUITE(FP16) FIXTURE_DATA_TEST_CASE(RunSmall, NEL2NormalizeLayerFixture, framework::DatasetMode::PRECOMMIT, combine(combine(combine(combine(datasets::SmallShapes(), framework::dataset::make("DataType", DataType::F16)), framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })), framework::dataset::make("Axis", { -1, 0, 1, 2 })), - framework::dataset::make("Epsilon", { 1e-12 }))) + framework::dataset::make("Epsilon", { 1e-6 }))) { // Validate output validate(Accessor(_target), _reference, tolerance_f16); @@ -130,7 +130,7 @@ FIXTURE_DATA_TEST_CASE(RunSmall, NEL2NormalizeLayerFixture, framework::Dat FIXTURE_DATA_TEST_CASE(RunLarge, NEL2NormalizeLayerFixture, framework::DatasetMode::NIGHTLY, combine(combine(combine(combine(datasets::LargeShapes(), framework::dataset::make("DataType", DataType::F16)), framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })), framework::dataset::make("Axis", { -1, 0, 2 })), - framework::dataset::make("Epsilon", { 1e-12 }))) + framework::dataset::make("Epsilon", { 1e-6 }))) { // Validate output validate(Accessor(_target), _reference, tolerance_f16); -- cgit v1.2.1