From ae12306486efc55293a40048618abe5e8b19151b Mon Sep 17 00:00:00 2001 From: Matthew Sloyan Date: Fri, 7 May 2021 14:18:01 +0000 Subject: Revert "MLCE-418 Reduce layer does not support multiple axes" This reverts commit d905decd256558bbee165e636ce4242ac3b9c917. Reason for revert: LargeGraph_TENSOR_FLOAT32/FLOAT16 CTS tests failures Change-Id: Ie69826549e73775825f45134375b5b2c41aebd01 --- src/backends/aclCommon/ArmComputeSubgraphUtils.hpp | 85 ---------------------- 1 file changed, 85 deletions(-) (limited to 'src/backends/aclCommon/ArmComputeSubgraphUtils.hpp') diff --git a/src/backends/aclCommon/ArmComputeSubgraphUtils.hpp b/src/backends/aclCommon/ArmComputeSubgraphUtils.hpp index 9439ddb61e..a0fca46330 100644 --- a/src/backends/aclCommon/ArmComputeSubgraphUtils.hpp +++ b/src/backends/aclCommon/ArmComputeSubgraphUtils.hpp @@ -6,9 +6,6 @@ #pragma once #include -#include - -#include namespace armnn { @@ -150,86 +147,4 @@ LayerType* FuseLayerWithWeightsAndBiases(OptimizationViews& optimizationViews, return replacementLayer; } -// -// If reduce layer has multiple axes, add new layer for each axis to simulate the same behaviour -// as currently only one axis is supported. -// -template -void ChainReduceLayers(OptimizationViews& optimizationViews, - LayerType* baseLayer, - ReduceDescriptor& reduceDescriptor) -{ - // If layer has single axis don't chain layers. - if (!reduceDescriptor.m_vAxis.empty() && reduceDescriptor.m_vAxis.size() > 1) - { - // Save base layer output shape to compare against the output of the final layer added. - const TensorInfo baseLayerInfo = baseLayer->GetOutputSlot(0).GetTensorInfo(); - - // Vector of new chained layers, used for substitution. - std::vector layers; - - // Vector of axes so each layer is reshaped correctly. - std::vector reduceAxis; - unsigned int recalulateAxis = 0; - - for (unsigned int i = 0; i != reduceDescriptor.m_vAxis.size(); ++i) - { - // Get TensorInfo to populate subsequent layers with. - TensorInfo layerInfoToModify = baseLayer->GetInputSlot(0).GetConnectedOutputSlot()->GetTensorInfo(); - - reduceAxis.emplace_back(reduceDescriptor.m_vAxis[i]); - - // Calculate new shape based on the axes. - const TensorShape& reducedShape = ComputeReductionTensorShape(layerInfoToModify, - reduceAxis, - reduceDescriptor.m_KeepDims); - layerInfoToModify.SetShape(reducedShape); - - // Create a vector for the single axis to be assigned to the descriptor. - // Update axis if keepDims is set reduce layers correctly. - std::vector singleAxis(1, reduceDescriptor.m_vAxis[i] - recalulateAxis); - - // Create a descriptor and assign single axis. - ReduceDescriptor newReduceDescriptor = baseLayer->GetParameters(); - newReduceDescriptor.m_vAxis.assign(singleAxis.begin(), singleAxis.end()); - - // Add new layer to graph. - std::string layerName = "reduce_layer_" + std::to_string(i); - Layer* replacementLayer = optimizationViews.GetGraph().AddLayer(newReduceDescriptor, - layerName.c_str()); - - // Connect previous layer with new layer. - // The first and last layer will be connected when the subgraph is replaced. - if (!layers.empty()) - { - layers[i - 1]->GetOutputSlot(0).Connect(replacementLayer->GetInputSlot(0)); - } - - // Set updated tensorInfo for new layer. - replacementLayer->GetOutputSlot(0).SetTensorInfo(layerInfoToModify); - - if (!reduceDescriptor.m_KeepDims) - { - recalulateAxis++; - } - - layers.emplace_back(replacementLayer); - } - - // Check if the TensorInfo from the last layer equals the inferred output from the original layer. - ARMNN_ASSERT(baseLayerInfo == layers.back()->GetOutputSlot().GetTensorInfo()); - - std::list replacementLayers(layers.begin(), layers.end()); - - // Substitute new chained subgraph for original reduce layer. - SubgraphView substitutionSubgraph(baseLayer); - SubgraphView replacementSubgraph(CreateInputsFrom({replacementLayers.front()}), - CreateOutputsFrom({replacementLayers.back()}), - std::move(replacementLayers)); - - optimizationViews.AddSubstitution({substitutionSubgraph, replacementSubgraph}); - - } -} - } // namespace armnn -- cgit v1.2.1