3#if _MSC_VER >= 1900 && defined(_M_X64)
5#include "ComputationalGraph.h"
7#include "BackendConv2D.h"
8#include "BackendFold.h"
9#include "BackendAdaptiveAvgPool2D.h"
10#include "BackendBatchNorm2D.h"
11#include "BackendReLU.h"
20 class FL_EXPORT CComputationalGraphInvolution :
public CComputationalGraph<T>
23 CComputationalGraphInvolution();
26 CComputationalGraphInvolution(
const CComputationalGraphInvolution<T>& cg);
47 CComputationalGraphInvolution(
const CComputationalBase<T>& cbOperand1,
const CTensor<T>& tsrKernel1,
const CTensor<T>& tsrKernel2, int64_t i64KernelX = 3, int64_t i64KernelY = 3, int64_t i64StrideX = 1, int64_t i64StrideY = 1, int64_t i64GroupCount = 1, T tEpsilon = (T)FL_EPSILON_FLOAT, T tMomentum = (T).1,
bool bAffine =
true);
48 virtual ~CComputationalGraphInvolution();
50 virtual CTensor<T>& Forward()
override;
51 virtual CTensor<T>* Backward()
override;
52 virtual CComputationalBase<T>* Clone()
const override;
54 virtual const std::vector<int64_t>& GetEstimatedShape(
bool bRecursive =
true)
const override;
55 virtual const CResult PrintNodeParamInfo()
const override;
57 virtual const CResult GetBinaryData(Base::CFLData& fldBinary,
bool bSuperClass =
false, int32_t i32Version = -1,
bool bDumpMode =
false)
const override;
58 virtual const CResult GetBinaryData(Base::CFLData* pFldBinary,
bool bSuperClass =
false, int32_t i32Version = -1,
bool bDumpMode =
false)
const override;
60 virtual const CResult SetBinaryData(
const Base::CFLData& fldBinary, int64_t* pI64Offset =
nullptr)
override;
61 virtual const CResult SetBinaryData(
const Base::CFLData* pFldBinary, int64_t* pI64Offset =
nullptr)
override;
63 virtual int64_t GetRequiredTemporaryMemory(
bool bTraining =
false,
bool bRecursively =
true, int64_t i64BatchSize = 1, int64_t i64MemoryIndex = 0)
const override;
64 virtual int64_t GetRequiredDedicatedMemory(
bool bTraining =
false,
bool bRecursively =
true, int64_t i64BatchSize = 1)
const override;
66 DeclareGetClassType();
67 SupportToDuplicateObjectWithoutCreateNewObject(CComputationalGraphInvolution, *
this);
70 const CResult CheckShape();
71 const CResult GetCommonValues(std::vector<int64_t>& vctPooledShape, std::vector<int64_t>& vctReduceOutputShape, std::vector<int64_t>& vctSpatialOutputShape,
bool& bPoolSkip)
const;
72 const CResult InvolutionMainForward(
const CTensor<T>* pTsrOperand,
const CTensor<T>* pTsrKernel, CTensor<T>* pTsrResult,
const std::vector<int64_t> vctResultShape);
73 const CResult InvolutionMainBackwardImage(
const CTensor<T>* pTsrDy,
const CTensor<T>* pTsrW, CTensor<T>* pTsrDx,
const std::vector<int64_t> vctXShape,
bool bAddGradient, CTensor<T>* pTsrDerivativeTemp);
74 const CResult InvolutionMainBackwardKernel(
const CTensor<T>* pTsrDy,
const CTensor<T>* pTsrX, CTensor<T>* pTsrDw, std::vector<int64_t> vctWShape);
80 int64_t m_i64GroupCount;
85 CTensor<T> m_tsrPoolVal;
86 CTensor<T> m_tsrKernelBuffer;
87 CTensor<T> m_tsrReduceVal;
88 CTensor<T> m_tsrBNVarienceBuffer;
89 CTensor<T> m_tsrBNMeanBuffer;
90 CTensor<T> m_tsrBNSaveWeightGradient;
91 CTensor<T> m_tsrBNSaveBiasGradient;
92 CTensor<T> m_tsrReLUVal;
93 CTensor<T> m_tsrMulKernel;
95 CBackendAdaptiveAvgPool2D<T> m_backendAdaptiveAvgPool2D;
96 CBackendConv2D<T> m_backendConv2DReduce;
97 CBackendConv2D<T> m_backendConv2DSpatial;
98 CBackendBatchNorm2D<T> m_backendBatchNorm2D;
99 CBackendReLU<T> m_backendReLU;
102 DeclareGetSignletonObject(CComputationalGraphInvolution);
105 #define CCGFInvolution(...) (*(new CComputationalGraphInvolution<float>(__VA_ARGS__)))
106 #define CCGDInvolution(...) (*(new CComputationalGraphInvolution<double>(__VA_ARGS__)))
108 #define CCGTInvolution(T, ...) (*(new CComputationalGraphInvolution<T>(__VA_ARGS__)))