FLImaging 6.5.16.1
BackendGroupNorm.h
1#pragma once
2
3#if _MSC_VER >= 1900 && defined(_M_X64)
4
5#include "BackendBase.h"
6
7namespace FLImaging
8{
9 namespace AI
10 {
11 template <typename T>
12 class FL_EXPORT CTensor;
13
14 template <typename T>
15 class FL_EXPORT CBackendBase;
16
17 template <typename T>
18 class FL_EXPORT CBackendGroupNorm : public CBackendBase<T>
19 {
20
21 public:
22 CBackendGroupNorm();
23 CBackendGroupNorm(const CBackendGroupNorm<T>& bgn);
24 virtual ~CBackendGroupNorm();
25
26 virtual const CResult SetEpsilon(T tEpsilon);
27 virtual const CResult UseAffine(bool bAffine);
28 virtual const CResult SetGroupCount(int64_t i64GroupCount);
29 virtual T GetEpsilon();
30 virtual bool IsAffineUsed();
31 virtual int64_t GetGroupCount();
32
33 virtual const CResult Forward(const CTensor<T>* pTsrX, const CTensor<T>* pTsrWeight, const CTensor<T>* pTsrBias, CTensor<T>* pTsrY, CTensor<T>* pTsrVarBuffer, CTensor<T>* pTsrMeanBuffer);
34 virtual const CResult Derivative(const CTensor<T>* pTsrX, const CTensor<T>* pTsrWeight, const CTensor<T>* pTsrVarBuffer, const CTensor<T>* pTsrMeanBuffer, const CTensor<T>* pTsrDy, CTensor<T>* pTsrDx, CTensor<T>* pTsrDw, CTensor<T>* pTsrDb, bool bAddGradient, bool bWeightAddGradient, bool bBiasAddGradient);
35
36 protected:
37 virtual const CResult GroupNorm_CPU(const T* pTX, const T* pTWeight, const T* pTBias, T* pTY, T* pTVar, T* pTMean, int64_t i64AllGroupCount, int64_t i64ChannelCount, int64_t i64InnerSize);
38 virtual const CResult Derivative_CPU(const T* pTX, const T* pTWeight, const T* pTVar, const T* pTMean, const T* pTDy, T* pTDx, T* pTDw, T* pTDb, int64_t i64AllGroupCount, int64_t i64ChannelCount, int64_t i64InnerSize);
39
40 virtual double GetMean_CPU(const T* pTXStart, int64_t i64Count, double f64Scale, bool bMultiThread = false);
41 virtual double GetVariance_CPU(const T* pTXStart, int64_t i64Count, double f64Mean, double f64Scale, bool bMultiThread = false);
42 virtual const CResult GetDerivativeVarianceAndMean_CPU(const T* pTXStart, const T* pTDyStart, const T* pTWeightStart, T& tVarDerivative, T& tMeanDerivative, int64_t i64Count, int64_t i64InnerSize, T tMean, T tInnerDerivativeVariance, T tMinusInverseSqrtVarPlusE, T tScale, bool bMultiThread = false);
43 virtual const CResult GetDerivativeVarianceAndMean_NoAffine_CPU(const T* pTXStart, const T* pTDyStart, T& tVarDerivative, T& tMeanDerivative, int64_t i64Count, T tMean, T tInnerDerivativeVariance, T tMinusInverseSqrtVarPlusE, T tScale, bool bMultiThread = false);
44
45
46 DeclareGetClassType();
47 SupportToDuplicateObjectWithoutCreateNewObject(CBackendGroupNorm<T>, *this);
48
49 protected:
50 T m_tEpsilon;
51 bool m_bAffine;
52 int64_t m_i64GroupCount;
53 };
54 }
55}
56
57#endif