From 4b5c588ed5bbf635bfb4d20b662db417caa4558f Mon Sep 17 00:00:00 2001 From: Manuel Bottini Date: Tue, 14 May 2019 10:38:30 +0100 Subject: COMPMID-2248 L2NormalizeLayer: negative axis Change-Id: Ic164d7a9ddf1615a2e3b0e10430c34194a70f221 Signed-off-by: Manuel Bottini Reviewed-on: https://review.mlplatform.org/c/1127 Tested-by: Arm Jenkins Reviewed-by: Michalis Spyrou Comments-Addressed: Arm Jenkins --- src/runtime/NEON/functions/NEL2NormalizeLayer.cpp | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) (limited to 'src/runtime/NEON/functions/NEL2NormalizeLayer.cpp') diff --git a/src/runtime/NEON/functions/NEL2NormalizeLayer.cpp b/src/runtime/NEON/functions/NEL2NormalizeLayer.cpp index c9ab5c98e2..88ffdbfd08 100644 --- a/src/runtime/NEON/functions/NEL2NormalizeLayer.cpp +++ b/src/runtime/NEON/functions/NEL2NormalizeLayer.cpp @@ -28,25 +28,31 @@ namespace arm_compute { +namespace +{ +constexpr int max_input_tensor_dim = 3; +} // namespace + NEL2NormalizeLayer::NEL2NormalizeLayer(std::shared_ptr memory_manager) : _memory_group(std::move(memory_manager)), _reduce_func(), _normalize_kernel(), _sumsq() { } -void NEL2NormalizeLayer::configure(ITensor *input, ITensor *output, unsigned int axis, float epsilon) +void NEL2NormalizeLayer::configure(ITensor *input, ITensor *output, int axis, float epsilon) { // Manage intermediate buffers _memory_group.manage(&_sumsq); // Configure Kernels - _reduce_func.configure(input, &_sumsq, axis, ReductionOperation::SUM_SQUARE); + const uint32_t actual_axis = wrap_around(axis, max_input_tensor_dim); + _reduce_func.configure(input, &_sumsq, actual_axis, ReductionOperation::SUM_SQUARE); _normalize_kernel.configure(input, &_sumsq, output, axis, epsilon); // Allocate intermediate tensors _sumsq.allocator()->allocate(); } -Status NEL2NormalizeLayer::validate(const ITensorInfo *input, const ITensorInfo *output, unsigned int axis, float epsilon) +Status NEL2NormalizeLayer::validate(const ITensorInfo *input, const ITensorInfo *output, int axis, float epsilon) { TensorShape shape(input->tensor_shape()); @@ -55,10 +61,11 @@ Status NEL2NormalizeLayer::validate(const ITensorInfo *input, const ITensorInfo sum_sq.set_data_type(input->data_type()); sum_sq.set_tensor_shape(shape); - ARM_COMPUTE_RETURN_ON_ERROR(NEReductionOperation::validate(input, &sum_sq, axis, ReductionOperation::SUM_SQUARE)); + const uint32_t actual_axis = wrap_around(axis, max_input_tensor_dim); + ARM_COMPUTE_RETURN_ON_ERROR(NEReductionOperation::validate(input, &sum_sq, actual_axis, ReductionOperation::SUM_SQUARE)); // Reduce shape on axis - shape.set(axis, 1); + shape.set(actual_axis, 1); sum_sq.set_tensor_shape(shape); ARM_COMPUTE_RETURN_ON_ERROR(NEL2NormalizeLayerKernel::validate(input, &sum_sq, output, axis, epsilon)); -- cgit v1.2.1