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
14#undef __ae2f_MACRO_GENERATED
15#define __ae2f_MACRO_GENERATED 1
17#undef __ae2f_MACRO_GENERATED
18#define __ae2f_MACRO_GENERATED 1
21#define __ae2f_AnnSlpDel free
22#define __ae2f_AnnSlpDel_C free
25#define __ae2f_AnnSlpInitInpSz_imp(
36)\
37{
40 + ((weight_opt) ? 0
: (inc) * (outc)) * sizeof(ae2f_float_t)
41 + ((bias_opt) ? 0
: (outc)) * sizeof(ae2f_float_t)
42 + ((cache_opt) ? 0
: (outc) * sizeof(ae2f_float_t))
44}
46#define __ae2f_AnnSlpInit_imp(
56)\
57{
61 v_init, 0
, 0
, 0
, inc, outc
63 (_this).m_inc = (inc);
65 (_this).m_inc = (incmax_opt);
68 (_this).m_outc = (outc); \
69}
72#define __ae2f_AnnSlpInit(
83)\
84{
85 if((err_opt) && *(err_opt))
97 (initsz_opt) && (*(initsz_opt) = v_init + offset_opt);
99}
102#undef __ae2f_AnnSlpInitInpSz_imp
103#define __ae2f_AnnSlpInitInpSz_imp(...)
104 typedef char NO_ae2f_NEED_CLASS[-1
]
106#undef __ae2f_AnnSlpInit_imp
107#define __ae2f_AnnSlpInit_imp(...)
108 typedef char NO_ae2f_NEED_CLASS[-1
]
110#undef __ae2f_AnnSlpInit
111#define __ae2f_AnnSlpInit(...)
112 typedef char NO_ae2f_NEED_CLASS[-1
]
120#define __ae2f_AnnSlpMk_imp(
138)\
139{
143 , calloc((v_mk).m_stack + (offset_opt) + (extra_opt), 1
)))
145 (v_mk).m_alloccount = 0
;
146 (v_mk).m_fieldptr.b = (v_mk).m_ptr + 1
;
153 (v_mk).m_ptr->m_weight = (weight_opt);
155 (v_mk).m_ptr->m_weight = ((v_mk).m_fieldptr.a);
156 (v_mk).m_fieldptr.a += (inc) * (outc);
160 (v_mk).m_ptr->m_bias = (bias_opt);
162 (v_mk).m_ptr->m_bias = (v_mk).m_fieldptr.a;
163 (v_mk).m_fieldptr.a += (outc);
167 (v_mk).m_ptr->m_cache = (cache_opt);
169 (v_mk).m_ptr->m_cache = (v_mk).m_fieldptr.a;
174 , v_mk.m_ptr->m_Slp[0
]
180 (v_mk).m_ptr[0
].m_act = act;
181 (v_mk).m_ptr[0
].m_actderiv = actderiv;
182 (v_mk).m_ptr[0
].m_lossderiv = lossderiv;
183 (v_mk).m_ptr[0
].m_learningrate = learningrate;
184 (v_mk).m_ptr[0
].m_learningrate_bias = learningrate_bias;
186}
188#define __ae2f_AnnSlpMk(
207)\
208{
209 if((err_opt) && *(err_opt))
214 ae2f_AnnSlpMk_t v_mk;
217 , weight_opt, bias_opt, cache_opt
219 , outc, offset_opt, extra_opt
221 , act, actderiv, lossderiv
223 , learningrate, learningrate_bias
226 (err_opt) && !(*(slp) = v_mk.m_ptr) &&
229}
231#undef __ae2f_AnnSlpMk_imp
232#define __ae2f_AnnSlpMk_imp(...)
233 typedef char NO_ae2f_NEED_CLASS[-1
]
235#undef __ae2f_AnnSlpMk
236#define __ae2f_AnnSlpMk(...)
237 typedef char NO_ae2f_NEED_CLASS[-1
]
243#define __ae2f_AnnSlpPredictOne_imp(
255)\
256{
257 (v_predict).m_tmp = 0
;
259 for((v_predict).m_j = (isz); (v_predict).m_j--; ) {
261 += (prm_in)[(v_predict).m_j]
262 * ((weight) + (oidx) * (isz))[(v_predict).m_j];
265 act_opt((&(v_predict).m_ret), ((v_predict).m_tmp + (bias))); \
266}
268#define __ae2f_AnnSlpPredict_imp(
280)\
281{
282 for((v_predict).m_i = (_this).m_outc; (v_predict).m_i--; )
288 , (bias)[(v_predict).m_i]
294 (out)[(v_predict).m_i] = (v_predict).m_ret;
296}
298#define __ae2f_AnnSlpPredict(
310)\
311{
312 if((err_opt) && *(err_opt))
314 else unless((_this) && (prm_in) && (out) && (weight) && (bias))
317 ae2f_AnnSlpPredict_t v_predict;
322 , *(_this), (prm_in), out
323 , weight, bias, act_opt
328 , *(_this), prm_in, out
333}
336#define __ae2f_AnnSlpPredict_C(
345)\
346{
351 err_opt, (_this)->m_Slp
358}
360#undef __ae2f_AnnSlpPredict_C
361#define __ae2f_AnnSlpPredict_C(...)
362 typedef char NO_ae2f_NEED_CLASS[-1
]
366#define __ae2f_AnnSlpFollowOneW_imp(
379)\
380{
381 ((weight) + (inp_sz) * (out_idx))[(inp_idx)]
382 -= (delta) * (inp) * (learningrate); \
383}
385#define __ae2f_AnnSlpFollowOneB_imp(
393){ (r_bias) -= (delta) * (learningrate_bias); }
395#define __ae2f_AnnSlpFollowOne_imp(
409)\
410{
411 for((v_follow).m_j = 0
; (v_follow).m_j < (inp_sz); ++(v_follow).m_j) {
412 ((weight) + (inp_sz) * (out_idx))[(v_follow).m_j]
413 -= (delta) * (prm_in)[(v_follow).m_j] * (learningrate);
416 (v_bias) -= (delta) * (learningrate_bias); \
417}
420#define __ae2f_AnnSlpFollow_imp(
433)\
434{
435 for(v_follow.m_i = (_this).m_outc; (v_follow).m_i--; ) {
439 , (delta)[v_follow.m_i]
441 , learningrate, learningrate_bias
444 , (bias)[v_follow.m_i]
447}
449#define __ae2f_AnnSlpFollow(
462)\
463{
464 if((reterr_opt) && *(reterr_opt))
466 else if(learningrate == 0
&& learningrate_bias == 0
)
468 else unless((_this) && (prm_in) && (delta) && (weight) && (bias))
471 ae2f_AnnSlpFollow_t v_follow;
482}
485#define __ae2f_AnnSlpFollow_C(
494){
499 reterr_opt, _this->m_Slp
503 , (_this)->m_learningrate, (_this)->m_learningrate_bias
506}
508#undef __ae2f_AnnSlpFollow_C
509#define __ae2f_AnnSlpFollow_C(...)
510 typedef char NO_ae2f_NEED_CLASS[-1
]
513#define __ae2f_AnnSlpFetchDeltaOne_imp(
527)\
528{
529 actderiv_opt(&(v_fetchdelta_0), (out)[oidx]);
530 lossderiv((&(v_fetchdelta_1)), (out), (out_desired), (oidx), (osz));
536}
538#define __ae2f_AnnSlpFetchDelta_imp(
550)\
551{
552 for((v_delta).m_i = (slp).m_outc; (v_delta).m_i--; )
554 (v_delta).m_tmp, (v_delta).m_tmp1
556 , actderiv_opt, lossderiv
557 , (retdelta)[v_delta.m_i]
561}
563#define __ae2f_AnnSlpFetchDelta(
575) \
576{
579 else unless((slp) && (out) && (out_desired) && (retdelta))
584 else if(actderiv_opt) {
585 ae2f_AnnSlpFetchDelta_t v_delta;
594 ae2f_AnnSlpFetchDelta_t v_delta;
602}
605#define __ae2f_AnnSlpFetchDelta_C(
615)\
616{
619 else unless((slp) && (out) && (out_desired) && (retdelta))
621 else unless((slp)->m_lossderiv)
624 if((slp)->m_actderiv) {
625 ae2f_AnnSlpFetchDelta_t v_delta;
627 v_delta, (slp)->m_Slp[0
]
629 , (slp)->m_actderiv, (slp)->m_lossderiv
633 ae2f_AnnSlpFetchDelta_t v_delta;
635 v_delta, (slp)->m_Slp[0
]
637 , , (slp)->m_lossderiv
642}
644#undef __ae2f_AnnSlpFetchDelta_C
645#define __ae2f_AnnSlpFetchDelta_C(...)
646 typedef char NO_ae2f_NEED_CLASS[-1
]
649#define __ae2f_AnnSlpFitOne_imp(
669)\
670{
672 (v_fit).m_tmp, (v_fit).m_tmp1
674 , actderiv_opt, lossderiv
681 v_fit, inp, r_cachedelta, weight
682 , learningrate, learningrate_bias
685}
687#define __ae2f_AnnSlpFit_imp(
704)\
705{
709 , actderiv_opt, lossderiv
715 , cachedelta, weights, bias
716 , learningrate, learningrate_bias
718}
720#define __ae2f_AnnSlpFit(
737)\
738{
739 if((reterr_opt) && *(reterr_opt))
741 else unless((_this) && (prm_inp) && (prm_out_desired) && (weights) && (bias) && (cachedelta))
745 else if ((learningrate) == 0
&& (learningrate_bias) == 0
)
748 ae2f_AnnSlpFit_t v_fit;
781}
784#define __ae2f_AnnSlpFit_C(
794){
808 , (_this)->m_actderiv
809 , (_this)->m_lossderiv
810 , (_this)->m_learningrate
811 , (_this)->m_learningrate_bias
814}
816#undef __ae2f_AnnSlpFit_C
817#define __ae2f_AnnSlpFit_C(...)
818 typedef char NO_ae2f_NEED_CLASS[-1
]
821#define __ae2f_AnnSlpTrainOne_imp(
841)\
842{
853 (out_cache)[oidx] = (v_train).m_ret;
858 , out_cache, out_desired
862 , actderiv, lossderiv
863 , learningrate, learningrate_bias
864 , iidx, oidx, isz, osz
866}
868#define __ae2f_AnnSlpTrain_imp(
886)\
887{
890 v_train, slp, inp, out_cache, out_desired
891 , weights, bias, cachedelta
892 , actderiv, lossderiv
893 , learningrate, learningrate_bias
895}
898#define __ae2f_AnnSlpTrain_C(
907)\
908{
913 err, (slp)->m_Slp, inp
922 , (slp)->m_learningrate
923 , (slp)->m_learningrate_bias
926}
928#undef __ae2f_AnnSlpTrain_C
929#define __ae2f_AnnSlpTrain_C
930 typedef char NO_ae2f_NEED_CLASS[-1
]
934#define __ae2f_AnnSlpTrain(
952)\
953{
956 else unless((slp) && (inp) && (out_cache) && (out_desired) && (weights) && (bias) && (cachedelta))
960 else if((learningrate) == 0
&& (learningrate_bias) == 0
)
963 ae2f_AnnSlpTrain_t v_train;
967 v_train, (*slp), inp, out_cache
968 , out_desired, weights, bias
969 , cachedelta, act, actderiv, lossderiv
970 , learningrate, learningrate_bias
974 v_train, (*slp), inp, out_cache
975 , out_desired, weights, bias
976 , cachedelta, act, , lossderiv
977 , learningrate, learningrate_bias
984 v_train, (*slp), inp, out_cache
985 , out_desired, weights, bias
986 , cachedelta, , actderiv, lossderiv
987 , learningrate, learningrate_bias
991 v_train, (*slp), inp, out_cache
992 , out_desired, weights, bias
993 , cachedelta, , , lossderiv
994 , learningrate, learningrate_bias
1000}
1005#undef __ae2f_MACRO_GENERATED
1007#define __ae2f_MACRO_GENERATED 0
void ae2f_AnnAct_t(ae2f_float_t *ret, ae2f_float_t x)
Customisable activasion function type.
void ae2f_AnnLoss_t(ae2f_float_t *ret, const ae2f_float_t *out, const ae2f_float_t *goal, size_t index, size_t count)
Specify the way of calculating loss.
#define ae2f_AnnUtilV2Name(A_t, B_t)
#define ae2f_AnnUtilV2(A_LEFT, A_t, A_POST, B_LEFT, B_t, B_POST)
#define ae2f_AnnUtilPtr2Name(A_t, B_t)
#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_WhenCXX(...)
Appears when the current language is C.
#define ae2f_NONE
Literally nothing.
#define ae2f_LP(...)
Desired count required.
#define ae2f_FREE(...)
Use this marker to show the desired functions to effectively free the resources.
const ae2f_AnnMlp_t const ae2f_float_t *const inp
size_t const ae2f_AnnSlp_t ae2f_float_t *const const ae2f_float_t *const ae2f_AnnAct_t actderiv_then
const ae2f_AnnMlp_t const ae2f_float_t *const ae2f_float_t *const const size_t *const const ae2f_float_t *const const ae2f_float_t *const bias
const ae2f_AnnMlp_t const ae2f_float_t *const ae2f_float_t *const const size_t *const sz
const ae2f_AnnMlp_t const ae2f_float_t *const ae2f_float_t *const const size_t *const const ae2f_float_t *const const ae2f_float_t *const ae2f_float_t *const outcache
const ae2f_AnnSlp_t const ae2f_float_t *const const ae2f_float_t *const delta
const ae2f_AnnMlp_t const ae2f_float_t *const ae2f_float_t *const const size_t *const const ae2f_float_t *const weight
const ae2f_AnnSlp_t const ae2f_float_t *const const ae2f_float_t *const const size_t iidx
const ae2f_AnnMlp_t const ae2f_float_t *const ae2f_float_t *const out
size_t const ae2f_AnnSlp_t slp_then
size_t const ae2f_AnnSlp_t ae2f_float_t *const const ae2f_float_t *const deltaseed
size_t const ae2f_AnnSlp_t ae2f_float_t *const retdelta_then
const ae2f_AnnMlp_t const ae2f_float_t *const ae2f_float_t *const const size_t *const const ae2f_float_t *const const ae2f_float_t *const ae2f_float_t *const ae2f_AnnAct_t *const *const act_opt
ae2f_SHAREDEXPORT void ae2f_AnnSlpFit(ae2f_err_t *restrict const reterr_opt, const ae2f_AnnSlp *restrict const _this, ae2f_LP(_this::inc) const ae2f_float_t *restrict const prm_inp, ae2f_LP(_this::outc) const ae2f_float_t *restrict const prm_out, ae2f_LP(_this::outc) const ae2f_float_t *restrict const prm_out_desired) noexcept
ae2f_SHAREDEXPORT void ae2f_AnnSlpFetchDelta(ae2f_opt ae2f_err_t *restrict const err, const ae2f_AnnSlp *restrict slp, ae2f_LP(slp::outc) const ae2f_float_t *restrict const out, ae2f_LP(slp::outc) const ae2f_float_t *restrict const out_desired, ae2f_LP(slp::outc) ae2f_float_t *restrict const retdelta) noexcept
ae2f_SHAREDEXPORT void ae2f_AnnSlpTrain(ae2f_err_t *restrict const err, ae2f_AnnSlp *restrict slp, ae2f_LP(slp::inc) const ae2f_float_t *restrict inp, ae2f_LP(slp::outc) const ae2f_float_t *restrict out_desired) noexcept
ae2f_SHAREDEXPORT void ae2f_AnnSlpPredict(ae2f_err_t *restrict const err_opt, const ae2f_AnnSlp *restrict const _this, const ae2f_float_t *restrict const prm_in, ae2f_float_t *restrict const out) noexcept
ae2f_SHAREDEXPORT void ae2f_AnnSlpDel(ae2f_AnnSlp *restrict const slp) noexcept
ae2f_SHAREDEXPORT void ae2f_AnnSlpFollow(ae2f_err_t *const restrict reterr_opt, const ae2f_AnnSlp *restrict const _this, const ae2f_float_t *restrict const prm_in, const ae2f_float_t *restrict const delta) noexcept
ae2f_SHAREDEXPORT void ae2f_AnnSlpMk(ae2f_LP(inc *outc) ae2f_float_t *restrict const weight_opt, ae2f_LP(outc) ae2f_float_t *restrict const bias_opt, ae2f_LP(outc) ae2f_float_t *restrict const cache_opt, const size_t inc, const size_t outc, const size_t offset_opt, const size_t extra_opt, ae2f_FREE(ae2f_AnnSlpDel, __ae2f_AnnSlpDel) ae2f_AnnSlp *restrict *restrict const slp, ae2f_opt ae2f_AnnAct_t *const act, ae2f_opt ae2f_AnnAct_t *const actderiv, ae2f_AnnLoss_t *const lossderiv, ae2f_float_t learningrate, ae2f_float_t learningrate_bias, ae2f_opt ae2f_err_t *restrict const err_opt) noexcept
ae2f_SHAREDEXPORT void ae2f_AnnSlpInit(ae2f_AnnSlp_t *restrict const _this, const size_t inc, const size_t outc, const size_t offset_opt, ae2f_err_t *restrict const err_opt, size_t *restrict const initsz_opt) noexcept __ae2f_AnnSlpInit_C(_this
#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_AnnMlpFollowPrimal(...)
#define __ae2f_AnnMlpHidDeltaSingle_imp(v_single, slp, weight, delta, iidx)
#define __ae2f_MACRO_GENERATED
#define __ae2f_AnnMlpTrainAutoPrimal(...)
#define __ae2f_AnnMlpPropagate_imp(v_tmp, v_send, slp_then, retdelta_then, deltaseed, actderiv_then, inp)
delta to delta
#define __ae2f_AnnMlpPredictStream_imp(...)
#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(...)
#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_AnnMlpInitWithOutSz_imp(...)
#define __ae2f_AnnMlpTrainPrimal(...)
#define __ae2f_AnnMlpSz_imp(...)
#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_AnnMlpMk_imp(...)
#define __ae2f_AnnSlpPredict(err_opt, _this, prm_in, out, weight, bias, act_opt)
#define __ae2f_AnnSlpInit_imp(...)
#define __ae2f_AnnSlpMk_imp(...)
#define __ae2f_AnnSlpTrain_imp(v_train, slp, inp, out_cache, out_desired, weights, bias, cachedelta, act, actderiv, lossderiv, learningrate, 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_AnnSlpFit_imp(v_fit, slp, inp, out, out_desired, weights, bias, cachedelta, actderiv_opt, lossderiv, learningrate, learningrate_bias)
#define __ae2f_AnnSlpFitOne_imp(v_fit, inp, out, out_desired, weight, r_bias, r_cachedelta, actderiv_opt, lossderiv, learningrate, learningrate_bias, iidx, oidx, isz, osz)
#define __ae2f_AnnSlpPredictOne_imp(v_predict, prm_in, weight, bias, act_opt, oidx, isz)
#define __ae2f_AnnSlpFollow_imp(v_follow, _this, prm_in, delta, weight, bias, learningrate, learningrate_bias)
#define __ae2f_AnnSlpFollow(reterr_opt, _this, prm_in, delta, weight, bias, learningrate, learningrate_bias)
#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_AnnSlpFollowOne_imp(v_follow, prm_in, delta, weight, learningrate, learningrate_bias, inp_sz, out_idx, v_bias)
#define __ae2f_AnnSlpMk(...)
#define __ae2f_AnnSlpFetchDelta_imp(v_delta, slp, out, out_desired, actderiv_opt, lossderiv, retdelta)
#define __ae2f_AnnSlpPredict_imp(v_predict, _this, prm_in, out, weight, bias, act_opt)
#define __ae2f_AnnSlpFetchDeltaOne_imp(v_fetchdelta_0, v_fetchdelta_1, out, out_desired, actderiv_opt, lossderiv, retdelta, oidx, osz)
#define ae2f_MAC()
delta to delta