2#if !__ae2f_MACRO_GENERATED
3#include <ae2f/Ann/Slp.h>
13#define __ae2f_AnnSlpDel free
14#define __ae2f_AnnSlpDel_C free
28 + ((weight_opt) ? 0 : (inc) * (outc)) *
sizeof(
ae2f_float_t)
39 ,
const size_t incmax_opt
45 v_init, 0, 0, 0, inc, outc
47 (_this).m_inc = (inc);
49 (_this).m_inc = (incmax_opt);
52 (_this).m_outc = (outc);
57 ae2f_AnnSlp_t*
const _this,
60 const size_t offset_opt,
62 size_t*
const initsz_opt
65 if((err_opt) && *(err_opt))
77 (initsz_opt) && (*(initsz_opt) = v_init + offset_opt);
82#undef __ae2f_AnnSlpInitInpSz_imp
83#define __ae2f_AnnSlpInitInpSz_imp(...)
84 typedef char NO_ae2f_NEED_CLASS[-1
]
86#undef __ae2f_AnnSlpInit_imp
87#define __ae2f_AnnSlpInit_imp(...)
88 typedef char NO_ae2f_NEED_CLASS[-1
]
90#undef __ae2f_AnnSlpInit
91#define __ae2f_AnnSlpInit(...)
92 typedef char NO_ae2f_NEED_CLASS[-1
]
101 ae2f_AnnSlpMk_t v_mk,
109 const size_t offset_opt,
110 const size_t extra_opt,
123 , calloc((v_mk).m_stack + (offset_opt) + (extra_opt), 1)))
125 (v_mk).m_alloccount = 0;
126 (v_mk).m_fieldptr.b = (v_mk).m_ptr + 1;
133 (v_mk).m_ptr->m_weight = (weight_opt);
135 (v_mk).m_ptr->m_weight = ((v_mk).m_fieldptr.a);
136 (v_mk).m_fieldptr.a += (inc) * (outc);
140 (v_mk).m_ptr->m_bias = (bias_opt);
142 (v_mk).m_ptr->m_bias = (v_mk).m_fieldptr.a;
143 (v_mk).m_fieldptr.a += (outc);
147 (v_mk).m_ptr->m_cache = (cache_opt);
149 (v_mk).m_ptr->m_cache = (v_mk).m_fieldptr.a;
154 , v_mk.m_ptr->m_Slp[0]
160 (v_mk).m_ptr[0].m_act = act;
161 (v_mk).m_ptr[0].m_actderiv = actderiv;
162 (v_mk).m_ptr[0].m_lossderiv = lossderiv;
163 (v_mk).m_ptr[0].m_learningrate = learningrate;
164 (v_mk).m_ptr[0].m_learningrate_bias = learningrate_bias;
175 const size_t offset_opt,
176 const size_t extra_opt,
177 ae2f_AnnSlp**
const slp,
189 if((err_opt) && *(err_opt))
194 ae2f_AnnSlpMk_t v_mk;
197 , weight_opt, bias_opt, cache_opt
199 , outc, offset_opt, extra_opt
201 , act, actderiv, lossderiv
203 , learningrate, learningrate_bias
206 (err_opt) && !(*(slp) = v_mk.m_ptr) &&
211#undef __ae2f_AnnSlpMk_imp
212#define __ae2f_AnnSlpMk_imp(...)
213 typedef char NO_ae2f_NEED_CLASS[-1
]
215#undef __ae2f_AnnSlpMk
216#define __ae2f_AnnSlpMk(...)
217 typedef char NO_ae2f_NEED_CLASS[-1
]
224 ae2f_AnnSlpPredictOne_t v_predict
233 (v_predict).m_tmp = 0;
235 for((v_predict).m_j = (
isz); (v_predict).m_j--; ) {
237 += (
prm_in)[(v_predict).m_j]
245 ae2f_AnnSlpPredict_t v_predict
254 for((v_predict).m_i = (
_this).m_outc; (v_predict).m_i--; )
260 , (bias)[(v_predict).m_i]
266 (
out)[(v_predict).m_i] = (v_predict).m_ret;
272 ,
const ae2f_AnnSlp_t*
const _this
281 if((err_opt) && *(err_opt))
283 else unless((_this) && (prm_in) && (out) && (weight) && (bias))
286 ae2f_AnnSlpPredict_t v_predict;
291 , *(_this), (prm_in), out
292 , weight, bias, act_opt
297 , *(_this), prm_in, out
307 ,
const ae2f_AnnSlp*
const _this
316 err_opt, (_this)->m_Slp
325#undef __ae2f_AnnSlpPredict_C
326#define __ae2f_AnnSlpPredict_C(...)
327 typedef char NO_ae2f_NEED_CLASS[-1
]
331ae2f_MAC() _ae2f_AnnSlpFollowOneW_imp(
336 ,
const size_t inp_sz
337 ,
const size_t inp_idx
338 ,
const size_t out_sz
339 ,
const size_t out_idx
342 ((weight) + (inp_sz) * (out_idx))[(inp_idx)]
343 -= (delta) * (inp) * (learningrate);
346ae2f_MAC() _ae2f_AnnSlpFollowOneB_imp(
350 ) { (r_bias) -= (delta) * (learningrate_bias); }
352ae2f_MAC() _ae2f_AnnSlpFollowOne_imp(
353 ae2f_AnnSlpFollowOne_t v_follow
360 ,
const size_t inp_sz
361 ,
const size_t out_idx
365 for((v_follow).m_j = 0; (v_follow).m_j < (inp_sz); ++(v_follow).m_j) {
366 ((weight) + (inp_sz) * (out_idx))[(v_follow).m_j]
367 -= (delta) * (prm_in)[(v_follow).m_j] * (learningrate);
370 (v_bias) -= (delta) * (learningrate_bias);
375 ae2f_AnnSlpFollow_t v_follow
376 ,
const ae2f_AnnSlp_t _this
385 for(v_follow.m_i = (_this).m_outc; (v_follow).m_i--; ) {
389 , (delta)[v_follow.m_i]
391 , learningrate, learningrate_bias
394 , (bias)[v_follow.m_i]
401 ,
const ae2f_AnnSlp_t*
const _this
410 if((reterr_opt) && *(reterr_opt))
412 else if(learningrate == 0 && learningrate_bias == 0)
414 else unless((_this) && (prm_in) && (delta) && (weight) && (bias))
417 ae2f_AnnSlpFollow_t v_follow;
433 ,
const ae2f_AnnSlp*
const _this
441 reterr_opt, _this->m_Slp
445 , (_this)->m_learningrate, (_this)->m_learningrate_bias
450#undef __ae2f_AnnSlpFollow_C
451#define __ae2f_AnnSlpFollow_C(...)
452 typedef char NO_ae2f_NEED_CLASS[-1
]
455ae2f_MAC() _ae2f_AnnSlpFetchDeltaOne_imp(
470 actderiv_opt(&(v_fetchdelta_0), (out)[oidx]);
471 lossderiv((&(v_fetchdelta_1)), (out), (out_desired), (oidx), (osz));
479ae2f_MAC() _ae2f_AnnSlpFetchDelta_imp(
480 ae2f_AnnSlpFetchDelta_t v_delta
481 ,
const ae2f_AnnSlp_t slp
492 for((v_delta).m_i = (slp).m_outc; (v_delta).m_i--; )
494 (v_delta).m_tmp, (v_delta).m_tmp1
496 , actderiv_opt, lossderiv
497 , (retdelta)[v_delta.m_i]
505 ,
const ae2f_AnnSlp_t*
const slp
518 else unless((slp) && (out) && (out_desired) && (retdelta))
523 else if(actderiv_opt) {
524 ae2f_AnnSlpFetchDelta_t v_delta;
533 ae2f_AnnSlpFetchDelta_t v_delta;
546 ,
const ae2f_AnnSlp*
const slp
556 else unless((slp) && (out) && (out_desired) && (retdelta))
558 else unless((slp)->m_lossderiv)
561 if((slp)->m_actderiv) {
562 ae2f_AnnSlpFetchDelta_t v_delta;
564 v_delta, (slp)->m_Slp[0]
566 , (slp)->m_actderiv, (slp)->m_lossderiv
570 ae2f_AnnSlpFetchDelta_t v_delta;
572 v_delta, (slp)->m_Slp[0]
574 , , (slp)->m_lossderiv
581#undef __ae2f_AnnSlpFetchDelta_C
582#define __ae2f_AnnSlpFetchDelta_C(...)
583 typedef char NO_ae2f_NEED_CLASS[-1
]
587 ae2f_AnnSlpFitOne_t v_fit
611 (v_fit).m_tmp, (v_fit).m_tmp1
613 , actderiv_opt, lossderiv
620 v_fit, inp, r_cachedelta, weight
621 , learningrate, learningrate_bias
627 ae2f_AnnSlpFit_t v_fit
629 ,
const ae2f_AnnSlp_t slp
649 , actderiv_opt, lossderiv
655 , cachedelta, weights, bias
656 , learningrate, learningrate_bias
662 ,
const ae2f_AnnSlp_t* _this
679 if((reterr_opt) && *(reterr_opt))
681 else unless((_this) && (prm_inp) && (prm_out_desired) && (weights) && (bias) && (cachedelta))
685 else if ((learningrate) == 0 && (learningrate_bias) == 0)
688 ae2f_AnnSlpFit_t v_fit;
726 ,
const ae2f_AnnSlp*
const _this
744 , (_this)->m_actderiv
745 , (_this)->m_lossderiv
746 , (_this)->m_learningrate
747 , (_this)->m_learningrate_bias
752#undef __ae2f_AnnSlpFit_C
753#define __ae2f_AnnSlpFit_C(...)
754 typedef char NO_ae2f_NEED_CLASS[-1
]
758 ae2f_AnnSlpTrainOne_t v_train
790 (out_cache)[oidx] = (v_train).m_ret;
795 , out_cache, out_desired
799 , actderiv, lossderiv
800 , learningrate, learningrate_bias
801 , iidx, oidx, isz, osz
806 ae2f_AnnSlpTrain_t v_train
807 ,
const ae2f_AnnSlp_t slp
827 v_train, slp, inp, out_cache, out_desired
828 , weights, bias, cachedelta
829 , actderiv, lossderiv
830 , learningrate, learningrate_bias
846 err, (slp)->m_Slp, inp
855 , (slp)->m_learningrate
856 , (slp)->m_learningrate_bias
861#undef __ae2f_AnnSlpTrain_C
862#define __ae2f_AnnSlpTrain_C
863 typedef char NO_ae2f_NEED_CLASS[-1
]
869 ,
const ae2f_AnnSlp_t*
const slp
889 else unless((slp) && (inp) && (out_cache) && (out_desired) && (weights) && (bias) && (cachedelta))
893 else if((learningrate) == 0 && (learningrate_bias) == 0)
896 ae2f_AnnSlpTrain_t v_train;
900 v_train, (*slp), inp, out_cache
901 , out_desired, weights, bias
902 , cachedelta, act, actderiv, lossderiv
903 , learningrate, learningrate_bias
907 v_train, (*slp), inp, out_cache
908 , out_desired, weights, bias
909 , cachedelta, act, , lossderiv
910 , learningrate, learningrate_bias
917 v_train, (*slp), inp, out_cache
918 , out_desired, weights, bias
919 , cachedelta, , actderiv, lossderiv
920 , learningrate, learningrate_bias
924 v_train, (*slp), inp, out_cache
925 , out_desired, weights, bias
926 , cachedelta, , , lossderiv
927 , learningrate, learningrate_bias
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_reinterpret_cast(t, v)
#define unless(...)
Invokes when condition is false.
const ae2f_float_t *const const ae2f_float_t *const const ae2f_float_t ae2f_AnnAct_t const size_t const size_t isz
const ae2f_float_t *const const ae2f_float_t *const const ae2f_float_t bias
const ae2f_AnnSlp_t _this
const ae2f_AnnSlp_t const ae2f_float_t *const ae2f_float_t *const out
const ae2f_float_t *const const ae2f_float_t *const const ae2f_float_t ae2f_AnnAct_t act_opt
const ae2f_float_t *const const ae2f_float_t *const const ae2f_float_t ae2f_AnnAct_t const size_t oidx
const ae2f_float_t *const const ae2f_float_t *const weight
const ae2f_float_t *const prm_in
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_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