FLImaging 6.5.16.1
BackendLayerNorm.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 CBackendLayerNorm : public CBackendBase<T>
19 {
20
21 public:
22 CBackendLayerNorm();
23 CBackendLayerNorm(const CBackendLayerNorm<T>& bbn);
24 virtual ~CBackendLayerNorm();
25
26 virtual const CResult SetEpsilon(T tEpsilon);
27 virtual const CResult UseAffine(bool bAffine);
28 virtual const CResult UseBias(bool bBias);
29 virtual const CResult SetNormalizeShape(const std::vector<int64_t>& vtNormalizeShape);
30 virtual T GetEpsilon();
31 virtual bool IsAffineUsed();
32 virtual bool IsBiasUsed();
33
34 virtual const CResult Forward(CTensor<T>* pTsrX, CTensor<T>* pTsrWeight, CTensor<T>* pTsrBias, CTensor<T>* pTsrY, CTensor<T>* pTsrVarBuffer, CTensor<T>* pTsrMeanBuffer, bool bTrainingModeEnabled);
35 virtual const CResult Derivative(CTensor<T>* pTsrX, CTensor<T>* pTsrWeight, CTensor<T>* pTsrBias, CTensor<T>* pTsrVarBuffer, CTensor<T>* pTsrMeanBuffer, CTensor<T>* pTsrDy, CTensor<T>* pTsrDx, CTensor<T>* pTsrDw, CTensor<T>* pTsrDb, bool bTrainingModeEnabled, bool bAddGradient, bool bWeightAddGradient, bool bBiasAddGradient, CTensor<T>* pTsrAddGradientTemp = nullptr, CTensor<T>* pTsrWeightAddGradientTemp = nullptr, CTensor<T>* pTsrBiasAddGradientTemp = nullptr);
36
37 protected:
38 virtual const CResult LayerNorm_CUDA(CTensor<T>* pTsrX, CTensor<T>* pTsrWeight, CTensor<T>* pTsrBias, CTensor<T>* pTsrY, CTensor<T>* pTsrVarBuffer, CTensor<T>* pTsrMeanBuffer, bool bTrainingModeEnabled);
39 virtual const CResult LayerNorm_CPU(CTensor<T>* pTsrX, CTensor<T>* pTsrWeight, CTensor<T>* pTsrBias, CTensor<T>* pTsrY, CTensor<T>* pTsrVarBuffer, CTensor<T>* pTsrMeanBuffer, bool bTrainingModeEnabled);
40 virtual const CResult Derivative_CUDA(CTensor<T>* pTsrX, CTensor<T>* pTsrWeight, CTensor<T>* pTsrBias,CTensor<T>* pTsrVarBuffer, CTensor<T>* pTsrMeanBuffer, CTensor<T>* pTsrDy, CTensor<T>* pTsrDx, CTensor<T>* pTsrDw, CTensor<T>* pTsrDb, bool bTrainingModeEnabled, bool bAddGradient);
41 virtual const CResult Derivative_CPU(CTensor<T>* pTsrX, CTensor<T>* pTsrWeight, CTensor<T>* pTsrBias, CTensor<T>* pTsrVarBuffer, CTensor<T>* pTsrMeanBuffer, CTensor<T>* pTsrDy, CTensor<T>* pTsrDx, CTensor<T>* pTsrDw, CTensor<T>* pTsrDb, bool bTrainingModeEnabled);
42
43 DeclareGetClassType();
44 SupportToDuplicateObjectWithoutCreateNewObject(CBackendLayerNorm<T>, *this);
45
46 protected:
47 T m_tEpsilon;
48 bool m_bAffine;
49 bool m_bBias;
50 std::vector<int64_t>& m_vtNormalizeShape;
51 };
52 }
53}
54
55#endif