ArmNN
 23.02
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)
 
IConnectableLayerAddElementwiseUnaryLayer (const ElementwiseUnaryDescriptor &elementwiseUnaryDescriptor, const char *name=nullptr)
 
IConnectableLayerAddMergeLayer (const char *name=nullptr)
 
IConnectableLayerAddFillLayer (const FillDescriptor &fillDescriptor, const char *name=nullptr)
 
IConnectableLayerAddFloorLayer (const char *name=nullptr)
 
IConnectableLayerAddFullyConnectedLayer (const FullyConnectedDescriptor &fullyConnectedDescriptor, const char *name=nullptr)
 
IConnectableLayerAddGatherLayer (const GatherDescriptor &gatherDescriptor, const char *name=nullptr)
 
IConnectableLayerAddGatherNdLayer (const char *name=nullptr)
 
IConnectableLayerAddInstanceNormalizationLayer (const InstanceNormalizationDescriptor &desc, const char *name=nullptr)
 
IConnectableLayerAddL2NormalizationLayer (const L2NormalizationDescriptor &desc, const char *name=nullptr)
 
IConnectableLayerAddLogSoftmaxLayer (const LogSoftmaxDescriptor &logSoftmaxDescriptor, const char *name=nullptr)
 
IConnectableLayerAddLogicalBinaryLayer (const LogicalBinaryDescriptor &logicalBinaryDescriptor, const char *name=nullptr)
 
IConnectableLayerAddLstmLayer (const LstmDescriptor &descriptor, const LstmInputParams &params, const char *name=nullptr)
 
IConnectableLayerAddMaximumLayer (const char *name=nullptr)
 
IConnectableLayerAddMeanLayer (const MeanDescriptor &meanDescriptor, const char *name=nullptr)
 
IConnectableLayerAddMinimumLayer (const char *name=nullptr)
 
IConnectableLayerAddMultiplicationLayer (const char *name=nullptr)
 
IConnectableLayerAddNormalizationLayer (const NormalizationDescriptor &normalizationDescriptor, const char *name=nullptr)
 
IConnectableLayerAddOutputLayer (LayerBindingId id, const char *name=nullptr)
 
IConnectableLayerAddPadLayer (const PadDescriptor &padDescriptor, const char *name=nullptr)
 
IConnectableLayerAddPermuteLayer (const PermuteDescriptor &permuteDescriptor, const char *name=nullptr)
 
IConnectableLayerAddPooling2dLayer (const Pooling2dDescriptor &pooling2dDescriptor, const char *name=nullptr)
 
IConnectableLayerAddPooling3dLayer (const Pooling3dDescriptor &pooling3dDescriptor, const char *name=nullptr)
 
IConnectableLayerAddPrecompiledLayer (const PreCompiledDescriptor &preCompiledDescriptor, CompiledBlobPtr compiledBlobPtr, const Optional< BackendId > &backend, const char *name=nullptr)
 
IConnectableLayerAddPreluLayer (const char *name=nullptr)
 
IConnectableLayerAddQuantizeLayer (const char *name=nullptr)
 
IConnectableLayerAddQLstmLayer (const QLstmDescriptor &descriptor, const LstmInputParams &params, const char *name=nullptr)
 
IConnectableLayerAddQuantizedLstmLayer (const QuantizedLstmInputParams &params, const char *name=nullptr)
 
IConnectableLayerAddRankLayer (const char *name=nullptr)
 
IConnectableLayerAddReduceLayer (const ReduceDescriptor &reduceDescriptor, const char *name=nullptr)
 
IConnectableLayerAddResizeLayer (const ResizeDescriptor &resizeDescriptor, const char *name=nullptr)
 
IConnectableLayerAddReshapeLayer (const ReshapeDescriptor &reshapeDescriptor, const char *name=nullptr)
 
IConnectableLayerAddShapeLayer (const char *name=nullptr)
 
IConnectableLayerAddSliceLayer (const SliceDescriptor &sliceDescriptor, const char *name=nullptr)
 
IConnectableLayerAddSoftmaxLayer (const SoftmaxDescriptor &softmaxDescriptor, const char *name=nullptr)
 
IConnectableLayerAddSplitterLayer (const ViewsDescriptor &splitterDescriptor, const char *name=nullptr)
 
IConnectableLayerAddSpaceToBatchNdLayer (const SpaceToBatchNdDescriptor &spaceToBatchNdDescriptor, const char *name=nullptr)
 
IConnectableLayerAddSpaceToDepthLayer (const SpaceToDepthDescriptor &spaceToDepthDescriptor, const char *name=nullptr)
 
IConnectableLayerAddStackLayer (const StackDescriptor &stackDescriptor, const char *name=nullptr)
 
IConnectableLayerAddStandInLayer (const StandInDescriptor &descriptor, const char *name=nullptr)
 
IConnectableLayerAddStridedSliceLayer (const StridedSliceDescriptor &stridedSliceDescriptor, const char *name=nullptr)
 
IConnectableLayerAddSubtractionLayer (const char *name=nullptr)
 
IConnectableLayerAddSwitchLayer (const char *name=nullptr)
 
IConnectableLayerAddTransposeConvolution2dLayer (const TransposeConvolution2dDescriptor &descriptor, const ConstTensor &weights, const Optional< ConstTensor > &biases, const char *name=nullptr)
 
IConnectableLayerAddTransposeLayer (const TransposeDescriptor &transposeDescriptor, const char *name=nullptr)
 
IConnectableLayerAddUnidirectionalSequenceLstmLayer (const UnidirectionalSequenceLstmDescriptor &descriptor, const LstmInputParams &params, const char *name=nullptr)
 
IConnectableLayerAddConvertFp16ToFp32Layer (const char *name=nullptr)
 
IConnectableLayerAddConvertFp32ToFp16Layer (const char *name=nullptr)
 
void ExecuteStrategy (IStrategy &strategy) const
 

Detailed Description

Private implementation of INetwork.

Definition at line 31 of file Network.hpp.

Constructor & Destructor Documentation

◆ NetworkImpl()

NetworkImpl ( const NetworkOptions networkOptions = {})

Definition at line 1814 of file Network.cpp.

1815 : m_NetworkOptions(networkOptions),
1816  m_Graph(std::make_unique<Graph>(GetShapeInferenceMethod(), GetAllowExpandedDims()))
1817 {}

◆ ~NetworkImpl()

Definition at line 1819 of file Network.cpp.

1820 {
1821 }

Member Function Documentation

◆ AddActivationLayer()

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

Definition at line 1943 of file Network.cpp.

1945 {
1946  return m_Graph->AddLayer<ActivationLayer>(activationDescriptor, name);
1947 }

◆ AddAdditionLayer()

IConnectableLayer * AddAdditionLayer ( const char *  name = nullptr)

Definition at line 1989 of file Network.cpp.

1990 {
1991  return m_Graph->AddLayer<AdditionLayer>(name);
1992 }

◆ AddArgMinMaxLayer()

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

Definition at line 1949 of file Network.cpp.

1951 {
1952  return m_Graph->AddLayer<ArgMinMaxLayer>(argMinMaxDescriptor, name);
1953 }

◆ AddBatchMatMulLayer()

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

Definition at line 2664 of file Network.cpp.

2665 {
2666  return m_Graph->AddLayer<BatchMatMulLayer>(desc, name);
2667 }

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

2010 {
2011  const auto layer = m_Graph->AddLayer<BatchNormalizationLayer>(desc, name);
2012 
2013  layer->m_Mean = std::make_shared<ScopedTensorHandle>(mean);
2014  layer->m_Variance = std::make_shared<ScopedTensorHandle>(variance);
2015  layer->m_Beta = std::make_shared<ScopedTensorHandle>(beta);
2016  layer->m_Gamma = std::make_shared<ScopedTensorHandle>(gamma);
2017 
2018  return layer;
2019 }

References BatchNormalizationLayer::m_Mean.

◆ AddBatchToSpaceNdLayer()

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

Definition at line 1834 of file Network.cpp.

1836 {
1837  return m_Graph->AddLayer<BatchToSpaceNdLayer>(batchToSpaceNdDescriptor, name);
1838 }

◆ AddCastLayer()

IConnectableLayer * AddCastLayer ( const char *  name = nullptr)

Definition at line 1840 of file Network.cpp.

1841 {
1842  return m_Graph->AddLayer<CastLayer>(name);
1843 }

◆ AddChannelShuffleLayer()

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

Definition at line 1844 of file Network.cpp.

1846 {
1847  return m_Graph->AddLayer<ChannelShuffleLayer>(channelShuffleDescriptor, name);
1848 }

◆ AddComparisonLayer()

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

Definition at line 1850 of file Network.cpp.

1852 {
1853  return m_Graph->AddLayer<ComparisonLayer>(comparisonDescriptor, name);
1854 }

◆ AddConcatLayer()

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

Definition at line 1874 of file Network.cpp.

1876 {
1877  return m_Graph->AddLayer<ConcatLayer>(concatDescriptor, name);
1878 }

◆ AddConstantLayer()

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

Definition at line 2060 of file Network.cpp.

2061 {
2062  auto layer = m_Graph->AddLayer<ConstantLayer>(name);
2063 
2064  layer->m_LayerOutput = std::make_shared<ScopedTensorHandle>(input);
2065 
2066  return layer;
2067 }

References ConstantLayer::m_LayerOutput.

◆ AddConvertFp16ToFp32Layer()

IConnectableLayer * AddConvertFp16ToFp32Layer ( const char *  name = nullptr)

Definition at line 1886 of file Network.cpp.

1887 {
1888  return m_Graph->AddLayer<ConvertFp16ToFp32Layer>(name);
1889 }

◆ AddConvertFp32ToFp16Layer()

IConnectableLayer * AddConvertFp32ToFp16Layer ( const char *  name = nullptr)

Definition at line 1891 of file Network.cpp.

1892 {
1893  return m_Graph->AddLayer<ConvertFp32ToFp16Layer>(name);
1894 }

◆ AddConvolution2dLayer()

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

Definition at line 1880 of file Network.cpp.

1882 {
1883  return m_Graph->AddLayer<Convolution2dLayer>(convolution2dDescriptor, name);
1884 }

◆ AddConvolution3dLayer()

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

Definition at line 1896 of file Network.cpp.

1898 {
1899  return m_Graph->AddLayer<Convolution3dLayer>(convolution3dDescriptor, name);
1900 }

◆ AddDepthToSpaceLayer()

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

Definition at line 1902 of file Network.cpp.

1904 {
1905  return m_Graph->AddLayer<DepthToSpaceLayer>(depthToSpaceDescriptor, name);
1906 }

◆ AddDepthwiseConvolution2dLayer()

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

Definition at line 1908 of file Network.cpp.

1911 {
1912  return m_Graph->AddLayer<DepthwiseConvolution2dLayer>(convolution2dDescriptor, name);
1913 }

◆ AddDequantizeLayer()

IConnectableLayer * AddDequantizeLayer ( const char *  name = nullptr)

Definition at line 2258 of file Network.cpp.

2259 {
2260  return m_Graph->AddLayer<DequantizeLayer>(name);
2261 }

◆ AddDetectionPostProcessLayer()

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

Definition at line 1915 of file Network.cpp.

1917 {
1918  const auto layer = m_Graph->AddLayer<DetectionPostProcessLayer>(descriptor, name);
1919 
1920  layer->m_Anchors = std::make_shared<ScopedTensorHandle>(anchors);
1921 
1922  return layer;
1923 }

References DetectionPostProcessLayer::m_Anchors.

◆ AddDivisionLayer()

IConnectableLayer * AddDivisionLayer ( const char *  name = nullptr)

Definition at line 2233 of file Network.cpp.

2234 {
2235  return m_Graph->AddLayer<DivisionLayer>(name);
2236 }

◆ AddElementwiseUnaryLayer()

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

Definition at line 1856 of file Network.cpp.

1858 {
1859  return m_Graph->AddLayer<ElementwiseUnaryLayer>(elementwiseUnaryDescriptor, name);
1860 }

◆ AddFillLayer()

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

Definition at line 1862 of file Network.cpp.

1864 {
1865  return m_Graph->AddLayer<FillLayer>(fillDescriptor, name);
1866 }

◆ AddFloorLayer()

IConnectableLayer * AddFloorLayer ( const char *  name = nullptr)

Definition at line 2087 of file Network.cpp.

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

◆ AddFullyConnectedLayer()

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

Definition at line 1868 of file Network.cpp.

1870 {
1871  return m_Graph->AddLayer<FullyConnectedLayer>(fullyConnectedDescriptor, name);
1872 }

◆ AddGatherLayer()

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

Definition at line 2269 of file Network.cpp.

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

◆ AddGatherNdLayer()

IConnectableLayer * AddGatherNdLayer ( const char *  name = nullptr)

Definition at line 2275 of file Network.cpp.

2276 {
2277  return m_Graph->AddLayer<GatherNdLayer>(name);
2278 }

◆ AddInputLayer()

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

Definition at line 1829 of file Network.cpp.

1830 {
1831  return m_Graph->AddLayer<InputLayer>(id, name);
1832 }

◆ AddInstanceNormalizationLayer()

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

Definition at line 2042 of file Network.cpp.

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

◆ AddL2NormalizationLayer()

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

Definition at line 2048 of file Network.cpp.

2050 {
2051  return m_Graph->AddLayer<L2NormalizationLayer>(desc, name);
2052 }

◆ AddLogicalBinaryLayer()

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

Definition at line 2516 of file Network.cpp.

2518 {
2519  return m_Graph->AddLayer<LogicalBinaryLayer>(logicalBinaryDescriptor, name);
2520 }

◆ AddLogSoftmaxLayer()

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

Definition at line 2054 of file Network.cpp.

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

◆ AddLstmLayer()

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

Definition at line 2092 of file Network.cpp.

2095 {
2096  const auto layer = m_Graph->AddLayer<LstmLayer>(descriptor, name);
2097 
2098  //Lstm Basic Parameters
2099  layer->m_BasicParameters.m_InputToForgetWeights =
2100  std::make_shared<ScopedTensorHandle>(*(params.m_InputToForgetWeights));
2101  layer->m_BasicParameters.m_InputToCellWeights =
2102  std::make_shared<ScopedTensorHandle>(*(params.m_InputToCellWeights));
2103  layer->m_BasicParameters.m_InputToOutputWeights =
2104  std::make_shared<ScopedTensorHandle>(*(params.m_InputToOutputWeights));
2105  layer->m_BasicParameters.m_RecurrentToForgetWeights =
2106  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToForgetWeights));
2107  layer->m_BasicParameters.m_RecurrentToCellWeights =
2108  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToCellWeights));
2109  layer->m_BasicParameters.m_RecurrentToOutputWeights =
2110  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToOutputWeights));
2111  layer->m_BasicParameters.m_ForgetGateBias =
2112  std::make_shared<ScopedTensorHandle>(*(params.m_ForgetGateBias));
2113  layer->m_BasicParameters.m_CellBias =
2114  std::make_shared<ScopedTensorHandle>(*(params.m_CellBias));
2115  layer->m_BasicParameters.m_OutputGateBias =
2116  std::make_shared<ScopedTensorHandle>(*(params.m_OutputGateBias));
2117 
2118  //Lstm Cifg parameters
2119  if(!descriptor.m_CifgEnabled)
2120  {
2121  if(params.m_InputToInputWeights == nullptr)
2122  {
2123  throw InvalidArgumentException("AddLstmLayer: Input To Input Weights cannot be NULL "
2124  "when CIFG is disabled.");
2125  }
2126  if(params.m_RecurrentToInputWeights == nullptr)
2127  {
2128  throw InvalidArgumentException(
2129  "AddLstmLayer: Recurrent To Input Weights cannot be NULL "
2130  "when CIFG is disabled.");
2131  }
2132  if(params.m_InputGateBias == nullptr)
2133  {
2134  throw InvalidArgumentException("AddLstmLayer: Input Gate Bias cannot be NULL "
2135  "when CIFG is disabled.");
2136  }
2137  layer->m_CifgParameters.m_InputToInputWeights =
2138  std::make_shared<ScopedTensorHandle>(*(params.m_InputToInputWeights));
2139  layer->m_CifgParameters.m_RecurrentToInputWeights =
2140  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToInputWeights));
2141  layer->m_CifgParameters.m_InputGateBias =
2142  std::make_shared<ScopedTensorHandle>(*(params.m_InputGateBias));
2143  }
2144 
2145  //Lstm projection parameters
2146  if(descriptor.m_ProjectionEnabled)
2147  {
2148  if(params.m_ProjectionWeights == nullptr)
2149  {
2150  throw InvalidArgumentException("AddLstmLayer: Projection Weights cannot be NULL "
2151  "when projection is enabled.");
2152  }
2153  layer->m_ProjectionParameters.m_ProjectionWeights =
2154  std::make_shared<ScopedTensorHandle>(*(params.m_ProjectionWeights));
2155  if(params.m_ProjectionBias != nullptr)
2156  {
2157  layer->m_ProjectionParameters.m_ProjectionBias =
2158  std::make_shared<ScopedTensorHandle>(*(params.m_ProjectionBias));
2159  }
2160  }
2161 
2162  //Lstm Peephole params
2163  if(descriptor.m_PeepholeEnabled)
2164  {
2165  if(!descriptor.m_CifgEnabled)
2166  {
2167  if(params.m_CellToInputWeights == nullptr)
2168  {
2169  throw InvalidArgumentException("AddLstmLayer: Cell To Input Weights cannot be NULL "
2170  "when Peephole is enabled and CIFG disabled.");
2171  }
2172 
2173  layer->m_PeepholeParameters.m_CellToInputWeights =
2174  std::make_shared<ScopedTensorHandle>(*(params.m_CellToInputWeights));
2175  }
2176 
2177  if(params.m_CellToForgetWeights == nullptr)
2178  {
2179  throw InvalidArgumentException("AddLstmLayer: Cell To Forget Weights cannot be NULL "
2180  "when Peephole is enabled.");
2181  }
2182  if(params.m_CellToOutputWeights == nullptr)
2183  {
2184  throw InvalidArgumentException("AddLstmLayer: Cell To Output Weights cannot be NULL "
2185  "when Peephole is enabled.");
2186  }
2187 
2188  layer->m_PeepholeParameters.m_CellToForgetWeights =
2189  std::make_shared<ScopedTensorHandle>(*(params.m_CellToForgetWeights));
2190  layer->m_PeepholeParameters.m_CellToOutputWeights =
2191  std::make_shared<ScopedTensorHandle>(*(params.m_CellToOutputWeights));
2192  }
2193 
2194  //Lstm Layer Normalization params
2195  if(descriptor.m_LayerNormEnabled)
2196  {
2197  if(!descriptor.m_CifgEnabled)
2198  {
2199  if(params.m_InputLayerNormWeights == nullptr)
2200  {
2201  throw InvalidArgumentException("AddLstmLayer: Input layer normalization weights cannot be NULL "
2202  "when layer normalization is enabled and CIFG disabled.");
2203  }
2204  layer->m_LayerNormParameters.m_InputLayerNormWeights =
2205  std::make_shared<ScopedTensorHandle>(*(params.m_InputLayerNormWeights));
2206  }
2207 
2208  if(params.m_ForgetLayerNormWeights == nullptr)
2209  {
2210  throw InvalidArgumentException("AddLstmLayer: Forget layer normalization weights cannot be NULL "
2211  "when layer normalization is enabled.");
2212  }
2213  if(params.m_CellLayerNormWeights == nullptr)
2214  {
2215  throw InvalidArgumentException("AddLstmLayer: Cell layer normalization weights cannot be NULL "
2216  "when layer normalization is enabled.");
2217  }
2218  if(params.m_OutputLayerNormWeights == nullptr)
2219  {
2220  throw InvalidArgumentException("AddLstmLayer: Output layer normalization weights cannot be NULL "
2221  "when layer normalization is enabled.");
2222  }
2223  layer->m_LayerNormParameters.m_ForgetLayerNormWeights =
2224  std::make_shared<ScopedTensorHandle>(*(params.m_ForgetLayerNormWeights));
2225  layer->m_LayerNormParameters.m_CellLayerNormWeights =
2226  std::make_shared<ScopedTensorHandle>(*(params.m_CellLayerNormWeights));
2227  layer->m_LayerNormParameters.m_OutputLayerNormWeights =
2228  std::make_shared<ScopedTensorHandle>(*(params.m_OutputLayerNormWeights));
2229  }
2230  return layer;
2231 }

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

1980 {
1981  return m_Graph->AddLayer<MaximumLayer>(name);
1982 }

◆ AddMeanLayer()

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

Definition at line 2243 of file Network.cpp.

2244 {
2245  return m_Graph->AddLayer<MeanLayer>(meanDescriptor,name);
2246 }

◆ AddMergeLayer()

IConnectableLayer * AddMergeLayer ( const char *  name = nullptr)

Definition at line 2280 of file Network.cpp.

2281 {
2282  return m_Graph->AddLayer<MergeLayer>(name);
2283 }

◆ AddMinimumLayer()

IConnectableLayer * AddMinimumLayer ( const char *  name = nullptr)

Definition at line 1984 of file Network.cpp.

1985 {
1986  return m_Graph->AddLayer<MinimumLayer>(name);
1987 }

◆ AddMultiplicationLayer()

IConnectableLayer * AddMultiplicationLayer ( const char *  name = nullptr)

Definition at line 1994 of file Network.cpp.

1995 {
1996  return m_Graph->AddLayer<MultiplicationLayer>(name);
1997 }

◆ AddNormalizationLayer()

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

Definition at line 1955 of file Network.cpp.

1958 {
1959  return m_Graph->AddLayer<NormalizationLayer>(normalizationDescriptor, name);
1960 }

◆ AddOutputLayer()

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

Definition at line 1999 of file Network.cpp.

2000 {
2001  return m_Graph->AddLayer<OutputLayer>(id, name);
2002 }

◆ AddPadLayer()

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

Definition at line 2248 of file Network.cpp.

2249 {
2250  return m_Graph->AddLayer<PadLayer>(padDescriptor,name);
2251 }

◆ AddPermuteLayer()

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

Definition at line 1925 of file Network.cpp.

1927 {
1928  return m_Graph->AddLayer<PermuteLayer>(permuteDescriptor, name);
1929 }

◆ AddPooling2dLayer()

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

Definition at line 1931 of file Network.cpp.

1933 {
1934  return m_Graph->AddLayer<Pooling2dLayer>(pooling2dDescriptor, name);
1935 }

◆ AddPooling3dLayer()

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

Definition at line 1937 of file Network.cpp.

1939 {
1940  return m_Graph->AddLayer<Pooling3dLayer>(pooling3dDescriptor, name);
1941 }

◆ AddPrecompiledLayer()

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

Definition at line 2669 of file Network.cpp.

2673 {
2674  // Method use is for backend users.
2675  PreCompiledLayer* layer;
2676  if (name)
2677  {
2678  layer = m_Graph->AddLayer<PreCompiledLayer>(preCompiledDescriptor, name);
2679  }
2680  else
2681  {
2682  layer = m_Graph->AddLayer<PreCompiledLayer>(preCompiledDescriptor, "pre-compiled");
2683  }
2684 
2685  // Assign the pre-compiled object to layer
2686  // Pass only one compiled network, Arm NN does not handle multiple
2687  // pre-compiled objects in a single pre-compiled layer currently
2688  layer->SetPreCompiledObject(std::move(compiledBlobPtr));
2689 
2690  if (backend.has_value())
2691  {
2692  layer->SetBackendId(backend.value());
2693  }
2694  else if (layer->GetBackendHint().has_value())
2695  {
2696  layer->SetBackendId(layer->GetBackendHint().value());
2697  }
2698 
2699  return layer;
2700 }

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

2291 {
2292  return m_Graph->AddLayer<PreluLayer>(name);
2293 }

◆ AddQLstmLayer()

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

Definition at line 2374 of file Network.cpp.

2377 {
2378  const auto layer = m_Graph->AddLayer<QLstmLayer>(descriptor, name);
2379 
2380  // QLstm Basic Parameters
2381  layer->m_BasicParameters.m_InputToForgetWeights =
2382  std::make_shared<ScopedTensorHandle>(*(params.m_InputToForgetWeights));
2383  layer->m_BasicParameters.m_InputToCellWeights =
2384  std::make_shared<ScopedTensorHandle>(*(params.m_InputToCellWeights));
2385  layer->m_BasicParameters.m_InputToOutputWeights =
2386  std::make_shared<ScopedTensorHandle>(*(params.m_InputToOutputWeights));
2387  layer->m_BasicParameters.m_RecurrentToForgetWeights =
2388  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToForgetWeights));
2389  layer->m_BasicParameters.m_RecurrentToCellWeights =
2390  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToCellWeights));
2391  layer->m_BasicParameters.m_RecurrentToOutputWeights =
2392  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToOutputWeights));
2393  layer->m_BasicParameters.m_ForgetGateBias =
2394  std::make_shared<ScopedTensorHandle>(*(params.m_ForgetGateBias));
2395  layer->m_BasicParameters.m_CellBias =
2396  std::make_shared<ScopedTensorHandle>(*(params.m_CellBias));
2397  layer->m_BasicParameters.m_OutputGateBias =
2398  std::make_shared<ScopedTensorHandle>(*(params.m_OutputGateBias));
2399 
2400  // QLstm Cifg parameters
2401  if(!descriptor.m_CifgEnabled)
2402  {
2403  if(params.m_InputToInputWeights == nullptr)
2404  {
2405  throw InvalidArgumentException("AddQLstmLayer: Input To Input Weights cannot be NULL");
2406  }
2407 
2408  if(params.m_RecurrentToInputWeights == nullptr)
2409  {
2410  throw InvalidArgumentException(
2411  "AddQLstmLayer: Recurrent To Input Weights cannot be NULL");
2412  }
2413 
2414  if(params.m_InputGateBias == nullptr)
2415  {
2416  throw InvalidArgumentException("AddQLstmLayer: Input Gate Bias cannot be NULL");
2417  }
2418 
2419  layer->m_CifgParameters.m_InputToInputWeights =
2420  std::make_shared<ScopedTensorHandle>(*(params.m_InputToInputWeights));
2421  layer->m_CifgParameters.m_RecurrentToInputWeights =
2422  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToInputWeights));
2423  layer->m_CifgParameters.m_InputGateBias =
2424  std::make_shared<ScopedTensorHandle>(*(params.m_InputGateBias));
2425  }
2426 
2427  // QLstm Projection parameters
2428  if(descriptor.m_ProjectionEnabled)
2429  {
2430  if(params.m_ProjectionWeights == nullptr)
2431  {
2432  throw InvalidArgumentException("AddQLstmLayer: Projection Weights cannot be NULL");
2433  }
2434 
2435  layer->m_ProjectionParameters.m_ProjectionWeights =
2436  std::make_shared<ScopedTensorHandle>(*(params.m_ProjectionWeights));
2437 
2438  // Projection bias is optional even if projection is enabled
2439  if(params.m_ProjectionBias != nullptr)
2440  {
2441  layer->m_ProjectionParameters.m_ProjectionBias =
2442  std::make_shared<ScopedTensorHandle>(*(params.m_ProjectionBias));
2443  }
2444 
2445  }
2446 
2447  // QLstm Peephole params
2448  if(descriptor.m_PeepholeEnabled)
2449  {
2450  if(params.m_CellToForgetWeights == nullptr)
2451  {
2452  throw InvalidArgumentException("AddQLstmLayer: Cell To Forget Weights cannot be NULL");
2453  }
2454 
2455  if(params.m_CellToOutputWeights == nullptr)
2456  {
2457  throw InvalidArgumentException("AddQLstmLayer: Cell To Output Weights cannot be NULL");
2458  }
2459 
2460  if(!descriptor.m_CifgEnabled)
2461  {
2462  if(params.m_CellToInputWeights == nullptr)
2463  {
2464  throw InvalidArgumentException("AddQLstmLayer: Cell To Input Weights cannot be NULL");
2465  }
2466 
2467  layer->m_PeepholeParameters.m_CellToInputWeights =
2468  std::make_shared<ScopedTensorHandle>(*(params.m_CellToInputWeights));
2469  }
2470 
2471  layer->m_PeepholeParameters.m_CellToForgetWeights =
2472  std::make_shared<ScopedTensorHandle>(*(params.m_CellToForgetWeights));
2473  layer->m_PeepholeParameters.m_CellToOutputWeights =
2474  std::make_shared<ScopedTensorHandle>(*(params.m_CellToOutputWeights));
2475  }
2476 
2477  // QLstm Layer Normalization params
2478  if(descriptor.m_LayerNormEnabled)
2479  {
2480  if(params.m_ForgetLayerNormWeights == nullptr)
2481  {
2482  throw InvalidArgumentException("AddQLstmLayer: Forget layer normalization weights cannot be NULL");
2483  }
2484 
2485  if(params.m_CellLayerNormWeights == nullptr)
2486  {
2487  throw InvalidArgumentException("AddQLstmLayer: Cell layer normalization weights cannot be NULL");
2488  }
2489 
2490  if(params.m_OutputLayerNormWeights == nullptr)
2491  {
2492  throw InvalidArgumentException("AddQLstmLayer: Output layer normalization weights cannot be NULL");
2493  }
2494 
2495  if(!descriptor.m_CifgEnabled)
2496  {
2497  if(params.m_InputLayerNormWeights == nullptr)
2498  {
2499  throw InvalidArgumentException("AddQLstmLayer: Input layer normalization weights cannot be NULL");
2500  }
2501 
2502  layer->m_LayerNormParameters.m_InputLayerNormWeights =
2503  std::make_shared<ScopedTensorHandle>(*(params.m_InputLayerNormWeights));
2504  }
2505 
2506  layer->m_LayerNormParameters.m_ForgetLayerNormWeights =
2507  std::make_shared<ScopedTensorHandle>(*(params.m_ForgetLayerNormWeights));
2508  layer->m_LayerNormParameters.m_CellLayerNormWeights =
2509  std::make_shared<ScopedTensorHandle>(*(params.m_CellLayerNormWeights));
2510  layer->m_LayerNormParameters.m_OutputLayerNormWeights =
2511  std::make_shared<ScopedTensorHandle>(*(params.m_OutputLayerNormWeights));
2512  }
2513  return layer;
2514 }

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

2338 {
2339  const auto layer = m_Graph->AddLayer<QuantizedLstmLayer>(name);
2340 
2341  // InputToX weights
2342  layer->m_QuantizedLstmParameters.m_InputToInputWeights =
2343  std::make_shared<ScopedTensorHandle>(params.GetInputToInputWeights());
2344  layer->m_QuantizedLstmParameters.m_InputToForgetWeights =
2345  std::make_shared<ScopedTensorHandle>(params.GetInputToForgetWeights());
2346  layer->m_QuantizedLstmParameters.m_InputToCellWeights =
2347  std::make_shared<ScopedTensorHandle>(params.GetInputToCellWeights());
2348  layer->m_QuantizedLstmParameters.m_InputToOutputWeights =
2349  std::make_shared<ScopedTensorHandle>(params.GetInputToOutputWeights());
2350 
2351  // RecurrentToX weights
2352  layer->m_QuantizedLstmParameters.m_RecurrentToInputWeights =
2353  std::make_shared<ScopedTensorHandle>(params.GetRecurrentToInputWeights());
2354  layer->m_QuantizedLstmParameters.m_RecurrentToForgetWeights =
2355  std::make_shared<ScopedTensorHandle>(params.GetRecurrentToForgetWeights());
2356  layer->m_QuantizedLstmParameters.m_RecurrentToCellWeights =
2357  std::make_shared<ScopedTensorHandle>(params.GetRecurrentToCellWeights());
2358  layer->m_QuantizedLstmParameters.m_RecurrentToOutputWeights =
2359  std::make_shared<ScopedTensorHandle>(params.GetRecurrentToOutputWeights());
2360 
2361  // Bias
2362  layer->m_QuantizedLstmParameters.m_InputGateBias =
2363  std::make_shared<ScopedTensorHandle>(params.GetInputGateBias());
2364  layer->m_QuantizedLstmParameters.m_ForgetGateBias =
2365  std::make_shared<ScopedTensorHandle>(params.GetForgetGateBias());
2366  layer->m_QuantizedLstmParameters.m_CellBias =
2367  std::make_shared<ScopedTensorHandle>(params.GetCellBias());
2368  layer->m_QuantizedLstmParameters.m_OutputGateBias =
2369  std::make_shared<ScopedTensorHandle>(params.GetOutputGateBias());
2370 
2371  return layer;
2372 }

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

2254 {
2255  return m_Graph->AddLayer<QuantizeLayer>(name);
2256 }

◆ AddRankLayer()

IConnectableLayer * AddRankLayer ( const char *  name = nullptr)

Definition at line 2021 of file Network.cpp.

2022 {
2023  return m_Graph->AddLayer<RankLayer>(name);
2024 }

◆ AddReduceLayer()

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

Definition at line 2026 of file Network.cpp.

2028 {
2029  return m_Graph->AddLayer<ReduceLayer>(reduceDescriptor, name);
2030 }

◆ AddReshapeLayer()

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

Definition at line 2069 of file Network.cpp.

2071 {
2072  return m_Graph->AddLayer<ReshapeLayer>(reshapeDescriptor, name);
2073 }

◆ AddResizeLayer()

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

Definition at line 2032 of file Network.cpp.

2033 {
2034  return m_Graph->AddLayer<ResizeLayer>(resizeDescriptor, name);
2035 }

◆ AddShapeLayer()

IConnectableLayer * AddShapeLayer ( const char *  name = nullptr)

Definition at line 2037 of file Network.cpp.

2038 {
2039  return m_Graph->AddLayer<ShapeLayer>(name);
2040 }

◆ AddSliceLayer()

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

Definition at line 1962 of file Network.cpp.

1963 {
1964  return m_Graph->AddLayer<SliceLayer>(sliceDescriptor, name);
1965 }

◆ AddSoftmaxLayer()

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

Definition at line 1967 of file Network.cpp.

1969 {
1970  return m_Graph->AddLayer<SoftmaxLayer>(softmaxDescriptor, name);
1971 }

◆ AddSpaceToBatchNdLayer()

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

Definition at line 2075 of file Network.cpp.

2077 {
2078  return m_Graph->AddLayer<SpaceToBatchNdLayer>(spaceToBatchNdDescriptor, name);
2079 }

◆ AddSpaceToDepthLayer()

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

Definition at line 2081 of file Network.cpp.

2083 {
2084  return m_Graph->AddLayer<SpaceToDepthLayer>(spaceToDepthDescriptor, name);
2085 }

◆ AddSplitterLayer()

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

Definition at line 1973 of file Network.cpp.

1975 {
1976  return m_Graph->AddLayer<SplitterLayer>(splitterDescriptor, name);
1977 }

◆ AddStackLayer()

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

Definition at line 2323 of file Network.cpp.

2325 {
2326  return m_Graph->AddLayer<StackLayer>(stackDescriptor, name);
2327 }

◆ AddStandInLayer()

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

Definition at line 2330 of file Network.cpp.

2332 {
2333  return m_Graph->AddLayer<StandInLayer>(desc, name);
2334 }

◆ AddStridedSliceLayer()

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

Definition at line 2263 of file Network.cpp.

2265 {
2266  return m_Graph->AddLayer<StridedSliceLayer>(stridedSliceDescriptor, name);
2267 }

◆ AddSubtractionLayer()

IConnectableLayer * AddSubtractionLayer ( const char *  name = nullptr)

Definition at line 2238 of file Network.cpp.

2239 {
2240  return m_Graph->AddLayer<SubtractionLayer>(name);
2241 }

◆ AddSwitchLayer()

IConnectableLayer * AddSwitchLayer ( const char *  name = nullptr)

Definition at line 2285 of file Network.cpp.

2286 {
2287  return m_Graph->AddLayer<SwitchLayer>(name);
2288 }

◆ AddTransposeConvolution2dLayer()

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

Definition at line 2295 of file Network.cpp.

2299 {
2300  if (descriptor.m_BiasEnabled && !biases.has_value())
2301  {
2302  throw InvalidArgumentException("AddTransposeConvolution2dLayer: Biases cannot be empty");
2303  }
2304 
2305  const auto layer = m_Graph->AddLayer<TransposeConvolution2dLayer>(descriptor, name);
2306 
2307  layer->m_Weight = std::make_shared<ScopedTensorHandle>(weights);
2308 
2309  if (descriptor.m_BiasEnabled)
2310  {
2311  layer->m_Bias = std::make_shared<ScopedTensorHandle>(biases.value());
2312  }
2313 
2314  return layer;
2315 }

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

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

◆ AddUnidirectionalSequenceLstmLayer()

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

Definition at line 2522 of file Network.cpp.

2526 {
2527  const auto layer = m_Graph->AddLayer<UnidirectionalSequenceLstmLayer>(descriptor, name);
2528 
2529  //Lstm Basic Parameters
2530  layer->m_BasicParameters.m_InputToForgetWeights =
2531  std::make_shared<ScopedTensorHandle>(*(params.m_InputToForgetWeights));
2532  layer->m_BasicParameters.m_InputToCellWeights =
2533  std::make_shared<ScopedTensorHandle>(*(params.m_InputToCellWeights));
2534  layer->m_BasicParameters.m_InputToOutputWeights =
2535  std::make_shared<ScopedTensorHandle>(*(params.m_InputToOutputWeights));
2536  layer->m_BasicParameters.m_RecurrentToForgetWeights =
2537  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToForgetWeights));
2538  layer->m_BasicParameters.m_RecurrentToCellWeights =
2539  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToCellWeights));
2540  layer->m_BasicParameters.m_RecurrentToOutputWeights =
2541  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToOutputWeights));
2542  layer->m_BasicParameters.m_ForgetGateBias =
2543  std::make_shared<ScopedTensorHandle>(*(params.m_ForgetGateBias));
2544  layer->m_BasicParameters.m_CellBias =
2545  std::make_shared<ScopedTensorHandle>(*(params.m_CellBias));
2546  layer->m_BasicParameters.m_OutputGateBias =
2547  std::make_shared<ScopedTensorHandle>(*(params.m_OutputGateBias));
2548 
2549  //Lstm Cifg parameters
2550  if(!descriptor.m_CifgEnabled)
2551  {
2552  if(params.m_InputToInputWeights == nullptr)
2553  {
2554  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Input To Input Weights cannot be NULL "
2555  "when CIFG is disabled.");
2556  }
2557  if(params.m_RecurrentToInputWeights == nullptr)
2558  {
2559  throw InvalidArgumentException(
2560  "AddUnidirectionalSequenceLstmLayer: Recurrent To Input Weights cannot be NULL "
2561  "when CIFG is disabled.");
2562  }
2563  if(params.m_InputGateBias == nullptr)
2564  {
2565  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Input Gate Bias cannot be NULL "
2566  "when CIFG is disabled.");
2567  }
2568  layer->m_CifgParameters.m_InputToInputWeights =
2569  std::make_shared<ScopedTensorHandle>(*(params.m_InputToInputWeights));
2570  layer->m_CifgParameters.m_RecurrentToInputWeights =
2571  std::make_shared<ScopedTensorHandle>(*(params.m_RecurrentToInputWeights));
2572  layer->m_CifgParameters.m_InputGateBias =
2573  std::make_shared<ScopedTensorHandle>(*(params.m_InputGateBias));
2574  }
2575 
2576  //Lstm projection parameters
2577  if(descriptor.m_ProjectionEnabled)
2578  {
2579  if(params.m_ProjectionWeights == nullptr)
2580  {
2581  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Projection Weights cannot be NULL "
2582  "when projection is enabled.");
2583  }
2584  layer->m_ProjectionParameters.m_ProjectionWeights =
2585  std::make_shared<ScopedTensorHandle>(*(params.m_ProjectionWeights));
2586  if(params.m_ProjectionBias != nullptr)
2587  {
2588  layer->m_ProjectionParameters.m_ProjectionBias =
2589  std::make_shared<ScopedTensorHandle>(*(params.m_ProjectionBias));
2590  }
2591  }
2592 
2593  //Lstm Peephole params
2594  if(descriptor.m_PeepholeEnabled)
2595  {
2596  if(!descriptor.m_CifgEnabled)
2597  {
2598  if(params.m_CellToInputWeights == nullptr)
2599  {
2600  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Cell To Input Weights "
2601  "cannot be NULL when Peephole is enabled and CIFG disabled.");
2602  }
2603 
2604  layer->m_PeepholeParameters.m_CellToInputWeights =
2605  std::make_shared<ScopedTensorHandle>(*(params.m_CellToInputWeights));
2606  }
2607 
2608  if(params.m_CellToForgetWeights == nullptr)
2609  {
2610  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Cell To Forget Weights cannot be NULL "
2611  "when Peephole is enabled.");
2612  }
2613  if(params.m_CellToOutputWeights == nullptr)
2614  {
2615  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Cell To Output Weights cannot be NULL "
2616  "when Peephole is enabled.");
2617  }
2618 
2619  layer->m_PeepholeParameters.m_CellToForgetWeights =
2620  std::make_shared<ScopedTensorHandle>(*(params.m_CellToForgetWeights));
2621  layer->m_PeepholeParameters.m_CellToOutputWeights =
2622  std::make_shared<ScopedTensorHandle>(*(params.m_CellToOutputWeights));
2623  }
2624 
2625  //Lstm Layer Normalization params
2626  if(descriptor.m_LayerNormEnabled)
2627  {
2628  if(!descriptor.m_CifgEnabled)
2629  {
2630  if(params.m_InputLayerNormWeights == nullptr)
2631  {
2632  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Input layer normalization weights "
2633  "cannot be NULL when layer normalization is enabled and CIFG disabled.");
2634  }
2635  layer->m_LayerNormParameters.m_InputLayerNormWeights =
2636  std::make_shared<ScopedTensorHandle>(*(params.m_InputLayerNormWeights));
2637  }
2638 
2639  if(params.m_ForgetLayerNormWeights == nullptr)
2640  {
2641  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Forget layer normalization weights "
2642  "cannot be NULL when layer normalization is enabled.");
2643  }
2644  if(params.m_CellLayerNormWeights == nullptr)
2645  {
2646  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Cell layer normalization weights "
2647  "cannot be NULL when layer normalization is enabled.");
2648  }
2649  if(params.m_OutputLayerNormWeights == nullptr)
2650  {
2651  throw InvalidArgumentException("AddUnidirectionalSequenceLstmLayer: Output layer normalization weights "
2652  "cannot be NULL when layer normalization is enabled.");
2653  }
2654  layer->m_LayerNormParameters.m_ForgetLayerNormWeights =
2655  std::make_shared<ScopedTensorHandle>(*(params.m_ForgetLayerNormWeights));
2656  layer->m_LayerNormParameters.m_CellLayerNormWeights =
2657  std::make_shared<ScopedTensorHandle>(*(params.m_CellLayerNormWeights));
2658  layer->m_LayerNormParameters.m_OutputLayerNormWeights =
2659  std::make_shared<ScopedTensorHandle>(*(params.m_OutputLayerNormWeights));
2660  }
2661  return layer;
2662 }

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

2703 {
2704  for (auto layer : GetGraph())
2705  {
2706  layer->ExecuteStrategy(strategy);
2707  };
2708 }

References NetworkImpl::GetGraph().

◆ GetGraph()

const Graph& GetGraph ( ) const
inline

Definition at line 37 of file Network.hpp.

38  { return *m_Graph; }

Referenced by NetworkImpl::ExecuteStrategy().

◆ PrintGraph()

Status PrintGraph ( )

Definition at line 1823 of file Network.cpp.

1824 {
1825  m_Graph->Print();
1826  return Status::Success;
1827 }

References armnn::Success.


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