16 using namespace armcomputetensorutils;
26 const arm_compute::TensorInfo aclInputInfo =
27 armcomputetensorutils::BuildArmComputeTensorInfo(input, desc.
m_DataLayout);
28 const arm_compute::TensorInfo aclOutputInfo =
29 armcomputetensorutils::BuildArmComputeTensorInfo(output, desc.
m_DataLayout);
30 const arm_compute::TensorInfo aclMeanInfo =
31 armcomputetensorutils::BuildArmComputeTensorInfo(mean, desc.
m_DataLayout);
32 const arm_compute::TensorInfo aclVarInfo =
33 armcomputetensorutils::BuildArmComputeTensorInfo(var, desc.
m_DataLayout);
34 const arm_compute::TensorInfo aclBetaInfo =
35 armcomputetensorutils::BuildArmComputeTensorInfo(beta, desc.
m_DataLayout);
36 const arm_compute::TensorInfo aclGammaInfo =
37 armcomputetensorutils::BuildArmComputeTensorInfo(gamma, desc.
m_DataLayout);
39 return arm_compute::CLBatchNormalizationLayer::validate(&aclInputInfo,
52 m_Mean = std::make_unique<arm_compute::CLTensor>();
53 BuildArmComputeTensor(*m_Mean,
m_Data.m_Mean->GetTensorInfo());
55 m_Variance = std::make_unique<arm_compute::CLTensor>();
56 BuildArmComputeTensor(*m_Variance,
m_Data.m_Variance->GetTensorInfo());
58 m_Gamma = std::make_unique<arm_compute::CLTensor>();
59 BuildArmComputeTensor(*m_Gamma,
m_Data.m_Gamma->GetTensorInfo());
61 m_Beta = std::make_unique<arm_compute::CLTensor>();
62 BuildArmComputeTensor(*m_Beta,
m_Data.m_Beta->GetTensorInfo());
70 input.info()->set_data_layout(aclDataLayout);
71 output.info()->set_data_layout(aclDataLayout);
73 m_Layer.configure(&input,
79 m_Data.m_Parameters.m_Eps);
98 void ClBatchNormalizationFloatWorkload::FreeUnusedTensors()
100 FreeTensorIfUnused(m_Mean);
101 FreeTensorIfUnused(m_Variance);
102 FreeTensorIfUnused(m_Gamma);
103 FreeTensorIfUnused(m_Beta);
void RunClFunction(arm_compute::IFunction &function, const CheckLocation &location)
void InitializeArmComputeClTensorData(arm_compute::CLTensor &clTensor, const ConstCpuTensorHandle *handle)
A BatchNormalizationDescriptor for the BatchNormalizationLayer.
ClBatchNormalizationFloatWorkload(const BatchNormalizationQueueDescriptor &descriptor, const WorkloadInfo &info)
const QueueDescriptor m_Data
float m_Eps
Value to add to the variance. Used to avoid dividing by zero.
void ValidateInputsOutputs(const std::string &descName, unsigned int numExpectedIn, unsigned int numExpectedOut) const
void Execute() const override
std::vector< ITensorHandle * > m_Outputs
std::vector< ITensorHandle * > m_Inputs
DataLayout m_DataLayout
The data layout to be used (NCHW, NHWC).
arm_compute::Status ClBatchNormalizationValidate(const TensorInfo &input, const TensorInfo &output, const TensorInfo &mean, const TensorInfo &var, const TensorInfo &beta, const TensorInfo &gamma, const BatchNormalizationDescriptor &desc)
#define ARMNN_SCOPED_PROFILING_EVENT_CL(name)