AIfES 2  2.0.0
aiopti_adam.h
Go to the documentation of this file.
1 
48 #ifndef AIOPTI_ADAM
49 #define AIOPTI_ADAM
50 
51 #include "core/aifes_core.h"
52 
53 typedef struct aiopti_adam aiopti_adam_t;
59 struct aiopti_adam {
68  void *beta1;
69  void *beta2;
70  void *eps;
72 
78  void *beta1t;
79  void *beta2t;
82  void *lrt;
84 
89 
97  void (*multiply)(const aitensor_t *a, const aitensor_t *b, aitensor_t *result);
98 
106  void (*divide)(const aitensor_t *a, const aitensor_t *b, aitensor_t *result);
107 
115  void (*tensor_add)(const aitensor_t *a, const aitensor_t *b, aitensor_t *result);
116 
124  void (*tensor_sub)(const aitensor_t *a, const aitensor_t *b, aitensor_t *result);
125 
133  void (*scalar_mul)(const void *scalar, const aitensor_t *a, aitensor_t *result);
134 
142  void (*scalar_add)(const void *scalar, const aitensor_t *a, aitensor_t *result);
143 
151  void (*sqrt)(const aitensor_t *x, aitensor_t *result);
152 
160  void (*zero_tensor)(aitensor_t *tensor);
161 
163 };
164 
170 extern const aicore_optitype_t *aiopti_adam_type;
171 
180 };
181 
192 
205 uint32_t aiopti_adam_sizeof_optimem(aiopti_t *self, const aitensor_t *params);
206 
227 void aiopti_adam_init_optimem(aiopti_t *self, const aitensor_t *params, const aitensor_t *gradients, void *optimem);
228 
244 
283 void aiopti_adam_update_params(aiopti_t *self, aitensor_t *params, const aitensor_t *gradients, void *optimem);
284 
285 #ifdef AIDEBUG_PRINT_MODULE_SPECS
291 void aiopti_adam_print_specs(const aiopti_t *self, int (*print)(const char *format, ...));
292 #endif // AIDEBUG_PRINT_MODULE_SPECS
293 
294 #endif // AIOPTI_ADAM
295 
AIfES 2 core interface.
void aiopti_adam_print_specs(const aiopti_t *self, int(*print)(const char *format,...))
Print the optimizer specification.
void aiopti_adam_update_params(aiopti_t *self, aitensor_t *params, const aitensor_t *gradients, void *optimem)
Update the given parameter tensor with respect to the gradients.
void aiopti_adam_init_optimem(aiopti_t *self, const aitensor_t *params, const aitensor_t *gradients, void *optimem)
Initialization of the optimization memory buffer.
void aiopti_adam_zero_gradients(aiopti_t *self, aitensor_t *gradients)
Set the gradients to zero.
uint32_t aiopti_adam_sizeof_optimem(aiopti_t *self, const aitensor_t *params)
Calculates the required memory for the optimization step.
const aicore_optitype_t * aiopti_adam_type
Adam optimizer type.
aiopti_t * aiopti_adam(aiopti_adam_t *opti)
Initialize the given Adam optimizer.
Type indicator of the optimizer to check for the optimizer type.
Definition: aifes_core.h:159
Struct for the momentum tensors of an Adam optimizer.
Definition: aiopti_adam.h:177
aitensor_t v
Second momentum vector.
Definition: aiopti_adam.h:179
aitensor_t m
First momentum vector.
Definition: aiopti_adam.h:178
General Adam optimizer struct.
Definition: aiopti_adam.h:59
void(* scalar_mul)(const void *scalar, const aitensor_t *a, aitensor_t *result)
Required math function: Multiplication of a scalar with a tensor.
Definition: aiopti_adam.h:133
void * one_minus_beta1
aiscalar: Auxiliary variable to calculate
Definition: aiopti_adam.h:80
void(* multiply)(const aitensor_t *a, const aitensor_t *b, aitensor_t *result)
Required math function: Element wise tensor multiplication.
Definition: aiopti_adam.h:97
void(* scalar_add)(const void *scalar, const aitensor_t *a, aitensor_t *result)
Required math function: Element wise addition of a scalar to a tensor.
Definition: aiopti_adam.h:142
void(* divide)(const aitensor_t *a, const aitensor_t *b, aitensor_t *result)
Required math function: Element wise tensor dividation.
Definition: aiopti_adam.h:106
void(* sqrt)(const aitensor_t *x, aitensor_t *result)
Required math function: Square root.
Definition: aiopti_adam.h:151
void(* tensor_sub)(const aitensor_t *a, const aitensor_t *b, aitensor_t *result)
Required math function: Element wise tensor subtraction.
Definition: aiopti_adam.h:124
void * eps
aiscalar: Small positive number for numerical stability (avoid dividing by 0)
Definition: aiopti_adam.h:70
void * one_minus_beta2
aiscalar: Auxiliary variable to calculate
Definition: aiopti_adam.h:81
void(* tensor_add)(const aitensor_t *a, const aitensor_t *b, aitensor_t *result)
Required math function: Element wise tensor addition.
Definition: aiopti_adam.h:115
aiopti_t base
Inherited field members from general optimizer struct.
Definition: aiopti_adam.h:60
void * beta1t
aiscalar: Auxiliary variable to calculate
Definition: aiopti_adam.h:78
void * beta2t
aiscalar: Auxiliary variable to calculate
Definition: aiopti_adam.h:79
void * lrt
aiscalar: Auxiliary variable to calculate
Definition: aiopti_adam.h:82
void * beta2
aiscalar: Exponential decay rate for the second moment estimates
Definition: aiopti_adam.h:69
void(* zero_tensor)(aitensor_t *tensor)
Required math function: Sets the elements of a tensor to zero.
Definition: aiopti_adam.h:160
void * beta1
aiscalar: Exponential decay rate for the first moment estimates
Definition: aiopti_adam.h:68
AIfES optimizer interface.
Definition: aifes_core.h:413
A tensor in AIfES.
Definition: aifes_math.h:98