ArmNN
 22.02
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)
 
IConnectableLayerAddPooling3dLayer (const Pooling3dDescriptor &pooling3dDescriptor, const char *name=nullptr)
 
IConnectableLayerAddPrecompiledLayer (const PreCompiledDescriptor &preCompiledDescriptor, CompiledBlobPtr compiledBlobPtr, const Optional< BackendId > &backend, 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 1858 of file Network.cpp.

1859 : m_NetworkOptions(networkOptions),
1860  m_Graph(std::make_unique<Graph>(GetShapeInferenceMethod()))
1861 {}

◆ ~NetworkImpl()

Definition at line 1863 of file Network.cpp.

1864 {
1865 }

Member Function Documentation

◆ Accept()

ARMNN_NO_DEPRECATE_WARN_BEGIN void Accept ( ILayerVisitor &  visitor) const

Definition at line 2869 of file Network.cpp.

References ARMNN_NO_DEPRECATE_WARN_END, and NetworkImpl::GetGraph().

Referenced by NetworkImpl::GetGraph().

2870 {
2871  for (auto layer : GetGraph())
2872  {
2873  layer->Accept(visitor);
2874  };
2875 }
const Graph & GetGraph() const
Definition: Network.hpp:37

◆ AddActivationLayer()

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

Definition at line 2119 of file Network.cpp.

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

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

◆ AddAdditionLayer()

IConnectableLayer * AddAdditionLayer ( const char *  name = nullptr)

Definition at line 2165 of file Network.cpp.

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

2166 {
2167  return m_Graph->AddLayer<AdditionLayer>(name);
2168 }

◆ AddArgMinMaxLayer()

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

Definition at line 2125 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2127 {
2128  return m_Graph->AddLayer<ArgMinMaxLayer>(argMinMaxDescriptor, name);
2129 }

◆ 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 2180 of file Network.cpp.

References BatchNormalizationLayer::m_Mean.

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

2186 {
2187  const auto layer = m_Graph->AddLayer<BatchNormalizationLayer>(desc, name);
2188 
2189  layer->m_Mean = std::make_shared<ScopedTensorHandle>(mean);
2190  layer->m_Variance = std::make_shared<ScopedTensorHandle>(variance);
2191  layer->m_Beta = std::make_shared<ScopedTensorHandle>(beta);
2192  layer->m_Gamma = std::make_shared<ScopedTensorHandle>(gamma);
2193 
2194  return layer;
2195 }

◆ AddBatchToSpaceNdLayer()

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

Definition at line 1878 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

1880 {
1881  return m_Graph->AddLayer<BatchToSpaceNdLayer>(batchToSpaceNdDescriptor, name);
1882 }

◆ AddCastLayer()

IConnectableLayer * AddCastLayer ( const char *  name = nullptr)

Definition at line 1884 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

1885 {
1886  return m_Graph->AddLayer<CastLayer>(name);
1887 }

◆ AddChannelShuffleLayer()

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

Definition at line 1888 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

1890 {
1891  return m_Graph->AddLayer<ChannelShuffleLayer>(channelShuffleDescriptor, name);
1892 }

◆ AddComparisonLayer()

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

Definition at line 1894 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

1896 {
1897  return m_Graph->AddLayer<ComparisonLayer>(comparisonDescriptor, name);
1898 }

◆ AddConcatLayer()

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

Definition at line 1994 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().

1996 {
1997  return m_Graph->AddLayer<ConcatLayer>(concatDescriptor, name);
1998 }

◆ AddConstantLayer()

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

Definition at line 2236 of file Network.cpp.

References ConstantLayer::m_LayerOutput.

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

2237 {
2238  auto layer = m_Graph->AddLayer<ConstantLayer>(name);
2239 
2240  layer->m_LayerOutput = std::make_shared<ScopedTensorHandle>(input);
2241 
2242  return layer;
2243 }

◆ AddConvolution2dLayer() [1/3]

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

Definition at line 2022 of file Network.cpp.

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

2026 {
2027  return AddConvolution2dLayerImpl(convolution2dDescriptor, weights, biases, name);
2028 }

◆ AddConvolution2dLayer() [2/3]

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

Definition at line 2030 of file Network.cpp.

2033 {
2034  Optional<ConstTensor> biases;
2035  return AddConvolution2dLayerImpl(convolution2dDescriptor, weights, biases, name);
2036 }

◆ AddConvolution2dLayer() [3/3]

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

Definition at line 2038 of file Network.cpp.

2042 {
2043  Optional<ConstTensor> optionalBiases(biases);
2044  return AddConvolution2dLayerImpl(convolution2dDescriptor, weights, optionalBiases, name);
2045 }

◆ AddConvolution3dLayer()

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

Definition at line 2047 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2049 {
2050  return m_Graph->AddLayer<Convolution3dLayer>(convolution3dDescriptor, name);
2051 }

◆ AddDepthToSpaceLayer()

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

Definition at line 2053 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().

2055 {
2056  return m_Graph->AddLayer<DepthToSpaceLayer>(depthToSpaceDescriptor, name);
2057 }

◆ AddDepthwiseConvolution2dLayer()

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

Definition at line 2082 of file Network.cpp.

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

2087 {
2088  return AddDepthwiseConvolution2dLayerImpl(convolution2dDescriptor, weights, biases, name);
2089 }

◆ AddDequantizeLayer()

IConnectableLayer * AddDequantizeLayer ( const char *  name = nullptr)

Definition at line 2434 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2435 {
2436  return m_Graph->AddLayer<DequantizeLayer>(name);
2437 }

◆ AddDetectionPostProcessLayer()

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

Definition at line 2091 of file Network.cpp.

References DetectionPostProcessLayer::m_Anchors.

Referenced by NetworkImpl::GetGraph().

2093 {
2094  const auto layer = m_Graph->AddLayer<DetectionPostProcessLayer>(descriptor, name);
2095 
2096  layer->m_Anchors = std::make_shared<ScopedTensorHandle>(anchors);
2097 
2098  return layer;
2099 }

◆ AddDivisionLayer()

IConnectableLayer * AddDivisionLayer ( const char *  name = nullptr)

Definition at line 2409 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2410 {
2411  return m_Graph->AddLayer<DivisionLayer>(name);
2412 }

◆ AddElementwiseUnaryLayer()

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

Definition at line 1900 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

1902 {
1903  return m_Graph->AddLayer<ElementwiseUnaryLayer>(elementwiseUnaryDescriptor, name);
1904 }

◆ AddFillLayer()

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

Definition at line 1906 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

1908 {
1909  return m_Graph->AddLayer<FillLayer>(fillDescriptor, name);
1910 }

◆ AddFloorLayer()

IConnectableLayer * AddFloorLayer ( const char *  name = nullptr)

Definition at line 2263 of file Network.cpp.

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

2264 {
2265  return m_Graph->AddLayer<FloorLayer>(name);
2266 }

◆ AddFullyConnectedLayer() [1/2]

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

Definition at line 1912 of file Network.cpp.

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

1914 {
1915  return m_Graph->AddLayer<FullyConnectedLayer>(fullyConnectedDescriptor, name);
1916 }

◆ AddFullyConnectedLayer() [2/2]

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

Definition at line 1918 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().

1922 {
1923  ConstantLayer* weightsLayer = nullptr;
1924  ConstantLayer* biasLayer = nullptr;
1925  unsigned int numInputs = fullyConnectedDescriptor.GetNumInputs();
1926 
1927  // Add a constant layer for weights
1928  if (weights.has_value())
1929  {
1930  weightsLayer = m_Graph->AddLayer<ConstantLayer>("Weights");
1931  weightsLayer->m_LayerOutput = std::make_shared<ScopedTensorHandle>(weights.value());
1932 
1933  TensorInfo weightsInfo = weightsLayer->m_LayerOutput->GetTensorInfo();
1934  weightsInfo.SetConstant();
1935 
1936  weightsLayer->GetOutputSlot(0).SetTensorInfo(weightsInfo);
1937  }
1938  else if (fullyConnectedDescriptor.m_ConstantWeights)
1939  {
1940  throw InvalidArgumentException("AddFullyConnectedLayer: Constant weights tensor is empty.");
1941  }
1942 
1943  // Add a constant layer for biases
1944  if (biases.has_value() && fullyConnectedDescriptor.m_BiasEnabled)
1945  {
1946  biasLayer = m_Graph->AddLayer<ConstantLayer>("Biases");
1947  biasLayer->m_LayerOutput = std::make_shared<ScopedTensorHandle>(biases.value());
1948 
1949  TensorInfo biasInfo = biasLayer->m_LayerOutput->GetTensorInfo();
1950  biasInfo.SetConstant();
1951 
1952  biasLayer->GetOutputSlot(0).SetTensorInfo(biasInfo);
1953  }
1954 
1955  if (numInputs < 2)
1956  {
1957  throw InvalidArgumentException("AddFullyConnectedLayer: Requires at least 2 input tensors: Input, Weights");
1958  }
1959 
1960  auto layer = m_Graph->AddLayer<FullyConnectedLayer>(fullyConnectedDescriptor, name);
1961 
1962  if (weightsLayer)
1963  {
1964  // Connect weights layer
1965  weightsLayer->GetOutputSlot(0).Connect(layer->GetInputSlot(1));
1966  }
1967 
1968  if ( fullyConnectedDescriptor.m_BiasEnabled && numInputs == 3 )
1969  {
1970  if (biasLayer)
1971  {
1972  // Connect bias layer
1973  biasLayer->GetOutputSlot(0).Connect(layer->GetInputSlot(2));
1974  }
1975  }
1976  else if ( !fullyConnectedDescriptor.m_BiasEnabled && numInputs == 2 )
1977  {
1978  // Bias is disabled
1979  layer->m_Bias = nullptr;
1980  }
1981  else
1982  {
1983  throw InvalidArgumentException(fmt::format(
1984  "AddFullyConnectedLayer: Value mismatch. When bias is enabled in the "
1985  "descriptor the number of inputs is expected to be 3 otherwise 2. "
1986  "BiasEnabled={}, numInputs={}",
1987  fullyConnectedDescriptor.m_BiasEnabled,
1988  numInputs));
1989  }
1990 
1991  return layer;
1992 }

◆ AddGatherLayer()

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

Definition at line 2445 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2447 {
2448  return m_Graph->AddLayer<GatherLayer>(gatherDescriptor, name);
2449 }

◆ AddInputLayer()

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

Definition at line 1873 of file Network.cpp.

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

1874 {
1875  return m_Graph->AddLayer<InputLayer>(id, name);
1876 }

◆ AddInstanceNormalizationLayer()

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

Definition at line 2218 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2220 {
2221  return m_Graph->AddLayer<InstanceNormalizationLayer>(desc, name);
2222 }

◆ AddL2NormalizationLayer()

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

Definition at line 2224 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2226 {
2227  return m_Graph->AddLayer<L2NormalizationLayer>(desc, name);
2228 }

◆ AddLogicalBinaryLayer()

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

Definition at line 2687 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2689 {
2690  return m_Graph->AddLayer<LogicalBinaryLayer>(logicalBinaryDescriptor, name);
2691 }

◆ AddLogSoftmaxLayer()

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

Definition at line 2230 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2232 {
2233  return m_Graph->AddLayer<LogSoftmaxLayer>(desc, name);
2234 }

◆ AddLstmLayer()

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

Definition at line 2268 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().

2271 {
2272  const auto layer = m_Graph->AddLayer<LstmLayer>(descriptor, name);
2273 
2274  //Lstm Basic Parameters
2275  layer->m_BasicParameters.m_InputToForgetWeights =
2276  std::make_shared<ScopedTensorHandle>(*(params.m_InputToForgetWeights));
2277  layer->m_BasicParameters.m_InputToCellWeights =
2278  std::make_shared<ScopedTensorHandle>(*(params.m_InputToCellWeights));
2279  layer->m_BasicParameters.m_InputToOutputWeights =
2280  std::make_shared<ScopedTensorHandle>(*(params.m_InputToOutputWeights));
2281  layer->m_BasicParameters.m_RecurrentToForgetWeights =
2282  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToForgetWeights));
2283  layer->m_BasicParameters.m_RecurrentToCellWeights =
2284  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToCellWeights));
2285  layer->m_BasicParameters.m_RecurrentToOutputWeights =
2286  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToOutputWeights));
2287  layer->m_BasicParameters.m_ForgetGateBias =
2288  std::make_shared<ScopedTensorHandle>(*(params.m_ForgetGateBias));
2289  layer->m_BasicParameters.m_CellBias =
2290  std::make_shared<ScopedTensorHandle>(*(params.m_CellBias));
2291  layer->m_BasicParameters.m_OutputGateBias =
2292  std::make_shared<ScopedTensorHandle>(*(params.m_OutputGateBias));
2293 
2294  //Lstm Cifg parameters
2295  if(!descriptor.m_CifgEnabled)
2296  {
2297  if(params.m_InputToInputWeights == nullptr)
2298  {
2299  throw InvalidArgumentException("AddLstmLayer: Input To Input Weights cannot be NULL "
2300  "when CIFG is disabled.");
2301  }
2302  if(params.m_RecurrentToInputWeights == nullptr)
2303  {
2304  throw InvalidArgumentException(
2305  "AddLstmLayer: Recurrent To Input Weights cannot be NULL "
2306  "when CIFG is disabled.");
2307  }
2308  if(params.m_InputGateBias == nullptr)
2309  {
2310  throw InvalidArgumentException("AddLstmLayer: Input Gate Bias cannot be NULL "
2311  "when CIFG is disabled.");
2312  }
2313  layer->m_CifgParameters.m_InputToInputWeights =
2314  std::make_shared<ScopedTensorHandle>(*(params.m_InputToInputWeights));
2315  layer->m_CifgParameters.m_RecurrentToInputWeights =
2316  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToInputWeights));
2317  layer->m_CifgParameters.m_InputGateBias =
2318  std::make_shared<ScopedTensorHandle>(*(params.m_InputGateBias));
2319  }
2320 
2321  //Lstm projection parameters
2322  if(descriptor.m_ProjectionEnabled)
2323  {
2324  if(params.m_ProjectionWeights == nullptr)
2325  {
2326  throw InvalidArgumentException("AddLstmLayer: Projection Weights cannot be NULL "
2327  "when projection is enabled.");
2328  }
2329  layer->m_ProjectionParameters.m_ProjectionWeights =
2330  std::make_shared<ScopedTensorHandle>(*(params.m_ProjectionWeights));
2331  if(params.m_ProjectionBias != nullptr)
2332  {
2333  layer->m_ProjectionParameters.m_ProjectionBias =
2334  std::make_shared<ScopedTensorHandle>(*(params.m_ProjectionBias));
2335  }
2336  }
2337 
2338  //Lstm Peephole params
2339  if(descriptor.m_PeepholeEnabled)
2340  {
2341  if(!descriptor.m_CifgEnabled)
2342  {
2343  if(params.m_CellToInputWeights == nullptr)
2344  {
2345  throw InvalidArgumentException("AddLstmLayer: Cell To Input Weights cannot be NULL "
2346  "when Peephole is enabled and CIFG disabled.");
2347  }
2348 
2349  layer->m_PeepholeParameters.m_CellToInputWeights =
2350  std::make_shared<ScopedTensorHandle>(*(params.m_CellToInputWeights));
2351  }
2352 
2353  if(params.m_CellToForgetWeights == nullptr)
2354  {
2355  throw InvalidArgumentException("AddLstmLayer: Cell To Forget Weights cannot be NULL "
2356  "when Peephole is enabled.");
2357  }
2358  if(params.m_CellToOutputWeights == nullptr)
2359  {
2360  throw InvalidArgumentException("AddLstmLayer: Cell To Output Weights cannot be NULL "
2361  "when Peephole is enabled.");
2362  }
2363 
2364  layer->m_PeepholeParameters.m_CellToForgetWeights =
2365  std::make_shared<ScopedTensorHandle>(*(params.m_CellToForgetWeights));
2366  layer->m_PeepholeParameters.m_CellToOutputWeights =
2367  std::make_shared<ScopedTensorHandle>(*(params.m_CellToOutputWeights));
2368  }
2369 
2370  //Lstm Layer Normalization params
2371  if(descriptor.m_LayerNormEnabled)
2372  {
2373  if(!descriptor.m_CifgEnabled)
2374  {
2375  if(params.m_InputLayerNormWeights == nullptr)
2376  {
2377  throw InvalidArgumentException("AddLstmLayer: Input layer normalization weights cannot be NULL "
2378  "when layer normalization is enabled and CIFG disabled.");
2379  }
2380  layer->m_LayerNormParameters.m_InputLayerNormWeights =
2381  std::make_shared<ScopedTensorHandle>(*(params.m_InputLayerNormWeights));
2382  }
2383 
2384  if(params.m_ForgetLayerNormWeights == nullptr)
2385  {
2386  throw InvalidArgumentException("AddLstmLayer: Forget layer normalization weights cannot be NULL "
2387  "when layer normalization is enabled.");
2388  }
2389  if(params.m_CellLayerNormWeights == nullptr)
2390  {
2391  throw InvalidArgumentException("AddLstmLayer: Cell layer normalization weights cannot be NULL "
2392  "when layer normalization is enabled.");
2393  }
2394  if(params.m_OutputLayerNormWeights == nullptr)
2395  {
2396  throw InvalidArgumentException("AddLstmLayer: Output layer normalization weights cannot be NULL "
2397  "when layer normalization is enabled.");
2398  }
2399  layer->m_LayerNormParameters.m_ForgetLayerNormWeights =
2400  std::make_shared<ScopedTensorHandle>(*(params.m_ForgetLayerNormWeights));
2401  layer->m_LayerNormParameters.m_CellLayerNormWeights =
2402  std::make_shared<ScopedTensorHandle>(*(params.m_CellLayerNormWeights));
2403  layer->m_LayerNormParameters.m_OutputLayerNormWeights =
2404  std::make_shared<ScopedTensorHandle>(*(params.m_OutputLayerNormWeights));
2405  }
2406  return layer;
2407 }

◆ AddMaximumLayer()

IConnectableLayer * AddMaximumLayer ( const char *  name = nullptr)

Definition at line 2155 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2156 {
2157  return m_Graph->AddLayer<MaximumLayer>(name);
2158 }

◆ AddMeanLayer()

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

Definition at line 2419 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

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

◆ AddMergeLayer()

IConnectableLayer * AddMergeLayer ( const char *  name = nullptr)

Definition at line 2451 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2452 {
2453  return m_Graph->AddLayer<MergeLayer>(name);
2454 }

◆ AddMinimumLayer()

IConnectableLayer * AddMinimumLayer ( const char *  name = nullptr)

Definition at line 2160 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2161 {
2162  return m_Graph->AddLayer<MinimumLayer>(name);
2163 }

◆ AddMultiplicationLayer()

IConnectableLayer * AddMultiplicationLayer ( const char *  name = nullptr)

Definition at line 2170 of file Network.cpp.

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

2171 {
2172  return m_Graph->AddLayer<MultiplicationLayer>(name);
2173 }

◆ AddNormalizationLayer()

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

Definition at line 2131 of file Network.cpp.

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

2134 {
2135  return m_Graph->AddLayer<NormalizationLayer>(normalizationDescriptor, name);
2136 }

◆ AddOutputLayer()

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

Definition at line 2175 of file Network.cpp.

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

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

◆ AddPadLayer()

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

Definition at line 2424 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2425 {
2426  return m_Graph->AddLayer<PadLayer>(padDescriptor,name);
2427 }

◆ AddPermuteLayer()

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

Definition at line 2101 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2103 {
2104  return m_Graph->AddLayer<PermuteLayer>(permuteDescriptor, name);
2105 }

◆ AddPooling2dLayer()

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

Definition at line 2107 of file Network.cpp.

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

2109 {
2110  return m_Graph->AddLayer<Pooling2dLayer>(pooling2dDescriptor, name);
2111 }

◆ AddPooling3dLayer()

IConnectableLayer * AddPooling3dLayer ( const Pooling3dDescriptor pooling3dDescriptor,
const char *  name = nullptr 
)

Definition at line 2113 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2115 {
2116  return m_Graph->AddLayer<Pooling3dLayer>(pooling3dDescriptor, name);
2117 }

◆ AddPrecompiledLayer()

IConnectableLayer * AddPrecompiledLayer ( const PreCompiledDescriptor preCompiledDescriptor,
CompiledBlobPtr  compiledBlobPtr,
const Optional< BackendId > &  backend,
const char *  name = nullptr 
)

Definition at line 2835 of file Network.cpp.

References ARMNN_NO_DEPRECATE_WARN_BEGIN, Layer::GetBackendHint(), OptionalBase::has_value(), Layer::SetBackendId(), PreCompiledLayer::SetPreCompiledObject(), and OptionalReferenceSwitch< std::is_reference< T >::value, T >::value().

Referenced by NetworkImpl::GetGraph().

2839 {
2840  // Method use is for backend users.
2841  PreCompiledLayer* layer;
2842  if (name)
2843  {
2844  layer = m_Graph->AddLayer<PreCompiledLayer>(preCompiledDescriptor, name);
2845  }
2846  else
2847  {
2848  layer = m_Graph->AddLayer<PreCompiledLayer>(preCompiledDescriptor, "pre-compiled");
2849  }
2850 
2851  // Assign the pre-compiled object to layer
2852  // Pass only one compiled network, Arm NN does not handle multiple
2853  // pre-compiled objects in a single pre-compiled layer currently
2854  layer->SetPreCompiledObject(std::move(compiledBlobPtr));
2855 
2856  if (backend.has_value())
2857  {
2858  layer->SetBackendId(backend.value());
2859  }
2860  else if (layer->GetBackendHint().has_value())
2861  {
2862  layer->SetBackendId(layer->GetBackendHint().value());
2863  }
2864 
2865  return layer;
2866 }

◆ AddPreluLayer()

IConnectableLayer * AddPreluLayer ( const char *  name = nullptr)

Definition at line 2461 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2462 {
2463  return m_Graph->AddLayer<PreluLayer>(name);
2464 }

◆ AddQLstmLayer()

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

Definition at line 2545 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().

2548 {
2549  const auto layer = m_Graph->AddLayer<QLstmLayer>(descriptor, name);
2550 
2551  // QLstm Basic Parameters
2552  layer->m_BasicParameters.m_InputToForgetWeights =
2553  std::make_shared<ScopedTensorHandle>(*(params.m_InputToForgetWeights));
2554  layer->m_BasicParameters.m_InputToCellWeights =
2555  std::make_shared<ScopedTensorHandle>(*(params.m_InputToCellWeights));
2556  layer->m_BasicParameters.m_InputToOutputWeights =
2557  std::make_shared<ScopedTensorHandle>(*(params.m_InputToOutputWeights));
2558  layer->m_BasicParameters.m_RecurrentToForgetWeights =
2559  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToForgetWeights));
2560  layer->m_BasicParameters.m_RecurrentToCellWeights =
2561  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToCellWeights));
2562  layer->m_BasicParameters.m_RecurrentToOutputWeights =
2563  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToOutputWeights));
2564  layer->m_BasicParameters.m_ForgetGateBias =
2565  std::make_shared<ScopedTensorHandle>(*(params.m_ForgetGateBias));
2566  layer->m_BasicParameters.m_CellBias =
2567  std::make_shared<ScopedTensorHandle>(*(params.m_CellBias));
2568  layer->m_BasicParameters.m_OutputGateBias =
2569  std::make_shared<ScopedTensorHandle>(*(params.m_OutputGateBias));
2570 
2571  // QLstm Cifg parameters
2572  if(!descriptor.m_CifgEnabled)
2573  {
2574  if(params.m_InputToInputWeights == nullptr)
2575  {
2576  throw InvalidArgumentException("AddQLstmLayer: Input To Input Weights cannot be NULL");
2577  }
2578 
2579  if(params.m_RecurrentToInputWeights == nullptr)
2580  {
2581  throw InvalidArgumentException(
2582  "AddQLstmLayer: Recurrent To Input Weights cannot be NULL");
2583  }
2584 
2585  if(params.m_InputGateBias == nullptr)
2586  {
2587  throw InvalidArgumentException("AddQLstmLayer: Input Gate Bias cannot be NULL");
2588  }
2589 
2590  layer->m_CifgParameters.m_InputToInputWeights =
2591  std::make_shared<ScopedTensorHandle>(*(params.m_InputToInputWeights));
2592  layer->m_CifgParameters.m_RecurrentToInputWeights =
2593  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToInputWeights));
2594  layer->m_CifgParameters.m_InputGateBias =
2595  std::make_shared<ScopedTensorHandle>(*(params.m_InputGateBias));
2596  }
2597 
2598  // QLstm Projection parameters
2599  if(descriptor.m_ProjectionEnabled)
2600  {
2601  if(params.m_ProjectionWeights == nullptr)
2602  {
2603  throw InvalidArgumentException("AddQLstmLayer: Projection Weights cannot be NULL");
2604  }
2605 
2606  layer->m_ProjectionParameters.m_ProjectionWeights =
2607  std::make_shared<ScopedTensorHandle>(*(params.m_ProjectionWeights));
2608 
2609  // Projection bias is optional even if projection is enabled
2610  if(params.m_ProjectionWeights != nullptr)
2611  {
2612  layer->m_ProjectionParameters.m_ProjectionBias =
2613  std::make_shared<ScopedTensorHandle>(*(params.m_ProjectionBias));
2614  }
2615 
2616  }
2617 
2618  // QLstm Peephole params
2619  if(descriptor.m_PeepholeEnabled)
2620  {
2621  if(params.m_CellToForgetWeights == nullptr)
2622  {
2623  throw InvalidArgumentException("AddQLstmLayer: Cell To Forget Weights cannot be NULL");
2624  }
2625 
2626  if(params.m_CellToOutputWeights == nullptr)
2627  {
2628  throw InvalidArgumentException("AddQLstmLayer: Cell To Output Weights cannot be NULL");
2629  }
2630 
2631  if(!descriptor.m_CifgEnabled)
2632  {
2633  if(params.m_CellToInputWeights == nullptr)
2634  {
2635  throw InvalidArgumentException("AddQLstmLayer: Cell To Input Weights cannot be NULL");
2636  }
2637 
2638  layer->m_PeepholeParameters.m_CellToInputWeights =
2639  std::make_shared<ScopedTensorHandle>(*(params.m_CellToInputWeights));
2640  }
2641 
2642  layer->m_PeepholeParameters.m_CellToForgetWeights =
2643  std::make_shared<ScopedTensorHandle>(*(params.m_CellToForgetWeights));
2644  layer->m_PeepholeParameters.m_CellToOutputWeights =
2645  std::make_shared<ScopedTensorHandle>(*(params.m_CellToOutputWeights));
2646  }
2647 
2648  // QLstm Layer Normalization params
2649  if(descriptor.m_LayerNormEnabled)
2650  {
2651  if(params.m_ForgetLayerNormWeights == nullptr)
2652  {
2653  throw InvalidArgumentException("AddQLstmLayer: Forget layer normalization weights cannot be NULL");
2654  }
2655 
2656  if(params.m_CellLayerNormWeights == nullptr)
2657  {
2658  throw InvalidArgumentException("AddQLstmLayer: Cell layer normalization weights cannot be NULL");
2659  }
2660 
2661  if(params.m_OutputLayerNormWeights == nullptr)
2662  {
2663  throw InvalidArgumentException("AddQLstmLayer: Output layer normalization weights cannot be NULL");
2664  }
2665 
2666  if(!descriptor.m_CifgEnabled)
2667  {
2668  if(params.m_InputLayerNormWeights == nullptr)
2669  {
2670  throw InvalidArgumentException("AddQLstmLayer: Input layer normalization weights cannot be NULL");
2671  }
2672 
2673  layer->m_LayerNormParameters.m_InputLayerNormWeights =
2674  std::make_shared<ScopedTensorHandle>(*(params.m_InputLayerNormWeights));
2675  }
2676 
2677  layer->m_LayerNormParameters.m_ForgetLayerNormWeights =
2678  std::make_shared<ScopedTensorHandle>(*(params.m_ForgetLayerNormWeights));
2679  layer->m_LayerNormParameters.m_CellLayerNormWeights =
2680  std::make_shared<ScopedTensorHandle>(*(params.m_CellLayerNormWeights));
2681  layer->m_LayerNormParameters.m_OutputLayerNormWeights =
2682  std::make_shared<ScopedTensorHandle>(*(params.m_OutputLayerNormWeights));
2683  }
2684  return layer;
2685 }

◆ AddQuantizedLstmLayer()

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

Definition at line 2507 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().

2509 {
2510  const auto layer = m_Graph->AddLayer<QuantizedLstmLayer>(name);
2511 
2512  // InputToX weights
2513  layer->m_QuantizedLstmParameters.m_InputToInputWeights =
2514  std::make_shared<ScopedTensorHandle>(params.GetInputToInputWeights());
2515  layer->m_QuantizedLstmParameters.m_InputToForgetWeights =
2516  std::make_shared<ScopedTensorHandle>(params.GetInputToForgetWeights());
2517  layer->m_QuantizedLstmParameters.m_InputToCellWeights =
2518  std::make_shared<ScopedTensorHandle>(params.GetInputToCellWeights());
2519  layer->m_QuantizedLstmParameters.m_InputToOutputWeights =
2520  std::make_shared<ScopedTensorHandle>(params.GetInputToOutputWeights());
2521 
2522  // RecurrentToX weights
2523  layer->m_QuantizedLstmParameters.m_RecurrentToInputWeights =
2524  std::make_shared<ScopedTensorHandle>(params.GetRecurrentToInputWeights());
2525  layer->m_QuantizedLstmParameters.m_RecurrentToForgetWeights =
2526  std::make_shared<ScopedTensorHandle>(params.GetRecurrentToForgetWeights());
2527  layer->m_QuantizedLstmParameters.m_RecurrentToCellWeights =
2528  std::make_shared<ScopedTensorHandle>(params.GetRecurrentToCellWeights());
2529  layer->m_QuantizedLstmParameters.m_RecurrentToOutputWeights =
2530  std::make_shared<ScopedTensorHandle>(params.GetRecurrentToOutputWeights());
2531 
2532  // Bias
2533  layer->m_QuantizedLstmParameters.m_InputGateBias =
2534  std::make_shared<ScopedTensorHandle>(params.GetInputGateBias());
2535  layer->m_QuantizedLstmParameters.m_ForgetGateBias =
2536  std::make_shared<ScopedTensorHandle>(params.GetForgetGateBias());
2537  layer->m_QuantizedLstmParameters.m_CellBias =
2538  std::make_shared<ScopedTensorHandle>(params.GetCellBias());
2539  layer->m_QuantizedLstmParameters.m_OutputGateBias =
2540  std::make_shared<ScopedTensorHandle>(params.GetOutputGateBias());
2541 
2542  return layer;
2543 }

◆ AddQuantizeLayer()

IConnectableLayer * AddQuantizeLayer ( const char *  name = nullptr)

Definition at line 2429 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2430 {
2431  return m_Graph->AddLayer<QuantizeLayer>(name);
2432 }

◆ AddRankLayer()

IConnectableLayer * AddRankLayer ( const char *  name = nullptr)

Definition at line 2197 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2198 {
2199  return m_Graph->AddLayer<RankLayer>(name);
2200 }

◆ AddReduceLayer()

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

Definition at line 2202 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2204 {
2205  return m_Graph->AddLayer<ReduceLayer>(reduceDescriptor, name);
2206 }

◆ AddReshapeLayer()

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

Definition at line 2245 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2247 {
2248  return m_Graph->AddLayer<ReshapeLayer>(reshapeDescriptor, name);
2249 }

◆ AddResizeLayer()

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

Definition at line 2208 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2209 {
2210  return m_Graph->AddLayer<ResizeLayer>(resizeDescriptor, name);
2211 }

◆ AddShapeLayer()

IConnectableLayer * AddShapeLayer ( const char *  name = nullptr)

Definition at line 2213 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2214 {
2215  return m_Graph->AddLayer<ShapeLayer>(name);
2216 }

◆ AddSliceLayer()

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

Definition at line 2138 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2139 {
2140  return m_Graph->AddLayer<SliceLayer>(sliceDescriptor, name);
2141 }

◆ AddSoftmaxLayer()

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

Definition at line 2143 of file Network.cpp.

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

2145 {
2146  return m_Graph->AddLayer<SoftmaxLayer>(softmaxDescriptor, name);
2147 }

◆ AddSpaceToBatchNdLayer()

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

Definition at line 2251 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2253 {
2254  return m_Graph->AddLayer<SpaceToBatchNdLayer>(spaceToBatchNdDescriptor, name);
2255 }

◆ AddSpaceToDepthLayer()

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

Definition at line 2257 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2259 {
2260  return m_Graph->AddLayer<SpaceToDepthLayer>(spaceToDepthDescriptor, name);
2261 }

◆ AddSplitterLayer()

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

Definition at line 2149 of file Network.cpp.

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

2151 {
2152  return m_Graph->AddLayer<SplitterLayer>(splitterDescriptor, name);
2153 }

◆ AddStackLayer()

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

Definition at line 2494 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2496 {
2497  return m_Graph->AddLayer<StackLayer>(stackDescriptor, name);
2498 }

◆ AddStandInLayer()

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

Definition at line 2501 of file Network.cpp.

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

2503 {
2504  return m_Graph->AddLayer<StandInLayer>(desc, name);
2505 }

◆ AddStridedSliceLayer()

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

Definition at line 2439 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2441 {
2442  return m_Graph->AddLayer<StridedSliceLayer>(stridedSliceDescriptor, name);
2443 }

◆ AddSubtractionLayer()

IConnectableLayer * AddSubtractionLayer ( const char *  name = nullptr)

Definition at line 2414 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2415 {
2416  return m_Graph->AddLayer<SubtractionLayer>(name);
2417 }

◆ AddSwitchLayer()

IConnectableLayer * AddSwitchLayer ( const char *  name = nullptr)

Definition at line 2456 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2457 {
2458  return m_Graph->AddLayer<SwitchLayer>(name);
2459 }

◆ AddTransposeConvolution2dLayer()

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

Definition at line 2466 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().

2470 {
2471  if (descriptor.m_BiasEnabled && !biases.has_value())
2472  {
2473  throw InvalidArgumentException("AddTransposeConvolution2dLayer: Biases cannot be empty");
2474  }
2475 
2476  const auto layer = m_Graph->AddLayer<TransposeConvolution2dLayer>(descriptor, name);
2477 
2478  layer->m_Weight = std::make_shared<ScopedTensorHandle>(weights);
2479 
2480  if (descriptor.m_BiasEnabled)
2481  {
2482  layer->m_Bias = std::make_shared<ScopedTensorHandle>(biases.value());
2483  }
2484 
2485  return layer;
2486 }

◆ AddTransposeLayer()

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

Definition at line 2488 of file Network.cpp.

Referenced by NetworkImpl::GetGraph().

2490 {
2491  return m_Graph->AddLayer<TransposeLayer>(transposeDescriptor, name);
2492 }

◆ AddUnidirectionalSequenceLstmLayer()

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

Definition at line 2693 of file Network.cpp.

References 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().

2697 {
2698  const auto layer = m_Graph->AddLayer<UnidirectionalSequenceLstmLayer>(descriptor, name);
2699 
2700  //Lstm Basic Parameters
2701  layer->m_BasicParameters.m_InputToForgetWeights =
2702  std::make_shared<ScopedTensorHandle>(*(params.m_InputToForgetWeights));
2703  layer->m_BasicParameters.m_InputToCellWeights =
2704  std::make_shared<ScopedTensorHandle>(*(params.m_InputToCellWeights));
2705  layer->m_BasicParameters.m_InputToOutputWeights =
2706  std::make_shared<ScopedTensorHandle>(*(params.m_InputToOutputWeights));
2707  layer->m_BasicParameters.m_RecurrentToForgetWeights =
2708  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToForgetWeights));
2709  layer->m_BasicParameters.m_RecurrentToCellWeights =
2710  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToCellWeights));
2711  layer->m_BasicParameters.m_RecurrentToOutputWeights =
2712  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToOutputWeights));
2713  layer->m_BasicParameters.m_ForgetGateBias =
2714  std::make_shared<ScopedTensorHandle>(*(params.m_ForgetGateBias));
2715  layer->m_BasicParameters.m_CellBias =
2716  std::make_shared<ScopedTensorHandle>(*(params.m_CellBias));
2717  layer->m_BasicParameters.m_OutputGateBias =
2718  std::make_shared<ScopedTensorHandle>(*(params.m_OutputGateBias));
2719 
2720  //Lstm Cifg parameters
2721  if(!descriptor.m_CifgEnabled)
2722  {
2723  if(params.m_InputToInputWeights == nullptr)
2724  {
2725  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Input To Input Weights cannot be NULL "
2726  "when CIFG is disabled.");
2727  }
2728  if(params.m_RecurrentToInputWeights == nullptr)
2729  {
2730  throw InvalidArgumentException(
2731  "AddUnidirectionalSequenceLstmLayer: Recurrent To Input Weights cannot be NULL "
2732  "when CIFG is disabled.");
2733  }
2734  if(params.m_InputGateBias == nullptr)
2735  {
2736  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Input Gate Bias cannot be NULL "
2737  "when CIFG is disabled.");
2738  }
2739  layer->m_CifgParameters.m_InputToInputWeights =
2740  std::make_shared<ScopedTensorHandle>(*(params.m_InputToInputWeights));
2741  layer->m_CifgParameters.m_RecurrentToInputWeights =
2742  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToInputWeights));
2743  layer->m_CifgParameters.m_InputGateBias =
2744  std::make_shared<ScopedTensorHandle>(*(params.m_InputGateBias));
2745  }
2746 
2747  //Lstm projection parameters
2748  if(descriptor.m_ProjectionEnabled)
2749  {
2750  if(params.m_ProjectionWeights == nullptr)
2751  {
2752  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Projection Weights cannot be NULL "
2753  "when projection is enabled.");
2754  }
2755  layer->m_ProjectionParameters.m_ProjectionWeights =
2756  std::make_shared<ScopedTensorHandle>(*(params.m_ProjectionWeights));
2757  if(params.m_ProjectionBias != nullptr)
2758  {
2759  layer->m_ProjectionParameters.m_ProjectionBias =
2760  std::make_shared<ScopedTensorHandle>(*(params.m_ProjectionBias));
2761  }
2762  }
2763 
2764  //Lstm Peephole params
2765  if(descriptor.m_PeepholeEnabled)
2766  {
2767  if(!descriptor.m_CifgEnabled)
2768  {
2769  if(params.m_CellToInputWeights == nullptr)
2770  {
2771  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Cell To Input Weights "
2772  "cannot be NULL when Peephole is enabled and CIFG disabled.");
2773  }
2774 
2775  layer->m_PeepholeParameters.m_CellToInputWeights =
2776  std::make_shared<ScopedTensorHandle>(*(params.m_CellToInputWeights));
2777  }
2778 
2779  if(params.m_CellToForgetWeights == nullptr)
2780  {
2781  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Cell To Forget Weights cannot be NULL "
2782  "when Peephole is enabled.");
2783  }
2784  if(params.m_CellToOutputWeights == nullptr)
2785  {
2786  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Cell To Output Weights cannot be NULL "
2787  "when Peephole is enabled.");
2788  }
2789 
2790  layer->m_PeepholeParameters.m_CellToForgetWeights =
2791  std::make_shared<ScopedTensorHandle>(*(params.m_CellToForgetWeights));
2792  layer->m_PeepholeParameters.m_CellToOutputWeights =
2793  std::make_shared<ScopedTensorHandle>(*(params.m_CellToOutputWeights));
2794  }
2795 
2796  //Lstm Layer Normalization params
2797  if(descriptor.m_LayerNormEnabled)
2798  {
2799  if(!descriptor.m_CifgEnabled)
2800  {
2801  if(params.m_InputLayerNormWeights == nullptr)
2802  {
2803  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Input layer normalization weights "
2804  "cannot be NULL when layer normalization is enabled and CIFG disabled.");
2805  }
2806  layer->m_LayerNormParameters.m_InputLayerNormWeights =
2807  std::make_shared<ScopedTensorHandle>(*(params.m_InputLayerNormWeights));
2808  }
2809 
2810  if(params.m_ForgetLayerNormWeights == nullptr)
2811  {
2812  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Forget layer normalization weights "
2813  "cannot be NULL when layer normalization is enabled.");
2814  }
2815  if(params.m_CellLayerNormWeights == nullptr)
2816  {
2817  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Cell layer normalization weights "
2818  "cannot be NULL when layer normalization is enabled.");
2819  }
2820  if(params.m_OutputLayerNormWeights == nullptr)
2821  {
2822  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Output layer normalization weights "
2823  "cannot be NULL when layer normalization is enabled.");
2824  }
2825  layer->m_LayerNormParameters.m_ForgetLayerNormWeights =
2826  std::make_shared<ScopedTensorHandle>(*(params.m_ForgetLayerNormWeights));
2827  layer->m_LayerNormParameters.m_CellLayerNormWeights =
2828  std::make_shared<ScopedTensorHandle>(*(params.m_CellLayerNormWeights));
2829  layer->m_LayerNormParameters.m_OutputLayerNormWeights =
2830  std::make_shared<ScopedTensorHandle>(*(params.m_OutputLayerNormWeights));
2831  }
2832  return layer;
2833 }

◆ ExecuteStrategy()

ARMNN_NO_DEPRECATE_WARN_END void ExecuteStrategy ( IStrategy strategy) const

Definition at line 2878 of file Network.cpp.

References NetworkImpl::GetGraph().

Referenced by NetworkImpl::GetGraph().

2879 {
2880  for (auto layer : GetGraph())
2881  {
2882  layer->ExecuteStrategy(strategy);
2883  };
2884 }
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::AddPooling3dLayer(), NetworkImpl::AddPrecompiledLayer(), 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 1867 of file Network.cpp.

References armnn::Success.

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

1868 {
1869  m_Graph->Print();
1870  return Status::Success;
1871 }

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