diff options
author | Michalis Spyrou <michalis.spyrou@arm.com> | 2019-04-05 17:18:36 +0100 |
---|---|---|
committer | Georgios Pinitas <georgios.pinitas@arm.com> | 2019-04-16 16:02:13 +0000 |
commit | a9c4472188abef421adb589e2a6fef52727d465f (patch) | |
tree | f8f6540b05049074030c32332b5427e826cc58ea /src/runtime/NEON/functions/NEConcatenateLayer.cpp | |
parent | 2ec6c1eb6ee77b79e8ab6b97b8cd70bcc4c5589d (diff) | |
download | ComputeLibrary-a9c4472188abef421adb589e2a6fef52727d465f.tar.gz |
COMPMID-2051 Refactor shape_calculator::calculate_concatenate_shape
Change-Id: Ibf316718d11fa975d75f226925747b21c4efd127
Signed-off-by: Michalis Spyrou <michalis.spyrou@arm.com>
Reviewed-on: https://review.mlplatform.org/c/974
Comments-Addressed: Arm Jenkins <bsgcomp@arm.com>
Tested-by: Arm Jenkins <bsgcomp@arm.com>
Reviewed-by: Michele Di Giorgio <michele.digiorgio@arm.com>
Diffstat (limited to 'src/runtime/NEON/functions/NEConcatenateLayer.cpp')
-rw-r--r-- | src/runtime/NEON/functions/NEConcatenateLayer.cpp | 35 |
1 files changed, 10 insertions, 25 deletions
diff --git a/src/runtime/NEON/functions/NEConcatenateLayer.cpp b/src/runtime/NEON/functions/NEConcatenateLayer.cpp index e02c0c2c7a..b8cfa2b8f2 100644 --- a/src/runtime/NEON/functions/NEConcatenateLayer.cpp +++ b/src/runtime/NEON/functions/NEConcatenateLayer.cpp @@ -56,15 +56,7 @@ void NEConcatenateLayer::configure(const std::vector<ITensor *> &inputs_vector, ARM_COMPUTE_ERROR_ON_NULLPTR(inputs_vector.at(i)); inputs_vector_info.emplace_back(inputs_vector.at(i)->info()); } - TensorShape output_shape{}; - if(_axis == Window::DimZ) - { - output_shape = arm_compute::misc::shape_calculator::calculate_depth_concatenate_shape(inputs_vector); - } - else - { - output_shape = arm_compute::misc::shape_calculator::calculate_concatenate_shape(inputs_vector, _axis); - } + TensorShape output_shape = arm_compute::misc::shape_calculator::calculate_concatenate_shape(inputs_vector, _axis); // Output auto inizialitation if not yet initialized auto_init_if_empty(*output->info(), output_shape, 1, inputs_vector[0]->info()->data_type()); @@ -109,19 +101,6 @@ Status NEConcatenateLayer::validate(const std::vector<ITensorInfo *> &inputs_vec ARM_COMPUTE_RETURN_ERROR_ON_NULLPTR(output); ARM_COMPUTE_RETURN_ERROR_ON(inputs_vector.size() < 2); - // Output auto inizialitation if not yet initialized - TensorInfo tmp_output_info = *output->clone(); - TensorShape output_shape{}; - if(axis == Window::DimZ) - { - output_shape = arm_compute::misc::shape_calculator::calculate_depth_concatenate_shape(inputs_vector); - } - else - { - output_shape = arm_compute::misc::shape_calculator::calculate_concatenate_shape(inputs_vector, axis); - } - auto_init_if_empty(tmp_output_info, output_shape, 1, inputs_vector[0]->data_type()); - unsigned int offset = 0; for(const auto &input : inputs_vector) { @@ -130,17 +109,17 @@ Status NEConcatenateLayer::validate(const std::vector<ITensorInfo *> &inputs_vec { case Window::DimX: { - ARM_COMPUTE_RETURN_ON_ERROR(NEWidthConcatenateLayerKernel::validate(input, offset, &tmp_output_info)); + ARM_COMPUTE_RETURN_ON_ERROR(NEWidthConcatenateLayerKernel::validate(input, offset, output)); break; } case Window::DimY: { - ARM_COMPUTE_RETURN_ON_ERROR(NEHeightConcatenateLayerKernel::validate(input, offset, &tmp_output_info)); + ARM_COMPUTE_RETURN_ON_ERROR(NEHeightConcatenateLayerKernel::validate(input, offset, output)); break; } case Window::DimZ: { - ARM_COMPUTE_RETURN_ON_ERROR(NEDepthConcatenateLayerKernel::validate(input, offset, &tmp_output_info)); + ARM_COMPUTE_RETURN_ON_ERROR(NEDepthConcatenateLayerKernel::validate(input, offset, output)); break; } default: @@ -149,6 +128,12 @@ Status NEConcatenateLayer::validate(const std::vector<ITensorInfo *> &inputs_vec offset += input->dimension(axis); } + if(output->total_size() != 0) + { + TensorShape output_shape = arm_compute::misc::shape_calculator::calculate_concatenate_shape(inputs_vector, axis); + ARM_COMPUTE_RETURN_ERROR_ON(output_shape.total_size() != output->tensor_shape().total_size()); + } + return Status{}; } |