1#undef __ae2f_MACRO_GENERATED
2#define __ae2f_MACRO_GENERATED 1
5#include <ae2f/Ann/Slp.h>
6#undef __ae2f_MACRO_GENERATED
7#define __ae2f_MACRO_GENERATED 1
13#undef __ae2f_MACRO_GENERATED
14#define __ae2f_MACRO_GENERATED 1
16#undef __ae2f_MACRO_GENERATED
17#define __ae2f_MACRO_GENERATED 1
19#define __ae2f_AnnSlpDel free
20#define __ae2f_AnnSlpDel_C free
23#define __ae2f_AnnSlpInitInpSz_imp(
35)\
36{
39 + ((prm_weight_opt) ? 0
: (prm_inc) * (prm_outc)) * sizeof(ae2f_float_t)
40 + ((prm_bias_opt) ? 0
: (prm_outc)) * sizeof(ae2f_float_t)
41 + ((prm_cache_opt) ? 0
: (prm_outc) * sizeof(ae2f_float_t))
42 + ((prm_cacheact_opt) ? 0
: (prm_outc) * sizeof(ae2f_float_t))
44}
46#define __ae2f_AnnSlpInit_imp(
56)\
57{
61 reg_init, 0
, 0
, 0
, 0
, prm_inc, prm_outc
63 (rret_this).m_inc = (prm_inc);
65 (rret_this).m_inc = (prm_incmax_opt);
68 (rret_this).m_outc = (prm_outc); \
69}
72#define __ae2f_AnnSlpInit_V(
83)\
84{
85 if((pret_err_opt) && *(pret_err_opt))
97 (pret_initsz_opt) && (*(pret_initsz_opt) = v_reg_init + prm_offset_opt);
99}
101#define __ae2f_AnnSlpInit(
112)\
113{
121}
124#undef __ae2f_AnnSlpInitInpSz_imp
125#define __ae2f_AnnSlpInitInpSz_imp(...)
126 typedef char NO_ae2f_NEED_CLASS[-1
]
128#undef __ae2f_AnnSlpInit_imp
129#define __ae2f_AnnSlpInit_imp(...)
130 typedef char NO_ae2f_NEED_CLASS[-1
]
132#undef __ae2f_AnnSlpInit
133#define __ae2f_AnnSlpInit(...)
134 typedef char NO_ae2f_NEED_CLASS[-1
]
142#define __ae2f_AnnSlpMkVerbose_imp(
160 prm_learningrate_bias \
161)\
162{
173 , calloc((reg_mk).m_stack + (prm_offset_opt) + (prm_extra_opt), 1
)))
175 (reg_mk).m_alloccount = 0
;
176 (reg_mk).m_fieldptr.b = (reg_mk).m_ptr + 1
;
182 if(prop_weight_opt) {
183 (reg_mk).m_ptr->m_weight = (prop_weight_opt);
185 (reg_mk).m_ptr->m_weight = ((reg_mk).m_fieldptr.a);
186 (reg_mk).m_fieldptr.a += (prm_inc) * (prm_outc);
190 (reg_mk).m_ptr->m_bias = (prop_bias_opt);
192 (reg_mk).m_ptr->m_bias = (reg_mk).m_fieldptr.a;
193 (reg_mk).m_fieldptr.a += (prm_outc);
197 (reg_mk).m_ptr->m_cachedelta = (prop_cache_opt);
199 (reg_mk).m_ptr->m_cachedelta = (reg_mk).m_fieldptr.a;
200 (reg_mk).m_fieldptr.a += (prm_outc);
203 if(prop_cacheact_opt) {
204 (reg_mk).m_ptr->m_cacheact = (prop_cacheact_opt);
206 (reg_mk).m_ptr->m_cacheact = (reg_mk).m_fieldptr.a;
211 , reg_mk.m_ptr->m_Slp[0
]
217 (reg_mk).m_ptr[0
].m_act = fn_act;
218 (reg_mk).m_ptr[0
].m_actderiv = fn_actderiv;
219 (reg_mk).m_ptr[0
].m_lossderiv = fn_lossderiv;
220 (reg_mk).m_ptr[0
].m_learningrate = prm_learningrate;
221 (reg_mk).m_ptr[0
].m_learningrate_bias = prm_learningrate_bias;
223}
225#define __ae2f_AnnSlpMk(
244)\
245{
246 if((err_opt) && *(err_opt))
254 , weight_opt, bias_opt, cache_opt
256 , outc, offset_opt, extra_opt
257 , act, actderiv, lossderiv
258 , learningrate, learningrate_bias
261 (err_opt) && !(*(slp) = v_mk.m_ptr) &&
264}
266#undef __ae2f_AnnSlpMk_imp
267#define __ae2f_AnnSlpMk_imp(...)
268 typedef char NO_ae2f_NEED_CLASS[-1
]
270#undef __ae2f_AnnSlpMk
271#define __ae2f_AnnSlpMk(...)
272 typedef char NO_ae2f_NEED_CLASS[-1
]
278#define __ae2f_AnnSlpPredict_imp(
291)\
292{
293 for((reg_predict).m_i = (prmreg_slp).m_outc; (reg_predict).m_i--; )
295 (reg_predict).m_ret = 0
;
297 for((reg_predict).m_j = (prmreg_slp).m_inc; (reg_predict).m_j--; ) {
299 += (pprm_in)[(reg_predict).m_j]
300 * ((pprm_weight) + (reg_predict).m_i * (prmreg_slp).m_inc)[(reg_predict).m_j];
303 (ptr_outcache)[(reg_predict).m_i] = (reg_predict).m_ret + (pprm_bias)[(reg_predict).m_i];
306 for((reg_predict).m_i = (prmreg_slp).m_outc; (reg_predict).m_i--;) {
307 fn_act(&(ret)[(reg_predict).m_i], (ptr_outcache), (reg_predict).m_i, (prmreg_slp).m_outc);
309}
311#define __ae2f_AnnSlpPredict(
324)\
325{
326 if((err_opt) && *(err_opt))
328 else unless((_this) && (prm_in) && (out) && (weight) && (bias))
331 ae2f_reg ae2f_AnnSlpPredictREG_t v_predict;
336 , *(_this), (prm_in), out, out_cache
337 , weight, bias, act_opt
342 , *(_this), (prm_in), out, out_cache
347}
350#define __ae2f_AnnSlpPredict_C(
359)\
360{
365 err_opt, (_this)->m_Slp
367 , (_this)->m_cacheact
373}
375#undef __ae2f_AnnSlpPredict_C
376#define __ae2f_AnnSlpPredict_C(...)
377 typedef char NO_ae2f_NEED_CLASS[-1
]
381#define __ae2f_AnnSlpFollowOneW_imp(
394)\
395{
396 ((weight) + (inp_sz) * (out_idx))[(inp_idx)]
397 -= (delta) * (inp) * (learningrate); \
398}
400#define __ae2f_AnnSlpFollowOneB_imp(
407 prm_learningrate_bias \
408){ (rret_bias) -= (prm_delta) * (prm_learningrate_bias); }
410#define __ae2f_AnnSlpFollowOne_imp(
420 prm_learningrate_bias,
424)\
425{
426 for((reg_follow).m_j = (prm_isz); (reg_follow).m_j--; ) {
427 ((ptr_weight) + (prm_isz) * (prm_oidx))[(reg_follow).m_j]
428 -= (pprm_delta) * (pprm_in)[(reg_follow).m_j] * (prm_learningrate);
431 (rret_bias) -= (pprm_delta) * (prm_learningrate_bias); \
432}
435#define __ae2f_AnnSlpFollow_imp(
447 prm_learningrate_bias \
448)\
449{
450 for((reg_follow).m_i = (prm_slp).m_outc; (reg_follow).m_i--; ) {
454 , (pprm_delta)[(reg_follow).m_i]
456 , prm_learningrate, prm_learningrate_bias
459 , (ptr_bias)[(reg_follow).m_i]
462}
464#define __ae2f_AnnSlpFollow(
477)\
478{
479 if((reterr_opt) && *(reterr_opt))
481 else if(learningrate == 0
&& learningrate_bias == 0
)
483 else unless((_this) && (prm_in) && (delta) && (weight) && (bias))
486 ae2f_reg ae2f_AnnSlpFollow_t v_follow;
497}
500#define __ae2f_AnnSlpFollow_C(
509){
514 reterr_opt, _this->m_Slp
518 , (_this)->m_learningrate, (_this)->m_learningrate_bias
521}
523#undef __ae2f_AnnSlpFollow_C
524#define __ae2f_AnnSlpFollow_C(...)
525 typedef char NO_ae2f_NEED_CLASS[-1
]
528#define __ae2f_AnnSlpFetchDeltaOne_imp(
542)\
543{
544 fn_actderiv(ptr_tmp0, prm_out, prm_oidx, prm_osz);
545 fn_lossderiv(ptr_tmp1, prm_out, prm_out_desired, prm_oidx, prm_osz);
547 (rret) = *(ptr_tmp0) * *(ptr_tmp1); \
548}
550#define __ae2f_AnnSlpFetchDeltaVerbose_imp(
563)\
564{
565 for((reg_delta).m_i = (prm_slp).m_outc; (reg_delta).m_i--; )
578 , (reg_delta).m_i, (prm_slp).m_outc
581 (pret_delta)[(reg_delta).m_i]
582 = (ram_delta).m_tmp * (ram_delta).m_tmp1;
584}
586#define __ae2f_AnnSlpFetchDelta_imp(
598)\
599{
603 , pprm_out, pprm_out_desired
604 , fn_actderiv, fn_lossderiv
607}
609#define __ae2f_AnnSlpFetchDelta(
621) \
622{
625 else unless((slp) && (out) && (out_desired) && (retdelta))
631 ae2f_AnnSlpFetchDeltaRAM_t v_ram_delta;
632 ae2f_reg ae2f_AnnSlpFetchDeltaREG_t v_reg_delta;
657}
660#define __ae2f_AnnSlpFetchDelta_C(
670)\
671{
674 else unless((slp) && (out) && (out_desired) && (retdelta))
676 else unless((slp)->m_lossderiv)
679 ae2f_AnnSlpFetchDeltaRAM_t v_ram_delta;
680 ae2f_AnnSlpFetchDeltaREG_t v_reg_delta;
682 if((slp)->m_actderiv) {
684 v_ram_delta, v_reg_delta, (slp)->m_Slp[0
]
686 , (slp)->m_actderiv, (slp)->m_lossderiv
691 v_ram_delta, v_reg_delta, (slp)->m_Slp[0
]
698}
700#undef __ae2f_AnnSlpFetchDelta_C
701#define __ae2f_AnnSlpFetchDelta_C(...)
702 typedef char NO_ae2f_NEED_CLASS[-1
]
706#define __ae2f_AnnSlpFitVerbose_imp(
723 prm_learningrate_bias \
724)\
725{
727 ram_fit, reg_fit, prm_slp
728 , pprm_out, pprm_out_desired
729 , fn_actderiv, fn_lossderiv
734 reg_fit, prm_slp, pprm_inp
735 , ptr_cachedelta, ptr_weights, ptr_bias
736 , prm_learningrate, prm_learningrate_bias
738}
740#define __ae2f_AnnSlpFit_imp(
756 prm_learningrate_bias \
757)\
758{
762 , pprm_inp, pprm_out, pprm_out_desired
763 , ptr_weights, ptr_bias, ptr_cachedelta
764 , fn_actderiv, fn_lossderiv
765 , prm_learningrate, prm_learningrate_bias
767}
769#define __ae2f_AnnSlpFit(
786)\
787{
788 if((reterr_opt) && *(reterr_opt))
790 else unless((_this) && (prm_inp) && (prm_out_desired) && (weights) && (bias) && (cachedelta))
794 else if ((learningrate) == 0
&& (learningrate_bias) == 0
)
797 ae2f_AnnSlpFitRAM_t v_ram_fit;
798 ae2f_reg ae2f_AnnSlpFitREG_t v_reg_fit;
834}
837#define __ae2f_AnnSlpFit_C(
847){
860 , (_this)->m_cachedelta
861 , (_this)->m_actderiv
862 , (_this)->m_lossderiv
863 , (_this)->m_learningrate
864 , (_this)->m_learningrate_bias
867}
869#undef __ae2f_AnnSlpFit_C
870#define __ae2f_AnnSlpFit_C(...)
871 typedef char NO_ae2f_NEED_CLASS[-1
]
874#define __ae2f_AnnSlpTrainVerbose_imp(
893 prm_learningrate_bias \
894)\
895{
914 , ptr_weights, ptr_bias, ptr_cachedelta
915 , fn_actderiv, fn_lossderiv
916 , prm_learningrate, prm_learningrate_bias
918}
920#define __ae2f_AnnSlpTrain_imp(
938 prm_learningrate_bias \
939)\
940{
945 , ptr_out_cache, pprm_out_desired
946 , ptr_weights, ptr_bias, ptr_cachedelta
947 , fn_act, fn_actderiv, fn_lossderiv
948 , prm_learningrate, prm_learningrate_bias
950}
953#define __ae2f_AnnSlpTrain_C(
962)\
963{
968 err, (slp)->m_Slp, inp
973 , (slp)->m_cachedelta
977 , (slp)->m_learningrate
978 , (slp)->m_learningrate_bias
981}
983#undef __ae2f_AnnSlpTrain_C
984#define __ae2f_AnnSlpTrain_C
985 typedef char NO_ae2f_NEED_CLASS[-1
]
989#define __ae2f_AnnSlpTrain(
1007)\
1008{
1011 else unless((slp) && (inp) && (out_cache) && (out_desired) && (weights) && (bias) && (cachedelta))
1015 else if((learningrate) == 0
&& (learningrate_bias) == 0
)
1018 ae2f_reg ae2f_AnnSlpTrainREG_t v_reg_train;
1019 ae2f_AnnSlpTrainRAM_t v_ram_train;
1024 v_ram_train, v_reg_train
1025 , (*slp), inp, out_cache, out_cache
1026 , out_desired, weights, bias
1027 , cachedelta, act, actderiv, lossderiv
1028 , learningrate, learningrate_bias
1032 v_ram_train, v_reg_train
1033 , (*slp), inp, out_cache, out_cache
1034 , out_desired, weights, bias
1036 , learningrate, learningrate_bias
1043 v_ram_train, v_reg_train
1044 , (*slp), inp, out_cache, out_cache
1045 , out_desired, weights, bias
1047 , learningrate, learningrate_bias
1051 v_ram_train, v_reg_train
1052 , (*slp), inp, out_cache, out_cache
1053 , out_desired, weights, bias
1055 , learningrate, learningrate_bias
1061}
1066#undef __ae2f_MACRO_GENERATED
1068#define __ae2f_MACRO_GENERATED 0
#define ae2f_AnnActDerivFFN_PASS(r, o, i, c)
#define ae2f_AnnActFFN_PASS(r, o, i, c)
#define ae2f_structdef(key, name)
#define ae2f_reinterpret_cast(t, v)
#define unless(...)
Invokes when condition is false.
#define ae2f_extern
Suggests the existence of external variable or function, in naming of C. [non-mangling].
#define ae2f_structdef_n(key, name,...)
#define ae2f_reg
Register keyword.
#define ae2f_WhenCXX(...)
Appears when the current language is C.
#define ae2f_NONE
Literally nothing.
#define ae2f_errGlob_ALLOC_FAILED
stdlib allocating functions (malloc, calloc, realloc) has been failed.
uint8_t ae2f_err_t
Informs that this number represents the error.
#define ae2f_errGlob_PTR_IS_NULL
Failed to refer the pointer either l-value inside the function.
#define ae2f_errGlob_IMP_NOT_FOUND
Failed to find the function on preprocessor which is callable for some reason No operation has beed d...
#define __ae2f_MACRO_GENERATED
#define __ae2f_AnnMlpSz_imp(ret_sz, outc, weightc, depth, szswap, act, actderiv, deltastream, outcache, weight, bias)
#define __ae2f_AnnMlpBwd_imp(v_tmp, v_send, slp_then, retdelta_then, deltaseed, actderiv_then, inp)
delta to delta
#define __ae2f_AnnMlpHidDeltaSingle_imp(v_single, slp, weight, delta, iidx)
#define __ae2f_AnnMlpPredictStream_imp(v_predict, mlp, inp, out, sz, weight, bias, outcache, act_opt)
#define __ae2f_AnnMlpMk_imp(reg_mk, prm_depth, pprm_szvector, propptr_szswap_opt, lppfn_act_opt, lppfn_actderiv_opt, pfn_lossderiv, propptr_deltastream_opt, propptr_outcache_opt, propptr_weight_opt, propptr_bias_opt, prm_learningrate, prm_learningrate_bias, prm_offset_opt, prm_extra_opt)
Automatically allocates ae2f_AnnMlp and store its pointer at (reg_mk).m_mkbase.
#define __ae2f_AnnMlpInitWithOutSz_imp(v_mlp, v_init, depth, outsz, weightsz, szvector, szswap_opt, act, actderiv, lossderiv, deltastream, outcache, weight, bias, learningrate, learningrate_bias)
#define __ae2f_AnnMlpTrainPrimal(OPER_NEG, OPER_NONE, reterr, mlp, inp, out, out_desired)
#define __ae2f_AnnMlpFollowPrimal_imp(OPER_NEG, OPER_NONE, v_follow, mlp, inp, delta, lenv, outstream, deltacache, weight, bias, learningrate, learningrate_bias, actderiv)
#define __ae2f_AnnMlpPredictPrimal_imp(OPER_NEG, OPER_NONE, v_predict, mlp, inp, out, sz, weight, bias, outcache, act_opt)
layer must be more than 2
#define __ae2f_AnnMlpTrainAutoPrimal(OPER_NEG, OPER_NONE, reterr, mlp, inp, out_desired)
#define __ae2f_AnnMlpPredictPrimal(OPER_NEG, OPER_NONE, reterr, mlp, inp, out)
#define __ae2f_AnnMlpFollowPrimal(OPER_NEG, OPER_NONE, reterr, mlp, inp, delta)
#define __ae2f_AnnMlpTrainPrimal_imp(OPER_NEG, OPER_NONE, v_train, mlp, inp, out, out_desired, lenv, outstream, deltacache, weight, bias, learningrate, learningrate_bias, act, actderiv, lossderiv)
#define __ae2f_AnnSlpFollow_imp(reg_follow, prm_slp, pprm_in, pprm_delta, ptr_weight, ptr_bias, prm_learningrate, prm_learningrate_bias)
#define __ae2f_AnnSlpInit_imp(...)
#define __ae2f_AnnSlpFit_C(...)
#define __ae2f_AnnSlpFollow_C(...)
#define __ae2f_AnnSlpFollowOne_imp(reg_follow, pprm_in, pprm_delta, ptr_weight, prm_learningrate, prm_learningrate_bias, prm_isz, prm_oidx, rret_bias)
#define __ae2f_AnnSlpMk_imp(...)
#define __ae2f_AnnSlpFetchDelta_imp(tmp_delta, prm_slp, pprm_out, pprm_out_desired, fn_actderiv, fn_lossderiv, pret_delta)
#define __ae2f_AnnSlpTrainVerbose_imp(ram_train, reg_train, prm_slp, pprm_inp, pret_out, ptr_out_cache, pprm_out_desired, ptr_weights, ptr_bias, ptr_cachedelta, fn_act, fn_actderiv, fn_lossderiv, prm_learningrate, prm_learningrate_bias)
#define __ae2f_AnnSlpPredict(err_opt, _this, prm_in, out, out_cache, weight, bias, act_opt)
#define __ae2f_AnnSlpFitVerbose_imp(ram_fit, reg_fit, prm_slp, pprm_inp, pprm_out, pprm_out_desired, ptr_weights, ptr_bias, ptr_cachedelta, fn_actderiv, fn_lossderiv, prm_learningrate, prm_learningrate_bias)
#define __ae2f_AnnSlpInit(...)
#define __ae2f_AnnSlpFit(reterr_opt, _this, prm_inp, prm_out, prm_out_desired, weights, bias, cachedelta, actderiv_opt, lossderiv, learningrate, learningrate_bias)
#define __ae2f_AnnSlpFetchDelta_C(...)
#define __ae2f_AnnSlpDel_C
#define __ae2f_AnnSlpTrain_C
#define __ae2f_AnnSlpInit_C
#define __ae2f_AnnSlpFetchDeltaVerbose_imp(ram_delta, reg_delta, prm_slp, pprm_out, pprm_out_desired, fn_actderiv, fn_lossderiv, pret_delta)
#define __ae2f_AnnSlpFollow(reterr_opt, _this, prm_in, delta, weight, bias, learningrate, learningrate_bias)
#define __ae2f_AnnSlpPredict_imp(reg_predict, prmreg_slp, pprm_in, ret, ptr_outcache, pprm_weight, pprm_bias, fn_act)
#define __ae2f_AnnSlpTrain(err, slp, inp, out_cache, out_desired, weights, bias, cachedelta, act, actderiv, lossderiv, learningrate, learningrate_bias)
#define __ae2f_AnnSlpInitInpSz_imp(...)
#define __ae2f_AnnSlpMk(...)
#define __ae2f_AnnSlpMk_C
#define __ae2f_AnnSlpPredict_C(...)
#define ae2f_AnnSlpPredict
#define ae2f_AnnSlpFollow