ArmNN
 21.11
NetworkImpl Class Reference

Private implementation of INetwork. More...

#include <Network.hpp>

Public Member Functions

 NetworkImpl (NetworkOptions networkOptions={})
 
 ~NetworkImpl ()
 
const GraphGetGraph () const
 
Status PrintGraph ()
 
IConnectableLayerAddInputLayer (LayerBindingId id, const char *name=nullptr)
 
IConnectableLayerAddActivationLayer (const ActivationDescriptor &activationDescriptor, const char *name=nullptr)
 
IConnectableLayerAddAdditionLayer (const char *name=nullptr)
 
IConnectableLayerAddArgMinMaxLayer (const ArgMinMaxDescriptor &desc, const char *name=nullptr)
 
IConnectableLayerAddBatchNormalizationLayer (const BatchNormalizationDescriptor &desc, const ConstTensor &mean, const ConstTensor &variance, const ConstTensor &beta, const ConstTensor &gamma, const char *name=nullptr)
 
IConnectableLayerAddBatchToSpaceNdLayer (const BatchToSpaceNdDescriptor &batchToSpaceNdDescriptor, const char *name=nullptr)
 
IConnectableLayerAddCastLayer (const char *name=nullptr)
 
IConnectableLayerAddChannelShuffleLayer (const ChannelShuffleDescriptor &channelShuffleDescriptor, const char *name=nullptr)
 
IConnectableLayerAddComparisonLayer (const ComparisonDescriptor &comparisonDescriptor, const char *name=nullptr)
 
IConnectableLayerAddConcatLayer (const ConcatDescriptor &concatDescriptor, const char *name=nullptr)
 
IConnectableLayerAddConvolution2dLayer (const Convolution2dDescriptor &convolution2dDescriptor, const ConstTensor &weights, const Optional< ConstTensor > &biases, const char *name=nullptr)
 
IConnectableLayerAddConvolution2dLayer (const Convolution2dDescriptor &convolution2dDescriptor, const ConstTensor &weights, const char *name=nullptr)
 
IConnectableLayerAddConvolution2dLayer (const Convolution2dDescriptor &convolution2dDescriptor, const ConstTensor &weights, const ConstTensor &biases, const char *name=nullptr)
 
IConnectableLayerAddConvolution3dLayer (const Convolution3dDescriptor &convolution3dDescriptor, const char *name=nullptr)
 
IConnectableLayerAddConstantLayer (const ConstTensor &input, const char *name=nullptr)
 
IConnectableLayerAddDepthToSpaceLayer (const DepthToSpaceDescriptor &depthToSpaceDescriptor, const char *name=nullptr)
 
IConnectableLayerAddDepthwiseConvolution2dLayer (const DepthwiseConvolution2dDescriptor &convolution2dDescriptor, const ConstTensor &weights, const Optional< ConstTensor > &biases, const char *name=nullptr)
 
IConnectableLayerAddDequantizeLayer (const char *name=nullptr)
 
IConnectableLayerAddDetectionPostProcessLayer (const DetectionPostProcessDescriptor &descriptor, const ConstTensor &anchors, const char *name=nullptr)
 
IConnectableLayerAddDivisionLayer (const char *name=nullptr)
 
IConnectableLayerAddElementwiseUnaryLayer (const ElementwiseUnaryDescriptor &elementwiseUnaryDescriptor, const char *name=nullptr)
 
IConnectableLayerAddMergeLayer (const char *name=nullptr)
 
IConnectableLayerAddFillLayer (const FillDescriptor &fillDescriptor, const char *name=nullptr)
 
IConnectableLayerAddFloorLayer (const char *name=nullptr)
 
IConnectableLayerAddFullyConnectedLayer (const FullyConnectedDescriptor &fullyConnectedDescriptor, const char *name=nullptr)
 
IConnectableLayerAddFullyConnectedLayer (const FullyConnectedDescriptor &fullyConnectedDescriptor, const Optional< ConstTensor > &weights, const Optional< ConstTensor > &biases, const char *name=nullptr)
 
IConnectableLayerAddGatherLayer (const GatherDescriptor &gatherDescriptor, const char *name=nullptr)
 
IConnectableLayerAddInstanceNormalizationLayer (const InstanceNormalizationDescriptor &desc, const char *name=nullptr)
 
IConnectableLayerAddL2NormalizationLayer (const L2NormalizationDescriptor &desc, const char *name=nullptr)
 
IConnectableLayerAddLogSoftmaxLayer (const LogSoftmaxDescriptor &logSoftmaxDescriptor, const char *name=nullptr)
 
IConnectableLayerAddLogicalBinaryLayer (const LogicalBinaryDescriptor &logicalBinaryDescriptor, const char *name=nullptr)
 
IConnectableLayerAddLstmLayer (const LstmDescriptor &descriptor, const LstmInputParams &params, const char *name=nullptr)
 
IConnectableLayerAddMaximumLayer (const char *name=nullptr)
 
IConnectableLayerAddMeanLayer (const MeanDescriptor &meanDescriptor, const char *name=nullptr)
 
IConnectableLayerAddMinimumLayer (const char *name=nullptr)
 
IConnectableLayerAddMultiplicationLayer (const char *name=nullptr)
 
IConnectableLayerAddNormalizationLayer (const NormalizationDescriptor &normalizationDescriptor, const char *name=nullptr)
 
IConnectableLayerAddOutputLayer (LayerBindingId id, const char *name=nullptr)
 
IConnectableLayerAddPadLayer (const PadDescriptor &padDescriptor, const char *name=nullptr)
 
IConnectableLayerAddPermuteLayer (const PermuteDescriptor &permuteDescriptor, const char *name=nullptr)
 
IConnectableLayerAddPooling2dLayer (const Pooling2dDescriptor &pooling2dDescriptor, const char *name=nullptr)
 
IConnectableLayerAddPreluLayer (const char *name=nullptr)
 
IConnectableLayerAddQuantizeLayer (const char *name=nullptr)
 
IConnectableLayerAddQLstmLayer (const QLstmDescriptor &descriptor, const LstmInputParams &params, const char *name=nullptr)
 
IConnectableLayerAddQuantizedLstmLayer (const QuantizedLstmInputParams &params, const char *name=nullptr)
 
IConnectableLayerAddRankLayer (const char *name=nullptr)
 
IConnectableLayerAddReduceLayer (const ReduceDescriptor &reduceDescriptor, const char *name=nullptr)
 
IConnectableLayerAddResizeLayer (const ResizeDescriptor &resizeDescriptor, const char *name=nullptr)
 
IConnectableLayerAddReshapeLayer (const ReshapeDescriptor &reshapeDescriptor, const char *name=nullptr)
 
IConnectableLayerAddShapeLayer (const char *name=nullptr)
 
IConnectableLayerAddSliceLayer (const SliceDescriptor &sliceDescriptor, const char *name=nullptr)
 
IConnectableLayerAddSoftmaxLayer (const SoftmaxDescriptor &softmaxDescriptor, const char *name=nullptr)
 
IConnectableLayerAddSplitterLayer (const ViewsDescriptor &splitterDescriptor, const char *name=nullptr)
 
IConnectableLayerAddSpaceToBatchNdLayer (const SpaceToBatchNdDescriptor &spaceToBatchNdDescriptor, const char *name=nullptr)
 
IConnectableLayerAddSpaceToDepthLayer (const SpaceToDepthDescriptor &spaceToDepthDescriptor, const char *name=nullptr)
 
IConnectableLayerAddStackLayer (const StackDescriptor &stackDescriptor, const char *name=nullptr)
 
IConnectableLayerAddStandInLayer (const StandInDescriptor &descriptor, const char *name=nullptr)
 
IConnectableLayerAddStridedSliceLayer (const StridedSliceDescriptor &stridedSliceDescriptor, const char *name=nullptr)
 
IConnectableLayerAddSubtractionLayer (const char *name=nullptr)
 
IConnectableLayerAddSwitchLayer (const char *name=nullptr)
 
IConnectableLayerAddTransposeConvolution2dLayer (const TransposeConvolution2dDescriptor &descriptor, const ConstTensor &weights, const Optional< ConstTensor > &biases, const char *name=nullptr)
 
IConnectableLayerAddTransposeLayer (const TransposeDescriptor &transposeDescriptor, const char *name=nullptr)
 
IConnectableLayerAddUnidirectionalSequenceLstmLayer (const UnidirectionalSequenceLstmDescriptor &descriptor, const LstmInputParams &params, const char *name=nullptr)
 
ARMNN_NO_DEPRECATE_WARN_BEGIN void Accept (ILayerVisitor &visitor) const
 
ARMNN_NO_DEPRECATE_WARN_END void ExecuteStrategy (IStrategy &strategy) const
 

Detailed Description

Private implementation of INetwork.

Definition at line 31 of file Network.hpp.

Constructor & Destructor Documentation

◆ NetworkImpl()

NetworkImpl ( NetworkOptions  networkOptions = {})

Definition at line 1781 of file Network.cpp.

1782 : m_NetworkOptions(networkOptions),
1783  m_Graph(std::make_unique<Graph>(GetShapeInferenceMethod()))
1784 {}

◆ ~NetworkImpl()

Definition at line 1786 of file Network.cpp.

1787 {
1788 }

Member Function Documentation

◆ Accept()

ARMNN_NO_DEPRECATE_WARN_BEGIN void Accept ( ILayerVisitor &  visitor) const

Definition at line 2753 of file Network.cpp.

References ARMNN_NO_DEPRECATE_WARN_END, and NetworkImpl::GetGraph().

Referenced by NetworkImpl::GetGraph().

2754 {
2755  for (auto layer : GetGraph())
2756  {
2757  layer->Accept(visitor);
2758  };
2759 }
const Graph & GetGraph() const
Definition: Network.hpp:37

◆ AddActivationLayer()

IConnectableLayer * AddActivationLayer ( const ActivationDescriptor activationDescriptor,
const char *  name = nullptr 
)

Definition at line 2036 of file Network.cpp.

Referenced by NetworkImpl::GetGraph(), and TEST_SUITE().

2038 {
2039  return m_Graph->AddLayer<ActivationLayer>(activationDescriptor, name);
2040 }

◆ AddAdditionLayer()

IConnectableLayer * AddAdditionLayer ( const char *  name = nullptr)

Definition at line 2082 of file Network.cpp.

Referenced by NetworkImpl::GetGraph(), and TEST_SUITE().

2083 {
2084  return m_Graph->AddLayer<AdditionLayer>(name);
2085 }

◆ AddArgMinMaxLayer()

IConnectableLayer * AddArgMinMaxLayer ( const ArgMinMaxDescriptor desc,
const char *  name = nullptr 
)

Definition at line 2042 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2044 {
2045  return m_Graph->AddLayer<ArgMinMaxLayer>(argMinMaxDescriptor, name);
2046 }

◆ AddBatchNormalizationLayer()

IConnectableLayer * AddBatchNormalizationLayer ( const BatchNormalizationDescriptor desc,
const ConstTensor mean,
const ConstTensor variance,
const ConstTensor beta,
const ConstTensor gamma,
const char *  name = nullptr 
)

Definition at line 2097 of file Network.cpp.

References BatchNormalizationLayer::m_Mean.

Referenced by NetworkImpl::GetGraph(), TEST_SUITE(), and armnn::TEST_SUITE().

2103 {
2104  const auto layer = m_Graph->AddLayer<BatchNormalizationLayer>(desc, name);
2105 
2106  layer->m_Mean = std::make_shared<ScopedTensorHandle>(mean);
2107  layer->m_Variance = std::make_shared<ScopedTensorHandle>(variance);
2108  layer->m_Beta = std::make_shared<ScopedTensorHandle>(beta);
2109  layer->m_Gamma = std::make_shared<ScopedTensorHandle>(gamma);
2110 
2111  return layer;
2112 }

◆ AddBatchToSpaceNdLayer()

IConnectableLayer * AddBatchToSpaceNdLayer ( const BatchToSpaceNdDescriptor batchToSpaceNdDescriptor,
const char *  name = nullptr 
)

Definition at line 1801 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

1803 {
1804  return m_Graph->AddLayer<BatchToSpaceNdLayer>(batchToSpaceNdDescriptor, name);
1805 }

◆ AddCastLayer()

IConnectableLayer * AddCastLayer ( const char *  name = nullptr)

Definition at line 1807 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

1808 {
1809  return m_Graph->AddLayer<CastLayer>(name);
1810 }

◆ AddChannelShuffleLayer()

IConnectableLayer * AddChannelShuffleLayer ( const ChannelShuffleDescriptor channelShuffleDescriptor,
const char *  name = nullptr 
)

Definition at line 1811 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

1813 {
1814  return m_Graph->AddLayer<ChannelShuffleLayer>(channelShuffleDescriptor, name);
1815 }

◆ AddComparisonLayer()

IConnectableLayer * AddComparisonLayer ( const ComparisonDescriptor comparisonDescriptor,
const char *  name = nullptr 
)

Definition at line 1817 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

1819 {
1820  return m_Graph->AddLayer<ComparisonLayer>(comparisonDescriptor, name);
1821 }

◆ AddConcatLayer()

IConnectableLayer * AddConcatLayer ( const ConcatDescriptor concatDescriptor,
const char *  name = nullptr 
)

Definition at line 1917 of file Network.cpp.

References OptionalBase::has_value(), Convolution2dDescriptor::m_BiasEnabled, Convolution2dLayer::m_Weight, and OptionalReferenceSwitch< std::is_reference< T >::value, T >::value().

Referenced by NetworkImpl::GetGraph(), and TEST_SUITE().

1919 {
1920  return m_Graph->AddLayer<ConcatLayer>(concatDescriptor, name);
1921 }

◆ AddConstantLayer()

IConnectableLayer * AddConstantLayer ( const ConstTensor input,
const char *  name = nullptr 
)

Definition at line 2153 of file Network.cpp.

References ConstantLayer::m_LayerOutput.

Referenced by NetworkImpl::GetGraph(), TEST_SUITE(), and armnn::TEST_SUITE().

2154 {
2155  auto layer = m_Graph->AddLayer<ConstantLayer>(name);
2156 
2157  layer->m_LayerOutput = std::make_shared<ScopedTensorHandle>(input);
2158 
2159  return layer;
2160 }

◆ AddConvolution2dLayer() [1/3]

IConnectableLayer * AddConvolution2dLayer ( const Convolution2dDescriptor convolution2dDescriptor,
const ConstTensor weights,
const Optional< ConstTensor > &  biases,
const char *  name = nullptr 
)

Definition at line 1945 of file Network.cpp.

Referenced by NetworkImpl::GetGraph(), TEST_SUITE(), and armnn::TEST_SUITE().

1949 {
1950  return AddConvolution2dLayerImpl(convolution2dDescriptor, weights, biases, name);
1951 }

◆ AddConvolution2dLayer() [2/3]

IConnectableLayer * AddConvolution2dLayer ( const Convolution2dDescriptor convolution2dDescriptor,
const ConstTensor weights,
const char *  name = nullptr 
)

Definition at line 1953 of file Network.cpp.

1956 {
1957  Optional<ConstTensor> biases;
1958  return AddConvolution2dLayerImpl(convolution2dDescriptor, weights, biases, name);
1959 }

◆ AddConvolution2dLayer() [3/3]

IConnectableLayer * AddConvolution2dLayer ( const Convolution2dDescriptor convolution2dDescriptor,
const ConstTensor weights,
const ConstTensor biases,
const char *  name = nullptr 
)

Definition at line 1961 of file Network.cpp.

1965 {
1966  Optional<ConstTensor> optionalBiases(biases);
1967  return AddConvolution2dLayerImpl(convolution2dDescriptor, weights, optionalBiases, name);
1968 }

◆ AddConvolution3dLayer()

IConnectableLayer * AddConvolution3dLayer ( const Convolution3dDescriptor convolution3dDescriptor,
const char *  name = nullptr 
)

Definition at line 1970 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

1972 {
1973  return m_Graph->AddLayer<Convolution3dLayer>(convolution3dDescriptor, name);
1974 }

◆ AddDepthToSpaceLayer()

IConnectableLayer * AddDepthToSpaceLayer ( const DepthToSpaceDescriptor depthToSpaceDescriptor,
const char *  name = nullptr 
)

Definition at line 1976 of file Network.cpp.

References OptionalBase::has_value(), DepthwiseConvolution2dDescriptor::m_BiasEnabled, DepthwiseConvolution2dLayer::m_Weight, and OptionalReferenceSwitch< std::is_reference< T >::value, T >::value().

Referenced by NetworkImpl::GetGraph().

1978 {
1979  return m_Graph->AddLayer<DepthToSpaceLayer>(depthToSpaceDescriptor, name);
1980 }

◆ AddDepthwiseConvolution2dLayer()

IConnectableLayer * AddDepthwiseConvolution2dLayer ( const DepthwiseConvolution2dDescriptor convolution2dDescriptor,
const ConstTensor weights,
const Optional< ConstTensor > &  biases,
const char *  name = nullptr 
)

Definition at line 2005 of file Network.cpp.

Referenced by NetworkImpl::GetGraph(), and armnn::TEST_SUITE().

2010 {
2011  return AddDepthwiseConvolution2dLayerImpl(convolution2dDescriptor, weights, biases, name);
2012 }

◆ AddDequantizeLayer()

IConnectableLayer * AddDequantizeLayer ( const char *  name = nullptr)

Definition at line 2351 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2352 {
2353  return m_Graph->AddLayer<DequantizeLayer>(name);
2354 }

◆ AddDetectionPostProcessLayer()

IConnectableLayer * AddDetectionPostProcessLayer ( const DetectionPostProcessDescriptor descriptor,
const ConstTensor anchors,
const char *  name = nullptr 
)

Definition at line 2014 of file Network.cpp.

References DetectionPostProcessLayer::m_Anchors.

Referenced by NetworkImpl::GetGraph().

2016 {
2017  const auto layer = m_Graph->AddLayer<DetectionPostProcessLayer>(descriptor, name);
2018 
2019  layer->m_Anchors = std::make_shared<ScopedTensorHandle>(anchors);
2020 
2021  return layer;
2022 }

◆ AddDivisionLayer()

IConnectableLayer * AddDivisionLayer ( const char *  name = nullptr)

Definition at line 2326 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2327 {
2328  return m_Graph->AddLayer<DivisionLayer>(name);
2329 }

◆ AddElementwiseUnaryLayer()

IConnectableLayer * AddElementwiseUnaryLayer ( const ElementwiseUnaryDescriptor elementwiseUnaryDescriptor,
const char *  name = nullptr 
)

Definition at line 1823 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

1825 {
1826  return m_Graph->AddLayer<ElementwiseUnaryLayer>(elementwiseUnaryDescriptor, name);
1827 }

◆ AddFillLayer()

IConnectableLayer * AddFillLayer ( const FillDescriptor fillDescriptor,
const char *  name = nullptr 
)

Definition at line 1829 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

1831 {
1832  return m_Graph->AddLayer<FillLayer>(fillDescriptor, name);
1833 }

◆ AddFloorLayer()

IConnectableLayer * AddFloorLayer ( const char *  name = nullptr)

Definition at line 2180 of file Network.cpp.

Referenced by NetworkImpl::GetGraph(), and TEST_SUITE().

2181 {
2182  return m_Graph->AddLayer<FloorLayer>(name);
2183 }

◆ AddFullyConnectedLayer() [1/2]

IConnectableLayer * AddFullyConnectedLayer ( const FullyConnectedDescriptor fullyConnectedDescriptor,
const char *  name = nullptr 
)

Definition at line 1835 of file Network.cpp.

Referenced by NetworkImpl::GetGraph(), TEST_SUITE(), and armnn::TEST_SUITE().

1837 {
1838  return m_Graph->AddLayer<FullyConnectedLayer>(fullyConnectedDescriptor, name);
1839 }

◆ AddFullyConnectedLayer() [2/2]

IConnectableLayer * AddFullyConnectedLayer ( const FullyConnectedDescriptor fullyConnectedDescriptor,
const Optional< ConstTensor > &  weights,
const Optional< ConstTensor > &  biases,
const char *  name = nullptr 
)

Definition at line 1841 of file Network.cpp.

References OutputSlot::Connect(), FullyConnectedDescriptor::GetNumInputs(), Layer::GetOutputSlot(), OptionalBase::has_value(), FullyConnectedDescriptor::m_BiasEnabled, FullyConnectedDescriptor::m_ConstantWeights, ConstantLayer::m_LayerOutput, OutputSlot::SetTensorInfo(), and OptionalReferenceSwitch< std::is_reference< T >::value, T >::value().

1845 {
1846  ConstantLayer* weightsLayer = nullptr;
1847  ConstantLayer* biasLayer = nullptr;
1848  unsigned int numInputs = fullyConnectedDescriptor.GetNumInputs();
1849 
1850  // Add a constant layer for weights
1851  if (weights.has_value())
1852  {
1853  weightsLayer = m_Graph->AddLayer<ConstantLayer>("Weights");
1854  weightsLayer->m_LayerOutput = std::make_shared<ScopedTensorHandle>(weights.value());
1855 
1856  TensorInfo weightsInfo = weightsLayer->m_LayerOutput->GetTensorInfo();
1857  weightsInfo.SetConstant();
1858 
1859  weightsLayer->GetOutputSlot(0).SetTensorInfo(weightsInfo);
1860  }
1861  else if (fullyConnectedDescriptor.m_ConstantWeights)
1862  {
1863  throw InvalidArgumentException("AddFullyConnectedLayer: Constant weights tensor is empty.");
1864  }
1865 
1866  // Add a constant layer for biases
1867  if (biases.has_value() && fullyConnectedDescriptor.m_BiasEnabled)
1868  {
1869  biasLayer = m_Graph->AddLayer<ConstantLayer>("Biases");
1870  biasLayer->m_LayerOutput = std::make_shared<ScopedTensorHandle>(biases.value());
1871 
1872  TensorInfo biasInfo = biasLayer->m_LayerOutput->GetTensorInfo();
1873  biasInfo.SetConstant();
1874 
1875  biasLayer->GetOutputSlot(0).SetTensorInfo(biasInfo);
1876  }
1877 
1878  if (numInputs < 2)
1879  {
1880  throw InvalidArgumentException("AddFullyConnectedLayer: Requires at least 2 input tensors: Input, Weights");
1881  }
1882 
1883  auto layer = m_Graph->AddLayer<FullyConnectedLayer>(fullyConnectedDescriptor, name);
1884 
1885  if (weightsLayer)
1886  {
1887  // Connect weights layer
1888  weightsLayer->GetOutputSlot(0).Connect(layer->GetInputSlot(1));
1889  }
1890 
1891  if ( fullyConnectedDescriptor.m_BiasEnabled && numInputs == 3 )
1892  {
1893  if (biasLayer)
1894  {
1895  // Connect bias layer
1896  biasLayer->GetOutputSlot(0).Connect(layer->GetInputSlot(2));
1897  }
1898  }
1899  else if ( !fullyConnectedDescriptor.m_BiasEnabled && numInputs == 2 )
1900  {
1901  // Bias is disabled
1902  layer->m_Bias = nullptr;
1903  }
1904  else
1905  {
1906  throw InvalidArgumentException(fmt::format(
1907  "AddFullyConnectedLayer: Value mismatch. When bias is enabled in the "
1908  "descriptor the number of inputs is expected to be 3 otherwise 2. "
1909  "BiasEnabled={}, numInputs={}",
1910  fullyConnectedDescriptor.m_BiasEnabled,
1911  numInputs));
1912  }
1913 
1914  return layer;
1915 }

◆ AddGatherLayer()

IConnectableLayer * AddGatherLayer ( const GatherDescriptor gatherDescriptor,
const char *  name = nullptr 
)

Definition at line 2362 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2364 {
2365  return m_Graph->AddLayer<GatherLayer>(gatherDescriptor, name);
2366 }

◆ AddInputLayer()

IConnectableLayer * AddInputLayer ( LayerBindingId  id,
const char *  name = nullptr 
)

Definition at line 1796 of file Network.cpp.

Referenced by NetworkImpl::GetGraph(), armnn::TEST_SUITE(), and TEST_SUITE().

1797 {
1798  return m_Graph->AddLayer<InputLayer>(id, name);
1799 }

◆ AddInstanceNormalizationLayer()

IConnectableLayer * AddInstanceNormalizationLayer ( const InstanceNormalizationDescriptor desc,
const char *  name = nullptr 
)

Definition at line 2135 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2137 {
2138  return m_Graph->AddLayer<InstanceNormalizationLayer>(desc, name);
2139 }

◆ AddL2NormalizationLayer()

IConnectableLayer * AddL2NormalizationLayer ( const L2NormalizationDescriptor desc,
const char *  name = nullptr 
)

Definition at line 2141 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2143 {
2144  return m_Graph->AddLayer<L2NormalizationLayer>(desc, name);
2145 }

◆ AddLogicalBinaryLayer()

IConnectableLayer * AddLogicalBinaryLayer ( const LogicalBinaryDescriptor logicalBinaryDescriptor,
const char *  name = nullptr 
)

Definition at line 2604 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2606 {
2607  return m_Graph->AddLayer<LogicalBinaryLayer>(logicalBinaryDescriptor, name);
2608 }

◆ AddLogSoftmaxLayer()

IConnectableLayer * AddLogSoftmaxLayer ( const LogSoftmaxDescriptor logSoftmaxDescriptor,
const char *  name = nullptr 
)

Definition at line 2147 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2149 {
2150  return m_Graph->AddLayer<LogSoftmaxLayer>(desc, name);
2151 }

◆ AddLstmLayer()

IConnectableLayer * AddLstmLayer ( const LstmDescriptor descriptor,
const LstmInputParams params,
const char *  name = nullptr 
)

Definition at line 2185 of file Network.cpp.

References LstmLayer::m_BasicParameters, LstmInputParams::m_CellBias, LstmInputParams::m_CellLayerNormWeights, LstmInputParams::m_CellToForgetWeights, LstmInputParams::m_CellToInputWeights, LstmInputParams::m_CellToOutputWeights, LstmInputParams::m_ForgetGateBias, LstmInputParams::m_ForgetLayerNormWeights, LstmInputParams::m_InputGateBias, LstmInputParams::m_InputLayerNormWeights, LstmInputParams::m_InputToCellWeights, LstmInputParams::m_InputToForgetWeights, LstmBasicParameters::m_InputToForgetWeights, LstmInputParams::m_InputToInputWeights, LstmInputParams::m_InputToOutputWeights, LstmInputParams::m_OutputGateBias, LstmInputParams::m_OutputLayerNormWeights, LstmInputParams::m_ProjectionBias, LstmInputParams::m_ProjectionWeights, LstmInputParams::m_RecurrentToCellWeights, LstmInputParams::m_RecurrentToForgetWeights, LstmInputParams::m_RecurrentToInputWeights, and LstmInputParams::m_RecurrentToOutputWeights.

Referenced by NetworkImpl::GetGraph(), and armnn::TEST_SUITE().

2188 {
2189  const auto layer = m_Graph->AddLayer<LstmLayer>(descriptor, name);
2190 
2191  //Lstm Basic Parameters
2192  layer->m_BasicParameters.m_InputToForgetWeights =
2193  std::make_shared<ScopedTensorHandle>(*(params.m_InputToForgetWeights));
2194  layer->m_BasicParameters.m_InputToCellWeights =
2195  std::make_shared<ScopedTensorHandle>(*(params.m_InputToCellWeights));
2196  layer->m_BasicParameters.m_InputToOutputWeights =
2197  std::make_shared<ScopedTensorHandle>(*(params.m_InputToOutputWeights));
2198  layer->m_BasicParameters.m_RecurrentToForgetWeights =
2199  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToForgetWeights));
2200  layer->m_BasicParameters.m_RecurrentToCellWeights =
2201  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToCellWeights));
2202  layer->m_BasicParameters.m_RecurrentToOutputWeights =
2203  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToOutputWeights));
2204  layer->m_BasicParameters.m_ForgetGateBias =
2205  std::make_shared<ScopedTensorHandle>(*(params.m_ForgetGateBias));
2206  layer->m_BasicParameters.m_CellBias =
2207  std::make_shared<ScopedTensorHandle>(*(params.m_CellBias));
2208  layer->m_BasicParameters.m_OutputGateBias =
2209  std::make_shared<ScopedTensorHandle>(*(params.m_OutputGateBias));
2210 
2211  //Lstm Cifg parameters
2212  if(!descriptor.m_CifgEnabled)
2213  {
2214  if(params.m_InputToInputWeights == nullptr)
2215  {
2216  throw InvalidArgumentException("AddLstmLayer: Input To Input Weights cannot be NULL "
2217  "when CIFG is disabled.");
2218  }
2219  if(params.m_RecurrentToInputWeights == nullptr)
2220  {
2221  throw InvalidArgumentException(
2222  "AddLstmLayer: Recurrent To Input Weights cannot be NULL "
2223  "when CIFG is disabled.");
2224  }
2225  if(params.m_InputGateBias == nullptr)
2226  {
2227  throw InvalidArgumentException("AddLstmLayer: Input Gate Bias cannot be NULL "
2228  "when CIFG is disabled.");
2229  }
2230  layer->m_CifgParameters.m_InputToInputWeights =
2231  std::make_shared<ScopedTensorHandle>(*(params.m_InputToInputWeights));
2232  layer->m_CifgParameters.m_RecurrentToInputWeights =
2233  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToInputWeights));
2234  layer->m_CifgParameters.m_InputGateBias =
2235  std::make_shared<ScopedTensorHandle>(*(params.m_InputGateBias));
2236  }
2237 
2238  //Lstm projection parameters
2239  if(descriptor.m_ProjectionEnabled)
2240  {
2241  if(params.m_ProjectionWeights == nullptr)
2242  {
2243  throw InvalidArgumentException("AddLstmLayer: Projection Weights cannot be NULL "
2244  "when projection is enabled.");
2245  }
2246  layer->m_ProjectionParameters.m_ProjectionWeights =
2247  std::make_shared<ScopedTensorHandle>(*(params.m_ProjectionWeights));
2248  if(params.m_ProjectionBias != nullptr)
2249  {
2250  layer->m_ProjectionParameters.m_ProjectionBias =
2251  std::make_shared<ScopedTensorHandle>(*(params.m_ProjectionBias));
2252  }
2253  }
2254 
2255  //Lstm Peephole params
2256  if(descriptor.m_PeepholeEnabled)
2257  {
2258  if(!descriptor.m_CifgEnabled)
2259  {
2260  if(params.m_CellToInputWeights == nullptr)
2261  {
2262  throw InvalidArgumentException("AddLstmLayer: Cell To Input Weights cannot be NULL "
2263  "when Peephole is enabled and CIFG disabled.");
2264  }
2265 
2266  layer->m_PeepholeParameters.m_CellToInputWeights =
2267  std::make_shared<ScopedTensorHandle>(*(params.m_CellToInputWeights));
2268  }
2269 
2270  if(params.m_CellToForgetWeights == nullptr)
2271  {
2272  throw InvalidArgumentException("AddLstmLayer: Cell To Forget Weights cannot be NULL "
2273  "when Peephole is enabled.");
2274  }
2275  if(params.m_CellToOutputWeights == nullptr)
2276  {
2277  throw InvalidArgumentException("AddLstmLayer: Cell To Output Weights cannot be NULL "
2278  "when Peephole is enabled.");
2279  }
2280 
2281  layer->m_PeepholeParameters.m_CellToForgetWeights =
2282  std::make_shared<ScopedTensorHandle>(*(params.m_CellToForgetWeights));
2283  layer->m_PeepholeParameters.m_CellToOutputWeights =
2284  std::make_shared<ScopedTensorHandle>(*(params.m_CellToOutputWeights));
2285  }
2286 
2287  //Lstm Layer Normalization params
2288  if(descriptor.m_LayerNormEnabled)
2289  {
2290  if(!descriptor.m_CifgEnabled)
2291  {
2292  if(params.m_InputLayerNormWeights == nullptr)
2293  {
2294  throw InvalidArgumentException("AddLstmLayer: Input layer normalization weights cannot be NULL "
2295  "when layer normalization is enabled and CIFG disabled.");
2296  }
2297  layer->m_LayerNormParameters.m_InputLayerNormWeights =
2298  std::make_shared<ScopedTensorHandle>(*(params.m_InputLayerNormWeights));
2299  }
2300 
2301  if(params.m_ForgetLayerNormWeights == nullptr)
2302  {
2303  throw InvalidArgumentException("AddLstmLayer: Forget layer normalization weights cannot be NULL "
2304  "when layer normalization is enabled.");
2305  }
2306  if(params.m_CellLayerNormWeights == nullptr)
2307  {
2308  throw InvalidArgumentException("AddLstmLayer: Cell layer normalization weights cannot be NULL "
2309  "when layer normalization is enabled.");
2310  }
2311  if(params.m_OutputLayerNormWeights == nullptr)
2312  {
2313  throw InvalidArgumentException("AddLstmLayer: Output layer normalization weights cannot be NULL "
2314  "when layer normalization is enabled.");
2315  }
2316  layer->m_LayerNormParameters.m_ForgetLayerNormWeights =
2317  std::make_shared<ScopedTensorHandle>(*(params.m_ForgetLayerNormWeights));
2318  layer->m_LayerNormParameters.m_CellLayerNormWeights =
2319  std::make_shared<ScopedTensorHandle>(*(params.m_CellLayerNormWeights));
2320  layer->m_LayerNormParameters.m_OutputLayerNormWeights =
2321  std::make_shared<ScopedTensorHandle>(*(params.m_OutputLayerNormWeights));
2322  }
2323  return layer;
2324 }

◆ AddMaximumLayer()

IConnectableLayer * AddMaximumLayer ( const char *  name = nullptr)

Definition at line 2072 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2073 {
2074  return m_Graph->AddLayer<MaximumLayer>(name);
2075 }

◆ AddMeanLayer()

IConnectableLayer * AddMeanLayer ( const MeanDescriptor meanDescriptor,
const char *  name = nullptr 
)

Definition at line 2336 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2337 {
2338  return m_Graph->AddLayer<MeanLayer>(meanDescriptor,name);
2339 }

◆ AddMergeLayer()

IConnectableLayer * AddMergeLayer ( const char *  name = nullptr)

Definition at line 2368 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2369 {
2370  return m_Graph->AddLayer<MergeLayer>(name);
2371 }

◆ AddMinimumLayer()

IConnectableLayer * AddMinimumLayer ( const char *  name = nullptr)

Definition at line 2077 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2078 {
2079  return m_Graph->AddLayer<MinimumLayer>(name);
2080 }

◆ AddMultiplicationLayer()

IConnectableLayer * AddMultiplicationLayer ( const char *  name = nullptr)

Definition at line 2087 of file Network.cpp.

Referenced by NetworkImpl::GetGraph(), and TEST_SUITE().

2088 {
2089  return m_Graph->AddLayer<MultiplicationLayer>(name);
2090 }

◆ AddNormalizationLayer()

IConnectableLayer * AddNormalizationLayer ( const NormalizationDescriptor normalizationDescriptor,
const char *  name = nullptr 
)

Definition at line 2048 of file Network.cpp.

Referenced by NetworkImpl::GetGraph(), and TEST_SUITE().

2051 {
2052  return m_Graph->AddLayer<NormalizationLayer>(normalizationDescriptor, name);
2053 }

◆ AddOutputLayer()

IConnectableLayer * AddOutputLayer ( LayerBindingId  id,
const char *  name = nullptr 
)

Definition at line 2092 of file Network.cpp.

Referenced by NetworkImpl::GetGraph(), armnn::TEST_SUITE(), and TEST_SUITE().

2093 {
2094  return m_Graph->AddLayer<OutputLayer>(id, name);
2095 }

◆ AddPadLayer()

IConnectableLayer * AddPadLayer ( const PadDescriptor padDescriptor,
const char *  name = nullptr 
)

Definition at line 2341 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2342 {
2343  return m_Graph->AddLayer<PadLayer>(padDescriptor,name);
2344 }

◆ AddPermuteLayer()

IConnectableLayer * AddPermuteLayer ( const PermuteDescriptor permuteDescriptor,
const char *  name = nullptr 
)

Definition at line 2024 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2026 {
2027  return m_Graph->AddLayer<PermuteLayer>(permuteDescriptor, name);
2028 }

◆ AddPooling2dLayer()

IConnectableLayer * AddPooling2dLayer ( const Pooling2dDescriptor pooling2dDescriptor,
const char *  name = nullptr 
)

Definition at line 2030 of file Network.cpp.

Referenced by NetworkImpl::GetGraph(), and TEST_SUITE().

2032 {
2033  return m_Graph->AddLayer<Pooling2dLayer>(pooling2dDescriptor, name);
2034 }

◆ AddPreluLayer()

IConnectableLayer * AddPreluLayer ( const char *  name = nullptr)

Definition at line 2378 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2379 {
2380  return m_Graph->AddLayer<PreluLayer>(name);
2381 }

◆ AddQLstmLayer()

IConnectableLayer * AddQLstmLayer ( const QLstmDescriptor descriptor,
const LstmInputParams params,
const char *  name = nullptr 
)

Definition at line 2462 of file Network.cpp.

References QLstmLayer::m_BasicParameters, LstmInputParams::m_CellBias, LstmInputParams::m_CellLayerNormWeights, LstmInputParams::m_CellToForgetWeights, LstmInputParams::m_CellToInputWeights, LstmInputParams::m_CellToOutputWeights, LstmInputParams::m_ForgetGateBias, LstmInputParams::m_ForgetLayerNormWeights, LstmInputParams::m_InputGateBias, LstmInputParams::m_InputLayerNormWeights, LstmInputParams::m_InputToCellWeights, QLstmBasicParameters::m_InputToForgetWeights, LstmInputParams::m_InputToForgetWeights, LstmInputParams::m_InputToInputWeights, LstmInputParams::m_InputToOutputWeights, LstmInputParams::m_OutputGateBias, LstmInputParams::m_OutputLayerNormWeights, LstmInputParams::m_ProjectionBias, LstmInputParams::m_ProjectionWeights, LstmInputParams::m_RecurrentToCellWeights, LstmInputParams::m_RecurrentToForgetWeights, LstmInputParams::m_RecurrentToInputWeights, and LstmInputParams::m_RecurrentToOutputWeights.

Referenced by NetworkImpl::GetGraph(), and armnn::TEST_SUITE().

2465 {
2466  const auto layer = m_Graph->AddLayer<QLstmLayer>(descriptor, name);
2467 
2468  // QLstm Basic Parameters
2469  layer->m_BasicParameters.m_InputToForgetWeights =
2470  std::make_shared<ScopedTensorHandle>(*(params.m_InputToForgetWeights));
2471  layer->m_BasicParameters.m_InputToCellWeights =
2472  std::make_shared<ScopedTensorHandle>(*(params.m_InputToCellWeights));
2473  layer->m_BasicParameters.m_InputToOutputWeights =
2474  std::make_shared<ScopedTensorHandle>(*(params.m_InputToOutputWeights));
2475  layer->m_BasicParameters.m_RecurrentToForgetWeights =
2476  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToForgetWeights));
2477  layer->m_BasicParameters.m_RecurrentToCellWeights =
2478  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToCellWeights));
2479  layer->m_BasicParameters.m_RecurrentToOutputWeights =
2480  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToOutputWeights));
2481  layer->m_BasicParameters.m_ForgetGateBias =
2482  std::make_shared<ScopedTensorHandle>(*(params.m_ForgetGateBias));
2483  layer->m_BasicParameters.m_CellBias =
2484  std::make_shared<ScopedTensorHandle>(*(params.m_CellBias));
2485  layer->m_BasicParameters.m_OutputGateBias =
2486  std::make_shared<ScopedTensorHandle>(*(params.m_OutputGateBias));
2487 
2488  // QLstm Cifg parameters
2489  if(!descriptor.m_CifgEnabled)
2490  {
2491  if(params.m_InputToInputWeights == nullptr)
2492  {
2493  throw InvalidArgumentException("AddQLstmLayer: Input To Input Weights cannot be NULL");
2494  }
2495 
2496  if(params.m_RecurrentToInputWeights == nullptr)
2497  {
2498  throw InvalidArgumentException(
2499  "AddQLstmLayer: Recurrent To Input Weights cannot be NULL");
2500  }
2501 
2502  if(params.m_InputGateBias == nullptr)
2503  {
2504  throw InvalidArgumentException("AddQLstmLayer: Input Gate Bias cannot be NULL");
2505  }
2506 
2507  layer->m_CifgParameters.m_InputToInputWeights =
2508  std::make_shared<ScopedTensorHandle>(*(params.m_InputToInputWeights));
2509  layer->m_CifgParameters.m_RecurrentToInputWeights =
2510  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToInputWeights));
2511  layer->m_CifgParameters.m_InputGateBias =
2512  std::make_shared<ScopedTensorHandle>(*(params.m_InputGateBias));
2513  }
2514 
2515  // QLstm Projection parameters
2516  if(descriptor.m_ProjectionEnabled)
2517  {
2518  if(params.m_ProjectionWeights == nullptr)
2519  {
2520  throw InvalidArgumentException("AddQLstmLayer: Projection Weights cannot be NULL");
2521  }
2522 
2523  layer->m_ProjectionParameters.m_ProjectionWeights =
2524  std::make_shared<ScopedTensorHandle>(*(params.m_ProjectionWeights));
2525 
2526  // Projection bias is optional even if projection is enabled
2527  if(params.m_ProjectionWeights != nullptr)
2528  {
2529  layer->m_ProjectionParameters.m_ProjectionBias =
2530  std::make_shared<ScopedTensorHandle>(*(params.m_ProjectionBias));
2531  }
2532 
2533  }
2534 
2535  // QLstm Peephole params
2536  if(descriptor.m_PeepholeEnabled)
2537  {
2538  if(params.m_CellToForgetWeights == nullptr)
2539  {
2540  throw InvalidArgumentException("AddQLstmLayer: Cell To Forget Weights cannot be NULL");
2541  }
2542 
2543  if(params.m_CellToOutputWeights == nullptr)
2544  {
2545  throw InvalidArgumentException("AddQLstmLayer: Cell To Output Weights cannot be NULL");
2546  }
2547 
2548  if(!descriptor.m_CifgEnabled)
2549  {
2550  if(params.m_CellToInputWeights == nullptr)
2551  {
2552  throw InvalidArgumentException("AddQLstmLayer: Cell To Input Weights cannot be NULL");
2553  }
2554 
2555  layer->m_PeepholeParameters.m_CellToInputWeights =
2556  std::make_shared<ScopedTensorHandle>(*(params.m_CellToInputWeights));
2557  }
2558 
2559  layer->m_PeepholeParameters.m_CellToForgetWeights =
2560  std::make_shared<ScopedTensorHandle>(*(params.m_CellToForgetWeights));
2561  layer->m_PeepholeParameters.m_CellToOutputWeights =
2562  std::make_shared<ScopedTensorHandle>(*(params.m_CellToOutputWeights));
2563  }
2564 
2565  // QLstm Layer Normalization params
2566  if(descriptor.m_LayerNormEnabled)
2567  {
2568  if(params.m_ForgetLayerNormWeights == nullptr)
2569  {
2570  throw InvalidArgumentException("AddQLstmLayer: Forget layer normalization weights cannot be NULL");
2571  }
2572 
2573  if(params.m_CellLayerNormWeights == nullptr)
2574  {
2575  throw InvalidArgumentException("AddQLstmLayer: Cell layer normalization weights cannot be NULL");
2576  }
2577 
2578  if(params.m_OutputLayerNormWeights == nullptr)
2579  {
2580  throw InvalidArgumentException("AddQLstmLayer: Output layer normalization weights cannot be NULL");
2581  }
2582 
2583  if(!descriptor.m_CifgEnabled)
2584  {
2585  if(params.m_InputLayerNormWeights == nullptr)
2586  {
2587  throw InvalidArgumentException("AddQLstmLayer: Input layer normalization weights cannot be NULL");
2588  }
2589 
2590  layer->m_LayerNormParameters.m_InputLayerNormWeights =
2591  std::make_shared<ScopedTensorHandle>(*(params.m_InputLayerNormWeights));
2592  }
2593 
2594  layer->m_LayerNormParameters.m_ForgetLayerNormWeights =
2595  std::make_shared<ScopedTensorHandle>(*(params.m_ForgetLayerNormWeights));
2596  layer->m_LayerNormParameters.m_CellLayerNormWeights =
2597  std::make_shared<ScopedTensorHandle>(*(params.m_CellLayerNormWeights));
2598  layer->m_LayerNormParameters.m_OutputLayerNormWeights =
2599  std::make_shared<ScopedTensorHandle>(*(params.m_OutputLayerNormWeights));
2600  }
2601  return layer;
2602 }

◆ AddQuantizedLstmLayer()

IConnectableLayer * AddQuantizedLstmLayer ( const QuantizedLstmInputParams params,
const char *  name = nullptr 
)

Definition at line 2424 of file Network.cpp.

References QuantizedLstmInputParams::GetCellBias(), QuantizedLstmInputParams::GetForgetGateBias(), QuantizedLstmInputParams::GetInputGateBias(), QuantizedLstmInputParams::GetInputToCellWeights(), QuantizedLstmInputParams::GetInputToForgetWeights(), QuantizedLstmInputParams::GetInputToInputWeights(), QuantizedLstmInputParams::GetInputToOutputWeights(), QuantizedLstmInputParams::GetOutputGateBias(), QuantizedLstmInputParams::GetRecurrentToCellWeights(), QuantizedLstmInputParams::GetRecurrentToForgetWeights(), QuantizedLstmInputParams::GetRecurrentToInputWeights(), QuantizedLstmInputParams::GetRecurrentToOutputWeights(), QuantizedLstmParameters::m_InputToInputWeights, and QuantizedLstmLayer::m_QuantizedLstmParameters.

Referenced by NetworkImpl::GetGraph(), and armnn::TEST_SUITE().

2426 {
2427  const auto layer = m_Graph->AddLayer<QuantizedLstmLayer>(name);
2428 
2429  // InputToX weights
2430  layer->m_QuantizedLstmParameters.m_InputToInputWeights =
2431  std::make_shared<ScopedTensorHandle>(params.GetInputToInputWeights());
2432  layer->m_QuantizedLstmParameters.m_InputToForgetWeights =
2433  std::make_shared<ScopedTensorHandle>(params.GetInputToForgetWeights());
2434  layer->m_QuantizedLstmParameters.m_InputToCellWeights =
2435  std::make_shared<ScopedTensorHandle>(params.GetInputToCellWeights());
2436  layer->m_QuantizedLstmParameters.m_InputToOutputWeights =
2437  std::make_shared<ScopedTensorHandle>(params.GetInputToOutputWeights());
2438 
2439  // RecurrentToX weights
2440  layer->m_QuantizedLstmParameters.m_RecurrentToInputWeights =
2441  std::make_shared<ScopedTensorHandle>(params.GetRecurrentToInputWeights());
2442  layer->m_QuantizedLstmParameters.m_RecurrentToForgetWeights =
2443  std::make_shared<ScopedTensorHandle>(params.GetRecurrentToForgetWeights());
2444  layer->m_QuantizedLstmParameters.m_RecurrentToCellWeights =
2445  std::make_shared<ScopedTensorHandle>(params.GetRecurrentToCellWeights());
2446  layer->m_QuantizedLstmParameters.m_RecurrentToOutputWeights =
2447  std::make_shared<ScopedTensorHandle>(params.GetRecurrentToOutputWeights());
2448 
2449  // Bias
2450  layer->m_QuantizedLstmParameters.m_InputGateBias =
2451  std::make_shared<ScopedTensorHandle>(params.GetInputGateBias());
2452  layer->m_QuantizedLstmParameters.m_ForgetGateBias =
2453  std::make_shared<ScopedTensorHandle>(params.GetForgetGateBias());
2454  layer->m_QuantizedLstmParameters.m_CellBias =
2455  std::make_shared<ScopedTensorHandle>(params.GetCellBias());
2456  layer->m_QuantizedLstmParameters.m_OutputGateBias =
2457  std::make_shared<ScopedTensorHandle>(params.GetOutputGateBias());
2458 
2459  return layer;
2460 }

◆ AddQuantizeLayer()

IConnectableLayer * AddQuantizeLayer ( const char *  name = nullptr)

Definition at line 2346 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2347 {
2348  return m_Graph->AddLayer<QuantizeLayer>(name);
2349 }

◆ AddRankLayer()

IConnectableLayer * AddRankLayer ( const char *  name = nullptr)

Definition at line 2114 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2115 {
2116  return m_Graph->AddLayer<RankLayer>(name);
2117 }

◆ AddReduceLayer()

IConnectableLayer * AddReduceLayer ( const ReduceDescriptor reduceDescriptor,
const char *  name = nullptr 
)

Definition at line 2119 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2121 {
2122  return m_Graph->AddLayer<ReduceLayer>(reduceDescriptor, name);
2123 }

◆ AddReshapeLayer()

IConnectableLayer * AddReshapeLayer ( const ReshapeDescriptor reshapeDescriptor,
const char *  name = nullptr 
)

Definition at line 2162 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2164 {
2165  return m_Graph->AddLayer<ReshapeLayer>(reshapeDescriptor, name);
2166 }

◆ AddResizeLayer()

IConnectableLayer * AddResizeLayer ( const ResizeDescriptor resizeDescriptor,
const char *  name = nullptr 
)

Definition at line 2125 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2126 {
2127  return m_Graph->AddLayer<ResizeLayer>(resizeDescriptor, name);
2128 }

◆ AddShapeLayer()

IConnectableLayer * AddShapeLayer ( const char *  name = nullptr)

Definition at line 2130 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2131 {
2132  return m_Graph->AddLayer<ShapeLayer>(name);
2133 }

◆ AddSliceLayer()

IConnectableLayer * AddSliceLayer ( const SliceDescriptor sliceDescriptor,
const char *  name = nullptr 
)

Definition at line 2055 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2056 {
2057  return m_Graph->AddLayer<SliceLayer>(sliceDescriptor, name);
2058 }

◆ AddSoftmaxLayer()

IConnectableLayer * AddSoftmaxLayer ( const SoftmaxDescriptor softmaxDescriptor,
const char *  name = nullptr 
)

Definition at line 2060 of file Network.cpp.

Referenced by NetworkImpl::GetGraph(), and TEST_SUITE().

2062 {
2063  return m_Graph->AddLayer<SoftmaxLayer>(softmaxDescriptor, name);
2064 }

◆ AddSpaceToBatchNdLayer()

IConnectableLayer * AddSpaceToBatchNdLayer ( const SpaceToBatchNdDescriptor spaceToBatchNdDescriptor,
const char *  name = nullptr 
)

Definition at line 2168 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2170 {
2171  return m_Graph->AddLayer<SpaceToBatchNdLayer>(spaceToBatchNdDescriptor, name);
2172 }

◆ AddSpaceToDepthLayer()

IConnectableLayer * AddSpaceToDepthLayer ( const SpaceToDepthDescriptor spaceToDepthDescriptor,
const char *  name = nullptr 
)

Definition at line 2174 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2176 {
2177  return m_Graph->AddLayer<SpaceToDepthLayer>(spaceToDepthDescriptor, name);
2178 }

◆ AddSplitterLayer()

IConnectableLayer * AddSplitterLayer ( const ViewsDescriptor splitterDescriptor,
const char *  name = nullptr 
)

Definition at line 2066 of file Network.cpp.

Referenced by NetworkImpl::GetGraph(), and TEST_SUITE().

2068 {
2069  return m_Graph->AddLayer<SplitterLayer>(splitterDescriptor, name);
2070 }

◆ AddStackLayer()

IConnectableLayer * AddStackLayer ( const StackDescriptor stackDescriptor,
const char *  name = nullptr 
)

Definition at line 2411 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2413 {
2414  return m_Graph->AddLayer<StackLayer>(stackDescriptor, name);
2415 }

◆ AddStandInLayer()

IConnectableLayer * AddStandInLayer ( const StandInDescriptor descriptor,
const char *  name = nullptr 
)

Definition at line 2418 of file Network.cpp.

Referenced by NetworkImpl::GetGraph(), and TEST_SUITE().

2420 {
2421  return m_Graph->AddLayer<StandInLayer>(desc, name);
2422 }

◆ AddStridedSliceLayer()

IConnectableLayer * AddStridedSliceLayer ( const StridedSliceDescriptor stridedSliceDescriptor,
const char *  name = nullptr 
)

Definition at line 2356 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2358 {
2359  return m_Graph->AddLayer<StridedSliceLayer>(stridedSliceDescriptor, name);
2360 }

◆ AddSubtractionLayer()

IConnectableLayer * AddSubtractionLayer ( const char *  name = nullptr)

Definition at line 2331 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2332 {
2333  return m_Graph->AddLayer<SubtractionLayer>(name);
2334 }

◆ AddSwitchLayer()

IConnectableLayer * AddSwitchLayer ( const char *  name = nullptr)

Definition at line 2373 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2374 {
2375  return m_Graph->AddLayer<SwitchLayer>(name);
2376 }

◆ AddTransposeConvolution2dLayer()

IConnectableLayer * AddTransposeConvolution2dLayer ( const TransposeConvolution2dDescriptor descriptor,
const ConstTensor weights,
const Optional< ConstTensor > &  biases,
const char *  name = nullptr 
)

Definition at line 2383 of file Network.cpp.

References OptionalBase::has_value(), TransposeConvolution2dDescriptor::m_BiasEnabled, TransposeConvolution2dLayer::m_Weight, and OptionalReferenceSwitch< std::is_reference< T >::value, T >::value().

Referenced by NetworkImpl::GetGraph().

2387 {
2388  if (descriptor.m_BiasEnabled && !biases.has_value())
2389  {
2390  throw InvalidArgumentException("AddTransposeConvolution2dLayer: Biases cannot be empty");
2391  }
2392 
2393  const auto layer = m_Graph->AddLayer<TransposeConvolution2dLayer>(descriptor, name);
2394 
2395  layer->m_Weight = std::make_shared<ScopedTensorHandle>(weights);
2396 
2397  if (descriptor.m_BiasEnabled)
2398  {
2399  layer->m_Bias = std::make_shared<ScopedTensorHandle>(biases.value());
2400  }
2401 
2402  return layer;
2403 }

◆ AddTransposeLayer()

IConnectableLayer * AddTransposeLayer ( const TransposeDescriptor transposeDescriptor,
const char *  name = nullptr 
)

Definition at line 2405 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2407 {
2408  return m_Graph->AddLayer<TransposeLayer>(transposeDescriptor, name);
2409 }

◆ AddUnidirectionalSequenceLstmLayer()

IConnectableLayer * AddUnidirectionalSequenceLstmLayer ( const UnidirectionalSequenceLstmDescriptor descriptor,
const LstmInputParams params,
const char *  name = nullptr 
)

Definition at line 2610 of file Network.cpp.

References ARMNN_NO_DEPRECATE_WARN_BEGIN, UnidirectionalSequenceLstmLayer::m_BasicParameters, LstmInputParams::m_CellBias, LstmInputParams::m_CellLayerNormWeights, LstmInputParams::m_CellToForgetWeights, LstmInputParams::m_CellToInputWeights, LstmInputParams::m_CellToOutputWeights, LstmInputParams::m_ForgetGateBias, LstmInputParams::m_ForgetLayerNormWeights, LstmInputParams::m_InputGateBias, LstmInputParams::m_InputLayerNormWeights, LstmInputParams::m_InputToCellWeights, LstmInputParams::m_InputToForgetWeights, LstmBasicParameters::m_InputToForgetWeights, LstmInputParams::m_InputToInputWeights, LstmInputParams::m_InputToOutputWeights, LstmInputParams::m_OutputGateBias, LstmInputParams::m_OutputLayerNormWeights, LstmInputParams::m_ProjectionBias, LstmInputParams::m_ProjectionWeights, LstmInputParams::m_RecurrentToCellWeights, LstmInputParams::m_RecurrentToForgetWeights, LstmInputParams::m_RecurrentToInputWeights, and LstmInputParams::m_RecurrentToOutputWeights.

Referenced by NetworkImpl::GetGraph().

2614 {
2615  const auto layer = m_Graph->AddLayer<UnidirectionalSequenceLstmLayer>(descriptor, name);
2616 
2617  //Lstm Basic Parameters
2618  layer->m_BasicParameters.m_InputToForgetWeights =
2619  std::make_shared<ScopedTensorHandle>(*(params.m_InputToForgetWeights));
2620  layer->m_BasicParameters.m_InputToCellWeights =
2621  std::make_shared<ScopedTensorHandle>(*(params.m_InputToCellWeights));
2622  layer->m_BasicParameters.m_InputToOutputWeights =
2623  std::make_shared<ScopedTensorHandle>(*(params.m_InputToOutputWeights));
2624  layer->m_BasicParameters.m_RecurrentToForgetWeights =
2625  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToForgetWeights));
2626  layer->m_BasicParameters.m_RecurrentToCellWeights =
2627  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToCellWeights));
2628  layer->m_BasicParameters.m_RecurrentToOutputWeights =
2629  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToOutputWeights));
2630  layer->m_BasicParameters.m_ForgetGateBias =
2631  std::make_shared<ScopedTensorHandle>(*(params.m_ForgetGateBias));
2632  layer->m_BasicParameters.m_CellBias =
2633  std::make_shared<ScopedTensorHandle>(*(params.m_CellBias));
2634  layer->m_BasicParameters.m_OutputGateBias =
2635  std::make_shared<ScopedTensorHandle>(*(params.m_OutputGateBias));
2636 
2637  //Lstm Cifg parameters
2638  if(!descriptor.m_CifgEnabled)
2639  {
2640  if(params.m_InputToInputWeights == nullptr)
2641  {
2642  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Input To Input Weights cannot be NULL "
2643  "when CIFG is disabled.");
2644  }
2645  if(params.m_RecurrentToInputWeights == nullptr)
2646  {
2647  throw InvalidArgumentException(
2648  "AddUnidirectionalSequenceLstmLayer: Recurrent To Input Weights cannot be NULL "
2649  "when CIFG is disabled.");
2650  }
2651  if(params.m_InputGateBias == nullptr)
2652  {
2653  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Input Gate Bias cannot be NULL "
2654  "when CIFG is disabled.");
2655  }
2656  layer->m_CifgParameters.m_InputToInputWeights =
2657  std::make_shared<ScopedTensorHandle>(*(params.m_InputToInputWeights));
2658  layer->m_CifgParameters.m_RecurrentToInputWeights =
2659  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToInputWeights));
2660  layer->m_CifgParameters.m_InputGateBias =
2661  std::make_shared<ScopedTensorHandle>(*(params.m_InputGateBias));
2662  }
2663 
2664  //Lstm projection parameters
2665  if(descriptor.m_ProjectionEnabled)
2666  {
2667  if(params.m_ProjectionWeights == nullptr)
2668  {
2669  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Projection Weights cannot be NULL "
2670  "when projection is enabled.");
2671  }
2672  layer->m_ProjectionParameters.m_ProjectionWeights =
2673  std::make_shared<ScopedTensorHandle>(*(params.m_ProjectionWeights));
2674  if(params.m_ProjectionBias != nullptr)
2675  {
2676  layer->m_ProjectionParameters.m_ProjectionBias =
2677  std::make_shared<ScopedTensorHandle>(*(params.m_ProjectionBias));
2678  }
2679  }
2680 
2681  //Lstm Peephole params
2682  if(descriptor.m_PeepholeEnabled)
2683  {
2684  if(!descriptor.m_CifgEnabled)
2685  {
2686  if(params.m_CellToInputWeights == nullptr)
2687  {
2688  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Cell To Input Weights "
2689  "cannot be NULL when Peephole is enabled and CIFG disabled.");
2690  }
2691 
2692  layer->m_PeepholeParameters.m_CellToInputWeights =
2693  std::make_shared<ScopedTensorHandle>(*(params.m_CellToInputWeights));
2694  }
2695 
2696  if(params.m_CellToForgetWeights == nullptr)
2697  {
2698  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Cell To Forget Weights cannot be NULL "
2699  "when Peephole is enabled.");
2700  }
2701  if(params.m_CellToOutputWeights == nullptr)
2702  {
2703  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Cell To Output Weights cannot be NULL "
2704  "when Peephole is enabled.");
2705  }
2706 
2707  layer->m_PeepholeParameters.m_CellToForgetWeights =
2708  std::make_shared<ScopedTensorHandle>(*(params.m_CellToForgetWeights));
2709  layer->m_PeepholeParameters.m_CellToOutputWeights =
2710  std::make_shared<ScopedTensorHandle>(*(params.m_CellToOutputWeights));
2711  }
2712 
2713  //Lstm Layer Normalization params
2714  if(descriptor.m_LayerNormEnabled)
2715  {
2716  if(!descriptor.m_CifgEnabled)
2717  {
2718  if(params.m_InputLayerNormWeights == nullptr)
2719  {
2720  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Input layer normalization weights "
2721  "cannot be NULL when layer normalization is enabled and CIFG disabled.");
2722  }
2723  layer->m_LayerNormParameters.m_InputLayerNormWeights =
2724  std::make_shared<ScopedTensorHandle>(*(params.m_InputLayerNormWeights));
2725  }
2726 
2727  if(params.m_ForgetLayerNormWeights == nullptr)
2728  {
2729  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Forget layer normalization weights "
2730  "cannot be NULL when layer normalization is enabled.");
2731  }
2732  if(params.m_CellLayerNormWeights == nullptr)
2733  {
2734  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Cell layer normalization weights "
2735  "cannot be NULL when layer normalization is enabled.");
2736  }
2737  if(params.m_OutputLayerNormWeights == nullptr)
2738  {
2739  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Output layer normalization weights "
2740  "cannot be NULL when layer normalization is enabled.");
2741  }
2742  layer->m_LayerNormParameters.m_ForgetLayerNormWeights =
2743  std::make_shared<ScopedTensorHandle>(*(params.m_ForgetLayerNormWeights));
2744  layer->m_LayerNormParameters.m_CellLayerNormWeights =
2745  std::make_shared<ScopedTensorHandle>(*(params.m_CellLayerNormWeights));
2746  layer->m_LayerNormParameters.m_OutputLayerNormWeights =
2747  std::make_shared<ScopedTensorHandle>(*(params.m_OutputLayerNormWeights));
2748  }
2749  return layer;
2750 }

◆ ExecuteStrategy()

ARMNN_NO_DEPRECATE_WARN_END void ExecuteStrategy ( IStrategy strategy) const

Definition at line 2762 of file Network.cpp.

References NetworkImpl::GetGraph().

Referenced by NetworkImpl::GetGraph().

2763 {
2764  for (auto layer : GetGraph())
2765  {
2766  layer->ExecuteStrategy(strategy);
2767  };
2768 }
const Graph & GetGraph() const
Definition: Network.hpp:37

◆ GetGraph()

const Graph& GetGraph ( ) const
inline

Definition at line 37 of file Network.hpp.

References NetworkImpl::Accept(), NetworkImpl::AddActivationLayer(), NetworkImpl::AddAdditionLayer(), NetworkImpl::AddArgMinMaxLayer(), NetworkImpl::AddBatchNormalizationLayer(), NetworkImpl::AddBatchToSpaceNdLayer(), NetworkImpl::AddCastLayer(), NetworkImpl::AddChannelShuffleLayer(), NetworkImpl::AddComparisonLayer(), NetworkImpl::AddConcatLayer(), NetworkImpl::AddConstantLayer(), NetworkImpl::AddConvolution2dLayer(), NetworkImpl::AddConvolution3dLayer(), NetworkImpl::AddDepthToSpaceLayer(), NetworkImpl::AddDepthwiseConvolution2dLayer(), NetworkImpl::AddDequantizeLayer(), NetworkImpl::AddDetectionPostProcessLayer(), NetworkImpl::AddDivisionLayer(), NetworkImpl::AddElementwiseUnaryLayer(), NetworkImpl::AddFillLayer(), NetworkImpl::AddFloorLayer(), NetworkImpl::AddFullyConnectedLayer(), NetworkImpl::AddGatherLayer(), NetworkImpl::AddInputLayer(), NetworkImpl::AddInstanceNormalizationLayer(), NetworkImpl::AddL2NormalizationLayer(), NetworkImpl::AddLogicalBinaryLayer(), NetworkImpl::AddLogSoftmaxLayer(), NetworkImpl::AddLstmLayer(), NetworkImpl::AddMaximumLayer(), NetworkImpl::AddMeanLayer(), NetworkImpl::AddMergeLayer(), NetworkImpl::AddMinimumLayer(), NetworkImpl::AddMultiplicationLayer(), NetworkImpl::AddNormalizationLayer(), NetworkImpl::AddOutputLayer(), NetworkImpl::AddPadLayer(), NetworkImpl::AddPermuteLayer(), NetworkImpl::AddPooling2dLayer(), NetworkImpl::AddPreluLayer(), NetworkImpl::AddQLstmLayer(), NetworkImpl::AddQuantizedLstmLayer(), NetworkImpl::AddQuantizeLayer(), NetworkImpl::AddRankLayer(), NetworkImpl::AddReduceLayer(), NetworkImpl::AddReshapeLayer(), NetworkImpl::AddResizeLayer(), NetworkImpl::AddShapeLayer(), NetworkImpl::AddSliceLayer(), NetworkImpl::AddSoftmaxLayer(), NetworkImpl::AddSpaceToBatchNdLayer(), NetworkImpl::AddSpaceToDepthLayer(), NetworkImpl::AddSplitterLayer(), NetworkImpl::AddStackLayer(), NetworkImpl::AddStandInLayer(), NetworkImpl::AddStridedSliceLayer(), NetworkImpl::AddSubtractionLayer(), NetworkImpl::AddSwitchLayer(), NetworkImpl::AddTransposeConvolution2dLayer(), NetworkImpl::AddTransposeLayer(), NetworkImpl::AddUnidirectionalSequenceLstmLayer(), armnn::ARMNN_DEPRECATED_MSG_REMOVAL_DATE(), ARMNN_NO_DEPRECATE_WARN_BEGIN, ARMNN_NO_DEPRECATE_WARN_END, NetworkImpl::ExecuteStrategy(), and NetworkImpl::PrintGraph().

Referenced by NetworkImpl::Accept(), NetworkImpl::ExecuteStrategy(), and TEST_SUITE().

38  { return *m_Graph; }

◆ PrintGraph()

Status PrintGraph ( )

Definition at line 1790 of file Network.cpp.

References armnn::Success.

Referenced by NetworkImpl::GetGraph(), and TEST_SUITE().

1791 {
1792  m_Graph->Print();
1793  return Status::Success;
1794 }

The documentation for this class was generated from the following files: