ae2f_docs
Mlp.core.h
Go to the documentation of this file.
1#ifndef ae2f_Ann_Mlp_core_h
2#define ae2f_Ann_Mlp_core_h
3
4#include <ae2f/Call.h>
5#include <ae2f/Cast.h>
6
7#include <ae2f/Pack/Beg.h>
8#include "./Act.h"
9
10ae2f_structdef(struct, ae2f_AnnMlp);
11
12/**
13 * @brief
14 * # Multi Layered Perceptron
15 *
16 * This is a data-only structure, used for type-punning.
17 */
18ae2f_structdef(struct, ae2f_AnnMlp_t)
19{
20 /**
21 * @brief
22 * Depth of the network, including input and output layers.
23 */
24 size_t m_depth;
25
26 /**
27 * @brief
28 * Possible greatest output size.
29 */
30 size_t m_outc;
31};
32
33/**
34 * @brief
35 * Structure used for MLP prediction.
36 */
37ae2f_structdef_n(struct, ae2f_AnnMlpPredict_t, ae2f_AnnMlpPredictStream_t) {
38 /**
39 * @brief
40 * Input, output, and loop counters.
41 */
42 size_t m_inc, m_outc, m_i, m_j, m_k, m_depth, m_outc_max;
43
44 /**
45 * @brief
46 * Return value.
47 */
48 ae2f_float_t m_ret, m_tmp;
49};
50
51/**
52 * @brief
53 * A union for type-punning pointers during MLP initialization.
54 * This allows treating a block of memory as different pointer types.
55 */
56ae2f_structdef(union, ae2f_AnnMlpInitMkPtr_t) {
57 /**
58 * @brief
59 * Pointer to an MLP structure.
60 */
61 ae2f_AnnMlp* restrict m_mlp;
62 /**
63 * @brief
64 * Pointer to a size_t array.
65 */
66 size_t* restrict m_sz;
67 /**
68 * @brief
69 * Pointer to a float array.
70 */
71 ae2f_float_t* restrict m_f;
72 /**
73 * @brief
74 * Generic void pointer.
75 */
76 void* restrict m_void;
77 /**
78 * @brief
79 * Generic pointer to a pointer.
80 */
81 void** restrict m_ptr;
82 /**
83 * @brief
84 * Pointer to an array of activation functions.
85 */
86 ae2f_AnnAct_t** restrict m_Act;
87 /**
88 * @brief
89 * Pointer to an array of loss functions.
90 */
91 ae2f_AnnLoss_t** restrict m_Loss;
92
93 /** for 1-byte padding */
94 char* restrict m_byte;
95};
96
97/**
98 * @brief
99 * Structure for MLP initialization data.
100 */
101ae2f_structdef(struct, ae2f_AnnMlpInit_t) {
102 /**
103 * @brief
104 * Maximum output count among all layers.
105 */
106 size_t m_outc;
107 /**
108 * @brief
109 * Loop counter.
110 */
111 size_t m_i;
112};
113
114/**
115 * @brief
116 * Structure for MLP creation data.
117 */
118ae2f_structdef(struct, ae2f_AnnMlpMk_t) {
119 /**
120 * @brief
121 * Maximum output count among all layers.
122 */
123 size_t m_outc;
124 /**
125 * @brief
126 * Loop counter.
127 */
128 size_t m_i;
129 /**
130 * @brief
131 * Union for pointer manipulation during creation.
132 */
133 ae2f_AnnMlpInitMkPtr_t m_mkptr;
134 /**
135 * @brief
136 * Base pointer to the created MLP.
137 */
138 ae2f_AnnMlp* restrict m_mkbase;
139};
140
141/**
142 * @brief
143 * Structure for calculating a single hidden delta value.
144 */
145ae2f_structdef(struct, ae2f_AnnMlpHidDeltaSingle_t) {
146 /**
147 * @brief delta seed, not delta.
148 * Use __ae2f_AnnPropagate to make delta.
149 * */
150 ae2f_float_t m_ret;
151 /**
152 * @brief
153 * Output count of the layer.
154 */
155 size_t m_outc;
156 /**
157 * @brief
158 * Loop counter.
159 */
160 size_t m_i;
161};
162
163/**
164 * @brief
165 * Stack data for backpropagation.
166 * @deprecated This is deprecated.
167 */
168ae2f_structdef_n(union, ae2f_AnnMlpPropagateAllStack_t, ae2f_AnnMlpFollowStack_t) {
169 size_t m_send;
170};
171
172/**
173 * @brief
174 * Structure for backpropagation through all layers.
175 * @deprecated This is deprecated.
176 */
177ae2f_structdef_n(struct, ae2f_AnnMlpPropagateAll_t, ae2f_AnnMlpFollow_t) {
178 /**
179 * @brief
180 * Loop counters and layer sizes.
181 */
182 size_t m_i, m_j, m_inc, m_outc;
183 /**
184 * @brief
185 * Layer index.
186 */
187 size_t m_k;
188 /**
189 * @brief
190 * Page size for weights.
191 */
192 size_t m_pg_weight;
193 /**
194 * @brief
195 * Page size for outputs.
196 */
197 size_t m_pg_out;
198 /**
199 * @brief
200 * Stack for propagation.
201 */
202 ae2f_AnnMlpPropagateAllStack_t m_stack;
203 /**
204 * @brief
205 * Return value.
206 */
207 ae2f_float_t m_ret;
208};
209
210/**
211 * @brief
212 * Structure for MLP training data.
213 */
214ae2f_structdef(struct, ae2f_AnnMlpTrain_t) {
215 /**
216 * @brief
217 * Loop counters and layer sizes.
218 */
219 size_t m_i, m_j, m_inc, m_outc;
220 /**
221 * @brief
222 * Layer index.
223 */
224 size_t m_k;
225 /**
226 * @brief
227 * Page size for weights.
228 */
229 size_t m_pg_weight;
230 /**
231 * @brief
232 * Page size for outputs.
233 */
234 size_t m_pg_out;
235 /**
236 * @brief
237 * Maximum output size.
238 */
239 size_t m_outc_max;
240 /**
241 * @brief
242 * Network depth.
243 */
244 size_t m_depth;
245
246 /**
247 * @brief
248 * Stack for propagation.
249 */
250 ae2f_AnnMlpPropagateAllStack_t m_stack;
251 /**
252 * @brief
253 * Return value.
254 */
255 ae2f_float_t m_ret, m_tmp, m_tmp1;
256};
257
258#include <ae2f/Pack/End.h>
259
260#endif
void ae2f_AnnAct_t(ae2f_float_t *ret, ae2f_float_t x)
Customisable activasion function type.
Definition Act.h:19
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.
Definition Act.h:29
#define ae2f_AnnUtilV2Name(A_t, B_t)
Definition Util.h:11
#define ae2f_AnnUtilV2(A_LEFT, A_t, A_POST, B_LEFT, B_t, B_POST)
Definition Util.h:14
#define ae2f_AnnUtilPtr2Name(A_t, B_t)
Definition Util.h:8
#define ON
Definition cmake.hpp:5
#define ae2f_structdef(key, name)
Definition Cast.h:110
#define ae2f_reinterpret_cast(t, v)
Definition Cast.h:52
#define unless(...)
Invokes when condition is false.
Definition Cast.h:103
#define ae2f_extern
Suggests the existence of external variable or function, in naming of C. [non-mangling].
Definition Cast.h:88
#define ae2f_structdef_n(key, name,...)
Definition Cast.h:109
#define ae2f_WhenCXX(...)
Appears when the current language is C.
Definition Cxx.h:34
#define ae2f_NONE
Literally nothing.
Definition Cxx.h:13
ae2f_float ae2f_float_t
Definition Float.h:38
#define ae2f_LP(...)
Desired count required.
Definition Guide.h:23
#define ae2f_FREE(...)
Use this marker to show the desired functions to effectively free the resources.
Definition Guide.h:33
#define ae2f_opt
Definition Guide.h:26
#define ae2f_MAC_BUILD
Definition Util.h:4
#define ae2f_NEED_CLASS
Definition Mlp.cl.c:1
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
Definition Mlp.imp.c:46
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)
Definition Mlp.imp.c:76
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
Definition Mlp.imp.c:56
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
Definition Mlp.imp.c:116
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
Definition Mlp.imp.c:107
ae2f_SHAREDEXPORT void ae2f_AnnMlpDel(ae2f_AnnMlp *restrict const block) noexcept
Definition Mlp.imp.c:40
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
Definition Mlp.imp.c:5
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)
Definition Mlp.imp.c:66
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
Definition Mlp.imp.c:97
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
Definition Mlp.imp.c:87
const ae2f_AnnMlp_t const ae2f_float_t *const inp
Definition Mlp.def.cc:318
size_t const ae2f_AnnSlp_t ae2f_float_t *const const ae2f_float_t *const ae2f_AnnAct_t actderiv_then
Definition Mlp.def.cc:508
const ae2f_AnnMlp_t mlp
Definition Mlp.def.cc:317
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
Definition Mlp.def.cc:323
const ae2f_AnnMlp_t const ae2f_float_t *const ae2f_float_t *const const size_t *const sz
Definition Mlp.def.cc:321
const ae2f_AnnSlp_t slp
Definition Mlp.def.cc:484
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
Definition Mlp.def.cc:325
const ae2f_AnnSlp_t const ae2f_float_t *const const ae2f_float_t *const delta
Definition Mlp.def.cc:486
const ae2f_AnnMlp_t const ae2f_float_t *const ae2f_float_t *const const size_t *const const ae2f_float_t *const weight
Definition Mlp.def.cc:322
const ae2f_AnnSlp_t const ae2f_float_t *const const ae2f_float_t *const const size_t iidx
Definition Mlp.def.cc:488
const ae2f_AnnMlp_t const ae2f_float_t *const ae2f_float_t *const out
Definition Mlp.def.cc:320
size_t const ae2f_AnnSlp_t slp_then
Definition Mlp.def.cc:503
size_t const ae2f_AnnSlp_t ae2f_float_t *const const ae2f_float_t *const deltaseed
Definition Mlp.def.cc:506
#define OPER_NONE
Definition Mlp.def.cc:21
size_t v_send
Definition Mlp.def.cc:502
size_t const ae2f_AnnSlp_t ae2f_float_t *const retdelta_then
Definition Mlp.def.cc:505
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
Definition Mlp.def.cc:327
#define OPER_NEG
Definition Mlp.def.cc:20
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
Definition Slp.imp.c:82
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
Definition Slp.imp.c:97
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
Definition Slp.imp.c:110
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
Definition Slp.imp.c:59
ae2f_SHAREDEXPORT void ae2f_AnnSlpDel(ae2f_AnnSlp *restrict const slp) noexcept
Definition Slp.imp.c:55
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
Definition Slp.imp.c:73
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
Definition Slp.imp.c:26
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.
Definition errGlob.h:40
uint8_t ae2f_err_t
Informs that this number represents the error.
Definition errGlob.h:19
#define ae2f_errGlob_PTR_IS_NULL
Failed to refer the pointer either l-value inside the function.
Definition errGlob.h:32
#define ae2f_errGlob_IMP_NOT_FOUND
Failed to find the function on preprocessor which is callable for some reason No operation has beed d...
Definition errGlob.h:28
#define __ae2f_AnnMlpFollowPrimal(...)
Definition Mlp.auto.h:756
#define __ae2f_AnnMlpHidDeltaSingle_imp(v_single, slp, weight, delta, iidx)
Definition Mlp.auto.h:503
#define __ae2f_MACRO_GENERATED
Definition Mlp.auto.h:2
#define __ae2f_AnnMlpTrainAutoPrimal(...)
Definition Mlp.auto.h:897
#define __ae2f_AnnMlpPropagate_imp(v_tmp, v_send, slp_then, retdelta_then, deltaseed, actderiv_then, inp)
delta to delta
Definition Mlp.auto.h:525
#define __ae2f_AnnMlpPredictStream_imp(...)
Definition Mlp.auto.h:491
#define __ae2f_AnnMlpFollowPrimal_imp(OPER_NEG, OPER_NONE, v_follow, mlp, inp, delta, lenv, outstream, deltacache, weight, bias, learningrate, learningrate_bias, actderiv)
Definition Mlp.auto.h:552
#define __ae2f_AnnMlpPredictPrimal(...)
Definition Mlp.auto.h:485
#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
Definition Mlp.auto.h:330
#define __ae2f_AnnMlpInitWithOutSz_imp(...)
Definition Mlp.auto.h:321
#define __ae2f_AnnMlpTrainPrimal(...)
Definition Mlp.auto.h:894
#define __ae2f_AnnMlpSz_imp(...)
Definition Mlp.auto.h:318
#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)
Definition Mlp.auto.h:767
#define __ae2f_AnnMlpMk_imp(...)
Definition Mlp.auto.h:315
#define __ae2f_AnnSlpPredict(err_opt, _this, prm_in, out, weight, bias, act_opt)
Definition Slp.auto.h:298
#define __ae2f_AnnSlpInit_imp(...)
Definition Slp.auto.h:107
#define __ae2f_AnnSlpMk_imp(...)
Definition Slp.auto.h:232
#define __ae2f_AnnSlpTrain_imp(v_train, slp, inp, out_cache, out_desired, weights, bias, cachedelta, act, actderiv, lossderiv, learningrate, learningrate_bias)
Definition Slp.auto.h:868
#define __ae2f_AnnSlpInit(...)
Definition Slp.auto.h:111
#define __ae2f_AnnSlpFit(reterr_opt, _this, prm_inp, prm_out, prm_out_desired, weights, bias, cachedelta, actderiv_opt, lossderiv, learningrate, learningrate_bias)
Definition Slp.auto.h:720
#define __ae2f_AnnSlpFit_imp(v_fit, slp, inp, out, out_desired, weights, bias, cachedelta, actderiv_opt, lossderiv, learningrate, learningrate_bias)
Definition Slp.auto.h:687
#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)
Definition Slp.auto.h:649
#define __ae2f_AnnSlpPredictOne_imp(v_predict, prm_in, weight, bias, act_opt, oidx, isz)
Definition Slp.auto.h:243
#define __ae2f_AnnSlpFollow_imp(v_follow, _this, prm_in, delta, weight, bias, learningrate, learningrate_bias)
Definition Slp.auto.h:420
#define __ae2f_AnnSlpFollow(reterr_opt, _this, prm_in, delta, weight, bias, learningrate, learningrate_bias)
Definition Slp.auto.h:449
#define __ae2f_AnnSlpTrain(err, slp, inp, out_cache, out_desired, weights, bias, cachedelta, act, actderiv, lossderiv, learningrate, learningrate_bias)
Definition Slp.auto.h:934
#define __ae2f_AnnSlpInitInpSz_imp(...)
Definition Slp.auto.h:103
#define __ae2f_AnnSlpFollowOne_imp(v_follow, prm_in, delta, weight, learningrate, learningrate_bias, inp_sz, out_idx, v_bias)
Definition Slp.auto.h:395
#define __ae2f_AnnSlpMk(...)
Definition Slp.auto.h:236
#define __ae2f_AnnSlpFetchDelta_imp(v_delta, slp, out, out_desired, actderiv_opt, lossderiv, retdelta)
Definition Slp.auto.h:538
#define __ae2f_AnnSlpPredict_imp(v_predict, _this, prm_in, out, weight, bias, act_opt)
Definition Slp.auto.h:268
#define __ae2f_AnnSlpFetchDeltaOne_imp(v_fetchdelta_0, v_fetchdelta_1, out, out_desired, actderiv_opt, lossderiv, retdelta, oidx, osz)
Definition Slp.auto.h:513
#define ae2f_MAC()
delta to delta
Definition mac.h:4