-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtrainer.h
More file actions
executable file
·74 lines (65 loc) · 2.57 KB
/
Copy pathtrainer.h
File metadata and controls
executable file
·74 lines (65 loc) · 2.57 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#ifndef TRAINER_H
#define TRAINER_H
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <dlfcn.h>
#include "hls_stream.h"
#include "ap_fixed.h"
struct params {
float sample_rate;
float time;
float *freqs;
float *phases;
float *amps;
};
typedef struct params * PARAMS;
struct signal {
float *t;
float *s;
int points;
float sample_rate;
char name[1024];
};
typedef struct signal * SIGNAL;
struct layer {
int isinput;
int neurons;
float *weights;
float *biases;
float *outputs;
float **prev_outputs;
float *deltas;
struct layer *prev;
struct layer *next;
};
void dump_signal(SIGNAL mysignal);
void dump_weights (struct layer *mlp,int stride);
void generate_synthetic_data (PARAMS myparams,SIGNAL mysignal);
void forward_pass (struct layer *mlp,int debug);
void backward_pass (struct layer *mlp,float *y);
void update_weights (struct layer *mlp,float alpha);
void subsample (SIGNAL in_signal,SIGNAL out_signal,float subsample_rate);
void initialize_signal_parameters (PARAMS myparams);
void initialize_mlp (struct layer *layers,int num_layers,int *layer_sizes);
void plot (SIGNAL mysignal,char *title,int n,float time,FILE *dump_file);
void free_signal (SIGNAL mysignal);
void dump_weights_as_constants(struct layer *layers);
void dump_signal_as_constant (SIGNAL mysignal,const char *name);
void synthesize_input_signal(SIGNAL *mysignal,SIGNAL *mysignal_subsampled);
void initialize_output_signal(SIGNAL mysignal_predicted,SIGNAL mysignal_subsampled);
void online_training (struct layer *layers,SIGNAL mysignal_subsampled,SIGNAL mysignal_predicted);
void plot_results(SIGNAL mysignal_subsampled,SIGNAL mysignal_predicted);
void eval_network(struct layer *layers,SIGNAL mysignal_subsampled,SIGNAL mysignal_predicted_offline);
void free_signal (SIGNAL mysignal);
int train_network (struct layer *layers,struct layer *initial_trainer_layers,int num_layers,int *layer_sizes,int num_epochs,SIGNAL *input_signal,SIGNAL *output_signal_expected);
void gen_testbench (FILE *myFile,SIGNAL input_signal,SIGNAL output_signal_expected);
void compile_testbench_file (const char *filename,void **dl_handle,void (**fn)(hls::stream<float>&,hls::stream<float>&));
void get_results_from_dut(SIGNAL input_signal,
SIGNAL output_signal_expected,
SIGNAL output_signal_dut,
void (*fn)(hls::stream<float>&,hls::stream<float> &));
void check_predicted_signal (SIGNAL input_signal,SIGNAL output_signal);
void validate_test_bench (const char *source_name,SIGNAL input_signal,SIGNAL output_signal_expected);
#endif