From 033626d1ee9256032309bbc6685c3a69a919cd64 Mon Sep 17 00:00:00 2001 From: Les Bell Date: Mon, 3 Sep 2018 16:24:52 +0100 Subject: IVGCVSW-1783 refactor add/mul/div layers Change-Id: Ic043030455b3cf8ad7f92fd0a75175c1827a95f4 --- src/armnn/layers/AdditionLayer.cpp | 53 +++----------------------------------- 1 file changed, 4 insertions(+), 49 deletions(-) (limited to 'src/armnn/layers/AdditionLayer.cpp') diff --git a/src/armnn/layers/AdditionLayer.cpp b/src/armnn/layers/AdditionLayer.cpp index ab73a918db..c1413102b8 100644 --- a/src/armnn/layers/AdditionLayer.cpp +++ b/src/armnn/layers/AdditionLayer.cpp @@ -3,6 +3,7 @@ // See LICENSE file in the project root for full license information. // #include "AdditionLayer.hpp" + #include "LayerCloneBase.hpp" #include @@ -13,11 +14,12 @@ namespace armnn { AdditionLayer::AdditionLayer(const char* name) - : Layer(2, 1, LayerType::Addition, name) + : ArithmeticBaseLayer(2, 1, LayerType::Addition, name) { } -std::unique_ptr AdditionLayer::CreateWorkload(const Graph& graph, const IWorkloadFactory& factory) const +std::unique_ptr AdditionLayer::CreateWorkload(const Graph& graph, + const IWorkloadFactory& factory) const { AdditionQueueDescriptor descriptor; return factory.CreateAddition(descriptor, PrepInfoAndDesc(descriptor, graph)); @@ -28,51 +30,4 @@ AdditionLayer* AdditionLayer::Clone(Graph& graph) const return CloneBase(graph, GetName()); } -std::vector AdditionLayer::InferOutputShapes(const std::vector& inputShapes) const -{ - BOOST_ASSERT(inputShapes.size() == 2); - auto& input0 = inputShapes[0]; - auto& input1 = inputShapes[1]; - - // Get the max of the inputs. - BOOST_ASSERT(input0.GetNumDimensions() == input1.GetNumDimensions()); - unsigned int numDims = input0.GetNumDimensions(); - std::vector dims(numDims); - - for (unsigned int i = 0; i < numDims; i++) - { - unsigned int dim0 = input0[i]; - unsigned int dim1 = input1[i]; - - // Validates inputs are broadcast compatible. -#if !NDEBUG - if (dim0 != dim1) - { - BOOST_ASSERT_MSG(dim0 == 1 || dim1 == 1, "Dimensions should either match or one should be of size 1."); - } -#endif - - dims[i] = std::max(dim0, dim1); - } - - return std::vector({ TensorShape(numDims, dims.data()) }); -} - -void AdditionLayer::ValidateTensorShapesFromInputs() -{ - VerifyLayerConnections(2, CHECK_LOCATION()); - - auto inferredShapes = InferOutputShapes({ - GetInputSlot(0).GetConnection()->GetTensorInfo().GetShape(), - GetInputSlot(1).GetConnection()->GetTensorInfo().GetShape() - }); - - BOOST_ASSERT(inferredShapes.size() == 1); - - ConditionalThrowIfNotEqual( - "AdditionLayer: TensorShape set on OutputSlot[0] does not match the inferred shape.", - GetOutputSlot(0).GetTensorInfo().GetShape(), - inferredShapes[0]); -} - } // namespace armnn -- cgit v1.2.1