1#undef __ae2f_MACRO_GENERATED
2#define __ae2f_MACRO_GENERATED 1
3#include <ae2f/Ann/Util.h>
4#undef __ae2f_MACRO_GENERATED
5#define __ae2f_MACRO_GENERATED 1
9#undef __ae2f_MACRO_GENERATED
10#define __ae2f_MACRO_GENERATED 1
12#undef __ae2f_MACRO_GENERATED
13#define __ae2f_MACRO_GENERATED 1
17#include <ae2f/Macro.h>
18#undef __ae2f_MACRO_GENERATED
19#define __ae2f_MACRO_GENERATED 1
20#include <ae2f/Ann/Slp.h>
21#undef __ae2f_MACRO_GENERATED
22#define __ae2f_MACRO_GENERATED 1
28#include <ae2f/Ann/Mlp.h>
29#undef __ae2f_MACRO_GENERATED
30#define __ae2f_MACRO_GENERATED 1
44#define __ae2f_AnnMlpMk_C(
65){
66 if((reterr) && *(reterr)) {}
67 else unless((szvector) && (lossderiv) && (retmk))
73 , depth, szvector, szswap_opt
74 , act, actderiv, lossderiv
75 , deltastream, outcache, weight
76 , bias, learningrate, learningrate_bias
80 assert
(v_mk.m_mkbase && "Initialising has failed");
81 *(retmk) = v_mk.m_mkbase;
86}
90#define __ae2f_AnnMlpDel_C(...)
91 typedef char NO_ae2f_NEED_CLASS[-1
]
93#define __ae2f_AnnMlpMk_C(...)
94 typedef char NO_ae2f_NEED_CLASS[-1
]
101#define __ae2f_AnnMlpMk_imp(
121)\
122{
123 assert
((szvector) && "Size vector is null");
124 assert
((lossderiv) && "Loss deriv must be initialised");
125 assert
((depth) > 2
&& "Depth must be greater than 2");
128 for((v_mk).m_i = (depth); (v_mk).m_i--; ) {
129 assert
((szvector)[(v_mk).m_i] && "Zero value is permitted");
130 (v_mk).m_outc < (szvector)[(v_mk).m_i] && ((v_mk).m_outc = (szvector)[(v_mk).m_i]);
138 , deltastream, outcache
142 (v_mk).m_mkptr.m_void = calloc(1
, (v_mk).m_i + (offset) + (extra));
143 (v_mk).m_mkbase = (v_mk).m_mkptr.m_mlp;
145 if((v_mk).m_mkptr.m_void) {
147 *(v_mk).m_mkptr.m_mlp
154 , (v_mk).m_mkptr.m_mlp + 1
)
166 (v_mk).m_mkptr.m_mlp += 1
;
167 (v_mk).m_mkptr.m_byte += (offset);
168 (v_mk).m_mkptr.m_sz += (depth);
171 (v_mk).m_mkbase->m_act = (v_mk).m_mkptr.m_Act;
172 (v_mk).m_mkptr.m_Act += (depth) - 1
;
176 (v_mk).m_mkbase->m_actderiv = (v_mk).m_mkptr.m_Act;
177 (v_mk).m_mkptr.m_Act += (depth) - 1
;
181 (v_mk).m_mkbase->m_deltastream = (v_mk).m_mkptr.m_f;
182 (v_mk).m_mkptr.m_f += ((depth) - 1
) * (v_mk).m_outc;
186 (v_mk).m_mkbase->m_outcache = (v_mk).m_mkptr.m_f;
187 (v_mk).m_mkptr.m_f += ((depth) - 1
) * (v_mk).m_outc;
191 (v_mk).m_mkbase->m_bias = (v_mk).m_mkptr.m_f;
192 (v_mk).m_mkptr.m_f += ((depth) - 1
) * (v_mk).m_outc;
196 (v_mk).m_mkbase->m_weight = (v_mk).m_mkptr.m_f;
199}
201#define __ae2f_AnnMlpSz_imp(
216)\
217{
220 (ret_sz) = sizeof(ae2f_AnnMlp) + (!(szswap)) * sizeof(size_t);
221 (ret_sz) += (sizeof(void*) * ((depth) - 1
)) * (!(act) + !(actderiv));
222 (ret_sz) += sizeof(ae2f_float_t)
225 !(deltastream) + !(outcache) + !(bias)
226 + ((!(weight)) * (outc))
228}
230#define __ae2f_AnnMlpInitWithOutSz_imp(
250)\
251{
252 assert
((depth) >= 2
&& "At lest you need input and output layer");
253 (v_mlp).m_depth = (depth);
254 (v_mlp).m_outc = (outsz);
256 assert
((lossderiv) && "loss deriv is null");
257 (v_mlp).m_lossderiv = lossderiv;
259 (v_mlp).m_sz = (szswap_opt);
260 (v_mlp).m_act = (act);
261 (v_mlp).m_actderiv = (actderiv);
263 (v_mlp).m_deltastream = deltastream;
264 (v_mlp).m_outcache = outcache;
265 (v_mlp).m_weight = weight;
266 (v_mlp).m_bias = bias;
268 (v_mlp).m_learningrate = learningrate;
269 (v_mlp).m_learningrate_bias = learningrate_bias;
271 if((szswap_opt) && (szswap_opt) != (szvector))
272 for((v_init) = (depth); (v_init)--; ) {
273 (szswap_opt)[(v_init)] = (szvector)[(v_init)];
275}
277#define __ae2f_AnnMlpInit_imp(
296)\
297{
300 assert
((szvector) && "Size vector is null");
301 for((v_init).m_i = (depth); (v_init).m_i--; ) {
302 assert
((szvector)[(v_init).m_i] && "Zero value is permitted");
303 (v_init).m_outc < (szvector)[(v_init).m_i] && ((v_init).m_outc = (szvector)[(v_init).m_i]);
307 v_mlp, (v_init).m_i, depth, (v_mlp).m_outc
308 , szvector, szswap_opt, act, actderiv, lossderiv
309 , deltastream, outcache, weight, bias, learningrate, learningrate_bias
311}
315#define __ae2f_AnnMlpMk_imp(...)
316 typedef char NO_ae2f_NEED_CLASS[-1
]
318#define __ae2f_AnnMlpSz_imp(...)
319 typedef char NO_ae2f_NEED_CLASS[-1
]
321#define __ae2f_AnnMlpInitWithOutSz_imp(...)
322 typedef char NO_ae2f_NEED_CLASS[-1
]
324#define __ae2f_AnnMlpInit_imp(...)
325 typedef char NO_ae2f_NEED_CLASS[-1
]
330#define __ae2f_AnnMlpPredictPrimal_imp(
344)\
345{
346 assert
((mlp).m_depth > 2
);
348 (v_predict).m_depth = (mlp).m_depth - 1
;
349 (v_predict).m_outc_max = (mlp).m_outc;
351 (v_predict).m_inc = (sz)[0
];
352 (v_predict).m_outc = (sz)[1
];
359 , ((outcache) + (0
OPER_NONE) * (v_predict).m_outc_max)
369 , (outcache + (0
OPER_NONE) * (v_predict).m_outc_max)
379 (v_predict).m_k < (v_predict).m_depth - 1
;
383 (v_predict).m_inc = (v_predict).m_outc;
384 (v_predict).m_outc = (sz)[(v_predict).m_k + 1
];
386 if((act_opt)[(v_predict).m_k]) {
387 assert
((v_predict).m_k);
388 assert
(((v_predict).m_k OPER_NEG) != ((v_predict).m_k OPER_NONE));
389 assert
(((v_predict).m_k OPER_NEG) == (((v_predict).m_k - 1
) OPER_NONE));
390 assert
((((v_predict).m_k + 1
) OPER_NEG) == (((v_predict).m_k) OPER_NONE));
395 , ((outcache) + (((v_predict).m_k OPER_NEG) * (v_predict).m_outc_max))
396 , ((outcache) + (((v_predict).m_k OPER_NONE) * (v_predict).m_outc_max))
397 , (weight) + ((v_predict).m_k) * (
398 (v_predict).m_outc_max
399 * (v_predict).m_outc_max
401 , (bias) + ((v_predict).m_k) * (v_predict).m_outc_max
402 , (act_opt)[(v_predict).m_k]
409 ((v_predict).m_k OPER_NEG)
410 * (v_predict).m_outc_max
413 ((v_predict).m_k OPER_NONE)
414 * (v_predict).m_outc_max
418 * (v_predict).m_outc_max
419 * (v_predict).m_outc_max)
420 , (bias) + ((v_predict).m_k) * (v_predict).m_outc_max
426 (v_predict).m_inc = (v_predict).m_outc;
427 (v_predict).m_outc = (sz)[(v_predict).m_k + 1
];
428 assert
((v_predict).m_k == (mlp).m_depth - 2
);
430 if((act_opt)[(v_predict).m_k]) {
434 , ((outcache) + ((((v_predict).m_k OPER_NEG)) * (v_predict).m_outc_max))
436 , (weight) + ((v_predict).m_k) * (v_predict).m_outc_max * (v_predict).m_outc_max
437 , (bias) + ((v_predict).m_k) * (v_predict).m_outc_max
438 , (act_opt)[(v_predict).m_k]
444 , ((outcache) + ((((v_predict).m_k OPER_NEG)) * (v_predict).m_outc_max))
446 , ((weight) + ((v_predict).m_k) * (v_predict).m_outc_max * (v_predict).m_outc_max)
447 , ((bias) + ((v_predict).m_k) * (v_predict).m_outc_max)
451}
454#define __ae2f_AnnMlpPredictPrimal(
463) \
464{
465 if((reterr) && *(reterr))
467 else unless((mlp) && (inp) && (out)) {
471 ae2f_AnnMlpPredict_t v_predict;
477 , (mlp)->m_sz, (mlp)->m_weight
478 , (mlp)->m_bias, (mlp)->m_outcache
482}
485#define __ae2f_AnnMlpPredictPrimal(...)
486 typedef char NO_ae2f_NEED_CLASS[-1
]
491#define __ae2f_AnnMlpPredictStream_imp(...)
494#define __ae2f_AnnMlpPredictStream_C(reterr, mlp, inp, out)
497#define __ae2f_AnnMlpPredict_imp(...)
500#define __ae2f_AnnMlpPredict_C(...)
503#define __ae2f_AnnMlpHidDeltaSingle_imp(
513)\
514{
515 (v_single).m_ret = 0
;
517 for((v_single).m_i = (slp).m_outc; (v_single).m_i--; )
520 ((weight) + (slp).m_inc * (v_single).m_i)[iidx] * (delta)[(v_single).m_i];
522}
525#define __ae2f_AnnMlpPropagate_imp(
537)\
538{
539 for((v_send) = (slp_then).m_outc; (v_send)--;) {
540 actderiv_then(&(v_tmp), (inp)[v_send]);
541 (retdelta_then)[v_send] = (v_tmp) * (deltaseed)[v_send];
543}
545#define __ae2f_AnnMlpFollowStream_imp(...)
549#define __ae2f_AnnMlpFollow_imp(...)
552#define __ae2f_AnnMlpFollowPrimal_imp(
569)\
570{
571 assert
(((mlp).m_depth > 2
) && "m_depth must be more than 1.");
572 assert
((inp) && "inp is null");
573 assert
((weight) && "weight is null");
574 assert
((bias) && "bias is null");
575 assert
((actderiv) && "actderiv list is null");
576 assert
((delta) && "delta is null");
580 (v_follow).m_k = (mlp).m_depth - 2
;
583 (v_follow).m_pg_weight = (v_follow).m_pg_out = (mlp).m_outc;
584 (v_follow).m_pg_weight *= (v_follow).m_pg_out;
586 (v_follow).m_outc = (lenv)[(v_follow).m_k + 1
];
587 (v_follow).m_inc = (lenv)[(v_follow).m_k];
590
591
595 , ((outstream) + (v_follow).m_pg_out * ((v_follow).m_k - 1
))
597 , ((weight) + ((v_follow).m_pg_weight * ((v_follow).m_k)))
598 , ((bias) + ((v_follow).m_pg_out * ((v_follow).m_k)))
603 (v_follow).m_j = (v_follow).m_inc;
604 while((v_follow).m_j--) {
608 , ((weight) + ((v_follow).m_pg_weight * (v_follow).m_k))
613 ((deltacache) + (v_follow).m_pg_out * ((v_follow).m_k OPER_NEG))[(v_follow).m_j]
617 (v_follow).m_outc = (lenv)[(v_follow).m_k];
618 (v_follow).m_inc = (lenv)[(v_follow).m_k - 1
];
621 if((actderiv)[(v_follow).m_k - 1
]) {
624 , (v_follow).m_stack.m_send
626 , ((deltacache) + ((v_follow).m_pg_out * ((v_follow).m_k OPER_NEG)))
627 , ((deltacache) + ((v_follow).m_pg_out * ((v_follow).m_k OPER_NEG)))
628 , (actderiv)[(v_follow).m_k - 1
]
629 , ((outstream) + (v_follow).m_pg_out * ((v_follow).m_k - 1
))
634 , (v_follow).m_stack.m_send
636 , ((deltacache) + (((v_follow).m_pg_out) * ((v_follow).m_k OPER_NEG)))
637 , ((deltacache) + (((v_follow).m_pg_out) * ((v_follow).m_k OPER_NEG)))
639 , ((outstream) + (v_follow).m_pg_out * ((v_follow).m_k - 1
))
644 while(--(v_follow).m_k) {
645 assert
((v_follow).m_k);
646 assert
(((v_follow).m_k OPER_NEG) != ((v_follow).m_k OPER_NONE));
647 assert
(((v_follow).m_k OPER_NEG) == (((v_follow).m_k - 1
) OPER_NONE));
648 assert
((((v_follow).m_k + 1
) OPER_NEG) == (((v_follow).m_k) OPER_NONE));
651
652
656 , ((outstream) + (v_follow).m_pg_out * ((v_follow).m_k - 1
))
657 , ((deltacache) + (v_follow).m_pg_out * ((v_follow).m_k OPER_NONE))
658 , ((weight) + ((v_follow).m_pg_weight * (v_follow).m_k))
659 , ((bias) + ((v_follow).m_pg_out * ((v_follow).m_k)))
664 (v_follow).m_j = (v_follow).m_inc;
665 assert
((v_follow).m_inc == (lenv)[(v_follow).m_k]);
667 while((v_follow).m_j--) {
668 (v_follow).m_ret = 0
;
673 , ((weight) + (v_follow).m_pg_weight * ((v_follow).m_k))
674 , ((deltacache) + (v_follow).m_pg_out * ((v_follow).m_k OPER_NONE))
678 ((deltacache) + (v_follow).m_pg_out * ((v_follow).m_k OPER_NEG))[(v_follow).m_j]
682 (v_follow).m_outc = (v_follow).m_inc;
683 (v_follow).m_inc = (lenv)[(v_follow).m_k - 1
];
684 assert
((v_follow).m_outc == (lenv)[(v_follow).m_k]);
687 if((actderiv)[(v_follow).m_k - 1
]) {
690 , (v_follow).m_stack.m_send
692 , ((deltacache) + ((v_follow).m_pg_out * ((v_follow).m_k OPER_NEG)))
693 , ((deltacache) + ((v_follow).m_pg_out * ((v_follow).m_k OPER_NEG)))
694 , (actderiv)[(v_follow).m_k - 1
]
695 , ((outstream) + (v_follow).m_pg_out * ((v_follow).m_k - 1
))
700 , (v_follow).m_stack.m_send
702 , ((deltacache) + (((v_follow).m_pg_out) * ((v_follow).m_k OPER_NEG)))
703 , ((deltacache) + (((v_follow).m_pg_out) * ((v_follow).m_k OPER_NEG)))
705 , ((outstream) + (v_follow).m_pg_out * ((v_follow).m_k - 1
))
710 assert
(((v_follow).m_k) == 0
&& "(v_follow).m_k must be zero.");
711 assert
((v_follow).m_inc == (lenv)[0
] && "inc must be same as first element of lenv.");
712 assert
((v_follow).m_outc == (lenv)[1
] && "outc must be same as second element of lenv.");
718 , ((deltacache) + (v_follow).m_pg_out * ((v_follow).m_k OPER_NONE))
724}
727#define __ae2f_AnnMlpFollowPrimal(
736) \
737{
738 if((reterr) && *(reterr)) {}
739 else unless((mlp) && (inp) && (delta)) {
740 assert
(0
&& "nullref");
743 ae2f_AnnMlpFollow_t v_follow;
748 , *(mlp), inp, delta, (mlp)->m_sz
749 , (mlp)->m_outcache, (mlp)->m_deltastream
752 , (mlp)->m_learningrate, (mlp)->m_learningrate_bias
760#define __ae2f_AnnMlpFollowPrimal(...)
761 typedef char NO_ae2f_NEED_CLASS[-1
]
765#define __ae2f_AnnMlpFollow_C(...)
768#define __ae2f_AnnMlpFollowStream_C(...)
771#define __ae2f_AnnMlpTrainPrimal_imp(
791)\
792{
793 assert
((lenv) && "lengh vector nil");
794 assert
(((mlp).m_depth > 2
) && "I see no hidden layer");
796 assert
((actderiv) && "actderiv list");
798 (v_train).m_inc = (lenv)[(mlp).m_depth - 3
];
799 (v_train).m_outc = (lenv)[(mlp).m_depth - 2
];
802 (v_train), mlp, inp, out, lenv,
803 weight, bias, outstream, act
806 if((actderiv)[(mlp).m_depth - 2
]) {
808 (v_train), (v_train), (out), (out_desired)
809 , (actderiv)[(mlp).m_depth - 2
]
811 , (&((deltacache)[(mlp).m_outc * (((mlp).m_depth - 2
) OPER_NONE)]))
815 (v_train), (v_train), (out), (out_desired)
818 , (&((deltacache)[(mlp).m_outc * (((mlp).m_depth - 2
) OPER_NONE)]))
826 , (&((deltacache)[(mlp).m_outc * (((mlp).m_depth - 2
) OPER_NONE)]))
828 , deltacache, weight, bias
829 , learningrate, learningrate_bias
832}
835#define __ae2f_AnnMlpTrainPrimal(
845)\
846{
847 if((reterr) && *(reterr));
848 else unless((mlp) && (out) && (out_desired) && (inp)) {
849 assert
(0
&& "nullref");
852 ae2f_AnnMlpTrain_t v_train;
855 , v_train, *(mlp), inp
857 , (mlp)->m_sz, (mlp)->m_outcache
858 , (mlp)->m_deltastream
859 , (mlp)->m_weight, (mlp)->m_bias
860 , (mlp)->m_learningrate, (mlp)->m_learningrate_bias
861 , (mlp)->m_act, (mlp)->m_actderiv, (mlp)->m_lossderiv
864}
866#define __ae2f_AnnMlpTrainAutoPrimal(
875)\
876{
877 if((reterr) && *(reterr));
878 else unless((mlp) && (out_desired) && (inp)) {
879 assert
(0
&& "nullref");
882 ae2f_AnnMlpTrain_t v_train;
885 , v_train, *(mlp), inp
886 , &(mlp)->m_outcache[((mlp)->m_outc) * ((mlp)->m_depth - 2
)]
888 , (mlp)->m_sz, (mlp)->m_outcache
889 , (mlp)->m_deltastream
890 , (mlp)->m_weight, (mlp)->m_bias
891 , (mlp)->m_learningrate, (mlp)->m_learningrate_bias
892 , (mlp)->m_act, (mlp)->m_actderiv, (mlp)->m_lossderiv
898#define __ae2f_AnnMlpTrainPrimal(...)
899 typedef char NO_ae2f_NEED_CLASS[-1
]
901#define __ae2f_AnnMlpTrainAutoPrimal(...)
902 typedef char NO_ae2f_NEED_CLASS[-1
]
907#define __ae2f_AnnMlpTrain_C(reterr, mlp, inp, out, out_desired)
910#define __ae2f_AnnMlpTrainStream_C(reterr, mlp, inp, out, out_desired)
913#define __ae2f_AnnMlpTrain_imp(...)
916#define __ae2f_AnnMlpTrainStream_imp(...)
921#define __ae2f_AnnMlpTrainAuto_C(reterr, mlp, inp, out_desired)
925#define __ae2f_AnnMlpTrainAutoStream_C(reterr, mlp, inp, out_desired)
932#undef __ae2f_MACRO_GENERATED
934#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.
ae2f_SHAREDEXPORT void ae2f_AnnMlpPredict(ae2f_err_t *restrict reterr, const ae2f_AnnMlp *restrict const mlp, const ae2f_float_t *restrict const inp, ae2f_float_t *restrict const out) noexcept
ae2f_SHAREDEXPORT void ae2f_AnnMlpFollowStream(ae2f_err_t *const reterr, const ae2f_AnnMlp *mlp, const ae2f_float_t *const inp, const ae2f_float_t *const delta)
ae2f_SHAREDEXPORT void ae2f_AnnMlpPredictStream(ae2f_err_t *restrict reterr, const ae2f_AnnMlp *restrict const mlp, const ae2f_float_t *restrict const inp, ae2f_float_t *restrict const out) noexcept
ae2f_SHAREDEXPORT void ae2f_AnnMlpTrainAutoStream(ae2f_err_t *restrict const ae2f_opt reterr, ae2f_AnnMlp *restrict const mlp, const ae2f_float_t *restrict const inp, const ae2f_float_t *restrict const out_desired) noexcept
ae2f_SHAREDEXPORT void ae2f_AnnMlpTrainAuto(ae2f_err_t *restrict const ae2f_opt reterr, ae2f_AnnMlp *restrict const mlp, const ae2f_float_t *restrict const inp, const ae2f_float_t *restrict const out_desired) noexcept
ae2f_SHAREDEXPORT void ae2f_AnnMlpDel(ae2f_AnnMlp *restrict const block) noexcept
ae2f_SHAREDEXPORT void ae2f_AnnMlpMk(ae2f_err_t *restrict const reterr, ae2f_AnnMlp *restrict *restrict const retmk, const size_t depth, const size_t *restrict const szvector, ae2f_opt size_t *restrict const szswap_opt, ae2f_opt ae2f_AnnAct_t **restrict const act, ae2f_opt ae2f_AnnAct_t **restrict const actderiv, ae2f_AnnLoss_t *const lossderiv, ae2f_opt ae2f_float_t *restrict const deltastream, ae2f_opt ae2f_float_t *restrict const outcache, ae2f_opt ae2f_float_t *restrict const weight, ae2f_opt ae2f_float_t *restrict const bias, ae2f_float_t const learningrate, ae2f_float_t const learningrate_bias, const size_t offset, const size_t extra) noexcept
ae2f_SHAREDEXPORT void ae2f_AnnMlpFollow(ae2f_err_t *const reterr, const ae2f_AnnMlp *mlp, const ae2f_float_t *const inp, const ae2f_float_t *const delta)
ae2f_SHAREDEXPORT void ae2f_AnnMlpTrainStream(ae2f_err_t *restrict const ae2f_opt reterr, ae2f_AnnMlp *restrict const mlp, const ae2f_float_t *restrict const inp, ae2f_float_t *restrict const out, const ae2f_float_t *restrict const out_desired) noexcept
ae2f_SHAREDEXPORT void ae2f_AnnMlpTrain(ae2f_err_t *restrict const ae2f_opt reterr, ae2f_AnnMlp *restrict const mlp, const ae2f_float_t *restrict const inp, ae2f_float_t *restrict const out, const ae2f_float_t *restrict const out_desired) noexcept
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