3#if _MSC_VER >= 1900 && defined(_M_X64)
5#include "BackendBase.h"
12 class FL_EXPORT CTensor;
15 class FL_EXPORT CBackendBase;
18 class FL_EXPORT CBackendGroupNorm :
public CBackendBase<T>
23 CBackendGroupNorm(
const CBackendGroupNorm<T>& bgn);
24 virtual ~CBackendGroupNorm();
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();
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);
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);
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);
46 DeclareGetClassType();
47 SupportToDuplicateObjectWithoutCreateNewObject(CBackendGroupNorm<T>, *
this);
52 int64_t m_i64GroupCount;