1#define ae2f_NEED_CLASS 0
3#include <ae2f/Ann/Act.h>
4#include <ae2f/Ann/Mlp.h>
5#include <ae2f/Ann/Slp.h>
14 *r = 1.0 / (1.0 + exp(-x));
18 *r = output * (1.0 - output);
22 *r = ((output[i] - target[i]) / c);
67 ae2f_AnnSlpFetchDelta_t
m_fetch;
72 puts(
"MlpTrainXOR-Primal start");
74 puts(
"Configuring mlp");
78 puts(
"Configuring last slp");
84 puts(
"Initializing weights randomly with correct memory layout");
92 mlp_bias[bias_base_l0 +
i] = ((
double)rand() / RAND_MAX) - 0.5;
102 mlp_bias[bias_base_l1 +
i] = ((
double)rand() / RAND_MAX) - 0.5;
105 puts(
"See first output (before training)");
106 for(
i = 0;
i < 4; ++
i) {
111 printf(
"Initial Output for [%d, %d]: %f (goal: %d)\n"
116 for(
j = 0;
j < 9000; ++
j) {
117 for(
i = 0;
i < 4; ++
i) {
138 puts(
"Training complete.");
140 puts(
"See last output after training");
141 for(
i = 0;
i < 4; ++
i) {
146 printf(
"Final Output for [%d, %d]: %f (goal: %d)\n"
void ae2f_AnnAct_t(ae2f_float_t *ret, ae2f_float_t x)
Customisable activasion function type.
#define ae2f_float
Predefined floating point type.
#define MLP_WEIGHT_STRIDE
const ae2f_float_t goal_xor[4]
ae2f_float_t mlp_weights[(MLP_DEPTH - 1) *MLP_WEIGHT_STRIDE]
ae2f_float_t mlp_bias[(MLP_DEPTH - 1) *MLP_BIAS_STRIDE]
ae2f_float_t mlp_outstream[(MLP_DEPTH - 1) *MLP_OUT_GREATEST]
const ae2f_float_t inp[4][2]
ae2f_AnnAct_t * mlp_acts[MLP_DEPTH - 1]
ae2f_float_t mlp_deltastream[(MLP_DEPTH - 1) *MLP_OUT_GREATEST]
ae2f_AnnAct_t * mlp_actderivs[MLP_DEPTH - 1]
#define __ae2f_AnnMlpPredictStream_imp(...)
#define __ae2f_AnnMlpFollow_imp(...)
#define __ae2f_AnnSlpFetchDelta_imp(v_delta, slp, out, out_desired, actderiv_opt, lossderiv, retdelta)
ae2f_AnnMlpFollow_t m_propagate
ae2f_AnnMlpPredictStream_t m_predictsteam
ae2f_AnnSlpFetchDelta_t m_fetch