ArmNN
 23.11
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)
 
IConnectableLayerAddBroadcastToLayer (const BroadcastToDescriptor &descriptor, 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)
 
IConnectableLayerAddFusedLayer (const FusedDescriptor &fusedDescriptor, 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)
 
IConnectableLayerAddReverseV2Layer (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)
 
IConnectableLayerAddTileLayer (const TileDescriptor &tileDescriptor, 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 2162 of file Network.cpp.

2163 : m_NetworkOptions(networkOptions),
2164  m_Graph(std::make_unique<Graph>(GetShapeInferenceMethod(), GetAllowExpandedDims()))
2165 {}

◆ ~NetworkImpl()

Definition at line 2167 of file Network.cpp.

2168 {
2169 }

Member Function Documentation

◆ AddActivationLayer()

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

Definition at line 2303 of file Network.cpp.

2305 {
2306  return m_Graph->AddLayer<ActivationLayer>(activationDescriptor, name);
2307 }

◆ AddAdditionLayer()

IConnectableLayer * AddAdditionLayer ( const char *  name = nullptr)

Definition at line 2349 of file Network.cpp.

2350 {
2351  return m_Graph->AddLayer<AdditionLayer>(name);
2352 }

◆ AddArgMinMaxLayer()

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

Definition at line 2309 of file Network.cpp.

2311 {
2312  return m_Graph->AddLayer<ArgMinMaxLayer>(argMinMaxDescriptor, name);
2313 }

◆ AddBatchMatMulLayer()

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

Definition at line 3024 of file Network.cpp.

3025 {
3026  return m_Graph->AddLayer<BatchMatMulLayer>(desc, name);
3027 }

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

2370 {
2371  const auto layer = m_Graph->AddLayer<BatchNormalizationLayer>(desc, name);
2372 
2373  layer->m_Mean = std::make_shared<ScopedTensorHandle>(mean);
2374  layer->m_Variance = std::make_shared<ScopedTensorHandle>(variance);
2375  layer->m_Beta = std::make_shared<ScopedTensorHandle>(beta);
2376  layer->m_Gamma = std::make_shared<ScopedTensorHandle>(gamma);
2377 
2378  return layer;
2379 }

References BatchNormalizationLayer::m_Mean.

◆ AddBatchToSpaceNdLayer()

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

Definition at line 2182 of file Network.cpp.

2184 {
2185  return m_Graph->AddLayer<BatchToSpaceNdLayer>(batchToSpaceNdDescriptor, name);
2186 }

◆ AddBroadcastToLayer()

IConnectableLayer * AddBroadcastToLayer ( const BroadcastToDescriptor descriptor,
const char *  name = nullptr 
)

Definition at line 3072 of file Network.cpp.

3073 {
3074  return m_Graph->AddLayer<BroadcastToLayer>(desc, name);
3075 }

◆ AddCastLayer()

IConnectableLayer * AddCastLayer ( const char *  name = nullptr)

Definition at line 2188 of file Network.cpp.

2189 {
2190  return m_Graph->AddLayer<CastLayer>(name);
2191 }

◆ AddChannelShuffleLayer()

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

Definition at line 2192 of file Network.cpp.

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

◆ AddComparisonLayer()

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

Definition at line 2198 of file Network.cpp.

2200 {
2201  return m_Graph->AddLayer<ComparisonLayer>(comparisonDescriptor, name);
2202 }

◆ AddConcatLayer()

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

Definition at line 2234 of file Network.cpp.

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

◆ AddConstantLayer()

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

Definition at line 2420 of file Network.cpp.

2421 {
2422  auto layer = m_Graph->AddLayer<ConstantLayer>(name);
2423 
2424  layer->m_LayerOutput = std::make_shared<ScopedTensorHandle>(input);
2425 
2426  return layer;
2427 }

References ConstantLayer::m_LayerOutput.

◆ AddConvertFp16ToFp32Layer()

IConnectableLayer * AddConvertFp16ToFp32Layer ( const char *  name = nullptr)

Definition at line 2246 of file Network.cpp.

2247 {
2248  return m_Graph->AddLayer<ConvertFp16ToFp32Layer>(name);
2249 }

◆ AddConvertFp32ToFp16Layer()

IConnectableLayer * AddConvertFp32ToFp16Layer ( const char *  name = nullptr)

Definition at line 2251 of file Network.cpp.

2252 {
2253  return m_Graph->AddLayer<ConvertFp32ToFp16Layer>(name);
2254 }

◆ AddConvolution2dLayer()

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

Definition at line 2240 of file Network.cpp.

2242 {
2243  return m_Graph->AddLayer<Convolution2dLayer>(convolution2dDescriptor, name);
2244 }

◆ AddConvolution3dLayer()

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

Definition at line 2256 of file Network.cpp.

2258 {
2259  return m_Graph->AddLayer<Convolution3dLayer>(convolution3dDescriptor, name);
2260 }

◆ AddDepthToSpaceLayer()

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

Definition at line 2262 of file Network.cpp.

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

◆ AddDepthwiseConvolution2dLayer()

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

Definition at line 2268 of file Network.cpp.

2271 {
2272  return m_Graph->AddLayer<DepthwiseConvolution2dLayer>(convolution2dDescriptor, name);
2273 }

◆ AddDequantizeLayer()

IConnectableLayer * AddDequantizeLayer ( const char *  name = nullptr)

Definition at line 2618 of file Network.cpp.

2619 {
2620  return m_Graph->AddLayer<DequantizeLayer>(name);
2621 }

◆ AddDetectionPostProcessLayer()

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

Definition at line 2275 of file Network.cpp.

2277 {
2278  const auto layer = m_Graph->AddLayer<DetectionPostProcessLayer>(descriptor, name);
2279 
2280  layer->m_Anchors = std::make_shared<ScopedTensorHandle>(anchors);
2281 
2282  return layer;
2283 }

References DetectionPostProcessLayer::m_Anchors.

◆ AddDivisionLayer()

IConnectableLayer * AddDivisionLayer ( const char *  name = nullptr)

Definition at line 2593 of file Network.cpp.

2594 {
2595  return m_Graph->AddLayer<DivisionLayer>(name);
2596 }

◆ AddElementwiseBinaryLayer()

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

Definition at line 2204 of file Network.cpp.

2206 {
2207  return m_Graph->AddLayer<ElementwiseBinaryLayer>(elementwiseBinaryDesc, name);
2208 }

◆ AddElementwiseUnaryLayer()

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

Definition at line 2210 of file Network.cpp.

2212 {
2213  return m_Graph->AddLayer<ElementwiseUnaryLayer>(elementwiseUnaryDescriptor, name);
2214 }

◆ AddFillLayer()

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

Definition at line 2216 of file Network.cpp.

2218 {
2219  return m_Graph->AddLayer<FillLayer>(fillDescriptor, name);
2220 }

◆ AddFloorLayer()

IConnectableLayer * AddFloorLayer ( const char *  name = nullptr)

Definition at line 2447 of file Network.cpp.

2448 {
2449  return m_Graph->AddLayer<FloorLayer>(name);
2450 }

◆ AddFullyConnectedLayer()

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

Definition at line 2222 of file Network.cpp.

2224 {
2225  return m_Graph->AddLayer<FullyConnectedLayer>(fullyConnectedDescriptor, name);
2226 }

◆ AddFusedLayer()

IConnectableLayer * AddFusedLayer ( const FusedDescriptor fusedDescriptor,
const char *  name = nullptr 
)

Definition at line 2228 of file Network.cpp.

2230 {
2231  return m_Graph->AddLayer<FusedLayer>(fusedDescriptor, name);
2232 }

◆ AddGatherLayer()

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

Definition at line 2629 of file Network.cpp.

2631 {
2632  return m_Graph->AddLayer<GatherLayer>(gatherDescriptor, name);
2633 }

◆ AddGatherNdLayer()

IConnectableLayer * AddGatherNdLayer ( const char *  name = nullptr)

Definition at line 2635 of file Network.cpp.

2636 {
2637  return m_Graph->AddLayer<GatherNdLayer>(name);
2638 }

◆ AddInputLayer()

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

Definition at line 2177 of file Network.cpp.

2178 {
2179  return m_Graph->AddLayer<InputLayer>(id, name);
2180 }

◆ AddInstanceNormalizationLayer()

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

Definition at line 2402 of file Network.cpp.

2404 {
2405  return m_Graph->AddLayer<InstanceNormalizationLayer>(desc, name);
2406 }

◆ AddL2NormalizationLayer()

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

Definition at line 2408 of file Network.cpp.

2410 {
2411  return m_Graph->AddLayer<L2NormalizationLayer>(desc, name);
2412 }

◆ AddLogicalBinaryLayer()

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

Definition at line 2876 of file Network.cpp.

2878 {
2879  return m_Graph->AddLayer<LogicalBinaryLayer>(logicalBinaryDescriptor, name);
2880 }

◆ AddLogSoftmaxLayer()

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

Definition at line 2414 of file Network.cpp.

2416 {
2417  return m_Graph->AddLayer<LogSoftmaxLayer>(desc, name);
2418 }

◆ AddLstmLayer()

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

Definition at line 2452 of file Network.cpp.

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

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

2340 {
2341  return m_Graph->AddLayer<MaximumLayer>(name);
2342 }

◆ AddMeanLayer()

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

Definition at line 2603 of file Network.cpp.

2604 {
2605  return m_Graph->AddLayer<MeanLayer>(meanDescriptor,name);
2606 }

◆ AddMergeLayer()

IConnectableLayer * AddMergeLayer ( const char *  name = nullptr)

Definition at line 2640 of file Network.cpp.

2641 {
2642  return m_Graph->AddLayer<MergeLayer>(name);
2643 }

◆ AddMinimumLayer()

IConnectableLayer * AddMinimumLayer ( const char *  name = nullptr)

Definition at line 2344 of file Network.cpp.

2345 {
2346  return m_Graph->AddLayer<MinimumLayer>(name);
2347 }

◆ AddMultiplicationLayer()

IConnectableLayer * AddMultiplicationLayer ( const char *  name = nullptr)

Definition at line 2354 of file Network.cpp.

2355 {
2356  return m_Graph->AddLayer<MultiplicationLayer>(name);
2357 }

◆ AddNormalizationLayer()

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

Definition at line 2315 of file Network.cpp.

2318 {
2319  return m_Graph->AddLayer<NormalizationLayer>(normalizationDescriptor, name);
2320 }

◆ AddOutputLayer()

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

Definition at line 2359 of file Network.cpp.

2360 {
2361  return m_Graph->AddLayer<OutputLayer>(id, name);
2362 }

◆ AddPadLayer()

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

Definition at line 2608 of file Network.cpp.

2609 {
2610  return m_Graph->AddLayer<PadLayer>(padDescriptor,name);
2611 }

◆ AddPermuteLayer()

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

Definition at line 2285 of file Network.cpp.

2287 {
2288  return m_Graph->AddLayer<PermuteLayer>(permuteDescriptor, name);
2289 }

◆ AddPooling2dLayer()

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

Definition at line 2291 of file Network.cpp.

2293 {
2294  return m_Graph->AddLayer<Pooling2dLayer>(pooling2dDescriptor, name);
2295 }

◆ AddPooling3dLayer()

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

Definition at line 2297 of file Network.cpp.

2299 {
2300  return m_Graph->AddLayer<Pooling3dLayer>(pooling3dDescriptor, name);
2301 }

◆ AddPrecompiledLayer()

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

Definition at line 3039 of file Network.cpp.

3043 {
3044  // Method use is for backend users.
3045  PreCompiledLayer* layer;
3046  if (name)
3047  {
3048  layer = m_Graph->AddLayer<PreCompiledLayer>(preCompiledDescriptor, name);
3049  }
3050  else
3051  {
3052  layer = m_Graph->AddLayer<PreCompiledLayer>(preCompiledDescriptor, "pre-compiled");
3053  }
3054 
3055  // Assign the pre-compiled object to layer
3056  // Pass only one compiled network, Arm NN does not handle multiple
3057  // pre-compiled objects in a single pre-compiled layer currently
3058  layer->SetPreCompiledObject(std::move(compiledBlobPtr));
3059 
3060  if (backend.has_value())
3061  {
3062  layer->SetBackendId(backend.value());
3063  }
3064  else if (layer->GetBackendHint().has_value())
3065  {
3066  layer->SetBackendId(layer->GetBackendHint().value());
3067  }
3068 
3069  return layer;
3070 }

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

2651 {
2652  return m_Graph->AddLayer<PreluLayer>(name);
2653 }

◆ AddQLstmLayer()

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

Definition at line 2734 of file Network.cpp.

2737 {
2738  const auto layer = m_Graph->AddLayer<QLstmLayer>(descriptor, name);
2739 
2740  // QLstm Basic Parameters
2741  layer->m_BasicParameters.m_InputToForgetWeights =
2742  std::make_shared<ScopedTensorHandle>(*(params.m_InputToForgetWeights));
2743  layer->m_BasicParameters.m_InputToCellWeights =
2744  std::make_shared<ScopedTensorHandle>(*(params.m_InputToCellWeights));
2745  layer->m_BasicParameters.m_InputToOutputWeights =
2746  std::make_shared<ScopedTensorHandle>(*(params.m_InputToOutputWeights));
2747  layer->m_BasicParameters.m_RecurrentToForgetWeights =
2748  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToForgetWeights));
2749  layer->m_BasicParameters.m_RecurrentToCellWeights =
2750  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToCellWeights));
2751  layer->m_BasicParameters.m_RecurrentToOutputWeights =
2752  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToOutputWeights));
2753  layer->m_BasicParameters.m_ForgetGateBias =
2754  std::make_shared<ScopedTensorHandle>(*(params.m_ForgetGateBias));
2755  layer->m_BasicParameters.m_CellBias =
2756  std::make_shared<ScopedTensorHandle>(*(params.m_CellBias));
2757  layer->m_BasicParameters.m_OutputGateBias =
2758  std::make_shared<ScopedTensorHandle>(*(params.m_OutputGateBias));
2759 
2760  // QLstm Cifg parameters
2761  if(!descriptor.m_CifgEnabled)
2762  {
2763  if(params.m_InputToInputWeights == nullptr)
2764  {
2765  throw InvalidArgumentException("AddQLstmLayer: Input To Input Weights cannot be NULL");
2766  }
2767 
2768  if(params.m_RecurrentToInputWeights == nullptr)
2769  {
2770  throw InvalidArgumentException(
2771  "AddQLstmLayer: Recurrent To Input Weights cannot be NULL");
2772  }
2773 
2774  if(params.m_InputGateBias == nullptr)
2775  {
2776  throw InvalidArgumentException("AddQLstmLayer: Input Gate Bias cannot be NULL");
2777  }
2778 
2779  layer->m_CifgParameters.m_InputToInputWeights =
2780  std::make_shared<ScopedTensorHandle>(*(params.m_InputToInputWeights));
2781  layer->m_CifgParameters.m_RecurrentToInputWeights =
2782  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToInputWeights));
2783  layer->m_CifgParameters.m_InputGateBias =
2784  std::make_shared<ScopedTensorHandle>(*(params.m_InputGateBias));
2785  }
2786 
2787  // QLstm Projection parameters
2788  if(descriptor.m_ProjectionEnabled)
2789  {
2790  if(params.m_ProjectionWeights == nullptr)
2791  {
2792  throw InvalidArgumentException("AddQLstmLayer: Projection Weights cannot be NULL");
2793  }
2794 
2795  layer->m_ProjectionParameters.m_ProjectionWeights =
2796  std::make_shared<ScopedTensorHandle>(*(params.m_ProjectionWeights));
2797 
2798  // Projection bias is optional even if projection is enabled
2799  if(params.m_ProjectionBias != nullptr)
2800  {
2801  layer->m_ProjectionParameters.m_ProjectionBias =
2802  std::make_shared<ScopedTensorHandle>(*(params.m_ProjectionBias));
2803  }
2804 
2805  }
2806 
2807  // QLstm Peephole params
2808  if(descriptor.m_PeepholeEnabled)
2809  {
2810  if(params.m_CellToForgetWeights == nullptr)
2811  {
2812  throw InvalidArgumentException("AddQLstmLayer: Cell To Forget Weights cannot be NULL");
2813  }
2814 
2815  if(params.m_CellToOutputWeights == nullptr)
2816  {
2817  throw InvalidArgumentException("AddQLstmLayer: Cell To Output Weights cannot be NULL");
2818  }
2819 
2820  if(!descriptor.m_CifgEnabled)
2821  {
2822  if(params.m_CellToInputWeights == nullptr)
2823  {
2824  throw InvalidArgumentException("AddQLstmLayer: Cell To Input Weights cannot be NULL");
2825  }
2826 
2827  layer->m_PeepholeParameters.m_CellToInputWeights =
2828  std::make_shared<ScopedTensorHandle>(*(params.m_CellToInputWeights));
2829  }
2830 
2831  layer->m_PeepholeParameters.m_CellToForgetWeights =
2832  std::make_shared<ScopedTensorHandle>(*(params.m_CellToForgetWeights));
2833  layer->m_PeepholeParameters.m_CellToOutputWeights =
2834  std::make_shared<ScopedTensorHandle>(*(params.m_CellToOutputWeights));
2835  }
2836 
2837  // QLstm Layer Normalization params
2838  if(descriptor.m_LayerNormEnabled)
2839  {
2840  if(params.m_ForgetLayerNormWeights == nullptr)
2841  {
2842  throw InvalidArgumentException("AddQLstmLayer: Forget layer normalization weights cannot be NULL");
2843  }
2844 
2845  if(params.m_CellLayerNormWeights == nullptr)
2846  {
2847  throw InvalidArgumentException("AddQLstmLayer: Cell layer normalization weights cannot be NULL");
2848  }
2849 
2850  if(params.m_OutputLayerNormWeights == nullptr)
2851  {
2852  throw InvalidArgumentException("AddQLstmLayer: Output layer normalization weights cannot be NULL");
2853  }
2854 
2855  if(!descriptor.m_CifgEnabled)
2856  {
2857  if(params.m_InputLayerNormWeights == nullptr)
2858  {
2859  throw InvalidArgumentException("AddQLstmLayer: Input layer normalization weights cannot be NULL");
2860  }
2861 
2862  layer->m_LayerNormParameters.m_InputLayerNormWeights =
2863  std::make_shared<ScopedTensorHandle>(*(params.m_InputLayerNormWeights));
2864  }
2865 
2866  layer->m_LayerNormParameters.m_ForgetLayerNormWeights =
2867  std::make_shared<ScopedTensorHandle>(*(params.m_ForgetLayerNormWeights));
2868  layer->m_LayerNormParameters.m_CellLayerNormWeights =
2869  std::make_shared<ScopedTensorHandle>(*(params.m_CellLayerNormWeights));
2870  layer->m_LayerNormParameters.m_OutputLayerNormWeights =
2871  std::make_shared<ScopedTensorHandle>(*(params.m_OutputLayerNormWeights));
2872  }
2873  return layer;
2874 }

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

2698 {
2699  const auto layer = m_Graph->AddLayer<QuantizedLstmLayer>(name);
2700 
2701  // InputToX weights
2702  layer->m_QuantizedLstmParameters.m_InputToInputWeights =
2703  std::make_shared<ScopedTensorHandle>(params.GetInputToInputWeights());
2704  layer->m_QuantizedLstmParameters.m_InputToForgetWeights =
2705  std::make_shared<ScopedTensorHandle>(params.GetInputToForgetWeights());
2706  layer->m_QuantizedLstmParameters.m_InputToCellWeights =
2707  std::make_shared<ScopedTensorHandle>(params.GetInputToCellWeights());
2708  layer->m_QuantizedLstmParameters.m_InputToOutputWeights =
2709  std::make_shared<ScopedTensorHandle>(params.GetInputToOutputWeights());
2710 
2711  // RecurrentToX weights
2712  layer->m_QuantizedLstmParameters.m_RecurrentToInputWeights =
2713  std::make_shared<ScopedTensorHandle>(params.GetRecurrentToInputWeights());
2714  layer->m_QuantizedLstmParameters.m_RecurrentToForgetWeights =
2715  std::make_shared<ScopedTensorHandle>(params.GetRecurrentToForgetWeights());
2716  layer->m_QuantizedLstmParameters.m_RecurrentToCellWeights =
2717  std::make_shared<ScopedTensorHandle>(params.GetRecurrentToCellWeights());
2718  layer->m_QuantizedLstmParameters.m_RecurrentToOutputWeights =
2719  std::make_shared<ScopedTensorHandle>(params.GetRecurrentToOutputWeights());
2720 
2721  // Bias
2722  layer->m_QuantizedLstmParameters.m_InputGateBias =
2723  std::make_shared<ScopedTensorHandle>(params.GetInputGateBias());
2724  layer->m_QuantizedLstmParameters.m_ForgetGateBias =
2725  std::make_shared<ScopedTensorHandle>(params.GetForgetGateBias());
2726  layer->m_QuantizedLstmParameters.m_CellBias =
2727  std::make_shared<ScopedTensorHandle>(params.GetCellBias());
2728  layer->m_QuantizedLstmParameters.m_OutputGateBias =
2729  std::make_shared<ScopedTensorHandle>(params.GetOutputGateBias());
2730 
2731  return layer;
2732 }

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

2614 {
2615  return m_Graph->AddLayer<QuantizeLayer>(name);
2616 }

◆ AddRankLayer()

IConnectableLayer * AddRankLayer ( const char *  name = nullptr)

Definition at line 2381 of file Network.cpp.

2382 {
2383  return m_Graph->AddLayer<RankLayer>(name);
2384 }

◆ AddReduceLayer()

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

Definition at line 2386 of file Network.cpp.

2388 {
2389  return m_Graph->AddLayer<ReduceLayer>(reduceDescriptor, name);
2390 }

◆ AddReshapeLayer()

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

Definition at line 2429 of file Network.cpp.

2431 {
2432  return m_Graph->AddLayer<ReshapeLayer>(reshapeDescriptor, name);
2433 }

◆ AddResizeLayer()

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

Definition at line 2392 of file Network.cpp.

2393 {
2394  return m_Graph->AddLayer<ResizeLayer>(resizeDescriptor, name);
2395 }

◆ AddReverseV2Layer()

IConnectableLayer * AddReverseV2Layer ( const char *  name = nullptr)

Definition at line 3029 of file Network.cpp.

3030 {
3031  return m_Graph->AddLayer<ReverseV2Layer>(name);
3032 }

◆ AddShapeLayer()

IConnectableLayer * AddShapeLayer ( const char *  name = nullptr)

Definition at line 2397 of file Network.cpp.

2398 {
2399  return m_Graph->AddLayer<ShapeLayer>(name);
2400 }

◆ AddSliceLayer()

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

Definition at line 2322 of file Network.cpp.

2323 {
2324  return m_Graph->AddLayer<SliceLayer>(sliceDescriptor, name);
2325 }

◆ AddSoftmaxLayer()

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

Definition at line 2327 of file Network.cpp.

2329 {
2330  return m_Graph->AddLayer<SoftmaxLayer>(softmaxDescriptor, name);
2331 }

◆ AddSpaceToBatchNdLayer()

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

Definition at line 2435 of file Network.cpp.

2437 {
2438  return m_Graph->AddLayer<SpaceToBatchNdLayer>(spaceToBatchNdDescriptor, name);
2439 }

◆ AddSpaceToDepthLayer()

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

Definition at line 2441 of file Network.cpp.

2443 {
2444  return m_Graph->AddLayer<SpaceToDepthLayer>(spaceToDepthDescriptor, name);
2445 }

◆ AddSplitterLayer()

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

Definition at line 2333 of file Network.cpp.

2335 {
2336  return m_Graph->AddLayer<SplitterLayer>(splitterDescriptor, name);
2337 }

◆ AddStackLayer()

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

Definition at line 2683 of file Network.cpp.

2685 {
2686  return m_Graph->AddLayer<StackLayer>(stackDescriptor, name);
2687 }

◆ AddStandInLayer()

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

Definition at line 2690 of file Network.cpp.

2692 {
2693  return m_Graph->AddLayer<StandInLayer>(desc, name);
2694 }

◆ AddStridedSliceLayer()

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

Definition at line 2623 of file Network.cpp.

2625 {
2626  return m_Graph->AddLayer<StridedSliceLayer>(stridedSliceDescriptor, name);
2627 }

◆ AddSubtractionLayer()

IConnectableLayer * AddSubtractionLayer ( const char *  name = nullptr)

Definition at line 2598 of file Network.cpp.

2599 {
2600  return m_Graph->AddLayer<SubtractionLayer>(name);
2601 }

◆ AddSwitchLayer()

IConnectableLayer * AddSwitchLayer ( const char *  name = nullptr)

Definition at line 2645 of file Network.cpp.

2646 {
2647  return m_Graph->AddLayer<SwitchLayer>(name);
2648 }

◆ AddTileLayer()

IConnectableLayer * AddTileLayer ( const TileDescriptor tileDescriptor,
const char *  name = nullptr 
)

Definition at line 3034 of file Network.cpp.

3035 {
3036  return m_Graph->AddLayer<TileLayer>(desc, name);
3037 }

◆ AddTransposeConvolution2dLayer()

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

Definition at line 2655 of file Network.cpp.

2659 {
2660  if (descriptor.m_BiasEnabled && !biases.has_value())
2661  {
2662  throw InvalidArgumentException("AddTransposeConvolution2dLayer: Biases cannot be empty");
2663  }
2664 
2665  const auto layer = m_Graph->AddLayer<TransposeConvolution2dLayer>(descriptor, name);
2666 
2667  layer->m_Weight = std::make_shared<ScopedTensorHandle>(weights);
2668 
2669  if (descriptor.m_BiasEnabled)
2670  {
2671  layer->m_Bias = std::make_shared<ScopedTensorHandle>(biases.value());
2672  }
2673 
2674  return layer;
2675 }

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

2679 {
2680  return m_Graph->AddLayer<TransposeLayer>(transposeDescriptor, name);
2681 }

◆ AddUnidirectionalSequenceLstmLayer()

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

Definition at line 2882 of file Network.cpp.

2886 {
2887  const auto layer = m_Graph->AddLayer<UnidirectionalSequenceLstmLayer>(descriptor, name);
2888 
2889  //Lstm Basic Parameters
2890  layer->m_BasicParameters.m_InputToForgetWeights =
2891  std::make_shared<ScopedTensorHandle>(*(params.m_InputToForgetWeights));
2892  layer->m_BasicParameters.m_InputToCellWeights =
2893  std::make_shared<ScopedTensorHandle>(*(params.m_InputToCellWeights));
2894  layer->m_BasicParameters.m_InputToOutputWeights =
2895  std::make_shared<ScopedTensorHandle>(*(params.m_InputToOutputWeights));
2896  layer->m_BasicParameters.m_RecurrentToForgetWeights =
2897  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToForgetWeights));
2898  layer->m_BasicParameters.m_RecurrentToCellWeights =
2899  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToCellWeights));
2900  layer->m_BasicParameters.m_RecurrentToOutputWeights =
2901  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToOutputWeights));
2902  layer->m_BasicParameters.m_ForgetGateBias =
2903  std::make_shared<ScopedTensorHandle>(*(params.m_ForgetGateBias));
2904  layer->m_BasicParameters.m_CellBias =
2905  std::make_shared<ScopedTensorHandle>(*(params.m_CellBias));
2906  layer->m_BasicParameters.m_OutputGateBias =
2907  std::make_shared<ScopedTensorHandle>(*(params.m_OutputGateBias));
2908 
2909  //Lstm Cifg parameters
2910  if(!descriptor.m_CifgEnabled)
2911  {
2912  if(params.m_InputToInputWeights == nullptr)
2913  {
2914  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Input To Input Weights cannot be NULL "
2915  "when CIFG is disabled.");
2916  }
2917  if(params.m_RecurrentToInputWeights == nullptr)
2918  {
2919  throw InvalidArgumentException(
2920  "AddUnidirectionalSequenceLstmLayer: Recurrent To Input Weights cannot be NULL "
2921  "when CIFG is disabled.");
2922  }
2923  if(params.m_InputGateBias == nullptr)
2924  {
2925  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Input Gate Bias cannot be NULL "
2926  "when CIFG is disabled.");
2927  }
2928  layer->m_CifgParameters.m_InputToInputWeights =
2929  std::make_shared<ScopedTensorHandle>(*(params.m_InputToInputWeights));
2930  layer->m_CifgParameters.m_RecurrentToInputWeights =
2931  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToInputWeights));
2932  layer->m_CifgParameters.m_InputGateBias =
2933  std::make_shared<ScopedTensorHandle>(*(params.m_InputGateBias));
2934  }
2935 
2936  //Lstm projection parameters
2937  if(descriptor.m_ProjectionEnabled)
2938  {
2939  if(params.m_ProjectionWeights == nullptr)
2940  {
2941  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Projection Weights cannot be NULL "
2942  "when projection is enabled.");
2943  }
2944  layer->m_ProjectionParameters.m_ProjectionWeights =
2945  std::make_shared<ScopedTensorHandle>(*(params.m_ProjectionWeights));
2946  if(params.m_ProjectionBias != nullptr)
2947  {
2948  layer->m_ProjectionParameters.m_ProjectionBias =
2949  std::make_shared<ScopedTensorHandle>(*(params.m_ProjectionBias));
2950  }
2951  }
2952 
2953  //Lstm Peephole params
2954  if(descriptor.m_PeepholeEnabled)
2955  {
2956  if(!descriptor.m_CifgEnabled)
2957  {
2958  if(params.m_CellToInputWeights == nullptr)
2959  {
2960  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Cell To Input Weights "
2961  "cannot be NULL when Peephole is enabled and CIFG disabled.");
2962  }
2963 
2964  layer->m_PeepholeParameters.m_CellToInputWeights =
2965  std::make_shared<ScopedTensorHandle>(*(params.m_CellToInputWeights));
2966  }
2967 
2968  if(params.m_CellToForgetWeights == nullptr)
2969  {
2970  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Cell To Forget Weights cannot be NULL "
2971  "when Peephole is enabled.");
2972  }
2973  if(params.m_CellToOutputWeights == nullptr)
2974  {
2975  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Cell To Output Weights cannot be NULL "
2976  "when Peephole is enabled.");
2977  }
2978 
2979  layer->m_PeepholeParameters.m_CellToForgetWeights =
2980  std::make_shared<ScopedTensorHandle>(*(params.m_CellToForgetWeights));
2981  layer->m_PeepholeParameters.m_CellToOutputWeights =
2982  std::make_shared<ScopedTensorHandle>(*(params.m_CellToOutputWeights));
2983  }
2984 
2985  //Lstm Layer Normalization params
2986  if(descriptor.m_LayerNormEnabled)
2987  {
2988  if(!descriptor.m_CifgEnabled)
2989  {
2990  if(params.m_InputLayerNormWeights == nullptr)
2991  {
2992  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Input layer normalization weights "
2993  "cannot be NULL when layer normalization is enabled and CIFG disabled.");
2994  }
2995  layer->m_LayerNormParameters.m_InputLayerNormWeights =
2996  std::make_shared<ScopedTensorHandle>(*(params.m_InputLayerNormWeights));
2997  }
2998 
2999  if(params.m_ForgetLayerNormWeights == nullptr)
3000  {
3001  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Forget layer normalization weights "
3002  "cannot be NULL when layer normalization is enabled.");
3003  }
3004  if(params.m_CellLayerNormWeights == nullptr)
3005  {
3006  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Cell layer normalization weights "
3007  "cannot be NULL when layer normalization is enabled.");
3008  }
3009  if(params.m_OutputLayerNormWeights == nullptr)
3010  {
3011  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Output layer normalization weights "
3012  "cannot be NULL when layer normalization is enabled.");
3013  }
3014  layer->m_LayerNormParameters.m_ForgetLayerNormWeights =
3015  std::make_shared<ScopedTensorHandle>(*(params.m_ForgetLayerNormWeights));
3016  layer->m_LayerNormParameters.m_CellLayerNormWeights =
3017  std::make_shared<ScopedTensorHandle>(*(params.m_CellLayerNormWeights));
3018  layer->m_LayerNormParameters.m_OutputLayerNormWeights =
3019  std::make_shared<ScopedTensorHandle>(*(params.m_OutputLayerNormWeights));
3020  }
3021  return layer;
3022 }

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

3078 {
3079  for (auto layer : GetGraph())
3080  {
3081  layer->ExecuteStrategy(strategy);
3082  };
3083 }

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

2172 {
2173  m_Graph->Print();
2174  return Status::Success;
2175 }

References armnn::Success.


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