FLImaging 7.8.25.3
Optimizer.h
1#pragma once
2
3#if _MSC_VER >= 1900 && defined(_M_X64)
4
5#include "DefinitionsAI.h"
6#include "Tensor.h"
7
8namespace FLImaging
9{
10 namespace AI
11 {
12 template <typename T>
13 class CInternalOptimizerBase;
14
15 template <typename T>
16 class CComputationalGraph;
17
18 template <typename T>
19 class CComputationalGraphPlaceholder;
20
21 template <typename T>
22 class CComputationalGraphAugmentationBase;
23
24 template <typename T>
25 class CTensor;
26
27 template <typename T>
28 class CLearningRateSchedulerBase;
29
30 template <typename T>
31 class CClassEqualizerBase;
32
33 template <typename T>
34 class CValidatorBase;
35
36 template <typename T>
37 class CInternalOptimizerSpecBase;
38
39 template <typename T>
40 class FL_EXPORT COptimizer : public CAlgorithmAIBase
41 {
42 public:
43 COptimizer();
44 COptimizer(const COptimizer<T>& otmz);
45 COptimizer(const COptimizer<T>* pOtmz);
46 virtual ~COptimizer();
47
48 const COptimizer<T>& operator=(const COptimizer<T>& otmz);
49
50 virtual const CResult Clear();
51 virtual const CResult ClearMemory();
52 virtual const CResult ClearHistories();
53
54 virtual const CResult Assign(const COptimizer<T>& ob);
55 virtual const CResult Assign(const COptimizer<T>* pOb);
56
57 virtual const CResult Initialize();
58 virtual const CResult InitializeBatch();
59 virtual const CResult InitializeMiniBatch();
60 virtual bool IsInitialized() const;
61
62 virtual const CResult SetFunction(CComputationalGraph<T>& cgFunction);
63 virtual const CResult SetFunction(CComputationalGraph<T>* pCgFunction);
64 virtual CComputationalGraph<T>& GetFunction();
65
66 virtual const CResult SetDeviceIndex(int32_t i32DeviceIndex);
67 virtual const CResult SetDeviceIndex(const std::vector<int32_t>& vctDeviceIndices);
68 virtual const CResult SetDeviceIndex(const std::vector<uint32_t>& vctDeviceIndices);
69 virtual const CResult SetDeviceIndex(const Base::CFLArray<int32_t>& flaDeviceIndices);
70 virtual const CResult SetDeviceIndex(const Base::CFLArray<uint32_t>& flaDeviceIndices);
71 virtual const std::vector<int32_t>& GetDeviceIndex() const;
72 virtual const CResult ResetDeviceIndex();
73
74 virtual const CResult SetInternalOptimizerSpec(CInternalOptimizerSpecBase<T>* pInternalOptimizerSpec);
75 virtual const CInternalOptimizerSpecBase<T>* GetInternalOptimizerSpec() const;
76
77 virtual const CResult SetLearningRateScheduler(CLearningRateSchedulerBase<T>& lrScheduler);
78 virtual const CResult SetLearningRateScheduler(CLearningRateSchedulerBase<T>* pLrScheduler);
79 virtual const CLearningRateSchedulerBase<T>* GetLearningRateScheduler() const;
80
81 virtual const CResult EnableClassEqualization(bool bEnable);
82 virtual bool IsClassEqualizationEnabled() const;
83
84 virtual const CResult SetClassEqualizer(CClassEqualizerBase<T>& ce);
85 virtual const CResult SetClassEqualizer(CClassEqualizerBase<T>* pCe);
86 virtual const CClassEqualizerBase<T>* GetClassEqualizer() const;
87
88 virtual const CResult SetValidator(CValidatorBase<T>& validator);
89 virtual const CResult SetValidator(CValidatorBase<T>* pValidator);
90 virtual const CValidatorBase<T>* GetValidator() const;
91
92 virtual const std::vector<int64_t>& GetValidationIndices() const;
93
94 virtual const CResult SetLearningRateSchedulerMode(ELearningRateSchedulerMode eLrsMode = ELearningRateSchedulerMode_Epoch);
95 virtual ELearningRateSchedulerMode GetLearningRateSchedulerMode() const;
96
97 virtual const CResult ReducedWeightGradients();
98 virtual const CResult PropagateWeights();
99
100 virtual const CResult ResetDerivatives();
101
102 virtual const CResult EnableResetDerivatives(bool bResetDerivatives);
103 virtual bool IsResetDerivativesEnabled() const;
104
105 virtual int64_t GetTotalIteration() const;
106 virtual int64_t GetSubdivisionCount() const;
107 virtual int64_t GetMiniBatchSizePerSubdivision() const;
108 virtual int64_t GetTotalBatchSize() const;
109 virtual int64_t GetActualTotalBatchSize() const;
110 virtual int64_t GetValidationTotalIteration() const;
111 virtual int64_t GetCurrentEpoch() const;
112
113 virtual const CResult Fit(T* pClippingThreshold = nullptr, int32_t* pI32IterationFeedback = nullptr, int32_t* pI32CumulativeIterationFeedback = nullptr, Base::CFLArray<int32_t>* pFlaSubdivisionFeedback = nullptr, bool* pBStopImmediately = nullptr, int64_t* pI64MeanTimePerMiniBatch = nullptr, int64_t* pI64LastTimeOfMiniBatch = nullptr);
114 virtual T Validate(Base::CFLArray<int32_t>* pFlaIteration = nullptr);
115 virtual const CTensor<T>& GetResult() const;
116
117 virtual const std::vector<T>& GetLearningResultAccuracyHistory() const;
118 virtual T GetLearningResultLastAccuracyValue() const;
119
120 virtual const Base::CFLArray<uint32_t> GetInvolvedDeviceIndices() const;
121 virtual const CInternalOptimizerBase<T>* GetInternalOptimizer() const;
122
123 virtual const CResult SetSubdivisionMultiplier(int64_t i64SubdivisionMultiplier = 1);
124 virtual int64_t GetSubdivisionMultiplier() const;
125
126 virtual const CResult SetSharedRandomSeed(const std::pair<CComputationalGraph<T>*, CComputationalGraph<T>*>& prSharedRandomSeed);
127 virtual const CResult SetSharedRandomSeed(const std::pair<CComputationalGraph<T>*, CComputationalGraph<T>*>* pPrSharedRandomSeed);
128 virtual const CResult SetSharedRandomSeed(const std::vector<std::pair<CComputationalGraph<T>*, CComputationalGraph<T>*>>& vctSharedRandomSeed);
129 virtual const CResult SetSharedRandomSeed(const std::vector<std::pair<CComputationalGraph<T>*, CComputationalGraph<T>*>>* pVctSharedRandomSeed);
130 virtual const std::vector<std::pair<CComputationalGraph<T>*, CComputationalGraph<T>*>>& GetSharedRandomSeed(int64_t i64DeviceIndex) const;
131
132 virtual const CResult SetMemoryLimitRatio(double f64MemoryLimitRatio = 1.);
133 virtual double GetMemoryLimitRatio() const;
134
135 protected:
136 virtual void Throw(const CResult& res, const wchar_t* pWcsExtraMessage = nullptr) const override;
137 virtual const CResult TerminateMiniBatch();
138 virtual const CResult InitializeFit();
139 virtual const CResult TerminateFit();
140 virtual int64_t GetRemainingIteration() const;
141 virtual const CResult TerminateCurrentIteration();
142 virtual int64_t GetActualMiniBatchSize() const;
143 virtual const CResult CopyBatchParams(bool bDifferent);
144 virtual const CResult ConvertInternalOptimizerSpecToOptimizer();
145 virtual const CResult SynchronizeValueAttribute();
146 virtual const CResult UpdateValidationHistory();
147
148 protected:
149 std::vector<int32_t>& m_vctDeviceIndices;
150 std::vector<int32_t>& m_vctActiveDeviceIndices;
151 std::vector<int32_t>& m_vctDeviceInUse;
152 bool m_bGPUDevice;
153 double m_f64MemoryLimitRatio;
154
155 CInternalOptimizerSpecBase<T>* m_pInternalOptimizerSpec;
156 std::vector<CInternalOptimizerBase<T>*>& m_vctOptimizer;
157 std::vector<CValidatorBase<T>*>& m_vctValidator;
158 CInternalOptimizerBase<T>* m_pObBaseOptimizer;
159
160 CComputationalGraph<T>* m_pCgFunction;
161
162 CLearningRateSchedulerBase<T>* m_pLrScheduler;
163 CClassEqualizerBase<T>* m_pClassEqualizer;
164 bool m_bClassEqualization;
165 CValidatorBase<T>* m_pValidator;
166 ELearningRateSchedulerMode m_eLrsMode;
167
168 std::vector<int64_t>& m_vctLearnOrders;
169 std::vector<int64_t>& m_vctValidationOrders;
170 int64_t m_i64CurrentIteration;
171 int64_t m_i64TotalIteration;
172 int64_t m_i64TotalIterationPerGPU;
173 int64_t m_i64Subdivision;
174 int64_t m_i64SubMiniBatchSize;
175 int64_t m_i64ActualMiniBatchSize;
176 int64_t m_i64TotalBatchSize;
177 int64_t m_i64ValidationTotalIteration;
178 int64_t m_i64CurrentEpoch;
179
180 CTensor<T> m_tsrResult;
181 int64_t m_i64ResultCount;
182
183 T m_tLearningRate;
184
185 bool m_bInitialized;
186 bool m_bResetDerivatives;
187
188 bool m_bDifferent;
189 int64_t m_i64PrevInputSize;
190 int64_t m_i64PrevPlaceholderSize;
191 std::vector<std::tuple<ENodeType, EDataType, EValueAttribute, ENodeOperator, std::vector<int64_t>>>& m_vctPrevInputInfo;
192 std::vector<std::vector<int64_t>>& m_vctPrevPlaceholderShape;
193
194 int32_t m_i32DeviceCount;
195 std::vector<T>& m_vctLearnBatchWeights;
196 std::vector<T>& m_vctValidationBatchWeights;
197 std::vector<T>& m_vctValidationHistory;
198
199 int64_t m_i64SubdivisionMultiplier;
200
201 std::vector<std::vector<std::pair<CComputationalGraph<T>*, CComputationalGraph<T>*>>>& m_vct2SharedRandomSeed;
202 private:
203 template<typename T>
204 friend class CValidatorBase;
205
206 template<typename T>
207 friend class CValidatorForClassifier;
208
209 template<typename T>
210 friend class CValidatorForSemanticSegmentation;
211 };
212 }
213}
214
215#endif
Processing unit AI class required by algorithm.
Definition AlgorithmAIBase.h:27
Definition AlgorithmAIBase.h:18
@ Assign
Set the value of CGUIPropertyItemView3DFigure to the specified figure.
Definition DefinitionsGUIView3D.h:3531
@ Clear
Clear all the figure objects.
Definition DefinitionsGUI.h:5083