FLImaging 6.5.16.1
BackendBatchNorm2D.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 #ifdef CUDNN_MODE
12 template<typename T>
13 class CCuda_ComputationalGraphBatchNorm2D_Cudnn;
14 #endif
15
16 template <typename T>
17 class FL_EXPORT CTensor;
18
19 template <typename T>
20 class FL_EXPORT CBackendBase;
21
22 template <typename T>
23 class FL_EXPORT CBackendBatchNorm2D : public CBackendBase<T>
24 {
25
26 public:
27 CBackendBatchNorm2D();
28 CBackendBatchNorm2D(const CBackendBatchNorm2D<T>& bbn);
29 virtual ~CBackendBatchNorm2D();
30
31 virtual const CResult SetEpsilon(T tEpsilon);
32 virtual const CResult SetMomentum(T tMomentum);
33 virtual const CResult UseAffine(bool bAffine);
34 virtual T GetEpsilon();
35 virtual T GetMomentum();
36 virtual bool IsAffineUsed();
37
38 virtual const CResult Forward(CTensor<T>* pTsrX, CTensor<T>* pTsrWeight, CTensor<T>* pTsrBias, CTensor<T>* pTsrY, CTensor<T>* pTsrVarBuffer, CTensor<T>* pTsrMeanBuffer, CTensor<T>* pTsrInferVar, CTensor<T>* pTsrInferMean, bool bTrainingModeEnabled);
39 virtual const CResult Derivative(CTensor<T>* pTsrX, CTensor<T>* pTsrWeight, CTensor<T>* pTsrBias,
40 CTensor<T>* pTsrVarBuffer, CTensor<T>* pTsrMeanBuffer, CTensor<T>* pTsrInferVar, CTensor<T>* pTsrInferMean,
41 CTensor<T>* pTsrDy, CTensor<T>* pTsrDx, CTensor<T>* pTsrDw, CTensor<T>* pTsrDb, bool bTrainingModeEnabled,
42 bool bAddGradient, bool bWeightAddGradient, bool bBiasAddGradient, CTensor<T>* pTsrAddGradientTemp = nullptr, CTensor<T>* pTsrWeightAddGradientTemp = nullptr, CTensor<T>* pTsrBiasAddGradientTemp = nullptr);
43
44 protected:
45 virtual const CResult BatchNorm2D_CUDA(CTensor<T>* pTsrX, CTensor<T>* pTsrWeight, CTensor<T>* pTsrBias, CTensor<T>* pTsrY, CTensor<T>* pTsrVarBuffer, CTensor<T>* pTsrMeanBuffer, CTensor<T>* pTsrInferVar, CTensor<T>* pTsrInferMean, bool bTrainingModeEnabled);
46 virtual const CResult BatchNorm2D_CPU(CTensor<T>* pTsrX, CTensor<T>* pTsrWeight, CTensor<T>* pTsrBias, CTensor<T>* pTsrY, CTensor<T>* pTsrVarBuffer, CTensor<T>* pTsrMeanBuffer, CTensor<T>* pTsrInferVar, CTensor<T>* pTsrInferMean, bool bTrainingModeEnabled);
47
48 virtual const CResult Derivative_CUDA(CTensor<T>* pTsrX, CTensor<T>* pTsrWeight, CTensor<T>* pTsrBias,
49 CTensor<T>* pTsrVarBuffer, CTensor<T>* pTsrMeanBuffer, CTensor<T>* pTsrInferVar, CTensor<T>* pTsrInferMean,
50 CTensor<T>* pTsrDy, CTensor<T>* pTsrDx, CTensor<T>* pTsrDw, CTensor<T>* pTsrDb, bool bTrainingModeEnabled, bool bAddGradient, bool bWeightAddGradient, bool bBiasAddGradient);
51 virtual const CResult Derivative_CPU(CTensor<T>* pTsrX, CTensor<T>* pTsrWeight, CTensor<T>* pTsrBias,
52 CTensor<T>* pTsrVarBuffer, CTensor<T>* pTsrMeanBuffer, CTensor<T>* pTsrInferVar, CTensor<T>* pTsrInferMean,
53 CTensor<T>* pTsrDy, CTensor<T>* pTsrDx, CTensor<T>* pTsrDw, CTensor<T>* pTsrDb, bool bTrainingModeEnabled);
54
55
56 DeclareGetClassType();
57 SupportToDuplicateObjectWithoutCreateNewObject(CBackendBatchNorm2D<T>, *this);
58
59 protected:
60 T m_tEpsilon;
61 T m_tMomentum;
62 bool m_bAffine;
63
64 #ifdef CUDNN_MODE
65 CCuda_ComputationalGraphBatchNorm2D_Cudnn<T>* m_pCudnn;
66 #endif
67 };
68 }
69}
70
71#endif