ArmNN
 23.05
NetworkImpl Class Reference

Private implementation of INetwork. More...

#include <Network.hpp>

Public Member Functions

 NetworkImpl (const 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)
 
IConnectableLayerAddBatchMatMulLayer (const BatchMatMulDescriptor &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 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 char *name=nullptr)
 
IConnectableLayerAddDequantizeLayer (const char *name=nullptr)
 
IConnectableLayerAddDetectionPostProcessLayer (const DetectionPostProcessDescriptor &descriptor, const ConstTensor &anchors, const char *name=nullptr)
 
IConnectableLayerAddDivisionLayer (const char *name=nullptr)
 
IConnectableLayerAddElementwiseBinaryLayer (const ElementwiseBinaryDescriptor &elementwiseBinaryDescriptor, 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)
 
IConnectableLayerAddGatherLayer (const GatherDescriptor &gatherDescriptor, const char *name=nullptr)
 
IConnectableLayerAddGatherNdLayer (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)
 
IConnectableLayerAddConvertFp16ToFp32Layer (const char *name=nullptr)
 
IConnectableLayerAddConvertFp32ToFp16Layer (const char *name=nullptr)
 
void ExecuteStrategy (IStrategy &strategy) const
 

Detailed Description

Private implementation of INetwork.

Definition at line 32 of file Network.hpp.

Constructor & Destructor Documentation

◆ NetworkImpl()

NetworkImpl ( const NetworkOptions networkOptions = {})

Definition at line 2044 of file Network.cpp.

2045 : m_NetworkOptions(networkOptions),
2046  m_Graph(std::make_unique<Graph>(GetShapeInferenceMethod(), GetAllowExpandedDims()))
2047 {}

◆ ~NetworkImpl()

Definition at line 2049 of file Network.cpp.

2050 {
2051 }

Member Function Documentation

◆ AddActivationLayer()

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

Definition at line 2179 of file Network.cpp.

2181 {
2182  return m_Graph->AddLayer<ActivationLayer>(activationDescriptor, name);
2183 }

◆ AddAdditionLayer()

IConnectableLayer * AddAdditionLayer ( const char *  name = nullptr)

Definition at line 2225 of file Network.cpp.

2226 {
2227  return m_Graph->AddLayer<AdditionLayer>(name);
2228 }

◆ AddArgMinMaxLayer()

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

Definition at line 2185 of file Network.cpp.

2187 {
2188  return m_Graph->AddLayer<ArgMinMaxLayer>(argMinMaxDescriptor, name);
2189 }

◆ AddBatchMatMulLayer()

IConnectableLayer * AddBatchMatMulLayer ( const BatchMatMulDescriptor desc,
const char *  name = nullptr 
)

Definition at line 2900 of file Network.cpp.

2901 {
2902  return m_Graph->AddLayer<BatchMatMulLayer>(desc, name);
2903 }

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

2246 {
2247  const auto layer = m_Graph->AddLayer<BatchNormalizationLayer>(desc, name);
2248 
2249  layer->m_Mean = std::make_shared<ScopedTensorHandle>(mean);
2250  layer->m_Variance = std::make_shared<ScopedTensorHandle>(variance);
2251  layer->m_Beta = std::make_shared<ScopedTensorHandle>(beta);
2252  layer->m_Gamma = std::make_shared<ScopedTensorHandle>(gamma);
2253 
2254  return layer;
2255 }

References BatchNormalizationLayer::m_Mean.

◆ AddBatchToSpaceNdLayer()

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

Definition at line 2064 of file Network.cpp.

2066 {
2067  return m_Graph->AddLayer<BatchToSpaceNdLayer>(batchToSpaceNdDescriptor, name);
2068 }

◆ AddCastLayer()

IConnectableLayer * AddCastLayer ( const char *  name = nullptr)

Definition at line 2070 of file Network.cpp.

2071 {
2072  return m_Graph->AddLayer<CastLayer>(name);
2073 }

◆ AddChannelShuffleLayer()

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

Definition at line 2074 of file Network.cpp.

2076 {
2077  return m_Graph->AddLayer<ChannelShuffleLayer>(channelShuffleDescriptor, name);
2078 }

◆ AddComparisonLayer()

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

Definition at line 2080 of file Network.cpp.

2082 {
2083  return m_Graph->AddLayer<ComparisonLayer>(comparisonDescriptor, name);
2084 }

◆ AddConcatLayer()

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

Definition at line 2110 of file Network.cpp.

2112 {
2113  return m_Graph->AddLayer<ConcatLayer>(concatDescriptor, name);
2114 }

◆ AddConstantLayer()

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

Definition at line 2296 of file Network.cpp.

2297 {
2298  auto layer = m_Graph->AddLayer<ConstantLayer>(name);
2299 
2300  layer->m_LayerOutput = std::make_shared<ScopedTensorHandle>(input);
2301 
2302  return layer;
2303 }

References ConstantLayer::m_LayerOutput.

◆ AddConvertFp16ToFp32Layer()

IConnectableLayer * AddConvertFp16ToFp32Layer ( const char *  name = nullptr)

Definition at line 2122 of file Network.cpp.

2123 {
2124  return m_Graph->AddLayer<ConvertFp16ToFp32Layer>(name);
2125 }

◆ AddConvertFp32ToFp16Layer()

IConnectableLayer * AddConvertFp32ToFp16Layer ( const char *  name = nullptr)

Definition at line 2127 of file Network.cpp.

2128 {
2129  return m_Graph->AddLayer<ConvertFp32ToFp16Layer>(name);
2130 }

◆ AddConvolution2dLayer()

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

Definition at line 2116 of file Network.cpp.

2118 {
2119  return m_Graph->AddLayer<Convolution2dLayer>(convolution2dDescriptor, name);
2120 }

◆ AddConvolution3dLayer()

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

Definition at line 2132 of file Network.cpp.

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

◆ AddDepthToSpaceLayer()

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

Definition at line 2138 of file Network.cpp.

2140 {
2141  return m_Graph->AddLayer<DepthToSpaceLayer>(depthToSpaceDescriptor, name);
2142 }

◆ AddDepthwiseConvolution2dLayer()

IConnectableLayer * AddDepthwiseConvolution2dLayer ( const DepthwiseConvolution2dDescriptor convolution2dDescriptor,
const char *  name = nullptr 
)

Definition at line 2144 of file Network.cpp.

2147 {
2148  return m_Graph->AddLayer<DepthwiseConvolution2dLayer>(convolution2dDescriptor, name);
2149 }

◆ AddDequantizeLayer()

IConnectableLayer * AddDequantizeLayer ( const char *  name = nullptr)

Definition at line 2494 of file Network.cpp.

2495 {
2496  return m_Graph->AddLayer<DequantizeLayer>(name);
2497 }

◆ AddDetectionPostProcessLayer()

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

Definition at line 2151 of file Network.cpp.

2153 {
2154  const auto layer = m_Graph->AddLayer<DetectionPostProcessLayer>(descriptor, name);
2155 
2156  layer->m_Anchors = std::make_shared<ScopedTensorHandle>(anchors);
2157 
2158  return layer;
2159 }

References DetectionPostProcessLayer::m_Anchors.

◆ AddDivisionLayer()

IConnectableLayer * AddDivisionLayer ( const char *  name = nullptr)

Definition at line 2469 of file Network.cpp.

2470 {
2471  return m_Graph->AddLayer<DivisionLayer>(name);
2472 }

◆ AddElementwiseBinaryLayer()

IConnectableLayer * AddElementwiseBinaryLayer ( const ElementwiseBinaryDescriptor elementwiseBinaryDescriptor,
const char *  name = nullptr 
)

Definition at line 2086 of file Network.cpp.

2088 {
2089  return m_Graph->AddLayer<ElementwiseBinaryLayer>(elementwiseBinaryDesc, name);
2090 }

◆ AddElementwiseUnaryLayer()

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

Definition at line 2092 of file Network.cpp.

2094 {
2095  return m_Graph->AddLayer<ElementwiseUnaryLayer>(elementwiseUnaryDescriptor, name);
2096 }

◆ AddFillLayer()

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

Definition at line 2098 of file Network.cpp.

2100 {
2101  return m_Graph->AddLayer<FillLayer>(fillDescriptor, name);
2102 }

◆ AddFloorLayer()

IConnectableLayer * AddFloorLayer ( const char *  name = nullptr)

Definition at line 2323 of file Network.cpp.

2324 {
2325  return m_Graph->AddLayer<FloorLayer>(name);
2326 }

◆ AddFullyConnectedLayer()

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

Definition at line 2104 of file Network.cpp.

2106 {
2107  return m_Graph->AddLayer<FullyConnectedLayer>(fullyConnectedDescriptor, name);
2108 }

◆ AddGatherLayer()

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

Definition at line 2505 of file Network.cpp.

2507 {
2508  return m_Graph->AddLayer<GatherLayer>(gatherDescriptor, name);
2509 }

◆ AddGatherNdLayer()

IConnectableLayer * AddGatherNdLayer ( const char *  name = nullptr)

Definition at line 2511 of file Network.cpp.

2512 {
2513  return m_Graph->AddLayer<GatherNdLayer>(name);
2514 }

◆ AddInputLayer()

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

Definition at line 2059 of file Network.cpp.

2060 {
2061  return m_Graph->AddLayer<InputLayer>(id, name);
2062 }

◆ AddInstanceNormalizationLayer()

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

Definition at line 2278 of file Network.cpp.

2280 {
2281  return m_Graph->AddLayer<InstanceNormalizationLayer>(desc, name);
2282 }

◆ AddL2NormalizationLayer()

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

Definition at line 2284 of file Network.cpp.

2286 {
2287  return m_Graph->AddLayer<L2NormalizationLayer>(desc, name);
2288 }

◆ AddLogicalBinaryLayer()

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

Definition at line 2752 of file Network.cpp.

2754 {
2755  return m_Graph->AddLayer<LogicalBinaryLayer>(logicalBinaryDescriptor, name);
2756 }

◆ AddLogSoftmaxLayer()

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

Definition at line 2290 of file Network.cpp.

2292 {
2293  return m_Graph->AddLayer<LogSoftmaxLayer>(desc, name);
2294 }

◆ AddLstmLayer()

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

Definition at line 2328 of file Network.cpp.

2331 {
2332  const auto layer = m_Graph->AddLayer<LstmLayer>(descriptor, name);
2333 
2334  //Lstm Basic Parameters
2335  layer->m_BasicParameters.m_InputToForgetWeights =
2336  std::make_shared<ScopedTensorHandle>(*(params.m_InputToForgetWeights));
2337  layer->m_BasicParameters.m_InputToCellWeights =
2338  std::make_shared<ScopedTensorHandle>(*(params.m_InputToCellWeights));
2339  layer->m_BasicParameters.m_InputToOutputWeights =
2340  std::make_shared<ScopedTensorHandle>(*(params.m_InputToOutputWeights));
2341  layer->m_BasicParameters.m_RecurrentToForgetWeights =
2342  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToForgetWeights));
2343  layer->m_BasicParameters.m_RecurrentToCellWeights =
2344  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToCellWeights));
2345  layer->m_BasicParameters.m_RecurrentToOutputWeights =
2346  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToOutputWeights));
2347  layer->m_BasicParameters.m_ForgetGateBias =
2348  std::make_shared<ScopedTensorHandle>(*(params.m_ForgetGateBias));
2349  layer->m_BasicParameters.m_CellBias =
2350  std::make_shared<ScopedTensorHandle>(*(params.m_CellBias));
2351  layer->m_BasicParameters.m_OutputGateBias =
2352  std::make_shared<ScopedTensorHandle>(*(params.m_OutputGateBias));
2353 
2354  //Lstm Cifg parameters
2355  if(!descriptor.m_CifgEnabled)
2356  {
2357  if(params.m_InputToInputWeights == nullptr)
2358  {
2359  throw InvalidArgumentException("AddLstmLayer: Input To Input Weights cannot be NULL "
2360  "when CIFG is disabled.");
2361  }
2362  if(params.m_RecurrentToInputWeights == nullptr)
2363  {
2364  throw InvalidArgumentException(
2365  "AddLstmLayer: Recurrent To Input Weights cannot be NULL "
2366  "when CIFG is disabled.");
2367  }
2368  if(params.m_InputGateBias == nullptr)
2369  {
2370  throw InvalidArgumentException("AddLstmLayer: Input Gate Bias cannot be NULL "
2371  "when CIFG is disabled.");
2372  }
2373  layer->m_CifgParameters.m_InputToInputWeights =
2374  std::make_shared<ScopedTensorHandle>(*(params.m_InputToInputWeights));
2375  layer->m_CifgParameters.m_RecurrentToInputWeights =
2376  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToInputWeights));
2377  layer->m_CifgParameters.m_InputGateBias =
2378  std::make_shared<ScopedTensorHandle>(*(params.m_InputGateBias));
2379  }
2380 
2381  //Lstm projection parameters
2382  if(descriptor.m_ProjectionEnabled)
2383  {
2384  if(params.m_ProjectionWeights == nullptr)
2385  {
2386  throw InvalidArgumentException("AddLstmLayer: Projection Weights cannot be NULL "
2387  "when projection is enabled.");
2388  }
2389  layer->m_ProjectionParameters.m_ProjectionWeights =
2390  std::make_shared<ScopedTensorHandle>(*(params.m_ProjectionWeights));
2391  if(params.m_ProjectionBias != nullptr)
2392  {
2393  layer->m_ProjectionParameters.m_ProjectionBias =
2394  std::make_shared<ScopedTensorHandle>(*(params.m_ProjectionBias));
2395  }
2396  }
2397 
2398  //Lstm Peephole params
2399  if(descriptor.m_PeepholeEnabled)
2400  {
2401  if(!descriptor.m_CifgEnabled)
2402  {
2403  if(params.m_CellToInputWeights == nullptr)
2404  {
2405  throw InvalidArgumentException("AddLstmLayer: Cell To Input Weights cannot be NULL "
2406  "when Peephole is enabled and CIFG disabled.");
2407  }
2408 
2409  layer->m_PeepholeParameters.m_CellToInputWeights =
2410  std::make_shared<ScopedTensorHandle>(*(params.m_CellToInputWeights));
2411  }
2412 
2413  if(params.m_CellToForgetWeights == nullptr)
2414  {
2415  throw InvalidArgumentException("AddLstmLayer: Cell To Forget Weights cannot be NULL "
2416  "when Peephole is enabled.");
2417  }
2418  if(params.m_CellToOutputWeights == nullptr)
2419  {
2420  throw InvalidArgumentException("AddLstmLayer: Cell To Output Weights cannot be NULL "
2421  "when Peephole is enabled.");
2422  }
2423 
2424  layer->m_PeepholeParameters.m_CellToForgetWeights =
2425  std::make_shared<ScopedTensorHandle>(*(params.m_CellToForgetWeights));
2426  layer->m_PeepholeParameters.m_CellToOutputWeights =
2427  std::make_shared<ScopedTensorHandle>(*(params.m_CellToOutputWeights));
2428  }
2429 
2430  //Lstm Layer Normalization params
2431  if(descriptor.m_LayerNormEnabled)
2432  {
2433  if(!descriptor.m_CifgEnabled)
2434  {
2435  if(params.m_InputLayerNormWeights == nullptr)
2436  {
2437  throw InvalidArgumentException("AddLstmLayer: Input layer normalization weights cannot be NULL "
2438  "when layer normalization is enabled and CIFG disabled.");
2439  }
2440  layer->m_LayerNormParameters.m_InputLayerNormWeights =
2441  std::make_shared<ScopedTensorHandle>(*(params.m_InputLayerNormWeights));
2442  }
2443 
2444  if(params.m_ForgetLayerNormWeights == nullptr)
2445  {
2446  throw InvalidArgumentException("AddLstmLayer: Forget layer normalization weights cannot be NULL "
2447  "when layer normalization is enabled.");
2448  }
2449  if(params.m_CellLayerNormWeights == nullptr)
2450  {
2451  throw InvalidArgumentException("AddLstmLayer: Cell layer normalization weights cannot be NULL "
2452  "when layer normalization is enabled.");
2453  }
2454  if(params.m_OutputLayerNormWeights == nullptr)
2455  {
2456  throw InvalidArgumentException("AddLstmLayer: Output layer normalization weights cannot be NULL "
2457  "when layer normalization is enabled.");
2458  }
2459  layer->m_LayerNormParameters.m_ForgetLayerNormWeights =
2460  std::make_shared<ScopedTensorHandle>(*(params.m_ForgetLayerNormWeights));
2461  layer->m_LayerNormParameters.m_CellLayerNormWeights =
2462  std::make_shared<ScopedTensorHandle>(*(params.m_CellLayerNormWeights));
2463  layer->m_LayerNormParameters.m_OutputLayerNormWeights =
2464  std::make_shared<ScopedTensorHandle>(*(params.m_OutputLayerNormWeights));
2465  }
2466  return layer;
2467 }

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.

◆ AddMaximumLayer()

IConnectableLayer * AddMaximumLayer ( const char *  name = nullptr)

Definition at line 2215 of file Network.cpp.

2216 {
2217  return m_Graph->AddLayer<MaximumLayer>(name);
2218 }

◆ AddMeanLayer()

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

Definition at line 2479 of file Network.cpp.

2480 {
2481  return m_Graph->AddLayer<MeanLayer>(meanDescriptor,name);
2482 }

◆ AddMergeLayer()

IConnectableLayer * AddMergeLayer ( const char *  name = nullptr)

Definition at line 2516 of file Network.cpp.

2517 {
2518  return m_Graph->AddLayer<MergeLayer>(name);
2519 }

◆ AddMinimumLayer()

IConnectableLayer * AddMinimumLayer ( const char *  name = nullptr)

Definition at line 2220 of file Network.cpp.

2221 {
2222  return m_Graph->AddLayer<MinimumLayer>(name);
2223 }

◆ AddMultiplicationLayer()

IConnectableLayer * AddMultiplicationLayer ( const char *  name = nullptr)

Definition at line 2230 of file Network.cpp.

2231 {
2232  return m_Graph->AddLayer<MultiplicationLayer>(name);
2233 }

◆ AddNormalizationLayer()

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

Definition at line 2191 of file Network.cpp.

2194 {
2195  return m_Graph->AddLayer<NormalizationLayer>(normalizationDescriptor, name);
2196 }

◆ AddOutputLayer()

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

Definition at line 2235 of file Network.cpp.

2236 {
2237  return m_Graph->AddLayer<OutputLayer>(id, name);
2238 }

◆ AddPadLayer()

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

Definition at line 2484 of file Network.cpp.

2485 {
2486  return m_Graph->AddLayer<PadLayer>(padDescriptor,name);
2487 }

◆ AddPermuteLayer()

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

Definition at line 2161 of file Network.cpp.

2163 {
2164  return m_Graph->AddLayer<PermuteLayer>(permuteDescriptor, name);
2165 }

◆ AddPooling2dLayer()

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

Definition at line 2167 of file Network.cpp.

2169 {
2170  return m_Graph->AddLayer<Pooling2dLayer>(pooling2dDescriptor, name);
2171 }

◆ AddPooling3dLayer()

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

Definition at line 2173 of file Network.cpp.

2175 {
2176  return m_Graph->AddLayer<Pooling3dLayer>(pooling3dDescriptor, name);
2177 }

◆ AddPrecompiledLayer()

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

Definition at line 2905 of file Network.cpp.

2909 {
2910  // Method use is for backend users.
2911  PreCompiledLayer* layer;
2912  if (name)
2913  {
2914  layer = m_Graph->AddLayer<PreCompiledLayer>(preCompiledDescriptor, name);
2915  }
2916  else
2917  {
2918  layer = m_Graph->AddLayer<PreCompiledLayer>(preCompiledDescriptor, "pre-compiled");
2919  }
2920 
2921  // Assign the pre-compiled object to layer
2922  // Pass only one compiled network, Arm NN does not handle multiple
2923  // pre-compiled objects in a single pre-compiled layer currently
2924  layer->SetPreCompiledObject(std::move(compiledBlobPtr));
2925 
2926  if (backend.has_value())
2927  {
2928  layer->SetBackendId(backend.value());
2929  }
2930  else if (layer->GetBackendHint().has_value())
2931  {
2932  layer->SetBackendId(layer->GetBackendHint().value());
2933  }
2934 
2935  return layer;
2936 }

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

◆ AddPreluLayer()

IConnectableLayer * AddPreluLayer ( const char *  name = nullptr)

Definition at line 2526 of file Network.cpp.

2527 {
2528  return m_Graph->AddLayer<PreluLayer>(name);
2529 }

◆ AddQLstmLayer()

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

Definition at line 2610 of file Network.cpp.

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

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.

◆ AddQuantizedLstmLayer()

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

Definition at line 2572 of file Network.cpp.

2574 {
2575  const auto layer = m_Graph->AddLayer<QuantizedLstmLayer>(name);
2576 
2577  // InputToX weights
2578  layer->m_QuantizedLstmParameters.m_InputToInputWeights =
2579  std::make_shared<ScopedTensorHandle>(params.GetInputToInputWeights());
2580  layer->m_QuantizedLstmParameters.m_InputToForgetWeights =
2581  std::make_shared<ScopedTensorHandle>(params.GetInputToForgetWeights());
2582  layer->m_QuantizedLstmParameters.m_InputToCellWeights =
2583  std::make_shared<ScopedTensorHandle>(params.GetInputToCellWeights());
2584  layer->m_QuantizedLstmParameters.m_InputToOutputWeights =
2585  std::make_shared<ScopedTensorHandle>(params.GetInputToOutputWeights());
2586 
2587  // RecurrentToX weights
2588  layer->m_QuantizedLstmParameters.m_RecurrentToInputWeights =
2589  std::make_shared<ScopedTensorHandle>(params.GetRecurrentToInputWeights());
2590  layer->m_QuantizedLstmParameters.m_RecurrentToForgetWeights =
2591  std::make_shared<ScopedTensorHandle>(params.GetRecurrentToForgetWeights());
2592  layer->m_QuantizedLstmParameters.m_RecurrentToCellWeights =
2593  std::make_shared<ScopedTensorHandle>(params.GetRecurrentToCellWeights());
2594  layer->m_QuantizedLstmParameters.m_RecurrentToOutputWeights =
2595  std::make_shared<ScopedTensorHandle>(params.GetRecurrentToOutputWeights());
2596 
2597  // Bias
2598  layer->m_QuantizedLstmParameters.m_InputGateBias =
2599  std::make_shared<ScopedTensorHandle>(params.GetInputGateBias());
2600  layer->m_QuantizedLstmParameters.m_ForgetGateBias =
2601  std::make_shared<ScopedTensorHandle>(params.GetForgetGateBias());
2602  layer->m_QuantizedLstmParameters.m_CellBias =
2603  std::make_shared<ScopedTensorHandle>(params.GetCellBias());
2604  layer->m_QuantizedLstmParameters.m_OutputGateBias =
2605  std::make_shared<ScopedTensorHandle>(params.GetOutputGateBias());
2606 
2607  return layer;
2608 }

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.

◆ AddQuantizeLayer()

IConnectableLayer * AddQuantizeLayer ( const char *  name = nullptr)

Definition at line 2489 of file Network.cpp.

2490 {
2491  return m_Graph->AddLayer<QuantizeLayer>(name);
2492 }

◆ AddRankLayer()

IConnectableLayer * AddRankLayer ( const char *  name = nullptr)

Definition at line 2257 of file Network.cpp.

2258 {
2259  return m_Graph->AddLayer<RankLayer>(name);
2260 }

◆ AddReduceLayer()

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

Definition at line 2262 of file Network.cpp.

2264 {
2265  return m_Graph->AddLayer<ReduceLayer>(reduceDescriptor, name);
2266 }

◆ AddReshapeLayer()

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

Definition at line 2305 of file Network.cpp.

2307 {
2308  return m_Graph->AddLayer<ReshapeLayer>(reshapeDescriptor, name);
2309 }

◆ AddResizeLayer()

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

Definition at line 2268 of file Network.cpp.

2269 {
2270  return m_Graph->AddLayer<ResizeLayer>(resizeDescriptor, name);
2271 }

◆ AddShapeLayer()

IConnectableLayer * AddShapeLayer ( const char *  name = nullptr)

Definition at line 2273 of file Network.cpp.

2274 {
2275  return m_Graph->AddLayer<ShapeLayer>(name);
2276 }

◆ AddSliceLayer()

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

Definition at line 2198 of file Network.cpp.

2199 {
2200  return m_Graph->AddLayer<SliceLayer>(sliceDescriptor, name);
2201 }

◆ AddSoftmaxLayer()

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

Definition at line 2203 of file Network.cpp.

2205 {
2206  return m_Graph->AddLayer<SoftmaxLayer>(softmaxDescriptor, name);
2207 }

◆ AddSpaceToBatchNdLayer()

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

Definition at line 2311 of file Network.cpp.

2313 {
2314  return m_Graph->AddLayer<SpaceToBatchNdLayer>(spaceToBatchNdDescriptor, name);
2315 }

◆ AddSpaceToDepthLayer()

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

Definition at line 2317 of file Network.cpp.

2319 {
2320  return m_Graph->AddLayer<SpaceToDepthLayer>(spaceToDepthDescriptor, name);
2321 }

◆ AddSplitterLayer()

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

Definition at line 2209 of file Network.cpp.

2211 {
2212  return m_Graph->AddLayer<SplitterLayer>(splitterDescriptor, name);
2213 }

◆ AddStackLayer()

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

Definition at line 2559 of file Network.cpp.

2561 {
2562  return m_Graph->AddLayer<StackLayer>(stackDescriptor, name);
2563 }

◆ AddStandInLayer()

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

Definition at line 2566 of file Network.cpp.

2568 {
2569  return m_Graph->AddLayer<StandInLayer>(desc, name);
2570 }

◆ AddStridedSliceLayer()

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

Definition at line 2499 of file Network.cpp.

2501 {
2502  return m_Graph->AddLayer<StridedSliceLayer>(stridedSliceDescriptor, name);
2503 }

◆ AddSubtractionLayer()

IConnectableLayer * AddSubtractionLayer ( const char *  name = nullptr)

Definition at line 2474 of file Network.cpp.

2475 {
2476  return m_Graph->AddLayer<SubtractionLayer>(name);
2477 }

◆ AddSwitchLayer()

IConnectableLayer * AddSwitchLayer ( const char *  name = nullptr)

Definition at line 2521 of file Network.cpp.

2522 {
2523  return m_Graph->AddLayer<SwitchLayer>(name);
2524 }

◆ AddTransposeConvolution2dLayer()

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

Definition at line 2531 of file Network.cpp.

2535 {
2536  if (descriptor.m_BiasEnabled && !biases.has_value())
2537  {
2538  throw InvalidArgumentException("AddTransposeConvolution2dLayer: Biases cannot be empty");
2539  }
2540 
2541  const auto layer = m_Graph->AddLayer<TransposeConvolution2dLayer>(descriptor, name);
2542 
2543  layer->m_Weight = std::make_shared<ScopedTensorHandle>(weights);
2544 
2545  if (descriptor.m_BiasEnabled)
2546  {
2547  layer->m_Bias = std::make_shared<ScopedTensorHandle>(biases.value());
2548  }
2549 
2550  return layer;
2551 }

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

◆ AddTransposeLayer()

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

Definition at line 2553 of file Network.cpp.

2555 {
2556  return m_Graph->AddLayer<TransposeLayer>(transposeDescriptor, name);
2557 }

◆ AddUnidirectionalSequenceLstmLayer()

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

Definition at line 2758 of file Network.cpp.

2762 {
2763  const auto layer = m_Graph->AddLayer<UnidirectionalSequenceLstmLayer>(descriptor, name);
2764 
2765  //Lstm Basic Parameters
2766  layer->m_BasicParameters.m_InputToForgetWeights =
2767  std::make_shared<ScopedTensorHandle>(*(params.m_InputToForgetWeights));
2768  layer->m_BasicParameters.m_InputToCellWeights =
2769  std::make_shared<ScopedTensorHandle>(*(params.m_InputToCellWeights));
2770  layer->m_BasicParameters.m_InputToOutputWeights =
2771  std::make_shared<ScopedTensorHandle>(*(params.m_InputToOutputWeights));
2772  layer->m_BasicParameters.m_RecurrentToForgetWeights =
2773  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToForgetWeights));
2774  layer->m_BasicParameters.m_RecurrentToCellWeights =
2775  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToCellWeights));
2776  layer->m_BasicParameters.m_RecurrentToOutputWeights =
2777  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToOutputWeights));
2778  layer->m_BasicParameters.m_ForgetGateBias =
2779  std::make_shared<ScopedTensorHandle>(*(params.m_ForgetGateBias));
2780  layer->m_BasicParameters.m_CellBias =
2781  std::make_shared<ScopedTensorHandle>(*(params.m_CellBias));
2782  layer->m_BasicParameters.m_OutputGateBias =
2783  std::make_shared<ScopedTensorHandle>(*(params.m_OutputGateBias));
2784 
2785  //Lstm Cifg parameters
2786  if(!descriptor.m_CifgEnabled)
2787  {
2788  if(params.m_InputToInputWeights == nullptr)
2789  {
2790  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Input To Input Weights cannot be NULL "
2791  "when CIFG is disabled.");
2792  }
2793  if(params.m_RecurrentToInputWeights == nullptr)
2794  {
2795  throw InvalidArgumentException(
2796  "AddUnidirectionalSequenceLstmLayer: Recurrent To Input Weights cannot be NULL "
2797  "when CIFG is disabled.");
2798  }
2799  if(params.m_InputGateBias == nullptr)
2800  {
2801  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Input Gate Bias cannot be NULL "
2802  "when CIFG is disabled.");
2803  }
2804  layer->m_CifgParameters.m_InputToInputWeights =
2805  std::make_shared<ScopedTensorHandle>(*(params.m_InputToInputWeights));
2806  layer->m_CifgParameters.m_RecurrentToInputWeights =
2807  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToInputWeights));
2808  layer->m_CifgParameters.m_InputGateBias =
2809  std::make_shared<ScopedTensorHandle>(*(params.m_InputGateBias));
2810  }
2811 
2812  //Lstm projection parameters
2813  if(descriptor.m_ProjectionEnabled)
2814  {
2815  if(params.m_ProjectionWeights == nullptr)
2816  {
2817  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Projection Weights cannot be NULL "
2818  "when projection is enabled.");
2819  }
2820  layer->m_ProjectionParameters.m_ProjectionWeights =
2821  std::make_shared<ScopedTensorHandle>(*(params.m_ProjectionWeights));
2822  if(params.m_ProjectionBias != nullptr)
2823  {
2824  layer->m_ProjectionParameters.m_ProjectionBias =
2825  std::make_shared<ScopedTensorHandle>(*(params.m_ProjectionBias));
2826  }
2827  }
2828 
2829  //Lstm Peephole params
2830  if(descriptor.m_PeepholeEnabled)
2831  {
2832  if(!descriptor.m_CifgEnabled)
2833  {
2834  if(params.m_CellToInputWeights == nullptr)
2835  {
2836  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Cell To Input Weights "
2837  "cannot be NULL when Peephole is enabled and CIFG disabled.");
2838  }
2839 
2840  layer->m_PeepholeParameters.m_CellToInputWeights =
2841  std::make_shared<ScopedTensorHandle>(*(params.m_CellToInputWeights));
2842  }
2843 
2844  if(params.m_CellToForgetWeights == nullptr)
2845  {
2846  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Cell To Forget Weights cannot be NULL "
2847  "when Peephole is enabled.");
2848  }
2849  if(params.m_CellToOutputWeights == nullptr)
2850  {
2851  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Cell To Output Weights cannot be NULL "
2852  "when Peephole is enabled.");
2853  }
2854 
2855  layer->m_PeepholeParameters.m_CellToForgetWeights =
2856  std::make_shared<ScopedTensorHandle>(*(params.m_CellToForgetWeights));
2857  layer->m_PeepholeParameters.m_CellToOutputWeights =
2858  std::make_shared<ScopedTensorHandle>(*(params.m_CellToOutputWeights));
2859  }
2860 
2861  //Lstm Layer Normalization params
2862  if(descriptor.m_LayerNormEnabled)
2863  {
2864  if(!descriptor.m_CifgEnabled)
2865  {
2866  if(params.m_InputLayerNormWeights == nullptr)
2867  {
2868  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Input layer normalization weights "
2869  "cannot be NULL when layer normalization is enabled and CIFG disabled.");
2870  }
2871  layer->m_LayerNormParameters.m_InputLayerNormWeights =
2872  std::make_shared<ScopedTensorHandle>(*(params.m_InputLayerNormWeights));
2873  }
2874 
2875  if(params.m_ForgetLayerNormWeights == nullptr)
2876  {
2877  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Forget layer normalization weights "
2878  "cannot be NULL when layer normalization is enabled.");
2879  }
2880  if(params.m_CellLayerNormWeights == nullptr)
2881  {
2882  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Cell layer normalization weights "
2883  "cannot be NULL when layer normalization is enabled.");
2884  }
2885  if(params.m_OutputLayerNormWeights == nullptr)
2886  {
2887  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Output layer normalization weights "
2888  "cannot be NULL when layer normalization is enabled.");
2889  }
2890  layer->m_LayerNormParameters.m_ForgetLayerNormWeights =
2891  std::make_shared<ScopedTensorHandle>(*(params.m_ForgetLayerNormWeights));
2892  layer->m_LayerNormParameters.m_CellLayerNormWeights =
2893  std::make_shared<ScopedTensorHandle>(*(params.m_CellLayerNormWeights));
2894  layer->m_LayerNormParameters.m_OutputLayerNormWeights =
2895  std::make_shared<ScopedTensorHandle>(*(params.m_OutputLayerNormWeights));
2896  }
2897  return layer;
2898 }

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.

◆ ExecuteStrategy()

void ExecuteStrategy ( IStrategy strategy) const

Definition at line 2938 of file Network.cpp.

2939 {
2940  for (auto layer : GetGraph())
2941  {
2942  layer->ExecuteStrategy(strategy);
2943  };
2944 }

References NetworkImpl::GetGraph().

◆ GetGraph()

const Graph& GetGraph ( ) const
inline

Definition at line 38 of file Network.hpp.

39  { return *m_Graph; }

Referenced by NetworkImpl::ExecuteStrategy().

◆ PrintGraph()

Status PrintGraph ( )

Definition at line 2053 of file Network.cpp.

2054 {
2055  m_Graph->Print();
2056  return Status::Success;
2057 }

References armnn::Success.


The documentation for this class was generated from the following files:
armnn::Status::Success
@ Success
armnn::NetworkImpl::GetGraph
const Graph & GetGraph() const
Definition: Network.hpp:38