aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJean-Marc Valin <jmvalin@jmvalin.ca>2017-08-04 02:32:47 -0400
committerJean-Marc Valin <jmvalin@jmvalin.ca>2017-08-04 02:32:47 -0400
commitda83a5bb71ff878c002411e1401e151ff232e71f (patch)
treef5ec5fe463b9ca8a617a105e3308a378cfad00e0 /src
parent1399bd86fc6222cae027e0d818e0f26a5693904b (diff)
downloadrnnoise-da83a5bb71ff878c002411e1401e151ff232e71f.tar.gz
toplevel function
Diffstat (limited to 'src')
-rw-r--r--src/rnn.c40
-rw-r--r--src/rnn.h4
2 files changed, 25 insertions, 19 deletions
diff --git a/src/rnn.c b/src/rnn.c
index 12ffb19..b6b83e2 100644
--- a/src/rnn.c
+++ b/src/rnn.c
@@ -158,12 +158,29 @@ void compute_gru(const GRULayer *gru, float *state, const float *input)
#if 1
#define INPUT_SIZE 42
-int main() {
- float vad_out[MAX_NEURONS] = {0};
- float input[INPUT_SIZE];
+void compute_rnn(RNNState *rnn, float *gains, float *vad, const float *input) {
+ int i;
float dense_out[MAX_NEURONS];
float noise_input[MAX_NEURONS*3];
float denoise_input[MAX_NEURONS*3];
+ compute_dense(&input_dense, dense_out, input);
+ compute_gru(&vad_gru, rnn->vad_gru_state, dense_out);
+ compute_dense(&vad_output, vad, rnn->vad_gru_state);
+ for (i=0;i<INPUT_DENSE_SIZE;i++) noise_input[i] = dense_out[i];
+ for (i=0;i<VAD_GRU_SIZE;i++) noise_input[i+INPUT_DENSE_SIZE] = rnn->vad_gru_state[i];
+ for (i=0;i<INPUT_SIZE;i++) noise_input[i+INPUT_DENSE_SIZE+VAD_GRU_SIZE] = input[i];
+ compute_gru(&noise_gru, rnn->noise_gru_state, noise_input);
+
+ for (i=0;i<VAD_GRU_SIZE;i++) denoise_input[i] = rnn->vad_gru_state[i];
+ for (i=0;i<NOISE_GRU_SIZE;i++) denoise_input[i+VAD_GRU_SIZE] = rnn->noise_gru_state[i];
+ for (i=0;i<INPUT_SIZE;i++) denoise_input[i+VAD_GRU_SIZE+NOISE_GRU_SIZE] = input[i];
+ compute_gru(&denoise_gru, rnn->denoise_gru_state, denoise_input);
+ compute_dense(&denoise_output, gains, rnn->denoise_gru_state);
+}
+
+int main() {
+ float vad_out[MAX_NEURONS] = {0};
+ float input[INPUT_SIZE];
float gains[DENOISE_OUTPUT_SIZE];
RNNState rnn;
RNN_CLEAR(&rnn, 1);
@@ -173,24 +190,9 @@ int main() {
for (i=0;i<INPUT_SIZE;i++) scanf("%f", &input[i]);
for (i=0;i<45;i++) scanf("%f", &vad_out[0]);
if (feof(stdin)) break;
- compute_dense(&input_dense, dense_out, input);
- compute_gru(&vad_gru, rnn.vad_gru_state, dense_out);
- compute_dense(&vad_output, vad_out, rnn.vad_gru_state);
-#if 1
- for (i=0;i<INPUT_DENSE_SIZE;i++) noise_input[i] = dense_out[i];
- for (i=0;i<VAD_GRU_SIZE;i++) noise_input[i+INPUT_DENSE_SIZE] = rnn.vad_gru_state[i];
- for (i=0;i<INPUT_SIZE;i++) noise_input[i+INPUT_DENSE_SIZE+VAD_GRU_SIZE] = input[i];
- compute_gru(&noise_gru, rnn.noise_gru_state, noise_input);
-
- for (i=0;i<VAD_GRU_SIZE;i++) denoise_input[i] = rnn.vad_gru_state[i];
- for (i=0;i<NOISE_GRU_SIZE;i++) denoise_input[i+VAD_GRU_SIZE] = rnn.noise_gru_state[i];
- for (i=0;i<INPUT_SIZE;i++) denoise_input[i+VAD_GRU_SIZE+NOISE_GRU_SIZE] = input[i];
- compute_gru(&denoise_gru, rnn.denoise_gru_state, denoise_input);
-
- compute_dense(&denoise_output, gains, rnn.denoise_gru_state);
+ compute_rnn(&rnn, gains, vad_out, input);
for (i=0;i<22;i++) printf("%f ", gains[i]);
-#endif
printf("%f\n", vad_out[0]);
}
}
diff --git a/src/rnn.h b/src/rnn.h
index a040cec..3235d93 100644
--- a/src/rnn.h
+++ b/src/rnn.h
@@ -54,8 +54,12 @@ typedef struct {
int activation;
} GRULayer;
+typedef struct RNNState RNNState;
+
void compute_dense(const DenseLayer *layer, float *output, const float *input);
void compute_gru(const GRULayer *gru, float *state, const float *input);
+void compute_rnn(RNNState *rnn, float *gains, float *vad, const float *input);
+
#endif /* _MLP_H_ */