ArmNN
 23.08
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)
 
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 2132 of file Network.cpp.

2133 : m_NetworkOptions(networkOptions),
2134  m_Graph(std::make_unique<Graph>(GetShapeInferenceMethod(), GetAllowExpandedDims()))
2135 {}

◆ ~NetworkImpl()

Definition at line 2137 of file Network.cpp.

2138 {
2139 }

Member Function Documentation

◆ AddActivationLayer()

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

Definition at line 2267 of file Network.cpp.

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

◆ AddAdditionLayer()

IConnectableLayer * AddAdditionLayer ( const char *  name = nullptr)

Definition at line 2313 of file Network.cpp.

2314 {
2315  return m_Graph->AddLayer<AdditionLayer>(name);
2316 }

◆ AddArgMinMaxLayer()

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

Definition at line 2273 of file Network.cpp.

2275 {
2276  return m_Graph->AddLayer<ArgMinMaxLayer>(argMinMaxDescriptor, name);
2277 }

◆ AddBatchMatMulLayer()

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

Definition at line 2988 of file Network.cpp.

2989 {
2990  return m_Graph->AddLayer<BatchMatMulLayer>(desc, name);
2991 }

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

2334 {
2335  const auto layer = m_Graph->AddLayer<BatchNormalizationLayer>(desc, name);
2336 
2337  layer->m_Mean = std::make_shared<ScopedTensorHandle>(mean);
2338  layer->m_Variance = std::make_shared<ScopedTensorHandle>(variance);
2339  layer->m_Beta = std::make_shared<ScopedTensorHandle>(beta);
2340  layer->m_Gamma = std::make_shared<ScopedTensorHandle>(gamma);
2341 
2342  return layer;
2343 }

References BatchNormalizationLayer::m_Mean.

◆ AddBatchToSpaceNdLayer()

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

Definition at line 2152 of file Network.cpp.

2154 {
2155  return m_Graph->AddLayer<BatchToSpaceNdLayer>(batchToSpaceNdDescriptor, name);
2156 }

◆ AddCastLayer()

IConnectableLayer * AddCastLayer ( const char *  name = nullptr)

Definition at line 2158 of file Network.cpp.

2159 {
2160  return m_Graph->AddLayer<CastLayer>(name);
2161 }

◆ AddChannelShuffleLayer()

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

Definition at line 2162 of file Network.cpp.

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

◆ AddComparisonLayer()

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

Definition at line 2168 of file Network.cpp.

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

◆ AddConcatLayer()

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

Definition at line 2198 of file Network.cpp.

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

◆ AddConstantLayer()

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

Definition at line 2384 of file Network.cpp.

2385 {
2386  auto layer = m_Graph->AddLayer<ConstantLayer>(name);
2387 
2388  layer->m_LayerOutput = std::make_shared<ScopedTensorHandle>(input);
2389 
2390  return layer;
2391 }

References ConstantLayer::m_LayerOutput.

◆ AddConvertFp16ToFp32Layer()

IConnectableLayer * AddConvertFp16ToFp32Layer ( const char *  name = nullptr)

Definition at line 2210 of file Network.cpp.

2211 {
2212  return m_Graph->AddLayer<ConvertFp16ToFp32Layer>(name);
2213 }

◆ AddConvertFp32ToFp16Layer()

IConnectableLayer * AddConvertFp32ToFp16Layer ( const char *  name = nullptr)

Definition at line 2215 of file Network.cpp.

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

◆ AddConvolution2dLayer()

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

Definition at line 2204 of file Network.cpp.

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

◆ AddConvolution3dLayer()

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

Definition at line 2220 of file Network.cpp.

2222 {
2223  return m_Graph->AddLayer<Convolution3dLayer>(convolution3dDescriptor, name);
2224 }

◆ AddDepthToSpaceLayer()

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

Definition at line 2226 of file Network.cpp.

2228 {
2229  return m_Graph->AddLayer<DepthToSpaceLayer>(depthToSpaceDescriptor, name);
2230 }

◆ AddDepthwiseConvolution2dLayer()

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

Definition at line 2232 of file Network.cpp.

2235 {
2236  return m_Graph->AddLayer<DepthwiseConvolution2dLayer>(convolution2dDescriptor, name);
2237 }

◆ AddDequantizeLayer()

IConnectableLayer * AddDequantizeLayer ( const char *  name = nullptr)

Definition at line 2582 of file Network.cpp.

2583 {
2584  return m_Graph->AddLayer<DequantizeLayer>(name);
2585 }

◆ AddDetectionPostProcessLayer()

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

Definition at line 2239 of file Network.cpp.

2241 {
2242  const auto layer = m_Graph->AddLayer<DetectionPostProcessLayer>(descriptor, name);
2243 
2244  layer->m_Anchors = std::make_shared<ScopedTensorHandle>(anchors);
2245 
2246  return layer;
2247 }

References DetectionPostProcessLayer::m_Anchors.

◆ AddDivisionLayer()

IConnectableLayer * AddDivisionLayer ( const char *  name = nullptr)

Definition at line 2557 of file Network.cpp.

2558 {
2559  return m_Graph->AddLayer<DivisionLayer>(name);
2560 }

◆ AddElementwiseBinaryLayer()

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

Definition at line 2174 of file Network.cpp.

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

◆ AddElementwiseUnaryLayer()

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

Definition at line 2180 of file Network.cpp.

2182 {
2183  return m_Graph->AddLayer<ElementwiseUnaryLayer>(elementwiseUnaryDescriptor, name);
2184 }

◆ AddFillLayer()

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

Definition at line 2186 of file Network.cpp.

2188 {
2189  return m_Graph->AddLayer<FillLayer>(fillDescriptor, name);
2190 }

◆ AddFloorLayer()

IConnectableLayer * AddFloorLayer ( const char *  name = nullptr)

Definition at line 2411 of file Network.cpp.

2412 {
2413  return m_Graph->AddLayer<FloorLayer>(name);
2414 }

◆ AddFullyConnectedLayer()

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

Definition at line 2192 of file Network.cpp.

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

◆ AddGatherLayer()

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

Definition at line 2593 of file Network.cpp.

2595 {
2596  return m_Graph->AddLayer<GatherLayer>(gatherDescriptor, name);
2597 }

◆ AddGatherNdLayer()

IConnectableLayer * AddGatherNdLayer ( const char *  name = nullptr)

Definition at line 2599 of file Network.cpp.

2600 {
2601  return m_Graph->AddLayer<GatherNdLayer>(name);
2602 }

◆ AddInputLayer()

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

Definition at line 2147 of file Network.cpp.

2148 {
2149  return m_Graph->AddLayer<InputLayer>(id, name);
2150 }

◆ AddInstanceNormalizationLayer()

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

Definition at line 2366 of file Network.cpp.

2368 {
2369  return m_Graph->AddLayer<InstanceNormalizationLayer>(desc, name);
2370 }

◆ AddL2NormalizationLayer()

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

Definition at line 2372 of file Network.cpp.

2374 {
2375  return m_Graph->AddLayer<L2NormalizationLayer>(desc, name);
2376 }

◆ AddLogicalBinaryLayer()

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

Definition at line 2840 of file Network.cpp.

2842 {
2843  return m_Graph->AddLayer<LogicalBinaryLayer>(logicalBinaryDescriptor, name);
2844 }

◆ AddLogSoftmaxLayer()

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

Definition at line 2378 of file Network.cpp.

2380 {
2381  return m_Graph->AddLayer<LogSoftmaxLayer>(desc, name);
2382 }

◆ AddLstmLayer()

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

Definition at line 2416 of file Network.cpp.

2419 {
2420  const auto layer = m_Graph->AddLayer<LstmLayer>(descriptor, name);
2421 
2422  //Lstm Basic Parameters
2423  layer->m_BasicParameters.m_InputToForgetWeights =
2424  std::make_shared<ScopedTensorHandle>(*(params.m_InputToForgetWeights));
2425  layer->m_BasicParameters.m_InputToCellWeights =
2426  std::make_shared<ScopedTensorHandle>(*(params.m_InputToCellWeights));
2427  layer->m_BasicParameters.m_InputToOutputWeights =
2428  std::make_shared<ScopedTensorHandle>(*(params.m_InputToOutputWeights));
2429  layer->m_BasicParameters.m_RecurrentToForgetWeights =
2430  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToForgetWeights));
2431  layer->m_BasicParameters.m_RecurrentToCellWeights =
2432  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToCellWeights));
2433  layer->m_BasicParameters.m_RecurrentToOutputWeights =
2434  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToOutputWeights));
2435  layer->m_BasicParameters.m_ForgetGateBias =
2436  std::make_shared<ScopedTensorHandle>(*(params.m_ForgetGateBias));
2437  layer->m_BasicParameters.m_CellBias =
2438  std::make_shared<ScopedTensorHandle>(*(params.m_CellBias));
2439  layer->m_BasicParameters.m_OutputGateBias =
2440  std::make_shared<ScopedTensorHandle>(*(params.m_OutputGateBias));
2441 
2442  //Lstm Cifg parameters
2443  if(!descriptor.m_CifgEnabled)
2444  {
2445  if(params.m_InputToInputWeights == nullptr)
2446  {
2447  throw InvalidArgumentException("AddLstmLayer: Input To Input Weights cannot be NULL "
2448  "when CIFG is disabled.");
2449  }
2450  if(params.m_RecurrentToInputWeights == nullptr)
2451  {
2452  throw InvalidArgumentException(
2453  "AddLstmLayer: Recurrent To Input Weights cannot be NULL "
2454  "when CIFG is disabled.");
2455  }
2456  if(params.m_InputGateBias == nullptr)
2457  {
2458  throw InvalidArgumentException("AddLstmLayer: Input Gate Bias cannot be NULL "
2459  "when CIFG is disabled.");
2460  }
2461  layer->m_CifgParameters.m_InputToInputWeights =
2462  std::make_shared<ScopedTensorHandle>(*(params.m_InputToInputWeights));
2463  layer->m_CifgParameters.m_RecurrentToInputWeights =
2464  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToInputWeights));
2465  layer->m_CifgParameters.m_InputGateBias =
2466  std::make_shared<ScopedTensorHandle>(*(params.m_InputGateBias));
2467  }
2468 
2469  //Lstm projection parameters
2470  if(descriptor.m_ProjectionEnabled)
2471  {
2472  if(params.m_ProjectionWeights == nullptr)
2473  {
2474  throw InvalidArgumentException("AddLstmLayer: Projection Weights cannot be NULL "
2475  "when projection is enabled.");
2476  }
2477  layer->m_ProjectionParameters.m_ProjectionWeights =
2478  std::make_shared<ScopedTensorHandle>(*(params.m_ProjectionWeights));
2479  if(params.m_ProjectionBias != nullptr)
2480  {
2481  layer->m_ProjectionParameters.m_ProjectionBias =
2482  std::make_shared<ScopedTensorHandle>(*(params.m_ProjectionBias));
2483  }
2484  }
2485 
2486  //Lstm Peephole params
2487  if(descriptor.m_PeepholeEnabled)
2488  {
2489  if(!descriptor.m_CifgEnabled)
2490  {
2491  if(params.m_CellToInputWeights == nullptr)
2492  {
2493  throw InvalidArgumentException("AddLstmLayer: Cell To Input Weights cannot be NULL "
2494  "when Peephole is enabled and CIFG disabled.");
2495  }
2496 
2497  layer->m_PeepholeParameters.m_CellToInputWeights =
2498  std::make_shared<ScopedTensorHandle>(*(params.m_CellToInputWeights));
2499  }
2500 
2501  if(params.m_CellToForgetWeights == nullptr)
2502  {
2503  throw InvalidArgumentException("AddLstmLayer: Cell To Forget Weights cannot be NULL "
2504  "when Peephole is enabled.");
2505  }
2506  if(params.m_CellToOutputWeights == nullptr)
2507  {
2508  throw InvalidArgumentException("AddLstmLayer: Cell To Output Weights cannot be NULL "
2509  "when Peephole is enabled.");
2510  }
2511 
2512  layer->m_PeepholeParameters.m_CellToForgetWeights =
2513  std::make_shared<ScopedTensorHandle>(*(params.m_CellToForgetWeights));
2514  layer->m_PeepholeParameters.m_CellToOutputWeights =
2515  std::make_shared<ScopedTensorHandle>(*(params.m_CellToOutputWeights));
2516  }
2517 
2518  //Lstm Layer Normalization params
2519  if(descriptor.m_LayerNormEnabled)
2520  {
2521  if(!descriptor.m_CifgEnabled)
2522  {
2523  if(params.m_InputLayerNormWeights == nullptr)
2524  {
2525  throw InvalidArgumentException("AddLstmLayer: Input layer normalization weights cannot be NULL "
2526  "when layer normalization is enabled and CIFG disabled.");
2527  }
2528  layer->m_LayerNormParameters.m_InputLayerNormWeights =
2529  std::make_shared<ScopedTensorHandle>(*(params.m_InputLayerNormWeights));
2530  }
2531 
2532  if(params.m_ForgetLayerNormWeights == nullptr)
2533  {
2534  throw InvalidArgumentException("AddLstmLayer: Forget layer normalization weights cannot be NULL "
2535  "when layer normalization is enabled.");
2536  }
2537  if(params.m_CellLayerNormWeights == nullptr)
2538  {
2539  throw InvalidArgumentException("AddLstmLayer: Cell layer normalization weights cannot be NULL "
2540  "when layer normalization is enabled.");
2541  }
2542  if(params.m_OutputLayerNormWeights == nullptr)
2543  {
2544  throw InvalidArgumentException("AddLstmLayer: Output layer normalization weights cannot be NULL "
2545  "when layer normalization is enabled.");
2546  }
2547  layer->m_LayerNormParameters.m_ForgetLayerNormWeights =
2548  std::make_shared<ScopedTensorHandle>(*(params.m_ForgetLayerNormWeights));
2549  layer->m_LayerNormParameters.m_CellLayerNormWeights =
2550  std::make_shared<ScopedTensorHandle>(*(params.m_CellLayerNormWeights));
2551  layer->m_LayerNormParameters.m_OutputLayerNormWeights =
2552  std::make_shared<ScopedTensorHandle>(*(params.m_OutputLayerNormWeights));
2553  }
2554  return layer;
2555 }

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

2304 {
2305  return m_Graph->AddLayer<MaximumLayer>(name);
2306 }

◆ AddMeanLayer()

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

Definition at line 2567 of file Network.cpp.

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

◆ AddMergeLayer()

IConnectableLayer * AddMergeLayer ( const char *  name = nullptr)

Definition at line 2604 of file Network.cpp.

2605 {
2606  return m_Graph->AddLayer<MergeLayer>(name);
2607 }

◆ AddMinimumLayer()

IConnectableLayer * AddMinimumLayer ( const char *  name = nullptr)

Definition at line 2308 of file Network.cpp.

2309 {
2310  return m_Graph->AddLayer<MinimumLayer>(name);
2311 }

◆ AddMultiplicationLayer()

IConnectableLayer * AddMultiplicationLayer ( const char *  name = nullptr)

Definition at line 2318 of file Network.cpp.

2319 {
2320  return m_Graph->AddLayer<MultiplicationLayer>(name);
2321 }

◆ AddNormalizationLayer()

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

Definition at line 2279 of file Network.cpp.

2282 {
2283  return m_Graph->AddLayer<NormalizationLayer>(normalizationDescriptor, name);
2284 }

◆ AddOutputLayer()

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

Definition at line 2323 of file Network.cpp.

2324 {
2325  return m_Graph->AddLayer<OutputLayer>(id, name);
2326 }

◆ AddPadLayer()

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

Definition at line 2572 of file Network.cpp.

2573 {
2574  return m_Graph->AddLayer<PadLayer>(padDescriptor,name);
2575 }

◆ AddPermuteLayer()

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

Definition at line 2249 of file Network.cpp.

2251 {
2252  return m_Graph->AddLayer<PermuteLayer>(permuteDescriptor, name);
2253 }

◆ AddPooling2dLayer()

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

Definition at line 2255 of file Network.cpp.

2257 {
2258  return m_Graph->AddLayer<Pooling2dLayer>(pooling2dDescriptor, name);
2259 }

◆ AddPooling3dLayer()

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

Definition at line 2261 of file Network.cpp.

2263 {
2264  return m_Graph->AddLayer<Pooling3dLayer>(pooling3dDescriptor, name);
2265 }

◆ AddPrecompiledLayer()

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

Definition at line 3003 of file Network.cpp.

3007 {
3008  // Method use is for backend users.
3009  PreCompiledLayer* layer;
3010  if (name)
3011  {
3012  layer = m_Graph->AddLayer<PreCompiledLayer>(preCompiledDescriptor, name);
3013  }
3014  else
3015  {
3016  layer = m_Graph->AddLayer<PreCompiledLayer>(preCompiledDescriptor, "pre-compiled");
3017  }
3018 
3019  // Assign the pre-compiled object to layer
3020  // Pass only one compiled network, Arm NN does not handle multiple
3021  // pre-compiled objects in a single pre-compiled layer currently
3022  layer->SetPreCompiledObject(std::move(compiledBlobPtr));
3023 
3024  if (backend.has_value())
3025  {
3026  layer->SetBackendId(backend.value());
3027  }
3028  else if (layer->GetBackendHint().has_value())
3029  {
3030  layer->SetBackendId(layer->GetBackendHint().value());
3031  }
3032 
3033  return layer;
3034 }

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

2615 {
2616  return m_Graph->AddLayer<PreluLayer>(name);
2617 }

◆ AddQLstmLayer()

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

Definition at line 2698 of file Network.cpp.

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

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

2662 {
2663  const auto layer = m_Graph->AddLayer<QuantizedLstmLayer>(name);
2664 
2665  // InputToX weights
2666  layer->m_QuantizedLstmParameters.m_InputToInputWeights =
2667  std::make_shared<ScopedTensorHandle>(params.GetInputToInputWeights());
2668  layer->m_QuantizedLstmParameters.m_InputToForgetWeights =
2669  std::make_shared<ScopedTensorHandle>(params.GetInputToForgetWeights());
2670  layer->m_QuantizedLstmParameters.m_InputToCellWeights =
2671  std::make_shared<ScopedTensorHandle>(params.GetInputToCellWeights());
2672  layer->m_QuantizedLstmParameters.m_InputToOutputWeights =
2673  std::make_shared<ScopedTensorHandle>(params.GetInputToOutputWeights());
2674 
2675  // RecurrentToX weights
2676  layer->m_QuantizedLstmParameters.m_RecurrentToInputWeights =
2677  std::make_shared<ScopedTensorHandle>(params.GetRecurrentToInputWeights());
2678  layer->m_QuantizedLstmParameters.m_RecurrentToForgetWeights =
2679  std::make_shared<ScopedTensorHandle>(params.GetRecurrentToForgetWeights());
2680  layer->m_QuantizedLstmParameters.m_RecurrentToCellWeights =
2681  std::make_shared<ScopedTensorHandle>(params.GetRecurrentToCellWeights());
2682  layer->m_QuantizedLstmParameters.m_RecurrentToOutputWeights =
2683  std::make_shared<ScopedTensorHandle>(params.GetRecurrentToOutputWeights());
2684 
2685  // Bias
2686  layer->m_QuantizedLstmParameters.m_InputGateBias =
2687  std::make_shared<ScopedTensorHandle>(params.GetInputGateBias());
2688  layer->m_QuantizedLstmParameters.m_ForgetGateBias =
2689  std::make_shared<ScopedTensorHandle>(params.GetForgetGateBias());
2690  layer->m_QuantizedLstmParameters.m_CellBias =
2691  std::make_shared<ScopedTensorHandle>(params.GetCellBias());
2692  layer->m_QuantizedLstmParameters.m_OutputGateBias =
2693  std::make_shared<ScopedTensorHandle>(params.GetOutputGateBias());
2694 
2695  return layer;
2696 }

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

2578 {
2579  return m_Graph->AddLayer<QuantizeLayer>(name);
2580 }

◆ AddRankLayer()

IConnectableLayer * AddRankLayer ( const char *  name = nullptr)

Definition at line 2345 of file Network.cpp.

2346 {
2347  return m_Graph->AddLayer<RankLayer>(name);
2348 }

◆ AddReduceLayer()

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

Definition at line 2350 of file Network.cpp.

2352 {
2353  return m_Graph->AddLayer<ReduceLayer>(reduceDescriptor, name);
2354 }

◆ AddReshapeLayer()

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

Definition at line 2393 of file Network.cpp.

2395 {
2396  return m_Graph->AddLayer<ReshapeLayer>(reshapeDescriptor, name);
2397 }

◆ AddResizeLayer()

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

Definition at line 2356 of file Network.cpp.

2357 {
2358  return m_Graph->AddLayer<ResizeLayer>(resizeDescriptor, name);
2359 }

◆ AddReverseV2Layer()

IConnectableLayer * AddReverseV2Layer ( const char *  name = nullptr)

Definition at line 2993 of file Network.cpp.

2994 {
2995  return m_Graph->AddLayer<ReverseV2Layer>(name);
2996 }

◆ AddShapeLayer()

IConnectableLayer * AddShapeLayer ( const char *  name = nullptr)

Definition at line 2361 of file Network.cpp.

2362 {
2363  return m_Graph->AddLayer<ShapeLayer>(name);
2364 }

◆ AddSliceLayer()

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

Definition at line 2286 of file Network.cpp.

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

◆ AddSoftmaxLayer()

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

Definition at line 2291 of file Network.cpp.

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

◆ AddSpaceToBatchNdLayer()

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

Definition at line 2399 of file Network.cpp.

2401 {
2402  return m_Graph->AddLayer<SpaceToBatchNdLayer>(spaceToBatchNdDescriptor, name);
2403 }

◆ AddSpaceToDepthLayer()

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

Definition at line 2405 of file Network.cpp.

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

◆ AddSplitterLayer()

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

Definition at line 2297 of file Network.cpp.

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

◆ AddStackLayer()

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

Definition at line 2647 of file Network.cpp.

2649 {
2650  return m_Graph->AddLayer<StackLayer>(stackDescriptor, name);
2651 }

◆ AddStandInLayer()

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

Definition at line 2654 of file Network.cpp.

2656 {
2657  return m_Graph->AddLayer<StandInLayer>(desc, name);
2658 }

◆ AddStridedSliceLayer()

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

Definition at line 2587 of file Network.cpp.

2589 {
2590  return m_Graph->AddLayer<StridedSliceLayer>(stridedSliceDescriptor, name);
2591 }

◆ AddSubtractionLayer()

IConnectableLayer * AddSubtractionLayer ( const char *  name = nullptr)

Definition at line 2562 of file Network.cpp.

2563 {
2564  return m_Graph->AddLayer<SubtractionLayer>(name);
2565 }

◆ AddSwitchLayer()

IConnectableLayer * AddSwitchLayer ( const char *  name = nullptr)

Definition at line 2609 of file Network.cpp.

2610 {
2611  return m_Graph->AddLayer<SwitchLayer>(name);
2612 }

◆ AddTileLayer()

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

Definition at line 2998 of file Network.cpp.

2999 {
3000  return m_Graph->AddLayer<TileLayer>(desc, name);
3001 }

◆ AddTransposeConvolution2dLayer()

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

Definition at line 2619 of file Network.cpp.

2623 {
2624  if (descriptor.m_BiasEnabled && !biases.has_value())
2625  {
2626  throw InvalidArgumentException("AddTransposeConvolution2dLayer: Biases cannot be empty");
2627  }
2628 
2629  const auto layer = m_Graph->AddLayer<TransposeConvolution2dLayer>(descriptor, name);
2630 
2631  layer->m_Weight = std::make_shared<ScopedTensorHandle>(weights);
2632 
2633  if (descriptor.m_BiasEnabled)
2634  {
2635  layer->m_Bias = std::make_shared<ScopedTensorHandle>(biases.value());
2636  }
2637 
2638  return layer;
2639 }

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

2643 {
2644  return m_Graph->AddLayer<TransposeLayer>(transposeDescriptor, name);
2645 }

◆ AddUnidirectionalSequenceLstmLayer()

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

Definition at line 2846 of file Network.cpp.

2850 {
2851  const auto layer = m_Graph->AddLayer<UnidirectionalSequenceLstmLayer>(descriptor, name);
2852 
2853  //Lstm Basic Parameters
2854  layer->m_BasicParameters.m_InputToForgetWeights =
2855  std::make_shared<ScopedTensorHandle>(*(params.m_InputToForgetWeights));
2856  layer->m_BasicParameters.m_InputToCellWeights =
2857  std::make_shared<ScopedTensorHandle>(*(params.m_InputToCellWeights));
2858  layer->m_BasicParameters.m_InputToOutputWeights =
2859  std::make_shared<ScopedTensorHandle>(*(params.m_InputToOutputWeights));
2860  layer->m_BasicParameters.m_RecurrentToForgetWeights =
2861  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToForgetWeights));
2862  layer->m_BasicParameters.m_RecurrentToCellWeights =
2863  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToCellWeights));
2864  layer->m_BasicParameters.m_RecurrentToOutputWeights =
2865  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToOutputWeights));
2866  layer->m_BasicParameters.m_ForgetGateBias =
2867  std::make_shared<ScopedTensorHandle>(*(params.m_ForgetGateBias));
2868  layer->m_BasicParameters.m_CellBias =
2869  std::make_shared<ScopedTensorHandle>(*(params.m_CellBias));
2870  layer->m_BasicParameters.m_OutputGateBias =
2871  std::make_shared<ScopedTensorHandle>(*(params.m_OutputGateBias));
2872 
2873  //Lstm Cifg parameters
2874  if(!descriptor.m_CifgEnabled)
2875  {
2876  if(params.m_InputToInputWeights == nullptr)
2877  {
2878  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Input To Input Weights cannot be NULL "
2879  "when CIFG is disabled.");
2880  }
2881  if(params.m_RecurrentToInputWeights == nullptr)
2882  {
2883  throw InvalidArgumentException(
2884  "AddUnidirectionalSequenceLstmLayer: Recurrent To Input Weights cannot be NULL "
2885  "when CIFG is disabled.");
2886  }
2887  if(params.m_InputGateBias == nullptr)
2888  {
2889  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Input Gate Bias cannot be NULL "
2890  "when CIFG is disabled.");
2891  }
2892  layer->m_CifgParameters.m_InputToInputWeights =
2893  std::make_shared<ScopedTensorHandle>(*(params.m_InputToInputWeights));
2894  layer->m_CifgParameters.m_RecurrentToInputWeights =
2895  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToInputWeights));
2896  layer->m_CifgParameters.m_InputGateBias =
2897  std::make_shared<ScopedTensorHandle>(*(params.m_InputGateBias));
2898  }
2899 
2900  //Lstm projection parameters
2901  if(descriptor.m_ProjectionEnabled)
2902  {
2903  if(params.m_ProjectionWeights == nullptr)
2904  {
2905  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Projection Weights cannot be NULL "
2906  "when projection is enabled.");
2907  }
2908  layer->m_ProjectionParameters.m_ProjectionWeights =
2909  std::make_shared<ScopedTensorHandle>(*(params.m_ProjectionWeights));
2910  if(params.m_ProjectionBias != nullptr)
2911  {
2912  layer->m_ProjectionParameters.m_ProjectionBias =
2913  std::make_shared<ScopedTensorHandle>(*(params.m_ProjectionBias));
2914  }
2915  }
2916 
2917  //Lstm Peephole params
2918  if(descriptor.m_PeepholeEnabled)
2919  {
2920  if(!descriptor.m_CifgEnabled)
2921  {
2922  if(params.m_CellToInputWeights == nullptr)
2923  {
2924  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Cell To Input Weights "
2925  "cannot be NULL when Peephole is enabled and CIFG disabled.");
2926  }
2927 
2928  layer->m_PeepholeParameters.m_CellToInputWeights =
2929  std::make_shared<ScopedTensorHandle>(*(params.m_CellToInputWeights));
2930  }
2931 
2932  if(params.m_CellToForgetWeights == nullptr)
2933  {
2934  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Cell To Forget Weights cannot be NULL "
2935  "when Peephole is enabled.");
2936  }
2937  if(params.m_CellToOutputWeights == nullptr)
2938  {
2939  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Cell To Output Weights cannot be NULL "
2940  "when Peephole is enabled.");
2941  }
2942 
2943  layer->m_PeepholeParameters.m_CellToForgetWeights =
2944  std::make_shared<ScopedTensorHandle>(*(params.m_CellToForgetWeights));
2945  layer->m_PeepholeParameters.m_CellToOutputWeights =
2946  std::make_shared<ScopedTensorHandle>(*(params.m_CellToOutputWeights));
2947  }
2948 
2949  //Lstm Layer Normalization params
2950  if(descriptor.m_LayerNormEnabled)
2951  {
2952  if(!descriptor.m_CifgEnabled)
2953  {
2954  if(params.m_InputLayerNormWeights == nullptr)
2955  {
2956  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Input layer normalization weights "
2957  "cannot be NULL when layer normalization is enabled and CIFG disabled.");
2958  }
2959  layer->m_LayerNormParameters.m_InputLayerNormWeights =
2960  std::make_shared<ScopedTensorHandle>(*(params.m_InputLayerNormWeights));
2961  }
2962 
2963  if(params.m_ForgetLayerNormWeights == nullptr)
2964  {
2965  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Forget layer normalization weights "
2966  "cannot be NULL when layer normalization is enabled.");
2967  }
2968  if(params.m_CellLayerNormWeights == nullptr)
2969  {
2970  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Cell layer normalization weights "
2971  "cannot be NULL when layer normalization is enabled.");
2972  }
2973  if(params.m_OutputLayerNormWeights == nullptr)
2974  {
2975  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Output layer normalization weights "
2976  "cannot be NULL when layer normalization is enabled.");
2977  }
2978  layer->m_LayerNormParameters.m_ForgetLayerNormWeights =
2979  std::make_shared<ScopedTensorHandle>(*(params.m_ForgetLayerNormWeights));
2980  layer->m_LayerNormParameters.m_CellLayerNormWeights =
2981  std::make_shared<ScopedTensorHandle>(*(params.m_CellLayerNormWeights));
2982  layer->m_LayerNormParameters.m_OutputLayerNormWeights =
2983  std::make_shared<ScopedTensorHandle>(*(params.m_OutputLayerNormWeights));
2984  }
2985  return layer;
2986 }

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

3037 {
3038  for (auto layer : GetGraph())
3039  {
3040  layer->ExecuteStrategy(strategy);
3041  };
3042 }

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

2142 {
2143  m_Graph->Print();
2144  return Status::Success;
2145 }

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